ESP8266学习【6】——AP模式

    技术2023-11-16  100

    1、初始化ESP8266_AP模式 

    void ICACHE_FLASH_ATTR ESP8266_AP_Init() { struct softap_config AP_Config; // AP参数结构体 wifi_set_opmode(0x02); // 设置为AP模式,并保存到Flash // 结构体赋值(注意:【服务集标识符/密码】须设为字符串形式) //------------------------------------------------------------------------------------- os_memset(&AP_Config, 0, sizeof(struct softap_config)); // AP参数结构体 = 0 os_strcpy(AP_Config.ssid,ESP8266_AP_SSID); // 设置SSID(将字符串复制到ssid数组) os_strcpy(AP_Config.password,ESP8266_AP_PASS); // 设置密码(将字符串复制到password数组) AP_Config.ssid_len=os_strlen(ESP8266_AP_SSID); // 设置ssid长度(和SSID的长度一致) AP_Config.channel=1; // 通道号1~13 AP_Config.authmode=AUTH_WPA2_PSK; // 设置加密模式 AP_Config.ssid_hidden=0; // 不隐藏SSID AP_Config.max_connection=4; // 最大连接数 AP_Config.beacon_interval=100; // 信标间隔时槽100~60000 ms wifi_softap_set_config(&AP_Config); // 设置soft-AP,并保存到Flash }

     

    2、 AP模式信息获取:

    switch(wifi_get_opmode()) // 获取工作模式 { case 0x01: os_printf("\nESP8266_Mode = Station\n"); break; case 0x02: os_printf("\nESP8266_Mode = SoftAP\n"); break; case 0x03: os_printf("\nESP8266_Mode = Station+SoftAP\n"); break; } // 获取ESP8266_AP模式下的IP地址 //【AP模式下,如果开启DHCP(默认),并且未设置IP相关参数,ESP8266的IP地址=192.168.4.1】 wifi_get_ip_info(SOFTAP_IF,&ST_ESP8266_IP); // 参数2:IP信息结构体指针 // ESP8266_AP_IP.ip.addr==32位二进制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]); // 查询并打印接入此WIFI的设备数量 os_printf("Number of devices connected to this WIFI = %d\n",wifi_softap_get_station_num());

     

    3、初始化网络连接(TCP通信)

    void ICACHE_FLASH_ATTR ESP8266_NetCon_Init() { // 结构体赋值 //-------------------------------------------------------------------------- ST_NetCon.type = ESPCONN_TCP ; // 通信协议:TCP ST_NetCon.proto.tcp = (esp_tcp *)os_zalloc(sizeof(esp_tcp)); // 申请内存 //ESP8266作为Server时,不需要设置Client的IP/端口 ST_NetCon.proto.tcp->local_port = 8800 ; // 设置本地端口 /* 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] = 4; ST_NetCon.proto.tcp->remote_ip[3] = 2; */ // 注册连接成功回调函数、异常断开回调函数 espconn_regist_connectcb(&ST_NetCon, ESP8266_TCP_Connect_Cb); // 注册TCP连接成功建立的回调函数 espconn_regist_reconcb(&ST_NetCon, ESP8266_TCP_Break_Cb); // 注册TCP连接异常断开的回调函数 espconn_accept(&ST_NetCon); // 创建TCP_server,建立侦听 // 请在 espconn_accept 之后,连接未建立之前,调用本接口 // 如果超时时间设置为 0,ESP8266_TCP_server将始终不会断开已经不与它通信的TCP_client,不建议这样使用。 //作为 TCP Client 时不需要 espconn_regist_time(&ST_NetCon, 300, 0); //设置超时断开时间。单位=秒,最大值=7200 }

     

    4、TCP连接建立成功 or 失败

    //TCP连接建立成功的回调函数  void ICACHE_FLASH_ATTR ESP8266_TCP_Connect_Cb_JX(void *arg) { espconn_regist_sentcb((struct espconn *)arg, ESP8266_WIFI_Send_Cb); // 注册网络数据发送成功的回调函数 espconn_regist_recvcb((struct espconn *)arg, ESP8266_WIFI_Recv_Cb); // 注册网络数据接收成功的回调函数 espconn_regist_disconcb((struct espconn *)arg,ESP8266_TCP_Disconnect_Cb);// 注册成功断开TCP连接的回调函数 os_printf("\n--------------- ESP8266_TCP_Connect_OK ---------------\n"); } //TCP连接异常断开时的回调函数 void ICACHE_FLASH_ATTR ESP8266_TCP_Break_Cb_JX(void *arg,sint8 err) {     os_printf("\nESP8266_TCP_Break\n"); }

     

    5、数据发送 or 接收

    // 成功发送网络数据的回调函数 void ICACHE_FLASH_ATTR ESP8266_WIFI_Send_Cb_JX(void *arg) { os_printf("\nESP8266_WIFI_Send_OK\n"); } // 成功接收网络数据的回调函数【参数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; // 缓存网络连接结构体指针 os_printf("\nESP8266_Receive_Data = %s\n",pdata); // 串口打印接收到的数据 //【TCP通信是面向连接的,向远端主机回应时可直接使用T_arg结构体指针指向的IP信息】 espconn_send(T_arg,"ESP8266_WIFI_Recv_OK",os_strlen("ESP8266_WIFI_Recv_OK")); // 向对方发送应答 } // TCP连接断开成功的回调函数 void ICACHE_FLASH_ATTR ESP8266_TCP_Disconnect_Cb_JX(void *arg) { os_printf("\nESP8266_TCP_Disconnect_OK\n"); }

     

    Processed: 0.013, SQL: 9