boboP 发表于 2016-7-13 14:32:07

ESP8266学习笔记6:ESP8266规范wifi连接操作(转)

版权**:本文为博主原创文章,未经博主允许不得转载。

目录(?)[+]

一、前言之前在笔记4《ESP8266的SmartConfig》http://blog.csdn.net/sadshen/article/details/46883245中,做了smartconfig例程的测试。这个例程是由于DEMO演示的,离商用还有段距离。几周前,有网友就问我esp8266重新上电无法自动连接之前配置的路由器。这确实是目前DEMO最缺的一个功能,当首次将设备接入wifi之后,设备应该保存住SSID和PWD,在后续上电时能自己去连接wifi,而不是例程中每次上电都来一次。当时忙别的事情没做,今天抽时间做了下处理。其实处理还挺简单,写篇笔记总结下,规范wifi连接操作。二、编程思路路由器参数的保存和查询在DEMO中,设置完STATION模式后,就直接smartconfig。我们应当在smartconfig之前做一个参数判断,判断是否有保存的路由器信息。有保存,就连接路由器。没保存,才smartconfig。void user_init(void){    os_printf("SDK version:%s\n", system_get_sdk_version());    wifi_set_opmode(STATION_MODE);    smartconfig_start(smartconfig_done);}关于这个路由器参数存储,查了下官方手册,发现SDK还是很贴心的,已经有API可以直接保存和查询了,而不需要我们再去做flash参数存储。两个关键API摆出来。保存wifi_station_set_config功能:设置 WiFi station 接口的配置参数,并保存到 flash查询wifi_station_get_config_default功能:查询 WiFi station 接口保存在 flash 中的配置参数。已有路由器参数时的处理没有路由器参数时的处理很简单,直接smartconfig。而当有路由器参数时,还需要做些处理。
我的思路是,以当前的参数去搜索下环境中是否存在这个AP。没有的话再启动smartconfig;有的话就直接connect。wifi_station_scan功能:获取AP的信息三、代码操作1.初始化时判断FLASH中是否存有有效的路由器参数。void user_init(void){    wifi_set_opmode(STATION_MODE);    wifi_station_get_config_default(&s_staconf);    if (os_strlen(s_staconf.ssid) != 0) {      os_printf("user_scan\n");      system_init_done_cb(user_scan);    } else {      os_printf("smartcfg\n");      smartconfig_start(smartconfig_done);    }}2.已存有路由器参数,去搜索看看AP当前是否存在。void ICACHE_FLASH_ATTRuser_scan(void){   struct scan_config config;   os_memset(&config, 0, sizeof(config));   config.ssid = s_staconf.ssid;   wifi_station_scan(&config, user_scan_done);}3.之后的操作就看个人处理了。规范的处理是要开启一个线程,周期性检测AP的连接状态,处理不同的错误状态。我就不展开了。四、测试效果首次启动时,进行SmartCfg。<Time:2015-08-21 10:52:37:703 Len:0001>:<Time:2015-08-21 10:52:52:687 Len:0315>:rl<Time:2015-08-21 10:52:52:906 Len:0078>:dsdSSDK version:1.2.0smartcfgmode : sta(18:fe:34:f8:8f:cf)add if0f 0, <Time:2015-08-21 10:52:55:000 Len:0015>:scandonef 0, <Time:2015-08-21 10:52:57:187 Len:0034>:scandoneSC_STATUS_FIND_CHANNEL<Time:2015-08-21 10:53:08:296 Len:0106>:TYPE: ESPTOUCH V2.4T|PHONE MAC:T|AP MAC   :SC_STATUS_GETTING_SSID_PSWDSC_TYPE:SC_TYPE_ESPTOUCH<Time:2015-08-21 10:53:11:250 Len:0026>:T|SCAN SSID: Xiaomi_5BAB<Time:2015-08-21 10:53:11:578 Len:0086>:T|pswd: 1234567890T|ssid: Xiaomi_5BABT|bssid: 8c be be 28 5b ac SC_STATUS_LINK<Time:2015-08-21 10:53:11:656 Len:0008>:f -240, <Time:2015-08-21 10:53:13:906 Len:0068>:scandoneno Xiaomi_5BAB found, reconnect after 1sreconnectf 0, <Time:2015-08-21 10:53:16:031 Len:0010>:scandone<Time:2015-08-21 10:53:17:031 Len:0109>:add 0aid 4pm open phy_2,type:2 0 0cnt connected with Xiaomi_5BAB, channel 3dhcp client start...<Time:2015-08-21 10:53:19:562 Len:0054>:ip:192.168.31.232,mask:255.255.255.0,gw:192.168.31.1<Time:2015-08-21 10:53:22:515 Len:0047>:SC_STATUS_LINK_OVERPhone ip: 192.168.31.199第二次上电,自动获取AP进行连接。<Time:2015-08-21 10:53:52:078 Len:0001>:<Time:2015-08-21 10:53:58:171 Len:0315>:l<Time:2015-08-21 10:53:58:390 Len:0094>:d;lSSDK version:1.2.0user_scanmode : sta(18:fe:34:f8:8f:cf)add if0f 0, scandonef 0, <Time:2015-08-21 10:54:00:531 Len:0063>:scandone(4,"Xiaomi_5BAB",-45,"8c:be:be:28:5b:ac",3)f -240, <Time:2015-08-21 10:54:00:578 Len:0026>:reconnectscandonef 0, <Time:2015-08-21 10:54:02:703 Len:0010>:scandone<Time:2015-08-21 10:54:03:656 Len:0109>:add 0aid 4pm open phy_2,type:2 0 0cnt connected with Xiaomi_5BAB, channel 3dhcp client start...<Time:2015-08-21 10:54:06:421 Len:0054>:ip:192.168.31.232,mask:255.255.255.0,gw:192.168.31.1五、总结that’s all.


页: [1]
查看完整版本: ESP8266学习笔记6:ESP8266规范wifi连接操作(转)