专注电子技术学习与研究
当前位置:单片机教程网 >> STM32 >> 浏览文章

Rainbow网络通信:通过UDP发送数据

作者:白栎旸   来源:本站原创   点击数:  更新时间:2014年04月30日   【字体:

    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数据:
关闭窗口

相关文章