1. 程式人生 > >ESP8266學習筆記6:ESP8266規範wifi連線操作

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的連線狀態,處理不同的錯誤狀態。我就不展開了。