当前位置:网站首页>ESP8266 AP_UDP_Client
ESP8266 AP_UDP_Client
2022-07-26 22:44:00 【Paradise_Violet】
目录
在定时回调函数当中,查询AP模式下ESP8266的IP地址,成功获取到IP地址,则关闭定时器,初始化网络连接(UDP通信)
此处需要设置目标IP/端口(ESP8266作为Client,需要预先知道Server的IP/端口)
前言
我们将8266在ap模式加创建udp通信,并且8266在逻辑上作为客户端,网络调试助手作为服务器
void ICACHE_FLASH_ATTR user_init(void)
{
uart_init(115200,115200); // 初始化串口波特率
os_delay_us(10000); // 等待串口稳定
os_printf("\r\n=================================================\r\n");
os_printf("\t Project:\t%s\r\n", ProjectName);
os_printf("\t SDK version:\t%s", system_get_sdk_version());
os_printf("\r\n=================================================\r\n");
// OLED显示初始化
//--------------------------------------------------------
OLED_Init(); // OLED初始化
OLED_ShowString(0,0,"ESP8266 = AP"); // ESP8266模式
OLED_ShowString(0,2,"IP:"); // ESP8266_IP地址
OLED_ShowString(0,4,"Remote = STA"); // 远端主机模式
OLED_ShowString(0,6,"IP:"); // 远端主机IP地址
//--------------------------------------------------------
LED_Init_JX(); // LED初始化
ESP8266_AP_Init_JX(); // 初始化ESP8266_AP模式
OS_Timer_1_Init_JX(30000,0); // 30秒定时(一次)
}OS_Timer_1_Init_JX(30000,0); // 30秒定时(一次)
定时30s是为了给网络调试助手创建udp通信,并且为设置服务器预留时间
在定时回调函数当中,查询AP模式下ESP8266的IP地址,成功获取到IP地址,则关闭定时器,初始化网络连接(UDP通信)
void ICACHE_FLASH_ATTR OS_Timer_1_cb(void)
{
struct ip_info ST_ESP8266_IP; // IP信息结构体
u8 ESP8266_IP[4]; // 点分十进制形式保存IP
wifi_get_ip_info(SOFTAP_IF,&ST_ESP8266_IP); // 查询AP模式下ESP8266的IP地址
if(ST_ESP8266_IP.ip.addr != 0) // ESP8266成功获取到IP地址
{
ESP8266_IP[0] = ST_ESP8266_IP.ip.addr; // 点分十进制IP的第一个数 <==> addr低八位
ESP8266_IP[1] = ST_ESP8266_IP.ip.addr>>8; // 点分十进制IP的第二个数 <==> addr次低八位
ESP8266_IP[2] = ST_ESP8266_IP.ip.addr>>16; // 点分十进制IP的第三个数 <==> addr次高八位
ESP8266_IP[3] = ST_ESP8266_IP.ip.addr>>24; // 点分十进制IP的第四个数 <==> addr高八位
// 显示ESP8266的IP地址
//-----------------------------------------------------------------------------------------------
os_printf("ESP8266_IP = %d.%d.%d.%d\n",ESP8266_IP[0],ESP8266_IP[1],ESP8266_IP[2],ESP8266_IP[3]);
OLED_ShowIP(24,2,ESP8266_IP); // OLED显示ESP8266的IP地址
//-----------------------------------------------------------------------------------------------
os_timer_disarm(&OS_Timer_1); // 关闭定时器
ESP8266_NetCon_Init_JX(); // 初始化网络连接(UDP通信)
}
}此处需要设置目标IP/端口(ESP8266作为Client,需要预先知道Server的IP/端口)
// 初始化网络连接(UDP通信)
//=============================================================================================================
void ICACHE_FLASH_ATTR ESP8266_NetCon_Init_JX()
{
// 结构体赋值
//--------------------------------------------------------------------------
ST_NetCon.type = ESPCONN_UDP; // 设置通信协议为UDP
ST_NetCon.proto.udp = (esp_udp *)os_zalloc(sizeof(esp_udp)); // 开辟内存
// 此处需要设置目标IP/端口(ESP8266作为Client,需要预先知道Server的IP/端口)
//--------------------------------------------------------------------------
ST_NetCon.proto.udp->local_port = 8266 ; // 设置本地端口
ST_NetCon.proto.udp->remote_port = 8888; // 设置目标端口
ST_NetCon.proto.udp->remote_ip[0] = 192; // 设置目标IP地址
ST_NetCon.proto.udp->remote_ip[1] = 168;
ST_NetCon.proto.udp->remote_ip[2] = 4;
ST_NetCon.proto.udp->remote_ip[3] = 2;
//u8 remote_ip[4] = {192,168,4,2}; // 目标IP地址
//os_memcpy(ST_NetCon.proto.udp->remote_ip,remote_ip,4); // 拷贝内存
espconn_regist_sentcb(&ST_NetCon,ESP8266_WIFI_Send_Cb_JX); // 注册网络数据发送成功的回调函数
espconn_regist_recvcb(&ST_NetCon,ESP8266_WIFI_Recv_Cb_JX); // 注册网络数据接收成功的回调函数
espconn_create(&ST_NetCon); // 初始化UDP通信
espconn_send(&ST_NetCon,"Hello,I am ESP8266",os_strlen("Hello,I am ESP8266")); // 主动向Server发起通信
}也就是说当我们8266作为客户端的时候,需要预先赋值服务器的ip地址和端口号,才能主动的向服务器发送通信
边栏推荐
猜你喜欢

ESP8266 AP_UDP_Server
![数学建模简介-从现实对象到数学建模[2]](/img/b5/595a4e9a9a59ab57f541d3e21fba49.jpg)
数学建模简介-从现实对象到数学建模[2]

Flinksql window triggered in advance

Unity CharacterController

5.xshell连接服务器拒绝访问,密码错误

AssetBundle遇到的坑

Unity screenshot widget

下一代互联网:视联网

Come on: encourage college graduates to return home to start businesses and employment, and help rural revitalization

Jenkins--基础--04--安装中文插件
随机推荐
随着5G越来越普及,我们的生活会受到哪些积极的影响
c语言实现三子棋游戏
c语言实现动态顺序表的增删查改
ESP8266-----SNTP获取网络时间
Verilog过程赋值语句
深度学习笔记
Wu Enda's in-depth learning series teaching video learning notes (I) -- logistic regression function for binary classification
Li Kou brushes 300 record posts
if 与 else if 的区别
Unity 截屏小工具
Doris or starrocks JMeter pressure measurement
Unity a user-friendly UI grayscale shader
Deep understanding of pod objects: basic management
Six ways for the Internet of things to improve our lives
无重复字符的最长子串
【无标题】
Create MDK project
6. The world cup is coming
4. European Champions League
4. 欧洲冠军联赛