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