Ameba Arduino: [RTL8195] [RTL8710] 使用 Ameba 當作 UDP Server

材料準備

  • Ameba x 1

範例說明

這個範例裡,我們使用Ameba連上WiFi,作為UDP服務器端,當UDP 客戶端發送訊息給Ameba之後,回應 “acknowledged” 給客戶端。

首先打開 WiFi Web Server的範例, “File” -> “Examples” -> “AmebaWiFi” -> “WiFiUdpSendReceiveString”

7-1
將WiFi連線至AP的相關訊息進行修改,包括 ssid, pass, keyIndex

7-2

並且修改連線的方式

7-3

上傳程式碼之後,按下Ameba的Reset按鈕, WiFi連線成功後,會開啟UDP服務器,服務器端的IP為Ameba的IP,端口為2390
啟動服務之後,會印出訊息 “Starting connection to server”,並等待UDP客戶端連線進來

7-4

另外在電腦的socket工具上(本示例中使用的工具為“sokit”)通過獲取的IP地址以及範例中設定的端口號 “2390”來進行連線。
選取Client模式,填寫Server IP和PORT信息,點擊 “UDP Connect”.

連接成功後, 傳送字串過去,這個例子裡,在Buf 0填入 “Hello World”, 並且按下Send
此時會看到Ameba UDP服務器端回應 “acknowledged”,並且Ameba的Serial Monitor會看到Contents: “Hello World”,這個例子就成功了

7-5

 

程式碼說明


Ameba使用相容於Arduino Wifi Shield的WiFiUdp class,所以範例程式也與 Arduino相容。
https://www.arduino.cc/en/Tutorial/WiFiSendReceiveUDPString

首先呼叫  begin() 在Ameba開啟UDP端口
https://www.arduino.cc/en/Reference/WiFiUDPBegin

使用parsePacket() 等待客戶端傳送資料進來
https://www.arduino.cc/en/Reference/WiFiUDPParsePacket

如果有資料進來, 使用remoteIP() 與 remotePort() 取得客戶端的 IP 與 Port
https://www.arduino.cc/en/Reference/WiFiUDPRemoteIP
https://www.arduino.cc/en/Reference/WiFiUDPRemoteIP

並且呼叫 read() 將資料收進來
https://www.arduino.cc/en/Reference/WiFiUDPRead

回傳資料時, 使用 beginPacket(), write(), end()傳送資料,需要三個為一組來使用
https://www.arduino.cc/en/Reference/WiFiUDPBeginPacket
https://www.arduino.cc/en/Reference/WiFiUDPWrite
https://www.arduino.cc/en/Reference/WiFiUDPEndPacket