連上網路
讓板子有一個 IP 位址。 · ⏱ 約 30 分鐘
你會學到三件事
- 連 WiFi 是一個要等的動作,而等待要寫成迴圈
WiFi.status() 是一個會變的狀態
- 為什麼密碼寫在程式裡是一件壞事(而這一課還是這樣做)
開始之前
⚠️ 這一課要 ESP32 或 ESP8266。 右下角的目標選 ESP32。
Arduino Uno 沒有 WiFi,它連這幾個名字都不認得。
這是這一整套課程裡第一次「板子決定了你能寫什麼」。
🟢 先把編輯器打開,跟著下面一起做:跟著做
一、開始連
連線要給名字和密碼:
1WiFi.begin("my-ssid", "my-password");
兩個參數:網路名稱和密碼。
⚠️ 它不會等連上。這一行的意思是「開始連」,而不是「連好了」。
二、等待要寫成迴圈
連線要花幾秒,所以要等它連上:
1while (WiFi.status() != WL_CONNECTED) {2 delay(500);3 Serial.print(".");4}
WiFi.status() 回報現在的狀態,WL_CONNECTED 是「連上了」那個值。
所以這個迴圈的意思是「只要還沒連上,就每半秒印一個點」。
積木盤上 while 那一顆寫著「當 … 持續執行」,
而 WiFi.status() 那一顆是「無線網路的 …」——後面那格選你要問什麼。
那些點不是裝飾,它們是給人看的證據,證明板子還活著、還在試。
沒有它們的話,畫面一片空白,你分不出「還在連」和「當掉了」。
⚠️ 這個迴圈可能永遠不會結束(密碼打錯的話)。
正式的程式要加一個次數上限,超過就重開或改用熱點模式。
三、拿到位址
連上之後把位址印出來,你才知道它在哪:
1Serial.println(WiFi.localIP());
連上之後,路由器會分配一個 IP 給你的板子,類似 192.168.1.100。
那就是這塊板子在你家網路裡的「門牌號碼」。
其他裝置可以用它連過來。
四、⚠️ 密碼寫在程式裡
下面這一行會跟著程式一起被看到:
1WiFi.begin("my-ssid", "my-password");
這是一個壞習慣,而這一課還是這樣做,因為別的做法會蓋掉重點。
它的問題是:程式碼傳給別人、上傳到 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}
換你了
加一個次數上限:試 20 次還沒連上就印「連不上」然後放棄。
提示:多一個計數器變數,while 的條件變成兩個用 && 串起來。
到編輯器做這一題:練習:加一個次數上限,試 20 次就放棄
做一個
連線的過程用燈表示:找不到就快閃、連線中慢閃、連上就恆亮。
🔴 這一課說「連 WiFi 是一個要等的動作」,而等待的時候使用者看不到任何東西。
這一題就是把那個看不見的狀態變成看得見的。
⚠️ 而它逼你把那個 while 迴圈改寫:裡面不能只有等待。
到編輯器做這一題:做一個:用燈號說現在連到哪了
這一課你做了什麼
- 你讓一塊板子連上了 WiFi 並拿到 IP
- 你把「等待」寫成了一個會印進度的迴圈
- 你知道密碼寫死在程式裡是一個真的風險
如果卡住了
| 你看到 |
多半是因為 |
WiFi 說沒宣告 |
目標選成 Arduino Uno 了。要選 ESP32 |
| 點一直印不停 |
密碼錯、網路名稱錯,或那是 5GHz 網路(ESP32 只支援 2.4GHz) |
| 序列埠是亂碼 |
ESP32 習慣用 115200,不是 9600 |
| 連上了卻拿不到 IP |
路由器的 DHCP 滿了,或被 MAC 過濾擋掉 |
在編輯器打開這一課 →