從 MicroPython 開發環境、GPIO、PWM、ADC、Wi-Fi 連線,到 HTTP 與 MQTT 應用,建立 Pico W 在 IoT 課程中的完整實作基礎。
適合電子系、嵌入式系統、微控制器、智慧裝置與物聯網課程。
| 項目 | Raspberry Pi 5 | Pico W |
|---|---|---|
| 類型 | 單板電腦 | 微控制器開發板 |
| 作業系統 | 可執行 Linux | 通常執行 MicroPython 或 C/C++ 韌體 |
| 啟動時間 | 較長 | 非常快 |
| 硬體控制 | 適合,但偏高階應用 | 非常適合即時 I/O 控制 |
| 網路功能 | 完整網路堆疊 | 具 Wi-Fi,可做輕量 IoT 應用 |
| 適用課題 | 伺服器、網站、AI、影像 | 感測器、控制器、低功耗 IoT 節點 |
.uf2 韌體檔拖曳進去MicroPython (Raspberry Pi Pico)先確認程式可以正常下載到板子並執行。
print("Hello, Pico W!")
可以先在 Thonny 直接執行,再將程式存成板子上的 main.py,讓裝置重新開機後也能自動執行。
from machine import Pin
from time import sleep
led = Pin(15, Pin.OUT)
while True:
led.toggle()
sleep(0.5)
Pin("LED", Pin.OUT) 控制,教學時可依實際韌體版本調整。按鈕範例可讓學生理解數位輸入、上拉電阻與條件判斷。
from machine import Pin
from time import sleep
button = Pin(14, Pin.IN, Pin.PULL_UP)
led = Pin(15, Pin.OUT)
while True:
if button.value() == 0:
led.value(1)
else:
led.value(0)
sleep(0.05)
Pin.PULL_UP 時,按鈕按下通常會讀到 0。這是初學者很常混淆的地方。from machine import Pin, PWM
from time import sleep
pwm = PWM(Pin(15))
pwm.freq(1000)
for duty in range(0, 65535, 2000):
pwm.duty_u16(duty)
sleep(0.05)
for duty in range(65535, 0, -2000):
pwm.duty_u16(duty)
sleep(0.05)
可以延伸成:
Pico W 可透過 ADC 讀取可變電阻、光敏電阻或其他類比感測訊號。
from machine import ADC
from time import sleep
adc = ADC(26)
while True:
value = adc.read_u16()
print(value)
sleep(0.2)
如果要轉成電壓,可用近似公式:
voltage = value * 3.3 / 65535
這是 Pico W 與一般 Pico 的重要差異,也是進入 IoT 應用的核心能力。
import network
import time
ssid = "你的WiFi名稱"
password = "你的WiFi密碼"
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
for _ in range(20):
if wlan.isconnected():
break
print("連線中...")
time.sleep(1)
if wlan.isconnected():
print("Wi-Fi 連線成功")
print("IP:", wlan.ifconfig()[0])
else:
print("Wi-Fi 連線失敗")
若已安裝支援的 urequests 模組,可以進一步測試 HTTP 通訊。
import network
import time
import urequests
ssid = "你的WiFi名稱"
password = "你的WiFi密碼"
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
while not wlan.isconnected():
time.sleep(1)
response = urequests.get("http://httpbin.org/get")
print(response.text)
response.close()
這一段可延伸成:
若課程已搭配 Mosquitto 或 Node-RED,可直接讓 Pico W 發佈資料到 Broker。
import network
import time
from umqtt.simple import MQTTClient
from machine import ADC
ssid = "你的WiFi名稱"
password = "你的WiFi密碼"
mqtt_server = "192.168.1.100"
client_id = "pico_w_01"
topic = b"iot/picow/light"
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
while not wlan.isconnected():
time.sleep(1)
adc = ADC(26)
client = MQTTClient(client_id, mqtt_server)
client.connect()
while True:
value = adc.read_u16()
client.publish(topic, str(value))
print("publish:", value)
time.sleep(2)
| 問題 | 可能原因 | 處理方式 |
|---|---|---|
| Thonny 找不到板子 | 線材只支援充電、連接埠未選對 | 改用可傳輸資料的 USB 線,重新選擇 Port |
| 程式上傳失敗 | 直譯器設定錯誤 | 確認選的是 MicroPython (Raspberry Pi Pico) |
| LED 不亮 | 腳位接錯、極性相反、沒接 GND | 重新檢查接線與程式腳位編號 |
| Wi-Fi 連不上 | SSID/密碼錯誤、訊號差、頻段不相容 | 確認 2.4GHz 網路、重新檢查帳密 |
| MQTT 無法連線 | Broker IP 錯誤、防火牆、Topic 設定不一致 | 先用電腦端測試 Broker,再回頭檢查 Pico W |
Python_Basics.html 建立程式語法基礎MQTT_Teaching.html 做裝置通訊NodeRED_MQTT_Dashboard.html 做儀表板Flask_Basics.html 或 Django_Nginx_Gunicorn.html 做後台系統