專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> STM32 >> 瀏覽文章

Rainbow網(wǎng)絡(luò)通信:通過(guò)UDP發(fā)送數(shù)據(jù)

作者:白櫟旸   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年04月30日   【字體:

    Rainbow包含一個(gè)END28J60的網(wǎng)絡(luò)模塊,可以非常方便和網(wǎng)絡(luò)設(shè)備進(jìn)行通信。開(kāi)發(fā)包實(shí)現(xiàn)了一個(gè)TCP/IP協(xié)議棧,并進(jìn)行了c++封裝,無(wú)論是UDP、TCP還是WebServer的編程,都非常簡(jiǎn)單,這使得開(kāi)發(fā)人員可以不用關(guān)心網(wǎng)絡(luò)實(shí)現(xiàn)的細(xì)節(jié),而是關(guān)注功能的實(shí)現(xiàn)。

 
    要進(jìn)行網(wǎng)絡(luò)通信,首先需要初始化網(wǎng)絡(luò):指定MAC地址和ip,可以采用靜態(tài)設(shè)定或者DHCP的方式,兩種方式都非常簡(jiǎn)單,以靜態(tài)設(shè)定為例,我們?cè)谶M(jìn)行網(wǎng)絡(luò)通信之前,調(diào)用Ethernet.begin(mac, ip)即可,其中mac是需要設(shè)定的mac地址,ip是網(wǎng)絡(luò)模塊的ip地址,參考定義為:
    byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    IPAddress ip(192, 168, 1, 15);
 
    在Rainbow中進(jìn)行UDP通信非常簡(jiǎn)單,只需要以下幾個(gè)步驟即可:
    1、定義EthernetUDP對(duì)象:EthernetUDP UDP;
    2、開(kāi)始UDP通信,設(shè)置本機(jī)監(jiān)聽(tīng)UDP包的地址,假如在6001端口進(jìn)行監(jiān)聽(tīng):UDP.begin(6001);
    3、設(shè)置對(duì)方的ip地址和端口:UDP.beginPacket(destIp, destPort);
    4、向UDP包中寫(xiě)入要發(fā)送的數(shù)據(jù),如:UDP.println("Hello,world!");
    5、通過(guò)網(wǎng)絡(luò)模塊將UDP數(shù)據(jù)包發(fā)送出去:UDP.endPacket();
    
    在軟件包的“Projects\UDP-Send”文件夾包含了本文的完整工程,可以直接編譯、燒寫(xiě)和調(diào)試。這個(gè)程序主要展示如何通過(guò)UDP向?qū)Ψ桨l(fā)送字符串,看看main.cpp的代碼:
#include "WProgram.h"
#include "Ethernet.h"
#include "EthernetUDP.h"
 
//網(wǎng)絡(luò)模塊的MAC地址
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//網(wǎng)絡(luò)模塊的IP地址
IPAddress ip(192, 168, 1, 15);
 
//定義對(duì)方ip和端口
IPAddress destIp(192, 168, 1, 171);
uint16_t destPort(6000);
 
//定義UDP對(duì)象
EthernetUDP UDP;
 
void setup()
{
    //初始化Rainbow
    boardInit();
    //初始化默認(rèn)串口
    Serial.begin();
    Serial.println("UDP-Send start...");
    //對(duì)網(wǎng)絡(luò)進(jìn)行初始化
    Ethernet.begin(mac, ip);
    //開(kāi)始一個(gè)UDP,雖然是發(fā)送,但是還是要設(shè)置監(jiān)聽(tīng)端口,因?yàn)閁DP是雙工通信
    UDP.begin(6001);
}
 
void loop()
{
    //開(kāi)始準(zhǔn)備UDP包
    UDP.beginPacket(destIp, destPort);
    //準(zhǔn)備要發(fā)送的數(shù)據(jù)
    UDP.println("Hello,world!");
    //將UDP包發(fā)送出去
    UDP.endPacket();
    delay(5000);
}
 
int main()
{
    setup();
    while(1) loop();
}
 
    這段代碼我們?cè)O(shè)置Rainbow的ip地址為192.168.1.15,UDP接收端的ip地址為192.168.1.171,可以根據(jù)實(shí)際情況進(jìn)行修改。
 
    上面的程序編譯無(wú)誤后,將程序燒寫(xiě)到Rainbow中,然后在電腦上運(yùn)行串口調(diào)試工具并和Rainbow連接成功,啟動(dòng)UDP監(jiān)聽(tīng),可以在串口調(diào)試工具中看到輸出的日志,同時(shí),每隔5秒,將在從網(wǎng)絡(luò)上接收到Rainbow發(fā)來(lái)的UDP數(shù)據(jù):
關(guān)閉窗口

相關(guān)文章