ESP32实例学习(六),UPD通信的使用方法,遇到的问题,和对UPD的初步理解

这期我们介绍ESP32UDP通信的使用方法, UDP大家可能有些陌生,但是他是在网络通信中的一种通信协议。学会这个功能,对我们今后在网络应用开发方面有一定的帮助。

目录

一、什么是UDP

二、原理和操作流程

三.代码解析

四.遇到的问题


一、什么是UDP

UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去! 
UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。
  例如,在默认状态下,一次“ping”操作发送4个数据包(如图2所示)。大家可以看到,发送的数据包数量是4包,收到的也是4包(因为对方主机收到后会发回一个确认收到的数据包)。这充分说明了UDP协议是面向非连接的协议,没有建立连接的过程。正因为UDP协议没有连接的过程,所以它的通信效果高;但也正因为如此,它的可靠性不如TCP协议高。
  QQ就使用UDP发消息,因此有时会出现收不到消息的情况。 
TCP协议和UDP协议各有所长、各有所短,适用于不同要求的通信环境。

通俗点讲UDP就是一个 ERP32进行网络通信的一个通信协议。我们可以在esp32单片机机中利用WiFi模块的功能建立一个网络连接,我们可以通过网络串口助手发送数据,并由esp32来接收到。这样我们就完成了网络数据的发送与接收。下面我们来看一看具体的代码应该如何使用。

二、原理和操作流程

首先我们准备自己家里的无线网的名称和密码,查看自己家里网络的IP地址。其次在电脑中下载网络串口助手,将通信协议设置为UDP模式。

我们让ESP32单片机连接到家里的网络,在把串口助手下载到电脑上。让自己的电脑和ESP32单片机都连接到同一个网络。

到这里准备工作完成。

具体代码

#include <WiFi.h>
#include <WiFiUdp.h> //引用以使用UDP

const char *ssid = "********";
const char *password = "********";

WiFiUDP Udp;                      //创建UDP对象
unsigned int localUdpPort = 2333; //本地端口号

void setup()
{
  Serial.begin(115200);
  Serial.println();

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (!WiFi.isConnected())
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println("Connected");
  Serial.print("IP Address:");
  Serial.println(WiFi.localIP());

  Udp.begin(localUdpPort); //启用UDP监听以接收数据
}

void loop()
{
  int packetSize = Udp.parsePacket(); //获取当前队首数据包长度
  if (packetSize)                     //如果有数据可用
  {
    char buf[packetSize];
    Udp.read(buf, packetSize); //读取当前包数据

    Serial.println();
    Serial.print("Received: ");
    Serial.println(buf);
    Serial.print("From IP: ");
    Serial.println(Udp.remoteIP());
    Serial.print("From Port: ");
    Serial.println(Udp.remotePort());

    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort()); //准备发送数据
    Udp.print("Received: ");    //复制数据到发送缓存
    Udp.write((const uint8_t*)buf, packetSize); //复制数据到发送缓存
    Udp.endPacket();            //发送数据
  }
}

三.代码解析

首先我们声明,两个库,第1个是我们WiFi功能的正常库,第2个便是 Udp的,我们可以用它来使用UDP功能。其次我们输入自己家里的WiFi的名称和密码。
接下来创建UDP对象和本地的端口号。在主函数里面,我们首先打开串口,设置不脱离和效果的打印功能。然后我们调用WiFi功能中的sta模式建立一个连接,或者是说一个WiFi的接入点。接下来是具体的逻辑代码,用来实现应用和服务器的连接。并启用udp来监听接收的数据。并在loop函数中我们获取数据的长度。读取当前数据包的数据以及设置相约缓存和发送数据的功能。下面是经过测试后的,实例演示。

四.遇到的问题

细心的朋友可能已经发现了,我们可以通过电脑的网络串口助手,向ESP32单片机发送数据,并且ESP32单片机也可以接收到数据,并显示串口号和地址,但是当我从ERP32的窗口监视器中发送数据,让电脑的串口助手接收的时候,是无法接收到的。这个问题首先我想到的是程序的问题,但经过程序的排查,我发现是程序是没有问题的。具体情况我还在查找中,如果小伙伴谁知道这个问题的原因,可以在下方评论。
 

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值