ESP8266學習筆記6:ESP8266規範wifi連線操作
一、前言 我整理了從2015年至今關於ESP8266的學習筆記,梳理出來了開發環境、基礎功能、進階學習三大部分,方便自己和他人。可點此檢視,歡迎交流。
之前在筆記4《ESP8266的SmartConfig》http://blog.csdn.net/iotisan/article/details/54849410中,做了smartconfig例程的測試。這個例程是由於DEMO演示的,離商用還有段距離。
幾周前,有網友就問我esp8266重新上電無法自動連線之前配置的路由器。這確實是目前DEMO最缺的一個功能,當首次將裝置接入wifi之後,裝置應該儲存住SSID和PWD,在後續上電時能自己去連線wifi,而不是例程中每次上電都來一次。
當時忙別的事情沒做,今天抽時間做了下處理。其實處理還挺簡單,寫篇筆記總結下,規範wifi連線操作。
本文作者twowinter,轉載請註明作者:http://blog.csdn.net/iotisan/
二、程式設計思路 1. 路由器引數的儲存和查詢 在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 中的配置引數。 2. 已有路由器引數時的處理 沒有路由器引數時的處理很簡單,直接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的連線狀態,處理不同的錯誤狀態。我就不展開了。