ESP8266學習筆記6:ESP8266規範wifi鏈接操做

1、前言

我整理了從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

2、編程思路

1. 路由器參數的保存和查詢

在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 中的配置參數。

2. 已有路由器參數時的處理

沒有路由器參數時的處理很是easy,直接smartconfig。

而當有路由器參數時,還需要作些處理。
個人思路是。以當前的參數去搜索下環境中是否存在這個AP。沒有的話再啓動smartconfig。有的話就直接connect。

wifi_station_scan
功能:獲取AP的信息

3、代碼操做

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的鏈接狀態,處理不一樣的錯誤狀態。

我就不展開了。

4、測試效果

首次啓動時,進行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

5、總結

that’s all.


相關文章
相關標籤/搜索