当前位置:网站首页>ESP8266 STA_TCP_Client
ESP8266 STA_TCP_Client
2022-07-26 22:44:00 【Paradise_Violet】
目录
前言
8266在STA 模式下作为TCP_Client与TCP_Server建立TCP连接进行TCP通信,并且8266在之后也以这种方式接入物联网云平台
可以参考SDK API参考手册的WiFi接口级tcp/udp章节参考手册
user_init
执行完初始化后,将8266设置为sta模式,之后进行1s钟重复定时
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 = STA"); // 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_STA_Init_JX(); // ESP8266_STA初始化
OS_Timer_1_Init_JX(1000,1); // 1秒定时
}软件定时的回调函数
// 软件定时的回调函数
//=========================================================================================================
void ICACHE_FLASH_ATTR OS_Timer_1_cb(void)
{
u8 C_LED_Flash = 0; // LED闪烁计次
struct ip_info ST_ESP8266_IP; // ESP8266的IP信息
u8 ESP8266_IP[4]; // ESP8266的IP地址
// 成功接入WIFI【STA模式下,如果开启DHCP(默认),则ESO8266的IP地址由WIFI路由器自动分配】
//-------------------------------------------------------------------------------------
if( wifi_station_get_connect_status() == STATION_GOT_IP ) // 判断是否获取IP
{
wifi_get_ip_info(STATION_IF,&ST_ESP8266_IP); // 获取STA的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地址
//-----------------------------------------------------------------------------------------------
// 接入WIFI成功后,LED快闪3次
//----------------------------------------------------
for(; C_LED_Flash<=5; C_LED_Flash++)
{
GPIO_OUTPUT_SET(GPIO_ID_PIN(4),(C_LED_Flash%2));
delay_ms(100);
}
os_timer_disarm(&OS_Timer_1); // 关闭定时器
ESP8266_NetCon_Init_JX(); // 初始化网络连接(TCP通信)
}
}初始化网络连接(TCP通信)
// 初始化网络连接(TCP通信)
//=========================================================================================================
void ICACHE_FLASH_ATTR ESP8266_NetCon_Init_JX()
{
// 结构体赋值
//--------------------------------------------------------------------------
ST_NetCon.type = ESPCONN_TCP ; // 设置为TCP协议
ST_NetCon.proto.tcp = (esp_tcp *)os_zalloc(sizeof(esp_tcp)); // 开辟内存
// 此处需要设置目标IP/端口(ESP8266作为Client,需要预先知道Server的IP/端口)
//-------------------------------------------------------------------------
ST_NetCon.proto.tcp->local_port = 8266 ; // 设置本地端口
ST_NetCon.proto.tcp->remote_port = 8888; // 设置目标端口
ST_NetCon.proto.tcp->remote_ip[0] = 192; // 设置目标IP地址
ST_NetCon.proto.tcp->remote_ip[1] = 168;
ST_NetCon.proto.tcp->remote_ip[2] = 8;
ST_NetCon.proto.tcp->remote_ip[3] = 47;
//u8 remote_ip[4] = {192,168,8,47}; // 目标ip地址
//os_memcpy(ST_NetCon.proto.udp->remote_ip,remote_ip,4); // 拷贝内存
// 注册连接成功回调函数、异常断开回调函数
//--------------------------------------------------------------------------------------------------
espconn_regist_connectcb(&ST_NetCon, ESP8266_TCP_Connect_Cb_JX); // 注册TCP连接成功建立的回调函数
espconn_regist_reconcb(&ST_NetCon, ESP8266_TCP_Break_Cb_JX); // 注册TCP连接异常断开的回调函数
// 连接 TCP server
//----------------------------------------------------------
espconn_connect(&ST_NetCon); // 连接TCP-server
}成功接收网络数据的回调函数
// 成功接收网络数据的回调函数【参数1:网络传输结构体espconn指针、参数2:网络传输数据指针、参数3:数据长度】
//=========================================================================================================
void ICACHE_FLASH_ATTR ESP8266_WIFI_Recv_Cb_JX(void * arg, char * pdata, unsigned short len)
{
struct espconn * T_arg = arg; // 缓存网络连接结构体指针
// 根据数据设置LED的亮/灭
//-------------------------------------------------------------------------------
if(pdata[0] == 'k' || pdata[0] == 'K') LED_ON; // 首字母为'k'/'K',灯亮
else if(pdata[0] == 'g' || pdata[0] == 'G') LED_OFF; // 首字母为'g'/'G',灯灭
os_printf("\nESP8266_Receive_Data = %s\n",pdata); // 串口打印接收到的数据
/*
// 获取远端信息
//------------------------------------------------------------------------------------
remot_info * P_port_info = NULL; // 定义远端连接信息指针
if(espconn_get_connection_info(T_arg, &P_port_info, 0)==ESPCONN_OK) // 获取远端信息
{
T_arg->proto.tcp->remote_port = P_port_info->remote_port; // 获取对方端口号
T_arg->proto.tcp->remote_ip[0] = P_port_info->remote_ip[0]; // 获取对方的IP地址
T_arg->proto.tcp->remote_ip[1] = P_port_info->remote_ip[1];
T_arg->proto.tcp->remote_ip[2] = P_port_info->remote_ip[2];
T_arg->proto.tcp->remote_ip[3] = P_port_info->remote_ip[3];
//os_memcpy(T_arg->proto.tcp->remote_ip,P_port_info->remote_ip,4); // 内存拷贝
}
*/
//--------------------------------------------------------------------
OLED_ShowIP(24,6,T_arg->proto.tcp->remote_ip); // 显示远端主机IP地址
//--------------------------------------------------------------------
//【TCP通信是面向连接的,向远端主机回应时可直接使用T_arg结构体指针指向的IP信息】
//-----------------------------------------------------------------------------------------------
espconn_send(T_arg,"ESP8266_WIFI_Recv_OK",os_strlen("ESP8266_WIFI_Recv_OK")); // 向对方发送应答
}下载完成后打开串口
这里暂时先不要复位8266,因为8266在这里作为tcp_client,我们需要预先创建tcp_server,这里tcp_server的端口号设为8888,启动TCP_Server建立侦听,接下来复位8266

说明8266成功的设置为sta模式,并且作为tcp_client与tcp_server建立连接,进行了tcp通信。
边栏推荐
- Verilog过程赋值语句
- Unity CharacterController
- MySQL关闭连接事务自动提交的问题
- Li Hongyi machine learning (2017 Edition)_ P21: convolutional neural network CNN
- Come on: encourage college graduates to return home to start businesses and employment, and help rural revitalization
- 创建MDK工程
- 基本的DOS命令
- The MySQL character set is set to UTF-8, but the console still has the problem of Chinese garbled code
- Unity 截屏小工具
- Square root of X
猜你喜欢

Choose RTMP or RTC protocol for mobile live broadcast

做题笔记1

Come and help you understand the mobile Internet in a minute

物联网将彻底改变制造业,你准备好了吗?

非递归前中后序遍历二叉树

The basic concept of how Tencent cloud mlvb technology can highlight the siege in mobile live broadcasting services

DataNode Decommision

Li Hongyi machine learning (2017 Edition)_ P6-8: gradient descent

Unity 截屏小工具

Unity Line接入
随机推荐
Li Hongyi machine learning (2021 Edition)_ P7-9: training skills
In depth learning report (1)
Website log collection and analysis process
PlantCV中文文档
Unity Twitter登录接入
25 common questions in Flink interview (no answer)
玩客云刷机 5.9
最大公约数的求法
Spark ---- shuffle and partition of RDD
Li Hongyi machine learning (2017 Edition)_ P3-4: Regression
Jenkins--基础--02--安装
Come on: encourage college graduates to return home to start businesses and employment, and help rural revitalization
快来帮您一分钟了解移动互联网
Pit encountered by AssetBundle
3. Boxing champion Ali
物联网将彻底改变制造业,你准备好了吗?
What is the digital economy and how does it change the business model?
What is kubernetes?
#快捷键介绍
The dependency of POM file is invalid when idea imports external projects. Solution