前回のコードをベースに mDNS(Multicast DNS) を動かしてみたという回です。
mDNSとは
詳しくはお話しませんので皆さんググってください。僕の5000億倍くらいすごい人が解説してくださっています。
簡単に申しますと、LAN 内に於いて、IP アドレスを打たずにホスト名で名前解決が出来る機能で、UDP で実装されています。僕が知っているのはここまで...
組んでみた
コードで組んでみました。結論から言うと起動後5分位経つと、この mDNS が応答しなくなります(IP アドレスをベタ打ちでアクセスすることは可能)。
まず、関数を定義しておきます。
static void mdns_init(void) {
static struct mdns_info info;
struct ip_info ipconfig;
wifi_get_ip_info(STATION_IF, &ipconfig);
info.host_name = "espressif";
info.ipAddr = ipconfig.ip.addr;
info.server_port = 80;
info.server_name = "esp8266";
info.txt_data[0] = NULL;
espconn_mdns_init(&info);
}
こうした上で、前回のコード中の if
文の中で
if( wifi_station_get_connect_status() == STATION_GOT_IP ) {
...
...
gpio_output_set(BIT4, 0, 0, 0);
mdns_init(); // ADD
os_timer_disarm(&os_timer); // Now os timer is not needed.
}
と追加します。これで速攻動作です。あとは ブラウザのアドレスバーに espressif.local と打ち込めば名前解決してくれます。起動直後から5分間限定で。
Windows の人は知りませんが、多分 espressif
だけ打ち込めば良いんじゃないでしょうか??良くわからんので調べてくだされ。
↑ごくテキトーにスタイルシートいじりました。スマホでも押しやすい...はず。
わからないこと
ip_info
構造体に於いて。
server_name
ってどこで使っているのかtxt_data[]
の使い所が不明。"user1 = data1"
とか入れているが...というか、そもそもマニュアルがカス
- 結局 mDNS がわからん。低レイヤとして気持ち悪いね。
- つまるところ、この mDNS API がマイコン起動時から5分間しか機能しないのは何で〜〜????
- 自分、ネットワーク初心者ですので...