ESP8266にはmDNSライブラリがある。mDNSというのはローカルネットワーク内でお手軽にホスト名の解決をしてくれる仕組みであり、けっこう世の中のネットワーク機器でこっそり使われている。mDNSがあると何が嬉しいかというと、例えば ESP8266のIPアドレスを知らなくても “http://hoge.local” といったホスト名を使って簡単にアクセスできてしまうのだ。
ESP8266との通信をするためにはIPアドレスを知る必要があるわけだが、それをどうやって伝えるか? という問題への解決のひとつだ。
なお、mDNSの対応状況はまちまちで、OSが面倒をみてくれる場合もあれば、ソフトウェアを入れないとダメな場合もある。
とりあえずやってみる
細かい話は後にしてとりあえずやってみる。ESP8266上で動くWebサーバに “http://esp8266.local” でアクセスしてみよう!
用意するもの
- ESP8266モジュール
- Arduino IDEにESP8266をインストール (この記事を読んでいる人ならここまでは整ってるよね)
- PC側の準備 (が必要な場合もあるので)
- macOS : OSレベルでサポートされているので何もしなくてOK!
- Windows : 一部の有名どころのアプリを入れるとついでにZeroconf環境がついてくるので大抵は入れなくても済むが、うまくいかなければ Bonjour Print Serviecs かiTunes を入れるのがおすすめ
- Linux : avahi-daemon というのを入れる
- 詳しくはこちらを読んでね → Overview | Bonjour (Zeroconf) Networking for Windows and Linux | Adafruit Learning System
ESP8266をいじっているということはPCが手元にあるはずだけれど、参考までにスマートフォンの話を。iOSでも普通にSafariで試せる。Androidはちょっと面倒なので、そこは後編で書く。
サンプルスケッチがあるよ
Arduino IDEにESP8266ライブラリが入っていれば、File > Examplesに “ESP8266mDNS” という項目がある。そこに入っている “mDNS_Web_Server” というのがいちばんシンプルなので試してみる。
このサンプルの
const char* ssid = "............"; const char* password = "..............";
という箇所を書き換えて起動する。
接続!
ブラウザのURL欄に http://esp8266.local と打ち込んでみると……
つながった! やったね!
さて、改めてmDNSとは
mDNSというのは multicast Domain Name Systemの略。
普通のDNSは、DNSサーバとユニキャストで通信を行って名前解決をするけれど、mDNSはローカルネットワーク内でIPマルチキャストを使い、それに応じられるmDNSサーバがマルチキャストで応答することによって名前解決を行う。
クライアント (さっきの例の場合はPC) がLAN内に向かって「esp8266.localを探しています! 誰か教えてくださーい!」とシャウトするとサーバ (さっきの例の場合はESP8266) が「esp8266.localのIPアドレスは192.168.1.9だよー!」とシャウトするというわけだ。そうしてホスト名を解決してIPアドレスを把握できればあとは通信し放題。使うプロトコルはUDPである。
ちなみに、mDNSサーバが応答する際もマルチキャストなので、LAN内の他のマシンもついでにそれを受け取り、必要に応じてキャッシュすることができる。
さて、ここまでが前編。実際にmDNSは具体的にどんな風に動いているのか? 実用上どうなの? というちょっと細かい話は後編に続く。
1件のコメント
コメントは受け付けていません。