MDNS - 在 Arduino IDE 上設置 mDNS 客户端
材料準備
AmebaD [AMB21 / AMB22 / AMB23 / BW16] x 1
範例説明
mDNS (Multicast DNS) 是適用於區域網路裡,讓對方知道自己IP與所提供的服務的協定。mDNS是基於UDP的協定,在IPV4底下會發送封包至224.0.0.251, 使用的port為5353。服務的命名遵循底下的格式: {Instance Name}.{Protocol Name}.{Domain} 其中
Instance Name: 用來識別服務的名稱
Protocol Name: 分成兩部份, 前半是關於這個服務的名稱, 會前綴一個底線, 後半則是所使用的transport protocol name, 一樣會前綴底線
Domain: 通常都是區域網路
“File” → “Examples” → “AmebaMDNS” → “mdns_on_arduino_ide”
Next, go to (“Tools” → “Port”), and you can find out at least one Serial Port. This port is simulated by Ameba board via USB. Choose this port and upload the compiled code to Ameba.
上傳完成後, 按下Ameba的Reset按鈕, 等待一會兒讓Ameba連上AP並且啟動mDNS服務, 我們可以在Serial Monitor看到底下的Log
接著我們再看看Port的地方, 會發現多了Network Ports的項目 “MyAmeba at 192.168.1.238 (Ameba RTL8722DM/RTL8722CSM)”,其中MyAmeba是我們之前可以設定的裝置名稱,後面的IP是Ameba連上AP之後取得的IP, 這個IP與Serial Monitor看到的IP應該是一樣的, 最後則是Ameba RTL8722DM/RTL8722CSM則是版子的類型名稱, 到這裡代表Ameba成功地讓Arduino IDE辨識出mDNS服務。(但是仍無法使用網路上傳程式碼的功能, 這部份會在OTA的範例裡說明)
你的電腦與Ameba是否在同個區域網路裡?
重開Arduino IDE試試看, Arduino IDE會重新找尋mDNS服務
在Serial Monitor的log裡Ameba是否成功連上AP並且成功啟用mDNS
程式碼説明
程式一開始設定了mDNS服務,第一個參數是Instance Name, 在這個範例裡可以更改,第二個參數是服務使用的協定, 對Arduino IDE而言會是 “_arduino._tcp”,第三個參數是Domain, 通常是填 “local”, 第四個參數是這個服務所在的port, 這裡是5000, 範例裡沒有使用到。
MDNSService service("MyAmeba", "_arduino._tcp", "local", 5000);
連上網路之後, 我們對這個服務設定了一些文字欄位,以底下的例子來說, “board”是欄位名稱, “ameba_rtl8721d”則是欄位的值, “board”主要是讓Arduino IDE查找已安裝的SDK裡面是否有已知的裝置, 如果有的話則會使用該裝置的名稱,使用者有興趣的話可以將 “ameba_rtl8721d”改成 “yun”或其它值試試看有什麼效果。
service.addTxtRecord("board", strlen("ameba_rtl8721d"),"ameba_rtl8721d");
接著添加三個文字欄位 “auth_upload”, “tcp_check”, 以及 “ssh_upload”,這個範例裡並沒有啟用這些服務。
service.addTxtRecord("auth_upload", strlen("no"), "no");
service.addTxtRecord("tcp_check", strlen("no"), "no");
service.addTxtRecord("ssh_upload", strlen("no"), "no");
接著我們啟用MDNS
MDNS.begin();
並且註冊剛剛設定好的mDNS服務
MDNS.registerService(service);