TCPserver配置步骤:
1.将ESP8266配置为AP模式
参考day4
2.配置相关结构体
type中成员proto必须先申请内存再使用
TPCserver需配置参数;
type:设置为0x01(TCP模式)
proto.tcp->local_port:设置端口号(本机)
3.建立TCP接口
将上面创建结构体地址传入函数即可
4.设置超时时间
5.注册TCP成功连接回调函数
回调函数的形参必须与手册中相同,回调函数调用后,TCP通信建立
代码如下,实现客户端发送”K“亮灯,发送“G”关灯,串口显示连接主机信息
/*******************************结构体定义**********************************/
struct softap_config wif; //WIFI AP配置结构体
struct espconn TCP_s; //TCP配置结构体
/***********************************************************************/
os_timer_t tim1;
void ICACHE_FLASH_ATTR delay(u32 C_time) //毫秒延时函数
{ for(;C_time>0;C_time--)os_delay_us(1000);
}
void esprr(void *arg,char *pusrdata,unsigned short len)
{struct espconn *U_arg = arg;remot_info * P_port_info = NULL;char ch[32] = "接收成功";os_printf("接收数据:%s\n",pusrdata); //串口显示接收信息espconn_send(arg,ch,strlen(ch)); //向客户端发送应答if((*pusrdata == 'k')||((*pusrdata == 'K')))GPIO_OUTPUT_SET(GPIO_ID_PIN(4),0); //开灯else if((*pusrdata == 'g')||((*pusrdata == 'G')))GPIO_OUTPUT_SET(GPIO_ID_PIN(4),1); //关灯
}
/*TCP异常断开回调函数*/
void esprc(void *arg,sint8 err)
{os_printf("连接异常断开\n");
}
/*TCP成功连接回调函数*/
void TCP_ccf(void *arg)
{char i;char ip[4] = {0}; //保存IP地址struct station_info *out_ip; //连接远程主机信息struct station_info *p;os_printf("连接数:%d\n",wifi_softap_get_station_num()); //显示连接数out_ip = wifi_softap_get_station_info(); //获取接入设备IP,MAC地址p = out_ip;for(i = 0; i < wifi_softap_get_station_num(); i++) //循环显示连接主机信息{ip[0] = p->ip.addr; //IP地址拆分为点分式ip[1] = p->ip.addr >> 8;ip[2] = p->ip.addr >> 16;ip[3] = p->ip.addr >> 24;os_printf("远端主机%d:IP:%d.%d.%d.%d,MAC:%x:%x:%x:%x:%x:%x\n",i+1,ip[0],ip[1],ip[2],ip[3],p->bssid[0],p->bssid[1],p->bssid[2],p->bssid[3],p->bssid[4],p->bssid[5]);//串口显示连接主机IP,MACp = p->next.stqe_next; //偏移指针显示下一个节点信息(主机信息按链表存储)}espconn_regist_recvcb(arg,esprr); //注册成功连接回调函数espconn_regist_reconcb(arg,esprc); //注册异常断开回调函数
}
/*软定时回调函数*/
void tim1_f()
{
}
void ICACHE_FLASH_ATTR
user_init(void)
{
/**********************************结构体配置*********************************************/os_memset(&wif,0,sizeof(wif)); //清空结构体
/**/os_strcpy(wif.ssid,"ESP8266"); //设置WIFI名os_strcpy(wif.password,"123456789"); //设置WiFi密码wif.ssid_len = os_strlen("ESP8266"); //wifi名长度wif.channel = 1; //通道号1~13wif.authmode = AUTH_WPA2_PSK; //设置加密方式wif.ssid_hidden = 0; //不隐藏WIFIwif.max_connection = 4; //最大连接数(最大只能填4)wif.beacon_interval = 100; //默认100,范围100~60000ms
/**/TCP_s.type = ESPCONN_TCP; //设置为TCP通信方式TCP_s.proto.tcp = (esp_tcp *)os_zalloc(sizeof(esp_tcp));//申请TCP内存TCP_s.proto.tcp->local_port = 8266; //设置端口号/**********************************WIFI配置初始化*********************************************/wifi_set_opmode(0x02);//0x01: Station 模式 wifi接收模式//0x02: SoftAP 模式 wifi发射模式//0x03: Station+SoftAP 模式wifi_softap_set_config(&wif); //设置WiFi AP配置espconn_regist_connectcb(&TCP_s,&TCP_ccf); //注册连接成功回调函数espconn_accept(&TCP_s); //创建TCP接口espconn_regist_time(&TCP_s,300,0); //设置超时时间
/*****************************************************************************************///uart_init(115200,115200); //设置串口波特率delay(1000); //延时等待串口稳定os_printf("\n\r--------------------------------\n\r");os_printf("SDK version:%s\n",system_get_sdk_version());os_printf("\n\r--------------------------------\n\r");os_timer_disarm(&tim1); //关闭定时器os_timer_setfn(&tim1,tim1_f,NULL); //设置定时器回调函数os_timer_arm(&tim1,1000,1); //设置定时器定时时间并开启定时器//初始化LEDPIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U, FUNC_GPIO4); // GPIO4设为IO口GPIO_OUTPUT_SET(GPIO_ID_PIN(4),1); // IO4 = 1os_printf("\n\r初始化完成\n\r");}