HOME >> 鉄道模型実験室 > 登山鉄道レイアウトとモニタ式操作盤 ESP32でWiFi通信

鉄道模型実験室 No.221  登山鉄道レイアウトとモニタ式操作盤 ESP32でWiFi通信     

 登山鉄道レイアウトの操作盤について、以前検討したモニタ方式の操作画面からWiFiを使った通信によって、操作できないか検討を始めた。 今回は、通信モジュールESP32を使っての通信方法のテスト状況を報告しよう。

 

■ 通信モジュールESP32の学習メモ

 今回も、おもしろく、たのしく、Arduinoと戯れると銘打った「おもろ家」のサイトの「ESP32入門編」の解説を参考にしながら、この無線通信モジュールの使い方を習得することにします。 そして、その学習メモとしてここに記録していくことにしました。

 

  

● Lesson03 【Wi-Fiアクセスポイントへの接続】の学習メモ

 サンプルコートをコピペしました。 そして室内で使用しているWiFi のアクセスポイントの情報を書込みました。

 その後、調査した結果、WiFi 通信の子機同士で通信を行うのがアドホックモードと呼び、親機を介して通信を行うのがインフラストラクチャーモードと呼ばれているそうです。 そして使われているのは、ほとんどが後者のモードだそうです。 IPアドレスやパスワードの管理のためでしょうか・・・・・・判りません。 幸い、小生の環境では問題なく使用できますので、このモードで進めます。

 転送レートの設定ミスがあったものの、シリアルモニタには解説内容と同じ情報が表示されました。 WiFi 通信は問題なく実施出来ているようです。

 

● Lesson04【Webブラウザへの文字表示】の学習メモ

 いよいよブラウザへの文字表示に取り掛かります。 最初に新しいライブラリ(クラス)を使用するとのことです。 先回は、WiFiServerクラスを使用していたが、今回は WebServer クラスを使用するとのことですが、違いがよくわかりません。 あるサイトの説明に、この二つの記述があり、どうやら内容がどこか違うようです。

 参考にしているサイトの後半に、「ステータスコード」がない事ですと説明されていますが・・・・。  WebServer には、 WebServer.on() や WebServer.onNotFound() のコマンドがあり、これを活用してアクセスして来た時の処理を振り分けていると解釈しました。 ブラウザへの表示はここでは同じですが、クリックされた時の処理が実施しやすいようです。

 HTML形式の記述は、このホムページを作成している時にいつも関係していますので、容易に理解できました。 エヘン!  でも、WEB サーバとしてファイルを送受信するためには、いろいろな処理が必要なんだ・・・・と感心しながら見ていました。

 

● Lesson05【WiFi経由でのLED ON/OFF】の学習メモ

 今回もサンプルコードをコピペして、LEDの点灯制御にやっとたどり着けました。 その機能をチェックすると、WEBブラウザからの操作で、LEDの点灯を制御することが出来ました。 問題ないですね。

 私の興味は、この操作をどうやって実現させているのかです。 その仕組みを理解しなければ応用が出来ません。 そこで、記述内容を調べてみましょう。 尚、あちこちのネットを見ると、同じようなサンプルを見ますので、出典元は最初の開発元のサンプル記述を引き継いでいるようですが、ここの「おもろ家」さんのサイトが一番わかり良いですね。

   *********************************************

  1. 最初の記述部分の #include <WiFi.h> と #include <WebServer.h> は、使用するクラスをインクルードしておきます。 両方とも必要なんですね。
  2. 次に、自分が利用しているWiFi のアクセスポイントの情報を記述しました。  const char* ssid = "XXXXXX";  と const char* passwd = "yyyyyyy";  です。
  3. そして、WebServerクラスを宣言します。 ポート番号は80です。 WebServer server(80); これは、HTTP通信を実施するための窓口ポートですね。
  4. 使用するLEDの出力ポートを GPIO12 としました。 const int led = 12;
  5. 初期設定とし、シリアルポートを指定します。 Serial.begin(115200);  でも何でシリアルポートの設定が必要なの? シリアルモニタを使って通信内容を表示させるものなので、実際に使用する時は必要なさそうです。
  6. LED出力ポートの初期設定をします。 pinMode(led, OUTPUT);   および、digitalWrite(led, LOW);
  7. WiFi 通信を開始して、アクセスポイントに接続するため、IDとパスワードを使ってアクセスします。 WiFi.begin(ssid, passwd);
  8. アクセスポイントに接続出来たら、接続時の戻り値として、WL_CONNECTED と表示してくれるので、WiFi.status() コマンドを使ってチェックします。 このチェック結果、未接続であればピリオドを表示させますが、これを300msec 毎に実施します。   while (WiFi.status() != WL_CONNECTED) {   delay(300);    Serial.print(".");  } 接続か完了するまで、コロンを次々と表示していました。
  9. 通信が可能となったらシリアルモニタに、各種情報を表示します。 この時に、このESP32 に割り当てられたIPアドレスが表示されますので、メモしておきましょう。 また、アクセスポイントのデバイスコントロールを見ると、確かに接続されていることが確認出来ました。 ここに、IPアドレスMACアドレスが表示されていました。
  10. 次に、クライアントから、このESP32のサーバーにアクセスされた時の処理方法を記述しています。 何故ここで?・・・と思ったのですが・・・
    まず、server.on("/", handleLedOnOff);   にて、TOPページのアドレスにアクセスしたときの処理関数をhandleLedOnOff と設定します。 スラッシュの / はトップページを指定しています。  そして、 server.onNotFound(handleNotFound);  にて、存在しないアドレスにアクセスしたときの処理関数 handleNotFound と設定します。これらの処理関数は、別の部分で記述しています。
  11. そして、server.begin();  にてWebサーバを起動させて初期設定を完了します。
  12. 次にメインループを記述しますが、内容は server.handleClient();  のたったの一行です。 クライアントからのリクエストを処理せよと命令しているだけです。
  13. さて、ここからが、この処理の肝となるTOPページにアクセスした時の処理関数を記述しています。
  14. 最初に、クライアントに送信する Html ファイルの内容を html として設定しています。 この内容は何時も見慣れた記述なので、容易に理解できましたが、注目したのが、
           "Click <a href=\"/?click=on\">ON</a>";      //パラメータの送信
           "Click <a href=\"/?click=off\">OFF</a>";    //パラメータの送信
    の部分です。 ON と OFF の文字の部分にリンクが貼ってあり、トップページの要求と共に、click=onclick=off というパラメータを送信しているのです。
  15. つぎに、送信されてきた要求アドレスに、パラメータの click という名前があるかどうかを判断しています。 if (server.hasArg("click")) です。
  16. この値が真 (true) であり、その値が on であればLEDポートをHIGH にし、off であればLOW を出力させます。 ここで、クライアントからの情報がLED まで届きましたね。
  17. そして、クライアントに Html ファイルの内容を送信して、この関数の処理を終了します。 server.send(200, "text/html", html); 
  18. なお、最初のアクセスは、 http://192.***.***.***/ と IPアドレスだけの指定なので、パラメータがありません。 このため、単にHtml ファイルの内容を送信するだけです。
  19. もし、間違ったアドレスを指定してきた場合には、server.send(404, "text/plain", "Not Found"); にて見慣れたメッセージを返信して終了です。

 ここで、肝となる部分を復習しておきましょう。 クリック時のやり取りを図にまとめてみました。

 このやり取りの中に、いろいろな情報を詰め込むことによって、もっと複雑な処理が可能となるはずです。 少しワクワクしてきました。

  *************************************************

 次回は、レッスン6と7の学習メモを報告します。

 

ページトップへ戻る  .


 2022/10/26