udp作为监听端口时怎么获取数据的来源_五、ESP32使用UDP通信

目录

  • UDP简介
  • UDP通信
  • 程序流程
  • UDP函数参考
  • 贴上代码
  • 程序烧录验证
  • 总结
dfb8c23faaa4ff9e6cb0ca2fab225f04.png

UDP简介

UDP协议是一种无需建立连接就可以发送封装的IP数据出去的方式,相比较于TCP协议来说无需先建立连接之后再进行发送数据,UDP属于一种面向事务的简单不可靠信息传送服务,我们在使用ESP32进行UDP通信时相对于TCP连接来说由于协议简单数据传输会更为迅速,但是相对的数据也容易丢失,所以UDP传输信息相对来说不那么可靠,下面我们将使用ESP32发出热点之后用电脑与ESP32进行简单的UDP通信

UDP通信

程序流程

我们下面将编写一个包含UDP通信数据接收和数据发送的程序以方便我们学习,我们在电脑上打开UDP通信软件向ESP32发送数据,ESP32将会把接收到的数据原样返回到电脑上

c456e2eb28d2d74ad28d1f0ebdb21f13.png

上面是我们本次程序的大致流程,下面我们看到ESP32使用UDP通信部分基础函数

UDP函数参考

uint8_t begin(IPAddress a, uint16_t p)

函数功能:启动监听来自与于某个地址发送给某个端口的数据或者监听某个端口的数据

参数

a为监听的IP地址

p为监听的端口号

int parsePacket()

函数功能:获取接收数据信息

返回值:如果有数据包可用,则返回对首数据包长度,否则返回0

IPAddress remoteIP()

函数功能:获取目标设备的IP地址

返回值:目标IP地址

uint16_t remotePort()

函数功能:获取目标设备的端口号

返回值:目标端口号

int read(char* buffer, size_t len)

函数功能:读取数据

int beginPacket(IPAddress ip, uint16_t port)

函数功能:准备发送数据

参数

ip为目标IP

port为目标端口号

int endPacket()

函数功能:发送数据

void stop()

函数功能:停止监听,释放资源

贴上代码

我们了解完一些需要用到的函数之后,我们开始看到代码部分,注释都打上了,可以看注释来学习程序

#include  //wifi功能需要的库WiFiUDP Udp;//声明UDP对象const char* wifi_SSID="ESP32_Udp"; //存储AP的名称信息const char* wifi_Password="ESP32_1234"; //存储AP的密码信息uint16_t udp_port=1122; //存储需要监听的端口号char incomingPacket[255]; //存储Udp客户端发过来的数据void setup() {// put your setup code here, to run once:Serial.begin(115200); //开启串口,波特率为115200WiFi.softAP(wifi_SSID,wifi_Password); //打开ESP32热点Serial.print("开发板IP地址为:");Serial.print(WiFi.softAPIP()); //串口输出模块IP地址Udp.begin(udp_port);//启动UDP监听这个端口}void loop() {// put your main code here, to run repeatedly:/*接收发送过来的Udp数据*/int Data_length=Udp.parsePacket(); //获取接收的数据的长度if(Data_length) //如果有数据那么Data_length不为0,无数据Data_length为0{int len = Udp.read(incomingPacket, 255); //读取数据,将数据保存在数组incomingPacket中if (len > 0) //为了避免获取的数据后面乱码做的判断{incomingPacket[len] = 0;}/*将接受到的数据发送回去*/Udp.beginPacket(Udp.remoteIP(),Udp.remotePort()); //准备发送数据到目标IP和目标端口Udp.print("receive data:"); //将数据receive data:放入发送的缓冲区Udp.println(incomingPacket); //将接收到的数据放入发送的缓冲区Udp.endPacket(); //向目标IP目标端口发送数据}}

程序烧录验证

将以上程序烧录进ESP32之后,我们在网上找一个可以进行UDP通信的软件进行通信测试,成功之后以上程序可以作为以后写UDP通信程序的模板进行使用

烧录程序之后打开串口监视器,按下复位键可以看到返回的IP地址如下图所示

3d63a1c802ad7a673da2fadc69fd52cc.png

在用电脑上位机进行通信的时候需要注意两个参数,一个是上面获取的IP地址,一般都会是默认的192.168.4.1,另一个是我们在程序里面设置的监听端口号,我们上面设置的端口号会需要用到,wifi的账号密码就不说了再前面的文章中有相关的说明

fcf65c753974392f34f79b82abe42db2.gif

上面用到的软件以及程序等可以在下方留言邮箱获取,都整理好了

总结

ESP32在进行UDP通信的时候需要注意的几个参数是目标IP、目标端口号和监听IP和监听端口号之间容易弄混,ESP32在使用arduino开发环境进行UDP通信时还是较为简单,可以直接套用以上模板进行通信,本期和UDP通信相关的就到这里了,有问题大家可以一起在评论区交流沟通!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
esp32是一种集成了WiFi和蓝牙功能的开发板,它基于Arduino框架具有强大的硬件和软件支持。UDP通信是一种简单的传输协议,在esp32上实现UDP通信可以用于实现局域网内设备之间的数据传输。 在esp32使用Arduino IDE进行开发,编写一个UDP通信程序非常简单。首先,我们需要包含ESP32的WiFi库和ESPAsyncUDP库。然后,设置并连接WiFi网络。 接下来,我们可以创建一个AsyncUDP的对象来实现UDP通信。通过begin()函数,我们可以指定监听的端口号。然后,我们可以使用onPacket()函数来接收和处理接收到的数据。 在loop()函数中,我们可以使用发送数据的两个函数:sendTo()和broadcastTo()。前一个函数可以将数据发送给特定的IP地址和端口号,而后一个函数则可以将数据广播到局域网内的所有设备。 根据具体需求,我们可以编写不同的处理函数来对接收到的数据进行处理。例如,我们可以将接收到的数据进行解析并根据内容执行不同的操作。 最后,我们可以在程序中使用Serial Monitor进行调试和查看输出信息,以确保程序正常运行。 总之,利用esp32和Arduino框架,我们可以非常容易地实现UDP通信。这种通信方法简单高效,在实际应用中可以广泛应用于传输实数据和控制命令等。同esp32的强大功能和Arduino的易用性相结合,使得开发人员可以更加方便地进行开发和调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值