• Skip to main content
  • Skip to primary sidebar
  • Skip to footer
  • HOME
  • Arduino
    • Arduino初心者編
    • Arduino基礎編
    • Arduino応用編
    • Arduino実践編
  • Raspberry Pi
  • microbit
  • XBee
  • Scratch
  • Contact Us
  • Privacy Policy

STEMSHIP

ものづくりを通して、科学を学ぼう!

現在の場所:ホーム / Arduino / Arduino応用編 / ArduinoでSTEM教育​ 応用編:ESP32開発ボードでIoTウェブサーバーを作る

ArduinoでSTEM教育​ 応用編:ESP32開発ボードでIoTウェブサーバーを作る

2020年9月9日 by STEMSHIP コメントを書く

ESP32開発ボードを使用してIoTウェブサーバを作ります。前回はイーサネットシールドを使った有線ケーブルによる接続でしたが、今回はWi-Fi無線で接続します。ESP32とは何か、ESP32でプログラミングするための開発環境を整える方法、ライブラリの基本的な使い方について紹介します。

ESP32とは

近年最もよく使われるWi-Fi対応マイクロコントローラは、中国のespressif社から発売されている「ESP32」です。非常に小さく、親指の爪ほどの大きさしかありません。

図1. ESP32モジュール。左側のジグザグは内蔵されたWi-Fi用のパターンアンテナ

このチップに520kBのメインメモリ(Arduinoは32kB)、4MBのプログラムメモリ(バージョンにより異なる。Arduinoは2kB)が搭載されていて、クロックは最大240MHz(Arduinoは16MHz)で動作します。チップには38か所のピンがありますが、寸法が小さいため電線の接続がしにくくなっています。

ESP32をより大きな基板にマウントし、取り回ししやすくするモジュールもありますが、Arduinoのような統一した企画がなく、販売メーカーによってたくさんの種類があります。ここでは、広く使われている「ESP32開発モジュール」を中心に解説します。

図2. ESP32開発モジュール

このESP32開発モジュールは、ESP32のすべてのGPIOピン(出入力ピン)がブレッドボードで使える形で引き出されています。USB端子(USB→シリアル変換回路)もついており、パソコンから簡単にプログラムをアップロードできます。USBの電源電圧は5Vですが、内蔵の変換回路を使ってESP32で必要な3.3Vを作っています。

多数の入出力端子(GPIO : General Purpose Input/Output)を備えており、そのうち一部はほかの機能(アナログ入力やI2Cインターフェースなど)と兼用になっています。ESP32は電源電圧3.3Vで動作するということに注意が必要です。

ESP32の大きなメリットは、Arduino IDE経由でプログラミング・書き込みができるという点です。(対応する設定ファイルやコンパイラをダウンロードしておく必要があります。)

ESP32開発環境の準備

ここでは、前回のwebサーバーの例をESP32で実現してみます。

Arduino IDEでESP32をプログラミングするのに必要なファイルはgitというインターネット上のバージョン管理ツールに最新版がアップされているので、そこからダウンロードして使います。

まずはgitからローカルのパソコンにファイルをダウンロードするツールを用意します。Gitクライアントソフト「git-scm」をパソコンにダウンロードしてインストールします。このサイトから使用しているパソコンのOSに合わせてダウンロードします。ダウンロードしたファイル(Windowsなら.exe)を実行します。

多くのインストールオプションが表示されます。よくわからないものはデフォルトやrecommended(おすすめ)と書かれている設定にしておきます。

図3. インストール画面。上級者向けの多くのオプションがあります。

インストール後、スタートメニューから「Git GUI」プログラムを起動し、「Clone Existing Repository」(既存のリポジトリのクローン)という項目を選択します。

図4. Windows10のスタートメニューからGit GUIを起動

開いたダイアログボックスで、「Source Location」(コピー元のデータの場所)として、https://github.com/espressif/arduino-esp32と入力します。「Target Directory」(コピー先のフォルダ)は、手動で作成します。

Windowsの「Document」フォルダを開き、「Arduino」フォルダに移動します。Arduinoフォルダの中に「hardware」というフォルダを作成し、その中に「espressif」フォルダを作成します。Git GUIソフトウェアの「Target Directory」の枠の右側の「Browse」ボタンからこのフォルダを選択し、出てきたパスの末尾に「/esp32」を追加します。この「esp32」フォルダはGit GUIが自動で作成してくれます。Clone Typeの設定は変更しなくて構いません。

図5. データのコピー元とコピー先を指定します。保存先はパソコンのユーザー名により異なります。Arduinoの「メニュー」>環境設定で確認してください。

「Clone」ボタンを押すと、ダウンロードが始まります。途中でgithubへのログインを求められます。

図6. ダウンロードには数分かかります

ダウンロードが完了したら、ダウンロード先のフォルダ内の「tools」フォルダを開きます。Toolsフォルダ内の「get.exe」という実行ファイルを起動します。コマンドプロンプト(黒いテキスト画面)が開き、ESP32用のコンパイラをダウンロードしてくれます。

図7. 「get.exe」はESP32用のコンパイラをダウンロードするためのアプリケーションです。

このダウンロードが完了し、コマンドプロンプトが自動で閉じたらインストール完了です。Arduino IDEを開いていた場合はここで一度閉じてください。Arduino IDEを開き、「メニュー」>「ツール」>「ボード」を見ると、ESP32に関連した新しいボードが多数追加されています。今回はその中から「ESP32 Dev Module」を選択します。

図8. ESP32を利用するボードは多くの種類があります。

ボードをパソコンに接続した後、Arduinoと同様に対応するCOMポートを設定します。「ツール」メニューの中の「シリアルポート」から該当するポートを選択します。Webサーバーの実験を行うため、可変抵抗とLED・抵抗をESP32モジュールに接続します。

回路図

Arduinoの電源電圧は5Vですが、今回は電源電圧が3.3VなのでLEDの保護抵抗を330オームから220オームに変更します。330オームのままでも実験はできますが、少しLEDが暗くなります。

図9. 配線図

ESP32モジュールは幅が大きく、1枚のブレッドボードに載せると配線するスペースがなくなります。小さなブレッドボードを2枚用意してまたぐように配置することで、配線スペースを確保します。

プログラム

スケッチは前回使用したものとほぼ同じで、簡単に流用できます。

#define LEDPIN 4                  // = GPIO 4 (1)
#define ANALOGPIN ADC1_CHANNEL_4  // = GPIO 32

#define NetworkName "MyWLAN"   //(2)
#define PASSWORD "MyPassword"

#include "WiFi.h"        //(3)
#include "driver/adc.h"  //(4)

WiFiServer Server(80);   //(5)
WiFiClient Client;
String Request;
 
void setup()
{
  pinMode(LEDPIN, OUTPUT);
  adc1_config_width(ADC_WIDTH_BIT_10);   //(6)
  adc1_config_channel_atten(ANALOGPIN,ADC_ATTEN_DB_11);  //(7)
 
  Serial.begin(115200);
  delay(100);
  Serial.println();
  Serial.print("Connect to: ");
  Serial.println(NetworkName);
 
  WiFi.begin(NetworkName, PASSWORD);  //(8)

  while (WiFi.status() != WL_CONNECTED)  //(9)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("My IP-Adresse: ");
  Serial.println(WiFi.localIP());

  Server.begin();
}
 
void loop() 
{
  Client = Server.available();

  if (Client)
  {
    Serial.println("New Client");
    boolean blankLine = true;
 
    while (Client.connected())
    {
      if (Client.available())
      {
        char c = Client.read();
        if (Request.length() < 100)
          Request += c;

        if (c == '\n' && blankLine)
        {
          Serial.print("Request from Client: ");
          Serial.println(Request);
          if(Request.indexOf("ein")>0)
            digitalWrite(LEDPIN,HIGH);

          if(Request.indexOf("aus")>0)
            digitalWrite(LEDPIN,LOW);

          Client.println("HTTP/1.1 200 OK");
          Client.println("Content-Type: text/html");
          Client.println("Connection: close"); // Verbindung wird nach Antwort beendet
          Client.println("Refresh: 2"); // Seite alle 25 Sekunden neu abfragen
          Client.println();
          Client.println("<!DOCTYPE HTML>");
          Client.println("<html>");
          Client.print("AnalogValue: ");      
          Client.print(adc1_get_raw(ANALOGPIN));  //(10)
          Client.println("<br><br>"); 
          Client.println("<a href='?on'>LED Switch ON</a>");
          Client.println("<br><br>");
          Client.println("<a href='?off'>LED Switch OFF</a>");
          Client.println("</html>");
  
          Request = "";
          break;
        }
        
        if (c == '\n')
            blankLine = true;
        else if (c != '\r')
            blankLine = false;
      }
    }

    delay(1);
    Client.stop();
    Serial.println("client disconnected.");
    Serial.println("");
  }  //(11)
}

スケッチの解説

(1) デジタル出力ピンは、ESP32のGPIO番号で指定します。
一方、アナログ入力ピンはESP32のアナログ/デジタル変換器(ADC)の番号で指定します。
これらに関しては、使用するモジュールのドキュメントを確認してください。

(2) 「NetworkName」「PASSWORD」は使用する(接続する)WiFiの設定に置き換えます。

(3) ネットワーク接続に「WiFi.h」というライブラリを使用します。ESP32用のコンパイラをインストールした際にセットでインストールされているはずです。

(4) ESP32ではアナログ入力を使用するためにライブラリが必要になります。

(5) イーサネットシールドの例と同じようにライブラリのクラスからオブジェクトを、作成します。
イーサネットシールドの時とはクラス名が異なります。

(6) 「adc.h」ライブラリに関する設定で、アナログ入力に関する設定をしています。
解像度10ビットに(入力値を0~1023の範囲で読み取る)設定します。
ESP32では最大12ビットまで(入力値を0~4095の範囲で読み取る)設定できます。

(7) こちらも「adc.h」ライブラリに関する設定で、電源電圧3.3Vが入力されたときに1023となるように信号の増幅度を設定します。

(8) webサーバーとして動作を始めます。イーサネットシールドの時は引数にMACアドレスを渡しましたが、Wi-Fiの場合はWi-Fiネットワークの名前とパスワードを渡します。

(9) Wi-Fiネットワーク接続完了まで時間がかかります。これ以降のプログラムの実行を接続完了するまで遅らせます。

(10) ArduinoでいうanalogRead()関数ですが、別のライブラリを使っている関係で表現が変わります。

(11) イーサネットシールドでは「maintain()」関数でIPアドレスの有効期限の延長を行いましたが、ESP32ではバックグラウンドでこうした処理を行ってくれるので、maintain()関数の処理は不要です。

ESP32にアップロード後、シリアルモニタでIPアドレスを確認することができます。ルーターのDHCP機能により、自動でIPアドレスが与えられます。WebブラウザからこのIPアドレスにアクセスすると、アナログ入力の値の確認やLEDのON/OFFのコントロールができるようになります。イーサネットシールドの時と同じ機能ですが、データ通信は無線で行えるようになりました。

Filed Under: Arduino応用編 関連タグ:ESP32, IoT, WiFi

Reader Interactions

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。

最初のサイドバー

CONTACT US

  • Facebook
  • Twitter
  • Youtube

More to See

Arduinoベースのセンサノード:XBeeデータ収集ノードの製作

2021年9月27日 By STEMSHIP

Arduinoベースのセンサノード:Arduinoを使った温度センサの作製

2021年9月21日 By STEMSHIP

XBeeモジュールとBMP280センサを使用してデータ収集する

2021年5月31日 By STEMSHIP

XBeeモジュールでMicroPythonを使ってセンサを読み取る

2021年5月24日 By STEMSHIP

XBeeモジュールでセンサを読み取る:センサノードの設定と測定

2021年5月17日 By STEMSHIP

カテゴリー

  • Arduino (44)
    • Arduino初心者編 (15)
    • Arduino基礎編 (11)
    • Arduino実践編 (4)
    • Arduino応用編 (11)
    • Arduino番外編 (3)
  • MakeyMakey (1)
  • microbit (11)
  • Raspberry Pi (13)
  • Scratch (6)
  • STEM教育 (5)
  • XBee (15)
  • ものづくり教育 (2)
  • 子供の教育 (2)
  • 科学 (6)
  • 算数 (5)

Tags

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Footer

最近の投稿

  • Arduinoベースのセンサノード:スケッチ(プログラム)の作製
  • Arduinoベースのセンサノード:XBeeデータ収集ノードの製作
  • Arduinoベースのセンサノード:Arduinoを使った温度センサの作製
  • XBeeモジュールとBMP280センサを使用してデータ収集する
  • XBeeモジュールでMicroPythonを使ってセンサを読み取る

タグ

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Search

2023年3月
月 火 水 木 金 土 日
 12345
6789101112
13141516171819
20212223242526
2728293031  
« 10月    

Copyright © 2023 · STEMSHIP.COM