Fireduino WiFi UDP
更新时间:2017-08-08 阅读:14153
目录
Fireduino WiFi UDP
Fireduino SDK 为WiFi 提供了一套完善的API,该组API兼容Arduino WiFi Shield 示例。
Fireduino WiFi UDP流程
UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、处理器的处理能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。
第一步:
创建一个 WiFiUDP对象,接着调用对象函数begin函数,初始化UDP对象以及开始监听端口,参数为需要监听的端口号。
第二步:
数据的接受
如果UDP端口接到到远程发送的数据,通过调用对象parsePacket函数可以获取数据包大小。之后通过调用对象函数read 读取数据。
数据的发送
UDP 数据包的发送需要通过对象函数beginPacket指定远程主机的IP地址和端口号,之后调用对象函数write写入数据后,调用对象函数endPacket完成组包后扔到网络发送。
第三步:
完成数据传输后可以调用UDP对象 stop 函数 释放UDP资源。
示例程序 --UDP Receive & Send Message
#include <WiFi.h> #include <WiFiUdp.h> int status = WL_IDLE_STATUS; char ssid[] = "yourNetwork"; // your network SSID (name) char pass[] = "secretPassword"; // your network password unsigned int localPort = 2390; // local port to listen on char packetBuffer[255]; //buffer to hold incoming packet char ReplyBuffer[] = "acknowledged"; // a string to send back WiFiUDP Udp; void setup() { //Initialize serial and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } // check for the presence of the shield: if (WiFi.status() == WL_NO_SHIELD) { Serial.println("WiFi shield not present"); // don't continue: while (true); } String fv = WiFi.firmwareVersion(); if (fv != "1.1.0") { Serial.println("Please upgrade the firmware"); } // attempt to connect to Wifi network: while (status != WL_CONNECTED) { Serial.print("Attempting to connect to SSID: "); Serial.println(ssid); // Connect to WPA/WPA2 network. Change this line if using open or WEP network: status = WiFi.begin(ssid, pass); // wait 10 seconds for connection: delay(10000); } Serial.println("Connected to wifi"); printWifiStatus(); Serial.println("\nStarting connection to server..."); // if you get a connection, report back via serial: Udp.begin(localPort); } void loop() { // if there's data available, read a packet int packetSize = Udp.parsePacket(); if (packetSize) { Serial.print("Received packet of size "); Serial.println(packetSize); Serial.print("From "); IPAddress remoteIp = Udp.remoteIP(); Serial.print(remoteIp); Serial.print(", port "); Serial.println(Udp.remotePort()); // read the packet into packetBufffer int len = Udp.read(packetBuffer, 255); if (len > 0) { packetBuffer[len] = 0; } Serial.println("Contents:"); Serial.println(packetBuffer); // send a reply, to the IP address and port that sent us the packet we received Udp.beginPacket(Udp.remoteIP(), Udp.remotePort()); Udp.write(ReplyBuffer); Udp.endPacket(); } } void printWifiStatus() { // print the SSID of the network you're attached to: Serial.print("SSID: "); Serial.println(WiFi.SSID()); // print your WiFi shield's IP address: IPAddress ip = WiFi.localIP(); Serial.print("IP Address: "); Serial.println(ip); // print the received signal strength: long rssi = WiFi.RSSI(); Serial.print("signal strength (RSSI):"); Serial.print(rssi); Serial.println(" dBm"); }