ESP8266のキットで遊んでみた

ブレッドボードに Arduinoを 何度も抜き刺しすると壊れそう。
同様に Arduino にUSBケーブルを 何度も抜き刺しすると壊れそう。
そこで、磁石でくっつけるUSB通信ケーブルを使ってみた。

いかにも壊れそうなUSBコネクタの負担は無くなった。
しかし、ケーブルの重みで空中にホバーリング状態にしていると
衝撃でポロっと落ちてしまうので要注意。

まず、ArduinoIDEの設定をESP8566用に変更しなければいけない

詳しくはキットの説明HP参照

差異:

1.ボードマネージャでNodeMCU 0.9は不調だったので1.0を使った。

2.説明の通りにやってみたが、やはり「結構ハマった」

http://osoyoo.com/ja/2016/11/28/3596/  のサンプルの「プログラム前の準備:」と「Libraryのインストール:」を参照

サンプルに ESP8566のWifiをIOTで使う方法を見つけた。

温度センサーの測定値をシリアル通信のログ画面で見るものだが、NodeMCUのサンプルなので、当然ながら・・・ソースの最後の最後で温度を「所定のMQTTサーバにあるブローカにpublish」もしている。妙な送信はしていないハズだが、マズは自己責任を果たす姿勢をみせるためにも、ソースを熟読してからESP8566に書き込もう。

http://osoyoo.com/ja/2016/11/24/use-nodemcu-to-send-temperaturehumidity-data-to-mqtt-iot-broker/

ESP8566のWifiをSTAモードで使う方法を見つけた。

同上

ESP8566のWifiをAPモードで使う方法を見つけた。

https://iot.keicode.com/esp8266/esp8266-ap.php

ESP8566のWifiをAP+STAモードで使う方法を見つけた。

https://relativelayout.hatenablog.com/entry/2017/07/22/211649

しかし、スマホ側のWifiの詳細設定項目が面倒。
1.インターネット非接続時も有効にチェックを入れる

※MDNSを使うといいのかもしれない。

初期の接続は絶不調になるので、根気よくやり直す。

少し遊んでみた感じでは、ESP8266の少ないメモリ(1044464バイトのフラッシュメモリ、81920バイトのRAM)でも簡単なサンプルなら問題無いが、データ量が多くなると不安 。

なので、SDカードスロット付きにLCDを使おうとしたら、ArduinoのMEGA2560専用(UNOも可)のピン配置だったから、 SDカード のパーツを
ついでにESP32Sもポチった

ESP8266のWEBサーバーの応答って
server.on(“/”, 関数); のように書くから、対象ファイル分を登録するのかな?
SDカードの中身をスキャンし、登録した関数の中で、コマンドは server.method()で、URLはserver.uri() で、調べればいいけど。
登録時間とメモリをかなり食いそう。
でも、 server.on()の中身が_addRequestHandler()だったので、addHandler()で汎用のイベント用関数を作ればいいかもしれないが、RequestHandlerの仕組みが判らないのでググってみたら

//以下、&は&に読み替えてください。
class MyHandler : public RequestHandler {
   bool canHandle(HTTPMethod method, String uri) {
     return (uri != NULL) && uri.startsWith("/aaa/");
   }
   bool handle(ESP8266WebServer& server, HTTPMethod requestMethod, String requestUri) {
      /* do brighness stuff here */
      String html = HTML_HEADER "<h1>";
      html += "command=";
      html += server.method();
      html +=  ",";
      html += "url=" + server.uri();
      html += "</h1>";
      html += HTML_FOOTER;
      server.send(200, "text/html", html);
   }
} myHandler;

の様に書けば/aaa/に反応するイベントハンドラになるらしい。
試しに追加してみると
http://192.168.xxx.xxxx/aaa/bbbbcccc.img なら
command=,url=/aaa/bbbbcccc.img
と表示されるので、多分OK。

あとはDHCPさえ実装できればいいなぁ~と思ってたら、

なんと ESP8266 Non-OS SDK API Reference というのがあって、server.begin();の前に

wifi_softap_dhcps_start(); 

って1行追加するダケだった。
それでも、スマホから接続すると「インターネットに接続できません」扱いで無効状態になるので、APをクリックして 再接続を「インターネットに接続できませんが、接続を維持しますか?」の確認メッセージを出るまで繰り返し「はい」 するまではESP8266のAPに繋がらない。
このAPI類はミスってExceptionが起きると、ESP8266のモニターがリセットしてくれるが・・・、初期設定で Exceptionが起きると、 リセット ト ト ト ト ト ト ト ト となり、USBケーブルを繋ぎ直してもモニタの自動アップロードが機能しなくなり再書き込みもできなくなるので、FLASHメモリの消去ボタンが無い開発キットの場合はヤバイそう。

更にググってみると、僕的に最高なESP8266が見つかった。

カブトムシ仮想キーボード Badusb ATMEGA32U4 WIFI ESP-8266 ESP8266 ESP-12E TF マイクロ SD カード開発ボードモジュール

が国内では売っていないようだ。
さて、次はESP32Sの開発キットにmicroSDカードを繋いで・・・
あ、microSDカードに書き込むときには時計が無いと
ファイル作成日時が2000年の元日になってしまうらしい。
RTCシールドも買えばよかった。orz

あと、画像を返す場合は文字ではないので、ヘッダから

File imgFile;
WiFiServer server(80);
WiFiClient client;
・・・
void Drawjpg(String fileName){
  imgFile = SPIFFS.open(fileName, "r");
  client.write(imgFile, HTTP_DOWNLOAD_UNIT_SIZE);
  imgFile.close();
}
・・・以下ハンドラ内
if(ファイルの拡張子==画像){
  hdr = "HTTP/1.1 200 OK\r\nContent-Type: image/jpeg \r\n\r\n";
  client.print(hdr);
  Drawjpg();
  client.flush();
}

みたいなことをしないといけないらしい

動画は無理なのかな。




コメントを残す

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

CAPTCHA