完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
使用官方例程中关于SmartConfig的代码,每次上电都要配置,不能保存,自己修改了一下。结果只能保存一个路由器,更换路由器后不能smartconfig成功。
void ICACHE_FLASH_ATTR wifi_event_handler_cb(System_Event_t * event) { uint8 loop = 0; static uint8 status = EVENT_MAX; if(event == NULL) { return; } switch(event->event) { case EVENT_SOFTAPMODE_STACONNECTED: os_printf("EVENT_SOFTAPMODE_STACONNECTEDrn"); // station connected break; case EVENT_SOFTAPMODE_STADISCONNECTED: os_printf("EVENT_SOFTAPMODE_STADISCONNECTEDrn"); // station disconnected break; default: break; } } void ICACHE_FLASH_ATTR smartconfig_done(sc_status status, void *pdata) { switch(status) { case SC_STATUS_WAIT: os_printf("SC_STATUS_WAITn"); break; case SC_STATUS_FIND_CHANNEL: os_printf("SC_STATUS_FIND_CHANNELn"); break; case SC_STATUS_GETTING_SSID_PSWD: os_printf("SC_STATUS_GETTING_SSID_PSWDn"); sc_type *type = pdata; break; case SC_STATUS_LINK: os_printf("SC_STATUS_LINKn"); wifi_station_disconnect(); wifi_station_connect(); struct station_config *sta_conf = pdata; os_memcpy(s_staconf.ssid,(*sta_conf).ssid,os_strlen((*sta_conf).ssid)); wifi_station_set_config(&s_staconf); break; case SC_STATUS_LINK_OVER: os_printf("SC_STATUS_LINK_OVERn"); uint8 phone_ip[4] = {0}; os_memcpy(phone_ip, (uint8*)pdata, 4); os_printf("Phone ip: %d.%d.%d.%dn",phone_ip[0],phone_ip[1],phone_ip[2],phone_ip[3]); smartconfig_stop(); break; } } /****************************************************************************** * FunctionName : scan_done * Description : scan done callback * Parameters : arg: contain the aps information; status: scan over status * Returns : none *******************************************************************************/ void ICACHE_FLASH_ATTR scan_done(void *arg, STATUS status) { uint8 ssid[33]; char temp[128]; if (status == OK) { struct bss_info *bss_link = (struct bss_info *)arg; bss_link = bss_link->next.stqe_next;//ignore the first one , it's invalid. while (bss_link != NULL) { os_memset(ssid, 0, 33); if (os_strlen(bss_link->ssid) <= 32) { os_memcpy(ssid, bss_link->ssid, os_strlen(bss_link->ssid)); } else { os_memcpy(ssid, bss_link->ssid, 32); } os_printf("(%d,"%s",%d,""MACSTR"",%d)rn", bss_link->authmode, ssid, bss_link->rssi, MAC2STR(bss_link->bssid),bss_link->channel); bss_link = bss_link->next.stqe_next; } } else { os_printf("scan fail !!!rn"); } } void ICACHE_FLASH_ATTR user_scan(void) { struct scan_config config; os_memset(&config, 0, sizeof(config)); config.ssid = s_staconf.ssid; wifi_station_scan(&config,scan_done); } void user_init(void) { uart_init(115200); wifi_set_opmode(STATION_MODE); wifi_station_get_config_default(&s_staconf); if(os_strlen(s_staconf.ssid) != 0) { os_printf("user_scanrn"); system_init_done_cb(user_scan); } else { os_printf("smart_cfgrn"); smartconfig_set_type(SC_TYPE_ESPTOUCH); //SC_TYPE_ESPTOUCH,SC_TYPE_AIRKISS,SC_TYPE_ESPTOUCH_AIRKISS smartconfig_start(smartconfig_done); //wifi_station_set_config(&s_staconf); } wifi_set_event_handler_cb(wifi_event_handler_cb); // monitor wifi state system_os_task(trans_task, TRANS_TASK_PROI, trans_Queue, TRANS_QUEUE_LEN); // create a task that processes transparently transmitting data // create tcp server pTcpServer = (struct espconn *)os_zalloc((uint32)sizeof(struct espconn)); if (pTcpServer == NULL) { os_printf("TcpServer Failurern"); return; } pTcpServer->type = ESPCONN_TCP; pTcpServer->state = ESPCONN_NONE; pTcpServer->proto.tcp = (esp_tcp *)os_zalloc((uint32)sizeof(esp_tcp)); pTcpServer->proto.tcp->local_port = 12000; // server port espconn_regist_connectcb(pTcpServer, trans_server_listen); espconn_accept(pTcpServer); espconn_regist_time(pTcpServer, 180, 0); os_timer_disarm(&trans_interval_timer); os_timer_setfn(&trans_interval_timer, (os_timer_func_t *)transmit_data, NULL); } |
|
相关推荐
1个回答
|
|
以下是一些建议和解决方案:
1. 确保您的ESP8266固件是最新的。有时,固件更新可能包含修复SmartConfig问题的补丁。 2. 在更换路由器后,确保您的ESP8266设备已经正确地连接到了新的路由器。检查ESP8266的输出,看看它是否能够检测到新的路由器。 3. 在您的代码中,确保您已经正确地实现了SmartConfig功能。以下是一个简单的SmartConfig实现示例: ```c #include "smartconfig.h" void ICACHE_FLASH_ATTR user_init(void) { // 初始化SmartConfig smartconfig_start(); } void ICACHE_FLASH_ATTR smartconfig_done(sc_status status, void *pdata) { if (status == SC_STATUS_LINK) { struct station_config *sta_conf = (struct station_config *) pdata; wifi_station_set_config(sta_conf); wifi_station_connect(); } } ``` 4. 如果您的ESP8266设备在更换路由器后仍然无法成功进行SmartConfig,您可以尝试使用其他配置方法,如使用AT指令进行配置或通过Web服务器进行配置。 5. 确保您的ESP8266设备在更换路由器后能够保存新的配置。这可能需要您在代码中实现配置保存和加载的功能。您可以使用EEPROM或SPI Flash来存储配置信息。 |
|
|
|
只有小组成员才能发言,加入小组>>
408浏览 6评论
340浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
324浏览 5评论
324浏览 4评论
311浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-17 15:48 , Processed in 0.760831 second(s), Total 81, Slave 64 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号