Rainbow包含一個END28J60的網絡模塊,可以非常方便和網絡設備進行通信。開發包實現了一個TCP/IP協議棧,并進行了c++封裝,無論是UDP、TCP還是WebServer的編程,都非常簡單,這使得開發人員可以不用關心網絡實現的細節,而是關注功能的實現。
要進行網絡通信,首先需要初始化網絡:指定MAC地址和ip,可以采用靜態設定或者DHCP的方式,兩種方式都非常簡單,以靜態設定為例,我們在進行網絡通信之前,調用Ethernet.begin(mac, ip)即可,其中mac是需要設定的mac地址,ip是網絡模塊的ip地址,參考定義為:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 15);
在Rainbow中進行UDP通信非常簡單,只需要以下幾個步驟即可:
1、定義EthernetUDP對象:EthernetUDP UDP;
2、開始UDP通信,設置本機監聽UDP包的地址,假如在6001端口進行監聽:UDP.begin(6001);
3、設置對方的ip地址和端口:UDP.beginPacket(destIp, destPort);
4、向UDP包中寫入要發送的數據,如:UDP.println("Hello,world!");
5、通過網絡模塊將UDP數據包發送出去:UDP.endPacket();
在軟件包的“Projects\UDP-Send”文件夾包含了本文的完整工程,可以直接編譯、燒寫和調試。這個程序主要展示如何通過UDP向對方發送字符串,看看main.cpp的代碼:
#include "WProgram.h"
#include "Ethernet.h"
#include "EthernetUDP.h"
//網絡模塊的MAC地址
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//網絡模塊的IP地址
IPAddress ip(192, 168, 1, 15);
//定義對方ip和端口
IPAddress destIp(192, 168, 1, 171);
uint16_t destPort(6000);
//定義UDP對象
EthernetUDP UDP;
void setup()
{
//初始化Rainbow
boardInit();
//初始化默認串口
Serial.begin();
Serial.println("UDP-Send start...");
//對網絡進行初始化
Ethernet.begin(mac, ip);
//開始一個UDP,雖然是發送,但是還是要設置監聽端口,因為UDP是雙工通信
UDP.begin(6001);
}
void loop()
{
//開始準備UDP包
UDP.beginPacket(destIp, destPort);
//準備要發送的數據
UDP.println("Hello,world!");
//將UDP包發送出去
UDP.endPacket();
delay(5000);
}
int main()
{
setup();
while(1) loop();
}
這段代碼我們設置Rainbow的ip地址為192.168.1.15,UDP接收端的ip地址為192.168.1.171,可以根據實際情況進行修改。
上面的程序編譯無誤后,將程序燒寫到Rainbow中,然后在電腦上運行串口調試工具并和Rainbow連接成功,啟動UDP監聽,可以在串口調試工具中看到輸出的日志,同時,每隔5秒,將在從網絡上接收到Rainbow發來的UDP數據: