我整理了从2015年至今关于ESP8266的学习笔记,梳理出来了开发环境、基础功能、进阶学习三大部分。方便本身和他人。可点此查看,欢迎交流。编程
以前在笔记4《ESP8266的SmartConfig》http://blog.csdn.net/iotisan/article/details/54849410中,作了smartconfig例程的測试。markdown
这个例程是由于DEMO演示的,离商用还有段距离。post
几周前,有网友就问我esp8266又一次上电没法本身主动链接以前配置的路由器。这确实是眼下DEMO最缺的一个功能。当首次将设备接入wifi以后,设备应该保存住SSID和PWD,在兴许上电时能本身去链接wifi,而不是例程中每次上电都来一次。学习
当时忙别的事情没作。今天抽时间作了下处理。.net
事实上处理还挺简单,写篇笔记总结下,规范wifi链接操做。线程
本文做者twowinter,转载请注明做者:http://blog.csdn.net/iotisan/code
在DEMO中,设置完STATION模式后,就直接smartconfig。咱们应当在smartconfig以前作一个參数推断,推断是否有保存的路由器信息。有保存,就链接路由器。没保存,才smartconfig。blog
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摆出来。ip
保存
wifi_station_set_config 功能:设置 WiFi station 接口的配置參数。并保存到 flash
查询
wifi_station_get_config_default 功能:查询 WiFi station 接口保存在 flash 中的配置參数。
没有路由器參数时的处理很是easy,直接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_ATTR user_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.0 smartcfg mode : sta(18:fe:34:f8:8f:cf) add if0 f 0, <Time:2015-08-21 10:52:55:000 Len:0015>:scandone f 0, <Time:2015-08-21 10:52:57:187 Len:0034>:scandone SC_STATUS_FIND_CHANNEL <Time:2015-08-21 10:53:08:296 Len:0106>: TYPE: ESPTOUCH V2.4 T|PHONE MAC: T|AP MAC : SC_STATUS_GETTING_SSID_PSWD SC_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: 1234567890 T|ssid: Xiaomi_5BAB T|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>:scandone no Xiaomi_5BAB found, reconnect after 1s reconnect f 0, <Time:2015-08-21 10:53:16:031 Len:0010>:scandone <Time:2015-08-21 10:53:17:031 Len:0109>:add 0 aid 4 pm open phy_2,type:2 0 0 cnt connected with Xiaomi_5BAB, channel 3 dhcp 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_OVER Phone 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.0 user_scan mode : sta(18:fe:34:f8:8f:cf) add if0 f 0, scandone f 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>:reconnect scandone f 0, <Time:2015-08-21 10:54:02:703 Len:0010>:scandone <Time:2015-08-21 10:54:03:656 Len:0109>:add 0 aid 4 pm open phy_2,type:2 0 0 cnt connected with Xiaomi_5BAB, channel 3 dhcp 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.