さて、
前回で
ESP-WROOM-02をプログラムする準備ができたので早速いじり倒す。
あ、Arduino IDEやESP8266環境コアのインストールについては検索すればいくらでもヒットするので省略。ダウンロード時間含めても数十分で終わります。マジ簡単。
あとArduino言語についてもCやC++の知識がちょっとあればすぐにスケッチ(Arduinoユーザープログラム)を書いたり理解したりできると思います。斯く言う私も事前に調べずいきなりインストールしましたし。
そしてESP8266環境コアに付属の作例や検索でヒットした先人の足跡を辿りつつ定番のLEDチカチカやらWebサーバ化やらやってみる。
高々十数行コーディングした程度で\1000もしないIoTデバイスが手近なWi-Fiアクセスポイントに繋がってIPアドレスを受け取り、小規模HTTPサーバーが動作する。
Webブラウザ上のボタン操作で離れた場所のLEDがオンオフできるのはなかなか楽しい。身の回りの照明や家電機器の電源をPCやスマホから操作したいなら、ここからLEDを適当なフォトリレーなどに置き換えて電源ケーブルに割り込ませればいいだけだ。むしろESP-WROOM-02それ自体の電源をどうするかといったことの方が面倒になってくる。
で、そうこうやっているうちに少しばかり問題も見えてくる。私のPCはWindows 7機なのだが、これだとWi-Fiの向こうのESP-WROOM-02を指定するのが優しくない。向こう側がSoftAPモードならばDHCPサーバが動いているのでDNSサーバを追加して好きな名前を騙らせたりCaptive PortalでWebブラウザ表示先を引き込んだりできる。そこまでしなくともDHCPサーバ稼動の都合上、IPアドレスは固定である。
ところがステーションモードだとWi-FiアクセスポイントからIPアドレスが動的に割り振られるので別途調べなければならず実に面倒くさい。そういうわけで名前問い合わせに個々のIPアドレスを応答させるmDNSレスポンダが用意されているのだが、標準でmDNS問い合わせをしてくれるのはMacとWindows 10だけ、Linuxとかは必要なものを各自入れて使うのが文化だからいいとしても、Windows 7とかで遊んでいる筆者のような人はこれで不便だとは思わないのだろうか…
どうやら、ESP8266でArduino開発している人は皆
- MacかWindows 10、あるいはLinux使いである
- あるいは別途mDNSレゾルバ(Bonjourとか)をわざわざインストールしている
- ステーションモードでHTTPサーバなどを動かさず、クライアント動作に徹している
のいずれか一つ以上に合致しているらしい(苦笑)
冗談はさておいて、私は天邪鬼なのでWindows Vista以降が実装しているmDNS類似プロトコルであるLLMNRのレスポンダをESP8266上のArduinoに実装してしまうのでした。
(当然として先人の成果物がないか散々検索したがまともな結果がでてこない…IETFにも冷たくあしわられてRFCもinformational扱いでしかないのでお察しとも)
GitHub - ESP8266-based Arduino LLMNR responder
とりあえずGitHubで公開してみました。どうぞご自由に(MITライセンス)。
つかいかた。
- スケッチに追加
- LLMNRResponder型のインスタンスを確保
- 自機のIPアドレスが決まった後に↑のbeginメソッドに応答したい名前を渡す
[0回]
PR