首页 > 其他分享 >ESP8266配置UDP数据传输

ESP8266配置UDP数据传输

时间:2023-02-22 19:00:53浏览次数:52  
标签:UDP ESP8266 WIFI printf 数据传输 buff u8

1.ESP8266简介

      ESP8266是一款高性能的WIFI串口模块,内部集成MCU能实现单片机之间串口通信,是目前使用最广泛的一种WIFI模块之一。可以简单理解为一个WIFI转串口的设备,不用知道太多WIFI相关知识,只需要知道串口怎么使用就可以。

      ESP8266 支持 softAP 模式,station 模式,softAP + station 共存模式三种。利用 ESP8266 可以实现十分灵活的组网方式和网络拓扑。(SoftAP:即无线接入点,是一个无线网络的中心节点。通常使用的无线路由器就是一个无线接入点。Station:即无线终端,是一个无线网络的终端端。)

ESP8266配置UDP数据传输_ESP8266

ESP8266支持TCP和UDP传输协议。

2.UDP协议

  UDP协议采用无连接的方式,不管发送的数据包是否到达目的主机,数据包是否出错。收到数据包的主机也不会告诉发送方是否正确收到了数据,它的可靠性是由上层协议来保障的。

    UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768 [1] 是UDP的正式规范。UDP在IP报文的协议号是17。

    UDP是无连接的服务。在无连接服务的情况下,两个实体之间的通信不需先建立好一个连接,因此其下层的有关资源不需要事先进行预定保留。这些资源将在数据传输时动态地进行分配。无连接服务的另一特征就是它不需要通信的两个实体同时是活跃的(即处于激活态)。当发送端的实体正在进行发送时,它才必须是活跃的。优点是灵活方便和比较迅速,但不能防止报文的丢失、重复或失序,特别适合于传送少量零星的报文。

    UDP报文没有可靠性保证、顺序保证和流量控制字段等,可靠性较差。但是正因为UDP协议的控制选项较少,在数据传输过程中延迟小、数据传输效率高,适合对可靠性要求不高的应用程序,或者可以保障可靠性的应用程序,如DNS、TFTP、SNMP等。

ESP8266配置UDP数据传输_ESP8266_02

3.ESP8266配置UDP模式

   ESP8266是通过串口通讯协议,利用AT指令集完成模式配置。通过以下命令即可完成UDP模式配置:

  "AT\r\n",//测试指令
"AT+RST\r\n",
"ATE0\r\n",
"AT+CWMODE=1\r\n",//STA模式
"AT+CWJAP=\"360WIFI_123\",\"12345678\"\r\n",//连接WIFI
"AT+CIFSR\r\n",//查询IP
"AT+CIPSTART=\"UDP\",\"172.20.7.2\",10500,8080,0\r\n",//建立UDP
"AT+CIPMODE=1\r\n",//设置透传模式
"AT+CIPSEND\r\n",//发送数据

3.1 STA+UDP模式配置函数设计

     封装UDP模式配置函数,传入WIFI名字、密码、远端IP地址、远端端口号,本地端口号,即可实现UDP模式配置。设置透传模式,即可实现数据收发。

/*******************************************************************************************************************
**形参: wifi_name --WIFI名
** password --密码
** remote_ip --远端IP地址(255.255.255.255为广播地址)
** remote_prot --远端端口号
** localhost ---本地端口号
**返回值:0 --成功,
** 其它值 --失败
**示例:ESP8266_UDP_STA_Mode("360WIFI_123","12345678","172.20.7.2",10500,8080);
*********************************************************************************************************************/
u8 ESP8266_UDP_STA_Mode(u8 *wifi_name,u8 *password,u8 *remote_ip,u16 remote_prot,u16 localprot)
{
char buff[100];
u8 i=0;
for(i=0;i<5;i++)
{
USARTx_SendStr(USART3,(u8 *)"+++"); //退出透传模式
Delay_Ms(1000);
printf("1.测试指令.......\r\n");
if(ESP8266_SendCmd((u8 *)"AT\r\n",(u8 *)"OK")==0)break;
}
if(i==5)return 1;
printf("2.重启模块.......\r\n");
USARTx_SendStr(USART3,(u8 *)"AT+RST\r\n");
Delay_Ms(1000);
Delay_Ms(1000);
printf("3.关回显.......\r\n");
if(ESP8266_SendCmd((u8 *)"ATE0\r\n",(u8 *)"OK"))return 2;
printf("4.设置为STA模式.......\r\n");
if(ESP8266_SendCmd((u8 *)"AT+CWMODE=1\r\n",(u8 *)"OK"))return 3;
printf("6.连接WIFI.......\r\n");
snprintf(buff,sizeof(buff),"AT+CWJAP=\"%s\",\"%s\"\r\n",wifi_name,password);
if(ESP8266_SendCmd((u8 *)buff,(u8 *)"OK"))return 5;
printf("7.查询IP.......\r\n");
if(ESP8266_SendCmd((u8 *)"AT+CIFSR\r\n",(u8 *)"OK"))return 6;
ESP8266_GetData((char *)usart3_rx_buff,esp8266_info.ipaddr,"STAIP");
printf("8.建立UDP连接.....\r\n");
snprintf(buff,sizeof(buff),"AT+CIPSTART=\"UDP\",\"%s\",%d,%d,0\r\n",remote_ip,remote_prot,localprot);
if(ESP8266_SendCmd((u8 *)buff,(u8 *)"OK"))return 7;
printf("9.设置透传.......\r\n");
if(ESP8266_SendCmd((u8 *)"AT+CIPMODE=1\r\n",(u8 *)"OK"))return 8;
printf("10.发送数据.......\r\n");
if(ESP8266_SendCmd((u8 *)"AT+CIPSEND\r\n",(u8 *)">"))return 9;
esp8266_info.port=localprot;
return 0;
}

3.2 UDP模式调用测试

     本示例是以STM32f103作为主控MCU,ESP8266 WIFI模块与开发板串口3相连,通讯速率为115200,1个起始位+8位数据位+1位停止位,无校验位的数据帧格式。

ESP8266配置UDP数据传输_ESP8266_03

int main()
{
u8 key;
u8 ret;
LED_Init();//LED初始化
USARTx_Init(USART1,115200,72);
TIMx_Init(TIM2,72,20000);//定时器辅助串口1接收,计数一个周期时间为20ms
USARTx_Init(USART3,115200,36);
TIMx_Init(TIM4,72,20000);//定时器辅助串口3接收,计数一个周期时间为20ms
KEY_Init();//按键初始化
Beep_Init();//蜂鸣器初始化
printf("WIFI模式配置中。。。。\r\n");
while(1)
{
ret=ESP8266_UDP_STA_Mode((u8 *)"wbyq_wifi",(u8 *)"12345678",(u8 *)"172.20.7.1",10500,8266);
if(ret==0)break;
printf("ret:%d\r\n",ret);
}
printf("IP:%s\r\n",esp8266_info.ipaddr);
printf("port:%d\r\n",esp8266_info.port);
while(1)//轮询
{
key=KEY_GetVal();
if(key==2)
{
BEEP=1;
Delay_Ms(50);
BEEP=0;
USARTx_SendStr(USART3,(u8 *)"UDP+STA模式数据传输测试\r\n");
}

if(usart3_rx_flag)
{
usart3_rx_buff[usart3_rx_cnt]='\0';//字符串结束符
usart3_rx_cnt=0;
usart3_rx_flag=0;
printf("rx3:%s\r\n",usart3_rx_buff);
}
}
}
  • 运行效果:

   通过网络调试助手软件,建立UDP通讯,实现UDP数据收发。

ESP8266配置UDP数据传输_UDP_04

标签:UDP,ESP8266,WIFI,printf,数据传输,buff,u8
From: https://blog.51cto.com/u_15688123/6079324

相关文章

  • 解析HTTPS如何让数据传输更安全
    鉴于HTTP的明文传输使得传输过程毫无安全性可言,且制约了网上购物、在线转账等一系列场景应用,于是引入加密方案。从HTTP协议栈层面来看,我们可以在TCP和HTTP之间插入......
  • udp通信
    服务端:importsocketsk=socket.socket(type=socket.SOCK_DGRAM)sk.bind(("127.0.0.1",8080))whileTrue:msg,addr=sk.recvfrom(1024)print(msg.dec......
  • TCP与UDP简述
    什么是TCPTCP(TransmissionControlProtocol传输控制协议)是一种面向连接的,可靠的,基于字节流的传输通信协议。1、tcp(TransmissionControlProtocol传输控制协议)2、传......
  • UDP 和 TCP? 区别? 应用场景?
    一、UDPUDP(UserDatagramProtocol),用户数据包协议,是一个简单的面向数据报的通信协议,即对应用层交下来的报文,不合并,不拆分,只是在其上面加上首部后就交给了下面的网络层也......
  • Arduino esp8266 error DEBUG_ESP_PORT was not declared in this scope
    error:'DEBUG_ESP_PORT'wasnotdeclaredinthis scope解决方法:菜单,工具,Debugport:,Serial 解决!From:https://blog.csdn.net/brook0344/article/details/1061693......
  • Sokit(TCP/UDP调试工具)
    下载:http://www.winwin7.com/soft/56522.html#xiazai   Sokit中文版是一款免费开源的TCP/UDP测试(调试)工具,它主要可以用于接收和发送TCP/UDP数据包,让你更深的了解网......
  • 传输层--可靠数据传输的基本原理
    可靠的数据传输:网络top10问题之一就是解决网络的可靠的数据传输。什么是可靠:即不丢,不错,不乱;rdt:reliabledatatransfer rdt1.0:......
  • 71udp,tcp
    udp相当与写信,tcp相当于打电话1、基于连接与无连接;2、对系统资源的要求(TCP较多,UDP少);3、UDP程序结构较简单;4、流模式与数据报模式;5、TCP保证数据正确性,UDP可能丢包;6......
  • esphome-esp8266
    esp8266使用esphome接入hass对于生成配置文件的更改此处nodemcu泛指集成的开发板,一般十几块钱一块下方使用的是D1,对应的针脚是GPIO5esp8266:board:nodemcuv2......
  • 网络隔离后的数据传输怎么解决?深度解析4种主流方案
    网络隔离对于很多企业来说并不陌生,出于数据安全的考虑,为了隔离有害的网络和可能的网络攻击,越来越多的企业在内部进行了网络隔离。隔离的形态和方式有多种,总体上主要以物理......