Semorphe

連上網路

讓板子有一個 IP 位址。 · ⏱ 約 30 分鐘

你會學到三件事

  1. 連 WiFi 是一個要等的動作,而等待要寫成迴圈
  2. WiFi.status() 是一個會變的狀態
  3. 為什麼密碼寫在程式裡是一件壞事(而這一課還是這樣做)

開始之前

⚠️ 這一課要 ESP32 或 ESP8266。 右下角的目標選 ESP32。

Arduino Uno 沒有 WiFi,它連這幾個名字都不認得。 這是這一整套課程裡第一次「板子決定了你能寫什麼」。

🟢 先把編輯器打開,跟著下面一起做:跟著做

一、開始連

連線要給名字和密碼:

1WiFi.begin("my-ssid", "my-password");
"my-ssid""my-password"連上無線網路,密碼使用命名空間std引入函式庫WiFi.h1

兩個參數:網路名稱和密碼。

⚠️ 它不會等連上。這一行的意思是「開始連」,而不是「連好了」。

二、等待要寫成迴圈

連線要花幾秒,所以要等它連上:

1while (WiFi.status() != WL_CONNECTED) {2    delay(500);3    Serial.print(".");4}
無線網路的連線狀態變數WL_CONNECTED≠500"."序列埠輸出小數位數不換行等待毫秒當持續執行使用命名空間std引入函式庫WiFi.h123

WiFi.status() 回報現在的狀態,WL_CONNECTED 是「連上了」那個值。

所以這個迴圈的意思是「只要還沒連上,就每半秒印一個點」。

積木盤上 while 那一顆寫著「當 … 持續執行」, 而 WiFi.status() 那一顆是「無線網路的 …」——後面那格選你要問什麼。

那些點不是裝飾,它們是給人看的證據,證明板子還活著、還在試。 沒有它們的話,畫面一片空白,你分不出「還在連」和「當掉了」。

⚠️ 這個迴圈可能永遠不會結束(密碼打錯的話)。 正式的程式要加一個次數上限,超過就重開或改用熱點模式。

三、拿到位址

連上之後把位址印出來,你才知道它在哪:

1Serial.println(WiFi.localIP());
無線網路的本機位址序列埠輸出小數位數並換行使用命名空間std引入函式庫WiFi.h1

連上之後,路由器會分配一個 IP 給你的板子,類似 192.168.1.100。

那就是這塊板子在你家網路裡的「門牌號碼」。 其他裝置可以用它連過來。

四、⚠️ 密碼寫在程式裡

下面這一行會跟著程式一起被看到:

1WiFi.begin("my-ssid", "my-password");
"my-ssid""my-password"連上無線網路,密碼使用命名空間std引入函式庫WiFi.h1

這是一個壞習慣,而這一課還是這樣做,因為別的做法會蓋掉重點。

它的問題是:程式碼傳給別人、上傳到 GitHub、貼到論壇問問題, 你的 WiFi 密碼就跟著出去了。

真正的做法有幾種:另外開一個不上傳的檔、存進 EEPROM(第 14 課)、 或讓板子先開一個熱點讓你用手機設定。

現在先知道它是問題就好。而它是一個真的問題,不是潔癖。

完成的樣子

這一課的參考做法——程式碼每一行的號碼,就印在對應的那塊積木上。

1#include <WiFi.h>2using namespace std;3void setup() {4    Serial.begin(115200);5    WiFi.begin("my-ssid", "my-password");6    while (WiFi.status() != WL_CONNECTED) {7        delay(500);8        Serial.print(".");9    }10    Serial.println(WiFi.localIP());11}12 13void loop() {14}
115200"my-ssid""my-password"無線網路的連線狀態變數WL_CONNECTED≠500"."序列埠輸出小數位數不換行等待毫秒無線網路的本機位址序列埠輸出小數位數並換行當持續執行連上無線網路,密碼開啟序列埠 傳輸速率定義函式 回傳型別void(無回傳)loop定義函式 回傳型別void(無回傳)setup使用命名空間std引入函式庫WiFi.h123413567108

換你了

加一個次數上限:試 20 次還沒連上就印「連不上」然後放棄。

提示:多一個計數器變數,while 的條件變成兩個用 && 串起來。

到編輯器做這一題:練習:加一個次數上限,試 20 次就放棄

做一個

連線的過程用燈表示:找不到就快閃、連線中慢閃、連上就恆亮。

🔴 這一課說「連 WiFi 是一個要等的動作」,而等待的時候使用者看不到任何東西。 這一題就是把那個看不見的狀態變成看得見的。 ⚠️ 而它逼你把那個 while 迴圈改寫:裡面不能只有等待。

到編輯器做這一題:做一個:用燈號說現在連到哪了

這一課你做了什麼

如果卡住了

你看到 多半是因為
WiFi 說沒宣告 目標選成 Arduino Uno 了。要選 ESP32
點一直印不停 密碼錯、網路名稱錯,或那是 5GHz 網路(ESP32 只支援 2.4GHz)
序列埠是亂碼 ESP32 習慣用 115200,不是 9600
連上了卻拿不到 IP 路由器的 DHCP 滿了,或被 MAC 過濾擋掉
在編輯器打開這一課 →