智能家居設備正變得越來越普遍,這要歸功于遠程控制的可能性和配置的便利性。燈、智能插頭、恒溫器和氣象站只是智能家居設備中最常見的一些例子,如今主要配備 WiFi 通信接口。任何有機會使用眾多智能 WiFi 燈或燈泡之一的人都知道將設備連接到 WiFi 網絡并遠程控制其操作是多么快速和簡單。我們如何在小型ESP8266設備上重現這種行為,將其變成智能家居設備?
介紹
在本文中,將解釋嵌入式設備如何在不知道其憑據的情況下連接到 WiFi 網絡(通常是安全的)。由于智能設備沒有任何鍵盤或觸摸屏顯示器,用戶無法輸入 WiFi SSID 和密碼。那么,商業設備如何在無需上傳新固件的情況下連接到 WiFi 網絡呢?
德州儀器 (Texas Instruments) 為簡化嵌入式設備與家庭 WiFi 網絡的連接而開發的SmartConfig技術解釋了這個明顯的謎團:此操作只需一次,并且由一個簡單的步驟組成。在本文的后續部分,我們將介紹在 Espressif Systems 開發的ESP8266系列設備上激活 SmartConfig 功能的必要程序,這是一款提供 WiFi 接口并適合支持智能家居應用的廉價板。
盡管德州儀器尚未發布任何真正的 SmartConfig 公有文檔,但其操作原理相對簡單。連接到家庭 WiFi 網絡的主機設備(智能手機、平板電腦或 PC)向虛構的接收者發送 UDP 數據包,其中包含用于訪問 WiFi 網絡的 SSID 和密碼。仍未連接的智能設備正在偵聽和監視網絡上傳輸的數據包的流量。
當客戶端識別到主機發送的數據包時,它會對其進行解碼,提取用于訪問 WiFi 網絡的憑據,并將它們存儲在自己的非易失性存儲器中,以便在每次上電時重復使用。從這一刻起,智能設備將能夠連接到 WiFi 網絡,而無需任何外部干預。如果設備隨后將被移動到另一個 WiFi 網絡的范圍內(例如在另一個房子中),則應重復相同的過程以獲取新的憑證。
圖 1所示的移動設備配備了一個特殊的應用程序,該應用程序連接到家庭 WiFi 網絡,將一系列 UDP 數據包傳輸到 WiFi 接入點 (AP)。在這些數據包的長度字段中,應用程序對 WiFi 網絡的 SSID 和密碼進行編碼。在智能設備上啟用 SmartConfig 功能時,對長度字段的內容進行解碼以提取訪問網絡的憑據。
通過網絡發送的數據包的結構符合IEEE 802.3 標準。具體而言,數據鏈路頭由 14 個字節組成:6 個字節用于目標地址,6 個字節用于源地址,2 個字節指定數據字段的長度。之所以選擇在 2 字節長度字段中輸入有關 WiFi 網絡的信息的原因非常簡單:即使在接入點上激活了安全連接,該字段也不會被編碼。
SmartConfig 功能由用于通過Arduino IDE開發草圖的ESP8266 WiFi 庫完全集成和支持。API 接口非常簡單:在“站”模式下配置 WiFi 收發器后,草圖中唯一要使用的功能如下:
? bool beginSmartConfig() – 在設備上啟用 SmartConfig 功能。如果成功,則返回 true,否則返回 false;
? bool smartConfigdone() – 它是更相關的函數:當設備已通過Sm??artConfig 協議正確配置并已建立WiFi 連接時,它返回true;
? bool stopSmartConfig() – 此函數禁用設備上的SmartConfig 功能。此功能的使用是可選的,在我們的草圖中根本不會使用。
草圖
所有處理都在setup函數內部執行。最初,WiFi 連接配置為站模式,并初始化串行線路波特率。隨后,如果設備在 10 秒超時后未能使用其非易失性存儲器中包含的信息連接到 WiFi 網絡,則調用beginSmartConfig函數以啟用此功能。然后,草圖進入一個循環,無限期地等待應用程序發送的 UDP 數據包的到達和隨后的解碼。
發生這種情況時,smartConfigDone函數返回一個非零值,草圖退出循環并在串行線路上顯示一條消息,其中包含用于連接到 WiFi 網絡的憑據和 DHCP 服務器分配的 IP 地址。后續連接將使用相同的憑據。除了在串口線上發送的調試信息外,Sketch 還使用板載 LED 顯示程序所在的階段,根據以下方案:
? LED 亮起:設備嘗試連接到 WiFi 網絡的初始階段;
? LED 閃爍:設備正在等待主機 UDP 數據包;
? LED 熄滅:設備已連接到 WiFi 網絡。
#include
#include
void setup()
{
int retry=0, config_done=0;
// 在站模式下配置 WiFi
WiFi.mode(WIFI_STA);
// 配置串口波特率
Serial.begin(9600);
// 將板載 LED 配置為輸出引腳
pinMode(16, OUTPUT);
// 打開 LED
digitalWrite(16, LOW);
// 檢查是否可以建立 WiFi 連接
Serial.println(“Attempt to connect to WiFi network.。.”);
而(WiFi.status()!= WL_CONNECTED)
{
Serial.print(“。”);
延遲(500);
if (retry++ 》= 20) // 連接超時為 10 秒
{
Serial.println(“連接超時已過期!啟動 SmartConfig.。.”);
WiFi.beginSmartConfig();
// 永遠循環:僅在接收到 SmartConfig 數據包時退出
while (true)
{
delay(500);
Serial.print(“。”);
if (WiFi.smartConfigDone())
{
Serial.println(“nSmartConfig 配置成功”);
配置完成=1;
休息; // 退出循環
}
切換LED();
}
if (config_done==1)
中斷;
}
}
// 關閉 LED
digitalWrite(16, HIGH);
// 等待 IP 地址分配
while(WiFi.status() != WL_CONNECTED)
{
delay(50);
}
// 顯示 WiFi 連接數據
Serial.println(“”);
WiFi.printDiag(串行);
// 顯示分配給我們設備的 IP 地址
Serial.println(WiFi.localIP());
}
void loop()
{
// 無事可做!
}
無效切換LED()
{
靜態int pinStatus = LOW;
如果(pinStatus==HIGH)
pinStatus=LOW;
否則
pinStatus=HIGH;
數字寫入(16,pinStatus);
}
必須將草圖加載并編譯到先前配置為支持ESP8266 系列板的Arduino IDE環境中。在啟動構建之前,請確保工具菜單中的 Erase Flash:“Sketch+WiFi 設置”選項已啟用。此選項會刪除任何以前存儲的用于訪問 WiFi 網絡的憑據。
該應用程序
要配置設備,我們將使用可從 Google Play 免費下載的ESP8266 SmartConfig 應用程序。安裝后,確保移動設備連接到您要連接 ESP8266 的同一 WiFi 網絡。在應用程序的主窗口中,檢查網絡 SSID 是否正確,然后在下面的文本框中輸入密碼。然后按頁面底部的 CONFIRM 按鈕,將幀長度字段中編碼的 SSID 和密碼信息發送到如上所述的 ESP8266。
幾秒鐘后,我們將獲得智能設備成功配置的確認,如應用程序和串行監視器上的日志所示。
此時您可以按下確認按鈕并關閉應用程序,除非您想將智能設備連接到另一個 WiFi 網絡或更改訪問憑據(SSID 和/或密碼),否則將不再需要此操作。從現在開始,ESP8266 可以獨立連接到 WiFi 網絡,使用通過 SmartConfig 接收并存儲在內部 eeprom 內存中的信息。
項目跟進
本文中的草圖旨在作為開發完整智能家居設備項目的基礎。雖然這些方面將在后面的文章中更詳細地討論,但我們已經可以突出顯示我們可以對項目進行的一些擴展。首先,可以通過在 WiFi 連接之后的階段插入能夠處理來自遠程客戶端的連接請求的 Web 服務器來修改草圖。因此,可以通過任何智能手機、平板電腦或 PC 與智能設備進行交互:我們只需使用互聯網瀏覽器連接到設備即可。下一步可能是將繼電器連接到 ESP8266 板并遠程控制連接到它們的負載的開/關,添加溫度、濕度、亮度、RGB 或其他傳感器。所有這些設備都將以簡單有效的方式遠程控制。以同樣的方式操作,我們可以構建一個智能插座或 WiFi 燈。
結論
我們在本文中已經看到,通過幾個簡單的步驟,可以通過 SmartConfig 協議配置普通的 ESP8266 卡,使其連接到所需的 WiFi 網絡,而無需修改電路板上的固件。該操作構成了構建完整智能家居應用程序的基礎和基本要求。在以后的文章中,我們將看到如何通過創建一個完整的操作智能設備來擴展這個項目。
審核編輯:郭婷
-
存儲器
+關注
關注
38文章
7538瀏覽量
164556 -
WIFI
+關注
關注
81文章
5316瀏覽量
205268 -
智能家居
+關注
關注
1931文章
9626瀏覽量
186835
發布評論請先 登錄
相關推薦
esp32和esp8266代碼共用嗎
esp8266和esp32區別是什么
esp8266不燒錄可以使用嗎
esp8266wifi模塊怎么連接手機
機智云ESP8266開發板RGB彩燈控件

如何將多個ESP8266與移動設備連接?
如何讓ESP8266變成AP模式?
如何將AP憑據從移動設備發送到ESP模塊?
如何將atoi與esp8266 sdk一起使用?
請問如何將cURL庫添加到ESP8266_RTOS_SDK項目中?
ESP8266如何將uart0的txd和rxd交換到其他引腳?
國產低成本Wi-Fi SoC解決方案芯片ESP8266與ESP8285對比差異

評論