使用 MakePico 設置 Wi-Fi 連接並實現斷線重連機制
在這節課中,我們將學習如何使用 MakePico 設置 Wi-Fi 連接,並實現一個自動重連機制,確保在 Wi-Fi 斷開時能夠自動重新連接到網絡。這些技能對於開發可靠的物聯網(IoT)設備至關重要,因為這些設備通常需要穩定的網絡連接來進行數據傳輸。
步驟 1:引入必要的庫文件並設置 Wi-Fi 連接參數
首先,我們需要引入 WiFi.h
和 WiFiClient.h
這兩個庫文件,這些庫文件提供了 ESP32 進行 Wi-Fi 連接所需的所有功能。接著,設置 Wi-Fi 的 SSID 和密碼。
#include <WiFi.h> #include <WiFiClient.h> // 設置 Wi-Fi SSID 和密碼 const char *ssid = "XXX"; // Wi-Fi SSID const char *password = "XXX"; // Wi-Fi Password
解釋:
WiFi.h
和WiFiClient.h
是 ESP32 進行 Wi-Fi 連接的核心庫。ssid
和password
變量存儲了 Wi-Fi 網絡的名稱和密碼,這些是設備連接到網絡所必需的信息。
步驟 2:創建一個自定義函數來初始化 Wi-Fi
接下來,我們創建一個名為 wifiini
的自定義函數來處理 Wi-Fi 的初始化過程。在這個函數中,我們將 Wi-Fi 模式設置為 WIFI_OFF
以確保 Wi-Fi 從關閉狀態開始,然後將其設置為 WIFI_STA
(即 Wi-Fi 客戶端模式),這是連接到現有 Wi-Fi 網絡所需的模式。
void wifiini() { WiFi.mode(WIFI_OFF); // 關閉 Wi-Fi delay(1000); // 延遲 1 秒,確保狀態切換完成 WiFi.mode(WIFI_STA); // 設置為 Wi-Fi 客戶端模式 }
解釋:
WiFi.mode(WIFI_OFF)
:將 Wi-Fi 設置為關閉狀態,以確保從乾淨的狀態開始。WiFi.mode(WIFI_STA)
:將 Wi-Fi 設置為客戶端模式,以便 ESP32 可以連接到 Wi-Fi 路由器。
步驟 3:在 setup
函數中初始化 Wi-Fi 和設置引腳模式
在 Arduino 程式的 setup
函數中,我們將調用 wifiini
函數來初始化 Wi-Fi,並設置 GPIO 引腳的模式。
void setup() { Serial.begin(115200); // 初始化串行通訊,設置波特率為 115200 pinMode(13, OUTPUT); // 將 GPIO 13 設置為輸出模式 pinMode(14, INPUT); // 將 GPIO 14 設置為輸入模式 wifiini(); // 初始化 Wi-Fi }
解釋:
Serial.begin(115200)
:初始化串行通訊,以便在控制台查看調試信息。pinMode(13, OUTPUT)
和pinMode(14, INPUT)
:設置 GPIO 引腳的模式,以便後續控制外部設備或讀取輸入信號。
步驟 4:實現 Wi-Fi 斷線檢測和重連機制
在主迴圈 loop
中,我們設置了一個 Wi-Fi 狀態標誌 espflag
,並創建一個自定義函數 connetrouter
來處理 Wi-Fi 連接。如果檢測到 Wi-Fi 斷線,程式將嘗試重新連接。
byte espflag = 0; void connetrouter() { int timeout = 0; WiFi.begin(ssid, password); // 開始連接 Wi-Fi // 等待連接成功或超時 while (WiFi.status() != WL_CONNECTED && timeout < 20) { delay(500); Serial.print("."); // 打印連接過程 timeout++; } // 檢查是否成功連接 if (timeout < 20) { espflag = 1; // 連接成功,設置標誌位 } else { WiFi.disconnect(); // 連接失敗,斷開 Wi-Fi } } void loop() { // 檢查 Wi-Fi 是否斷線且之前已連接成功 while (WiFi.status() != WL_CONNECTED && espflag == 0x01) { espflag = 0x00; // 重置標誌位 } // 如果未連接,嘗試重新連接 if (espflag == 0x00) { connetrouter(); // 呼叫連接函數 } }
解釋:
connetrouter()
函數負責嘗試連接 Wi-Fi,並在連接成功或失敗時更新espflag
狀態標誌。WiFi.status()
:返回當前的 Wi-Fi 連接狀態,WL_CONNECTED
表示已成功連接。espflag
狀態標誌用於追蹤 Wi-Fi 連接的狀態,當 Wi-Fi 斷開時將重新嘗試連接。
步驟 5:上傳代碼並觀察結果
- 上傳代碼:
- 將代碼上傳到 MakePico 開發板,並打開串行監視器以查看調試信息。
- 觀察 Wi-Fi 連接狀態:
- 在串行監視器中,您應該會看到一系列的點(
.
),表示正在嘗試連接 Wi-Fi。如果成功連接,點將停止,並且設備將保持連接狀態。 - 如果 Wi-Fi 斷開,程式將自動重新連接。
- 在串行監視器中,您應該會看到一系列的點(