mDNS的位址永遠為ameba

  • 環境
    ** 硬體:BW16
    ** 前置:按教學更新firmware及設定Arduino IDE
    ** Board ver: 3.0.11
    ** IDE: Arduino 1.8.16 / MacOS 10.14.6
  • 步驟
  1. 在Arduino IDE上讀取AmebaMDNS → mDNS_On_Arduino_IDE範例
  2. 修改無線認證資訊
  3. 編譯及上傳
  4. 確認在無線基地台內BW16已連線
  5. 預期:ping MyAmeba或MyAmeba.local會回應
    實際: Unknown host

P.S. 在mDNSPlatform.c內可以看到

// Mandatory function to get hostname
// called when mDNS initialization
char *mDNSPlatformHostname(void)
{
#if LWIP_NETIF_HOSTNAME
	return (char *) xnetif[0].hostname;
#else
	return "ameba";
#endif
}

直接ping ameba.local則會成功,但是修改return 值後重新編譯並未生效

因為目前需要不只一個BW16,所以需要mDNS可以正常運作

另外,希望可以提供方法修改在無線基地台上的名稱,原因如上

1 Like

Hi @xidameng ,

不知道這個是否也能幫忙一下呢?在board 3.1.0也是一樣的。

ping ameba.local會得到回應但MyAmeba.local則無法,在Arduino IDE上看到的確實是MyAmeba,只是似乎其它host都只看的到ameba.local

但我以為此範例應該是可以接受MyAmeba.local這個我們在程式中指定的位址解析而不是ameba.local。

幫你 @wyy :laughing:
抱歉,最近休假不怎麽看手機

Hi @Victor

我的了解是 MyAmeba._arduino._tcp.local 是一个 DNS service record 的名字,不是一个 hostname 名字,所以不能 ping 到 MyAmeba.local

想要用 ping 找的话,需要改的应该是 lwip 里面的 hostname 设置。这个功能现在没有开启

如果需要用 mdns service 分辨开发板,linux 上是可以用 avahi-browse -at 搜索并列出所有 mdns service 和 ip 地址,也可以修改 protocol 部分 _arduino._tcp 分辨不同开发板。

Hi @wyy,

謝謝說明,對於mDNS有些部份想再進一步了解:

  • 如果我們可以設置的目標是MyAmeba,所以會有一個dns record為 MyAmeba._arduino._tcp.local,那為什麼ameba.local在mdns啟用後可以被解析?
  • 而上述的ameba.local似乎是無法透過修改mDNSPlatform.c來修改為其它值

而lwip的部份我試了一下好像沒有辦法在3.1.0順利使用,修改的部份如下:

  • 修改opt.h的LWIP_NETIF_HOSTNAME為1
  • lwip_netconf.c中,在netif_set_up之後以及LwIP_init()的最後新增了netif_set_hostname(pnetif, "testhost"); 但仍然沒有辦法成功

hi @Victor

  • 现在的版本,LwIP 的设置 hostname 功能没开,但是 mDNS 是需要 hostname 的,所以一旦开启 mDNS,就会用上默认的 “ameba" hostname。但是因为 lwip 的 hostname 功能没开,不能修改 hostname。
  • 为了节省编译时间,一些代码多的底层功能,如 BLE WiFi LwIP TLS,都是提前编译好,通过 .a archive 文件包括在 Arduino 的编译里面。所以在 Arduino 里面更改这些 .h/.c 文件不一定有效,有些更改是需要重新编译 .a 文件,只用 Arduino 是做不到的。
  • 现在内部测试的新版本把 LwIP 的设置 hostname 功能打开了,确定了可以修改 hostname。默认 hostname 为 “Ameba_” + MAC 地址。

Hi @wyy

感謝,hostname的部份是否可以提供一個method以避免我們需要直接修改程式碼?這會造成在更版的時候需要重新修改

Hi @Victor

我没怎么看懂你的意思。
新版本的 hostname 设置是:如果在链接 WiFi 前用户没有提供一个 hostname,就用默认的 Ameba + MAC。

Hi @wyy

那這樣就沒問題了,感謝!

Regards,
Victor Chen

你好,看历史评论,这个解决方法是在连接WIFI前设置hostname,如果hostname是动态变化的,需要在注册mdns的时候动态修改,这个是否支持?

這邊使用的是Arduino SDK,和standard SDK不太一樣