要開始IoT項目的第一步是什么?當然不是硬件,而是硬件與硬件的連接!即使有各種各樣的通信協議沒有好的連接方式絕對不行。那外設上沒有的屏幕,沒有鍵盤怎末輸入密碼怎末選擇網絡?對,這就是WIFI模塊最重要解決的問題。
為了解決這個連接問題樂鑫在其SDK中加入了SmartConfig功能,所謂的smartconfig就是手機APP端發送包含WIFI 用戶名 WIFI密碼的 UDP 廣播包或者組播包,智能終端的WIFI芯片可以接收到該UDP包,只要知道UDP的組織形式,就可以通過接收到的UDP包解密 出WIFI 用戶名 密碼,然后智能硬件 配置受到的WIFI 用戶名 密碼到指定的WIFI AP 上。
如果將其原理用簡潔點的步驟來解說應該分為以下幾步:
- ESP8266 端調用
WiFi.beginSmartConfig()
等待手機端發出的用戶名與密碼。 - 手機端填寫當前網絡的密碼發送到UDP端口。
- ESP8266 自動收到連接信息並調用
WiFi.smartConfigDone()
退出等待。
就這么簡單!
ESP8266 的固件代碼
Arduino core for ESP8266 的代碼示例:
#include <ESP8266WiFi.h>;
void setup() {
Serial.begin(115200);
delay(10);
// 必須采用 AP 與 Station 兼容模式
WiFi.mode(WIFI_AP_STA);
delay(500);
// 等待配網
WiFi.beginSmartConfig();
// 收到配網信息后ESP8266將自動連接,WiFi.status 狀態就會返回:已連接
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
// 完成連接,退出配網等待。
Serial.println(WiFi.smartConfigDone());
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
int value = 0;
void loop() {
}
如果使用NodeMCU Lua 的話代碼會更簡單一些:
wifi.setmode(wifi.STATION)
wifi.startsmart(0,
function(ssid, password)
print(string.format("Success. SSID:%s ; PASSWORD:%s", ssid, password))
end )
手機端
將以上的代碼寫入到ESP8266之后,就要在安卓或者iOS上安裝一個由樂鑫提供的ESP-Touch的App將當前WIFI中的用戶名和密碼告知ESP8266以完成SmartConfig連接。
小結
本文的配網只是用簡單代碼對原理進行解釋,而至於要應用到的實際開發時則需要對App端進行開發。以后還會寫一篇在App端的配網方式介紹。
相關資源
- nodemcu-devkit NodeMCU的模塊說明
- SmartConfig ESP8266 for NodeMCU and AT-commands 內附視頻演示
- Using Bonjour in Swift