HOME >> 鉄道模型実験室 > 登山鉄道レイアウトとモニタ式操作盤 ESP32の限界

鉄道模型実験室 No.221  登山鉄道レイアウトとモニタ式操作盤 ESP32の限界     

 登山鉄道レイアウトの操作盤について、以前検討したモニタ方式の操作画面からWiFiを使った通信によって、操作できないか検討を始めた。 通信モジュールESP32を使ってのWiFi通信信を学習しているが、その限界を感じてしまった。

 

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

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

 

  

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

 先回のLesson05 では、クリックしたリンクに飛んだ後、「hasarg」というメンバ関数を使うことでパラメータ名を識別してLEDのON/OFFを行ったが、今回は、「method」のメンバ関数を使用するとのことです。 昔、Perl を使って簡単なCGIプログラムで遊んだ事がありましたが、今はすっかり忘れてしまいました。 GET や POST といった言葉もなんだか懐かしいのですが、内容はさっぱりです。

 今回もサンプルコートをコピペしました。 必要な情報を書き換えて走らせると、問題なく機能しました。 先回とどこが違うのか、内容を見ていきましょう。

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

  1. 59行目までは、一部の違いがありますが、内容はLesson05 と同じです。 <body>タグが抜けちますが影響ないようです。
  2. HTML記述において、click 部分の記述をボタン表示にし、そのアクション方法を変更しています。 <form action='' method='post'>"; にてFORMの記述を開始します。action = "xxx" の部分では送信先を指定しますが、何も記述されない場合は現在のURLにフォームデータを送信するようです・・・・・・・。
  3. 次に、ボタンの内容を記述します。 <button type='submit' name='click' value='on'><big>LED オン<big></button> にて、フォームの形式とし汎用ボタンを指定し、その種類を送信ボタンとしています。 そして、フォーム部品の名前は click で、値が on であることを記述しています。
  4. OFFの場合も同様です。
  5. 受信した場合の処理として、server.method() の値が HTTP_POST であれば、真 (true) なので、IF文を実行します。  if (server.method() == HTTP_POST)  {xxxxx.}
  6. その実行内容は、Lesson05 と同じです。

 クライアントからデータを送信する方式として、GET方式とPOST形式があるようですですが、どちらが使い良いのか経験が無いので分かりません。

 

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

 いよいよ最終レッスンです。 うたい文句として “HTMLコードはHTMLファイルとして読み込む形としたい” とのことですので、ファイルとして扱うのだ! それならば画像もファイルとして扱っているので、画像ファイルを使ったページが記述できると、早合点して 期待していました。

  .

 まず最初にファイルが取扱い出来るようにするため、SPIFFS アップローダープラグインの設定が必要とのことでしたので、説明に従って、このプラグインをダウンロードして設定しました。

 そして、同じ場所にdataファオルダを作成してアップロードしたいファイルを格納しますとの事でしたが、ここでも早とちりして、作成したtool というファルダの中に作ってしまいました。 変だなとは思いましたが作業を進めてトライしたもののダンマリであった。 もう一度、頭を冷やして読み直すと、間違いに気が付きました。

 サンプルコードをコードをコピペして作動させましたが、その内容を見ていきましょう・

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

  1. 最初の記述部分において、使用するクラスのインクルードに、新しく く#include <SPIFFS.h> を追加します。
  2. ここから、51行目までは、Lesson06 と同じです。
  3. 52と53行目には File dataFile;   としてFileクラスの設定を実施し、String html; として文字列を宣言しています。
  4. 55行目から60行目までは、
     dataFile = SPIFFS.open("/sample7.txt", FILE_READ); //ファイルの読み込み
      
     while (dataFile.available()){                      //受信データがある間繰り替えす
        html += (dataFile.readStringUntil('\n'));       //\nが受信されるまでデータを受信し続けて結果を格納
     }
     dataFile.close();                                 //ファイルを閉じる
    
  5. そして、64行目以降は全く同じでした。 
  6. 77行目でやっと、server.send(200, "text/html", html); と送信しているのですが・・・・・・・・。
  7. エー? これって何なの? ファイルそのものをそっくり送信しているのではなくて、準備したテキストファイルを一行ずつ読み込み、html という文字列を順次作成して、すべて読込んだ後で、前の同じ方法で送信しているのです。
  8. すると、使用出来るのはテキスト形式のファイルだけですよね。 画像ファイルは読込めませんよね・・・・・・!
  9. ここで、がっくりです。

  .

 自分が期待していた事は、「モニタ式の操作盤を作ろう ボタンの画像を作る」(2021/8/13)で実施したような操作画面なのです。 その画面を右に示します。 ボタンなどの画像が使えないとすると、全くの単純な操作画面となってしまって面白くありません。

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

 画像が使える方法は無いかと探しましたが、自分の技量ではあきらめざるを得ませんでした。

 

■ まとめ

 結論として、ESP32 の限界ではないかと考えるようになりました。 上記のレポートでは RaspberryPi を使い、アプリは、WebIOPi を使っています。  WiFi を使って通信していますので、スマホでもタブレットからでも制御出来ているのです。

 これは、デバイス機器の機能レベルの問題であり、ESP32 に対してラズパイ並みの機能を求めるのが無理と考えるべきでしょう。 ESP32は通信専用のデバイスと考えます。

 

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

 ここで、あきらめないのが自分の取柄です。 ESP32からの画像提供が無理なら、クライアント自身で用意するとか、他のサーバーから借りてくる方法があるのではないかと考え付いたのです。

 他のサーバーから画像を借りてくる方法は、レンタルサーバーを使っている自分の場合では容易に設定することが出来ます。 所定のフォルダに画像ファイルを収めておき、そこから画像を取り出せば良いはずです。

 また、ESP32 を受信専用のサーバーとして立ち上げておき、他の方法で構成した画面から、Lesson06 の方法でデータを送ってくれば処理できるような気がします。

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

 さて、うまく行くかどうかは分かりませんが、今後、報告が無ければ失敗していると判断してください。

ページトップへ戻る  .


 2022/10/27