ブレッドボードに 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=/
と表示されるので、多分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();
}
みたいなことをしないといけないらしい
動画は無理なのかな。