位置导航: ESP8266库 / WiFiUDP库 / 本页
说明
本函数可用于从设备接收到数据中读取数据。函数将会返回等待读取的数据字节数。请注意,使用本函数以前需要先调用parsePacket函数。
WiFiUDP类对象可调用Stream类函数。本函数就是属于Stream类的。
语法
WiFiUDP.read()
WiFiUDP.read(buffer, len)
参数
buffer:保存传入数据包的内存指针,数据类型为unsigned char*
len:传入数据包的大小(单位是字节),数据类型为size_t 
返回值
返回值类型为整数型。
在没有使用任何参数的情况下调用此函数,函数的返回值情况如下所述:
设备没有接收到数据时,返回值为-1
设备接收到数据时,返回值为接收到的数据包中的第1个字符的ASCII码数值。
在使用了参数buffer和len调用此函数,函数的返回值情况如下所述:
设备没有接收到数据时,返回值为-1
设备接收到数据时,返回值为接收到的数据包的大小(单位是字节)。
示例程序
关于本函数的具体使用方法,请参考以下代码,尤其是代码中高亮的语句部分。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | /********************************************************************** 项目名称/Project          : 零基础入门学用物联网 程序名称/Program name     : ESP8266WiFiUdp_10 团队/Team                : 太极创客团队 / Taichi-Maker (www.taichi-maker.com) 作者/Author              : 小凯 日期/Date(YYYYMMDD)     : 20200319 程序目的/Purpose          :  用于演示ESP8266WiFiUdp库中read函数 ----------------------------------------------------------------------- 本示例程序为太极创客团队制作的《零基础入门学用物联网》中示例程序。 该教程为对物联网开发感兴趣的朋友所设计和制作。如需了解更多该教程的信息,请参考以下网页: http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/iot-c/esp8266-nodemcu-web-client/http-request/ ***********************************************************************/ #include <ESP8266WiFi.h> #include <WiFiUdp.h> #define ssid      "TaichiMaker_WIFI" //这里改成你的设备当前环境下WIFI名字 #define password  "xxxxxxx"          //这里改成你的设备当前环境下WIFI密码 WiFiUDP Udp;//实例化WiFiUDP对象 unsigned int localUdpPort = 1234;  // 自定义本地监听端口 void setup() {   Serial.begin(115200);//打开串口   Serial.println();   Serial.printf("正在连接 %s ", ssid);   WiFi.begin(ssid, password);//连接到wifi   while (WiFi.status() != WL_CONNECTED)//等待连接   {     delay(500);     Serial.print(".");   }   Serial.println("连接成功");   if(Udp.begin(localUdpPort)){//启动Udp监听服务     Serial.println("监听成功");     //打印本地的ip地址,在UDP工具中会使用到     //WiFi.localIP().toString().c_str()用于将获取的本地IP地址转化为字符串        Serial.printf("现在收听IP:%s, UDP端口:%d\n", WiFi.localIP().toString().c_str(), localUdpPort);   }else{     Serial.println("监听失败");   } } void loop() {   int packetSize = Udp.parsePacket();//获得解析包   Serial.printf("当前UDP解析包字节数: %d\n", packetSize);   if(Udp.available()){//判断是否有UDP数据包     char a = Udp.read();//连续调用read     Serial.printf("READ: %c\n", a);     a = Udp.read();     Serial.printf("READ: %c\n", a);     a = Udp.read();     Serial.printf("READ: %c\n", a);     a = Udp.read();     Serial.printf("READ: %c\n", a);     char incomingPacket[255];  // 存储Udp客户端发过来的数据     int len = Udp.read(incomingPacket, 255);     Serial.printf("READ: %s   len:%d\n", incomingPacket, len);   }   delay(3000); } | 
程序运行结果:

为了方便您更好的了解ESP8266的WiFiUdp库以及本站资料中WiFiUdp库函数的示例程序操作方法,我们制作了一个较为详细的图文教程。该图文教程说明了如何利用TCP_UDP测试工具软件来测试ESP8266开发板的UDP协议通讯功能。请点击这里进入UDP协议通讯控制ESP8266开发板的板载LED教程页面。
相关内容
接收/处理UDP数据类型
– parsePacket – 解析数据
– available(Stream类) – 检查是否有数据被接收
– readString(Stream类) – 读取UDP字符串
– parseInt(Stream类) – 解析UDP数据中整数
– find(Stream类) – 在UDP数据中查找信息
– Stream类 – 以上带有(Stream类)标注的函数属于Stream类函数。