SNSへはこちら

ESP8266でベアメタル(7) - mDNSが微妙に動かない

前回のコードをベースに 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分間しか機能しないのは何で〜〜????
    • 自分、ネットワーク初心者ですので...