ESP8266 (四)UDP通信

博客介绍了UDP广播中ESP8266客户端与PC服务端的通信。阐述了程序编写思路,包括包含头文件、定义初始化及回调函数等。给出程序示例,展示结果图。还指出调试时因电脑防火墙导致通信失败,关掉防火墙可正常收发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UDP广播,ESP8266客户端,PC服务端

程序编写思路

1.包含的头文件

#include "osapi.h"
#include "user_interface.h"
#include "espconn.h"
#include "mem.h"

2.定义一个UDP客户端初始化函数

int ICACHE_FLASH_ATTR
 user_udpclient_init(uint32 remote_port)
 {
 1.设置广播模式:sta模式下UDP广播
 2.配置UDP客户端相关参数:udp_client_conn.type、udp_client_conn.proto.udp、本地端口、
 3.目标端口、目标IP地址
 4.注册发送和接受的回调函数
 5.建立UDP传输
 6.发送消息
 }

3.发送回调函数
4.接收回调函数
5.user_Init(void)中调用

程序

/*定义一个UDP客户端初始化函数*/
 int ICACHE_FLASH_ATTR
 user_udpclient_init(uint32 remote_port)
 {
	 //设置广播模式
	 wifi_set_broadcast_if(0x01);//在sta模式udp广播
	 //配置UDP客户端相关参数
	 udp_client_conn.type = ESPCONN_UDP;//设置类型为UDP协议
	 udp_client_conn.proto.udp = (esp_udp *) os_zalloc(sizeof(esp_udp));//分配空间

	 udp_client_conn.proto.udp ->local_port = espconn_port();//获取可用端口作为本地端口
	 udp_client_conn.proto.udp ->remote_port =remote_port;//目标端口

	 const char udp_remote_ip[4]={255,255,255,255};//目标IP地址
	 os_memcpy(udp_client_conn.proto.udp->remote_ip,udp_remote_ip,4);
	 //注册发送和接收的回调函数
	 espconn_regist_sentcb(&udp_client_conn, udp_client_sent_cb);
	 espconn_regist_recvcb(&udp_client_conn, udp_client_recv_cb);
	 //建立UDP传输
	 espconn_create(&udp_client_conn);
	 os_printf("UDP connect success!\n");
	 //发送消息
	 espconn_sent(&udp_client_conn, "HI", os_strlen("HI"));
 }

/*接收回调函数*/
 void ICACHE_FLASH_ATTR
 udp_client_recv_cb(void *arg, char *pdata, unsigned short len)
 {
 	os_printf("数据接收:\t%s\n",pdata);
 	}
 /*发送回调函数*/
 void ICACHE_FLASH_ATTR
 udp_client_sent_cb(void *arg)
 {
 	 os_printf("send success!\n");
 	}
 	

再调用UDP客户端初始化函数,服务端目标端口一般给8686

void ICACHE_FLASH_ATTR
user_init(void)
{
   wifi_set_opmode(STATION_MODE);
   user_udpclient_init(8686);
 }

结果图

程序中像PC端发送HI
像客户端目标主机发送“hello”,通过串口助手接收到“hello”
在这里插入图片描述
在这里插入图片描述

注意

刚开始调试一直不成功,发送不出去也接收不到
原因:电脑系统有网络的防火墙,导致一直连接不上,
解决:关掉防火墙,即可正常通信发送和接受。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值