ESP8266でmDNS (前編)


ESP8266にはmDNSライブラリがある。mDNSというのはローカルネットワーク内でお手軽にホスト名の解決をしてくれる仕組みであり、けっこう世の中のネットワーク機器でこっそり使われている。mDNSがあると何が嬉しいかというと、例えば ESP8266のIPアドレスを知らなくても “http://hoge.local” といったホスト名を使って簡単にアクセスできてしまうのだ。

ESP8266との通信をするためにはIPアドレスを知る必要があるわけだが、それをどうやって伝えるか? という問題への解決のひとつだ。
なお、mDNSの対応状況はまちまちで、OSが面倒をみてくれる場合もあれば、ソフトウェアを入れないとダメな場合もある。

とりあえずやってみる

細かい話は後にしてとりあえずやってみる。ESP8266上で動くWebサーバに “http://esp8266.local” でアクセスしてみよう!

用意するもの

  • ESP8266モジュール
  • Arduino IDEにESP8266をインストール (この記事を読んでいる人ならここまでは整ってるよね)
  • PC側の準備 (が必要な場合もあるので)

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件のコメント

コメントは受け付けていません。