25 KiB
疑難排解指南
本指南幫助您解決使用 IoT for Beginners 課程時常見的問題。問題依類別組織,方便快速瀏覽。
目錄
安裝問題
Python 安裝
問題:Python 版本過舊
錯誤: Python 3.6 或以上版本為必須
解決方案:
- 從 python.org 下載最新的 Python 3
- Windows 安裝時,勾選「Add Python to PATH」
- 驗證安裝:
python3 --version
問題:多個 Python 版本造成衝突
症狀: 執行錯誤的 Python 版本,套件安裝到錯誤位置
解決方案:
- Windows: 使用
py -3取代python明確呼叫 Python 3 - macOS/Linux: 使用
python3代替python - 專案務必建立並使用虛擬環境
問題:找不到 pip 指令
錯誤: 'pip' 不是內部或外部命令,也不是可執行的程式或批次檔
解決方案:
- 嘗試使用
pip3代替pip - 或使用
python -m pip或python3 -m pip - 確認 Python 已加入 PATH(重新安裝 Python 並勾選此選項)
VS Code 與擴充套件
問題:Pylance 擴充套件不工作
症狀: 沒有 Python 的 IntelliSense、程式碼完成或型別檢查
解決方案:
- 開啟 VS Code 指令面板(
Ctrl+Shift+P或Cmd+Shift+P) - 執行 "Python: Select Interpreter"
- 選擇正確的 Python 直譯器(若使用虛擬環境,選擇該環境)
- 重新載入 VS Code 視窗
問題:VS Code 無法偵測虛擬環境
症狀: 選擇錯誤的 Python 直譯器
解決方案:
- 確認已在終端機啟用虛擬環境
- 開啟指令面板並執行 "Python: Select Interpreter"
- 選擇
.venv資料夾內的直譯器 - 檢查狀態列(左下角)顯示正確的 Python 版本
PlatformIO(Wio Terminal)
問題:PlatformIO 安裝失敗
錯誤: PlatformIO 安裝時出現多種錯誤
解決方案:
- 確認 VS Code 已更新至最新版
- 先安裝 C/C++ 擴充套件
- 安裝 PlatformIO 後重新啟動 VS Code
- 確認網路連線(PlatformIO 需下載大型檔案)
問題:PlatformIO 找不到開發板
症狀: 無法將程式上傳至 Wio Terminal
解決方案:
- 嘗試更換 USB 線(有些線僅支援充電)
- 檢查裝置管理員(Windows)或用
ls /dev/tty*(macOS/Linux) - 安裝或更新 USB 驅動程式
- 嘗試不同的 USB 連接埠
- 將 Wio Terminal 電源開關滑動兩次快速進入 bootloader 模式
問題:PlatformIO 編譯錯誤
錯誤: fatal error: Arduino.h: No such file or directory
解決方案:
- 刪除專案中的
.pio資料夾 - 從指令面板執行 "PlatformIO: Rebuild"
- 確認
platformio.ini中板子設定正確:[env:seeed_wio_terminal] platform = atmelsam board = seeed_wio_terminal framework = arduino
Grove 程式庫
問題:Raspberry Pi 上 Grove 程式庫匯入失敗
錯誤: ModuleNotFoundError: No module named 'grove'
解決方案:
- 重新安裝 Grove 程式庫:
cd ~ git clone https://github.com/Seeed-Studio/grove.py cd grove.py sudo pip3 install . - 若使用虛擬環境,可能需要全球安裝或複製程式庫
- 確認已啟用 I2C:
sudo raspi-config nonint do_i2c 0
問題:Grove 感測器無法偵測
錯誤: IOError: [Errno 121] Remote I/O error
解決方案:
- 檢查實體連接(確認 Grove 線纜完全插入)
- 確認感測器連接到正確的連接埠(類比、數位、I2C、UART)
- 執行
i2cdetect -y 1看是否能在 I2C 匯流排上看到裝置 - 嘗試更換 Grove 線纜
- 確保 Grove Base Hat 正確插在 Raspberry Pi GPIO 頂針上
硬體問題
Raspberry Pi
問題:Raspberry Pi 無法開機
症狀: 沒有顯示、LED 不亮或出現彩虹畫面
解決方案:
- 檢查電源供應器: Pi 4 建議使用官方 5V 3A USB-C 電源
- SD 卡問題:
- 重新格式化 SD 卡並重新安裝 Raspberry Pi OS
- 嘗試其他 SD 卡(建議使用知名品牌)
- 確保 SD 卡正確插入
- 檢查 HDMI 連接: 嘗試 Pi 4 上的兩個 HDMI 埠,用接近電源的 HDMI 埠
問題:無法 SSH 連線至 Raspberry Pi
症狀: 連線被拒或逾時
解決方案:
- 啟用 SSH:
- 使用 Raspberry Pi Imager 寫入 SD 卡時,在進階選項開啟 SSH
- 或在啟動磁區建立一個名為
ssh(無副檔名)的空檔案
- 找到 Pi 的 IP 位址:
- 檢查路由器的連線裝置列表
- 使用
ping raspberrypi.local(若 mDNS 有效) - 使用網路掃描工具如
nmap或 Angry IP Scanner
- 檢查網路:
- 確認 Pi 與電腦同網段
- 改用乙太網路連線取代 WiFi
- 確認帳號密碼(預設使用者為
pi,密碼為raspberry)
問題:Grove Base Hat 無法被辨識
症狀: 感測器不正常、I2C 發生錯誤
解決方案:
- 確保 Base Hat 完全接合所有 GPIO 頂針
- 檢查 Pi 和 Base Hat 是否有彎曲的頂針
- 啟用 I2C 介面:
sudo raspi-config nonint do_i2c 0 sudo reboot - 確認 I2C 是否正常運作:
i2cdetect -y 1
問題:Raspberry Pi 執行緩慢
症狀: 介面卡頓、反應遲鈍
解決方案:
- 檢查 SD 卡速度(建議使用 Class 10 或以上,或 USB 外接 SSD)
- 釋放磁碟空間:用
df -h檢查,刪除不必要的檔案 - 在
raspi-config減少 GPU 記憶體配置(若不大量使用相機或顯示器) - 關閉不必要的程式
- 若使用 Pi 3 或更舊版本,可考慮升級至擁有更多 RAM 的 Pi 4
Wio Terminal
問題:Wio Terminal 螢幕一直黑屏
症狀: 上傳程式後沒有顯示輸出
解決方案:
- 確認程式有初始化顯示器(使用 TFT_eSPI 程式庫)
- 從 Seeed Wiki 更新 Wio Terminal 韌體
- 加入顯示初始化程式碼:
#include <TFT_eSPI.h> TFT_eSPI tft; tft.begin(); tft.fillScreen(TFT_BLACK); - 嘗試由 PlatformIO 上傳範例程式測試硬體
問題:Wio Terminal 無法連接 WiFi
症狀: 無法連接 WiFi,發生網路錯誤
解決方案:
- 更新 WiFi 韌體: 參考 Wio Terminal WiFi 韌體更新指南
- 檢查 WiFi 帳密: 確認 SSID 與密碼正確
- WiFi 頻段: Wio Terminal 只支援 2.4GHz WiFi(不支援 5GHz)
- 訊號強度: 靠近路由器
- 路由器設定: 部分企業/ WPA-Enterprise 網路可能不相容
問題:電腦無法辨識 Wio Terminal
症狀: USB 裝置未被偵測
解決方案:
- 嘗試不同 USB 線: 使用具備資料傳輸功能的線材,非充電線
- 進入 bootloader 模式: 快速滑動電源開關兩次
- 藍色 LED 應該會閃爍,裝置在裝置管理員顯示為「Arduino」
- 安裝驅動程式(Windows):
- 下載並安裝 Seeed USB 驅動程式
- 嘗試不同 USB 埠: 避免使用集線器,改用主機板直連
- 更新系統 USB 驅動程式
問題:Wio Terminal 上感測器無法運作
症狀: Grove 感測器無法讀取資料
解決方案:
- 檢查 Grove 線纜連接
- 確認使用正確的 Grove 連接埠(左側或右側)
- 引入正確的感測器程式庫
- 檢查感測器電源需求
- 用程式庫中的範例程式測試感測器
虛擬裝置(CounterFit)
問題:CounterFit 應用程式無法啟動
錯誤: 啟動 CounterFit 時出現各種 Python 錯誤
解決方案:
- 確認虛擬環境已啟用
- 安裝或重新安裝 CounterFit:
pip install CounterFit - 檢查埠號 5000 是否已被使用:
- Windows:
netstat -ano | findstr :5000 - macOS/Linux:
lsof -i :5000
- Windows:
- 終止佔用埠號 5000 的進程或使用其他埠號:
counterfit --port 5001
問題:程式無法連接 CounterFit
錯誤: 連線被拒或逾時
解決方案:
- 確認 CounterFit 正在執行:於瀏覽器開啟
http://127.0.0.1:5000 - 檢查程式中連線 URL 是否與 CounterFit 地址相符
- 確認防火牆沒有封鎖連線
- 重啟 CounterFit 應用程式與您的程式碼
問題:感測器沒有顯示在 CounterFit
症狀: 建立的感測器未在 CounterFit UI 出現
解決方案:
- 先在 CounterFit UI 創建感測器,再執行程式
- 重新整理瀏覽器頁面
- 確認感測器類型與程式預期相符
- 清除瀏覽器快取
連線問題
WiFi 連線
問題:裝置無法連接 WiFi
症狀: 連線逾時,認證失敗
解決方案:
- 檢查 SSID 與密碼: 確認憑證正確無誤
- WiFi 頻段: 多數 IoT 裝置僅支援 2.4GHz(不支援 5GHz)
- 路由器設定:
- 若有啟用 AP 隔離請關閉
- 使用 WPA2-PSK 安全性(避免 WPA3、WEP 或開放網路)
- 確認 DHCP 啟用中
- 隱藏網路: 若 SSID 被隱藏,可能需在設定中明確輸入
- 訊號強度: 將裝置靠近路由器
- 訊號干擾: 其他裝置、微波爐或牆壁可能干擾訊號
問題:WiFi 連線頻繁中斷
症狀: 斷斷續續連線
解決方案:
- 檢查路由器穩定度,考慮重啟
- 更新裝置韌體
- 改用靜態 IP 代替 DHCP
- 減少裝置與路由器距離或加裝 WiFi 延伸器
- 檢查附近的干擾來源
- 確認電源供應充足(尤其 Raspberry Pi)
雲端服務
問題:無法連接 Azure IoT Hub
錯誤: 認證失敗、連線被拒
解決方案:
- 驗證憑證:
- 確認連線字串正確無誤
- 確保連線字串沒有額外空白或換行
- 檢查裝置註冊: 裝置必須已註冊於 IoT Hub
- 防火牆/代理: 確認允許出站 MQTT(埠號 8883)或 HTTPS(埠號 443)
- IoT Hub 地區: 確認 IoT Hub 運作正常,且非不同地區造成延遲
- 配額限制: 檢查免費層數量是否已超過
- 測試連線:
az iot hub device-identity show-connection-string --hub-name YourIoTHub --device-id YourDevice
問題:Azure Functions 未觸發
症狀: 訊息已傳送但函式未執行
解決方案:
- 確認 Function App 正在運行(非停止狀態)
- 驗證 Function App 設定中的連線字串
- 檢查 Azure 入口網站上的函式日誌
- 確認 Event Hub 相容端點設定正確
- 驗證訊息格式符合函式期望
- 檢查 Function App 的服務方案(消耗模式或專用)
MQTT
問題:MQTT 連線失敗
錯誤: 連線被拒絕,驗證失敗
解決方案:
- Broker 地址: 驗證 Broker 的 URL/IP 是否正確
- 連接埠: 檢查連接埠號(非加密為 1883,TLS 為 8883)
- 驗證: 若需要,確認使用者名稱/密碼
- TLS/SSL: 確保憑證有效且被信任
- 防火牆: 確認連接埠未被封鎖
- 使用 MQTT 客戶端測試: 使用 MQTT Explorer 或 mosquitto_pub/sub 進行測試
問題:未收到 MQTT 訊息
症狀: 已發佈訊息但訂閱者未收到
解決方案:
- 主題名稱: 確認訂閱主題與發佈主題完全相符
- QoS 等級: 嘗試使用 QoS 1 或 2 代替 0
- 萬用字元: 檢查主題萬用字元使用是否正確(
+表示單一層級,#表示多層級) - 保留訊息: 發佈者可設置保留旗標以保留最後訊息
- 連線時機: 確保訂閱者在訊息發佈前已連線
感測器與執行元件問題
Grove 感測器
問題:感測器回傳錯誤值
症狀: 讀值為 0、-1 或不合理值
解決方案:
- 檢查接線: 確保感測器連接正確
- 正確插槽: 確認感測器接在正確的插槽類型:
- 類比感測器 → 類比插槽(A0、A2、A4)
- 數位感測器 → 數位插槽(D5、D16、D18 等)
- I2C 感測器 → I2C 插槽
- 校正: 某些感測器需要校正(土壤濕度、光線等)
- 重新上電: 斷開再重新連接感測器
- 感測器規格書: 查閱感測器規格和需求
問題:電容式土壤濕度感測器總是顯示潮濕
症狀: 感測器即使乾燥也顯示高濕度
解決方案:
- 需要校正: 土壤感測器需要校正:
- 在空氣(乾燥基線)測量數值
- 在水中(潮濕基線)測量數值
- 將讀數映射於該區間
- 檢查感測器塗層: 若塗層破損,濕度感測器易劣化
- 安放位置: 確保感測器完全插入土壤中
問題:溫濕度感測器讀值錯誤
症狀: DHT11/DHT22 顯示錯誤溫度或濕度
解決方案:
- 感測器放置: 避免直射陽光、熱源或氣流
- 暖機時間: 上電後等待約 2 秒再讀取
- 讀取頻率: DHT 感測器間隔讀取時間需至少 2 秒
- 注意結露: 可能影響讀取值
- 感測器品質: DHT11 精度較 DHT22 低
攝影機
問題:Raspberry Pi 無法偵測攝影機
錯誤: mmal: mmal_vc_component_create: failed to create component 'vc.ril.camera'
解決方案:
- 啟用攝影機介面:
前往介面選項 → 攝影機 → 啟用sudo raspi-config - 檢查排線: 確保攝影機排線正確插入
- Pi Zero 藍色面朝 USB 插槽
- Pi 4 藍色面背離 USB 插槽
- 更新韌體:
sudo apt update sudo apt full-upgrade sudo reboot - 測試攝影機:
raspistill -o test.jpg
問題:攝影機拍攝畫質差
症狀: 影像模糊、過暗或過曝
解決方案:
- 對焦: 移除鏡頭保護膜,若可調焦則調整對焦
- 光線: 確保光線充足
- 攝影機設定: 在程式中調整曝光、ISO、白平衡
- 穩定性: 保持攝影機穩定,必要時使用腳架
- 解析度: 不要超過攝影機最大解析度
麥克風與喇叭
問題:無音訊輸入/輸出
症狀: 麥克風無法錄音,喇叭無聲音
解決方案:
- 檢查接線: 確認音訊設備連接正常
- 測試硬體:
- 喇叭:
speaker-test -t wav -c 2 - 麥克風:使用
arecord -l列出裝置,arecord test.wav錄音
- 喇叭:
- 音量設定: 檢查並調整音量:
alsamixer - 選擇音訊裝置: 程式中指定正確音訊裝置
- 驅動問題: 更新 ALSA 或重新安裝音訊驅動
問題:ReSpeaker 擴充板無法運作
症狀: 沒有偵測到音訊設備
解決方案:
- 安裝驅動:
git clone https://github.com/HinTak/seeed-voicecard cd seeed-voicecard sudo ./install.sh sudo reboot - 確認安裝狀況:
arecord -l應列出 ReSpeaker - 更新韌體: 部分 Pi OS 版本需更新驅動
- 檢查安裝: 確保擴充板正確插在 GPIO 腳位上
開發環境問題
VS Code
問題:終端機未自動啟動虛擬環境
症狀: 終端機開啟但未啟用 venv
解決方案:
- 設置 Python 直譯器: 命令面板 → "Python: Select Interpreter" → 選擇 venv
- 選擇後重新啟動 VS Code
- 檢查
settings.json,新增:"python.terminal.activateEnvironment": true
問題:程式碼在裝置上無執行反應
症狀: 程式執行,但裝置無任何反應
解決方案:
- 確認程式碼已儲存(檔案標籤是否有點示意未儲存)
- 檢查執行的 Python 版本:
which python或where python - 針對 Wio Terminal: 確保透過 PlatformIO 上傳程式(點擊上傳按鈕)
- 針對 Raspberry Pi: SSH 連線 Pi 後執行程式
- 查看輸出視窗是否有錯誤訊息
問題:IntelliSense 不顯示函式自動完成
症狀: 匯入模組後無自動補全
解決方案:
- 確認函式庫已安裝於當前環境
- 重新載入 VS Code 視窗
- 檢查 Python 直譯器是否正確
- 若有,安裝型別定義:
pip install types-<library-name>
Python 虛擬環境
問題:無法建立虛擬環境
錯誤: The virtual environment was not created successfully
解決方案:
- 安裝 venv 模組:
- Ubuntu/Debian:
sudo apt install python3-venv - macOS: Python 通常已包含
- Windows: 重新安裝 Python 並包含所有元件
- Ubuntu/Debian:
- 檢查 Python 安裝: 確認 Python 安裝正確
- 使用完整路徑執行: 嘗試
python3 -m venv .venv
問題:套件安裝到錯誤位置
症狀: 安裝套件後匯入出錯
解決方案:
- 確認 venv 已啟用: 命令提示字元應顯示
(.venv) - 檢查 pip 位置:
which pip指向.venv/bin/pip - 在 venv 中重新安裝: 啟用 venv 後
pip install <package> - 勿在虛擬環境中用 sudo 執行 pip
問題:虛擬環境不可攜帶移動
症狀: 移動或在不同電腦使用後 venv 無法運作
解決方案:
- 勿移動 venv: 刪除後在新位置重新建立
- 使用 requirements.txt:
pip freeze > requirements.txt pip install -r requirements.txt - 重新建立 venv:
python3 -m venv .venv source .venv/bin/activate # 或在 Windows 上執行 activate.bat pip install -r requirements.txt
相依性問題
問題:套件安裝失敗
錯誤: 安裝時出現各種 pip 錯誤
解決方案:
- 更新 pip:
pip install --upgrade pip - 安裝編譯工具:
- Ubuntu/Debian:
sudo apt install build-essential python3-dev - macOS:
xcode-select --install - Windows: 安裝 Visual Studio Build Tools
- Ubuntu/Debian:
- 檢查網路連線
- 嘗試不同套件索引:
pip install --index-url https://pypi.org/simple/ <package> - 指定版本安裝:
pip install <package>==<version>
問題:相依衝突
錯誤: ERROR: pip's dependency resolver does not currently take into account all the packages that are installed
解決方案:
- 為每個專案使用全新虛擬環境
- 更新套件:
pip install --upgrade <package> - 檢查套件相依: 使用
pip check找出衝突 - 安裝相容版本: 在 requirements.txt 指定版本範圍
效能問題
問題:程式碼執行緩慢
症狀: 延遲、逾時、無回應
解決方案:
- 減少感測器讀取頻率: 不要過度頻繁讀取
- 優化迴圈: 避免忙等待,使用 sleep() 或延遲
- 記憶體問題:
- 關閉不必要的應用程式
- 釋放儲存空間
- 在 Pi 用
top或htop監控
- SD 卡速度: 使用更快的 SD 卡或 SSD 作為儲存
- 網路延遲: 網路呼叫使用非同步作業
問題:記憶體不足錯誤
錯誤: MemoryError 或系統當機
解決方案:
- 針對 Raspberry Pi:
- 關閉不需要的應用程式
- 增加交換區
- 使用精簡版作業系統(Lite 版)
- 升級 RAM(Pi 4 有 2/4/8GB 選項)
- 針對 Wio Terminal:
- 減小緩衝區大小
- 使用較小的影像
- 優化字串使用
- 檢查記憶體洩漏(未釋放的記憶體)
問題:資料遺失或損壞
症狀: 訊息遺失、檔案損毀
解決方案:
- SD 卡問題:
- 使用品質良好的 SD 卡(避免便宜或仿冒品)
- 定期備份資料
- 正確關機(避免直接拔電)
- 緩衝區溢位: 增加程式內的緩衝區大小
- 網路可靠度: 實作重試邏輯和錯誤處理
- 服務品質: 對重要訊息使用 MQTT QoS 1 或 2
常見錯誤訊息
ModuleNotFoundError: No module named 'X'
原因: 套件未安裝或虛擬環境未啟用
解決方案:
pip install X
請先確保虛擬環境已啟用。
Linux/macOS 顯示 Permission denied
原因: 需要管理員權限或檔案權限問題
解決方案:
- 系統操作使用
sudo - pip 不要在虛擬環境使用 sudo,請先啟用 venv
- 串列埠權限:將使用者加入 dialout 群組:
sudo usermod -a -G dialout $USER,然後登出再登入
OSError: [Errno 98] Address already in use
原因: 連接埠已被其他程序使用
解決方案:
- 查找使用該埠的程序:
lsof -i :<port>或netstat -ano | findstr :<port> - 結束該程序或在程式中使用不同連接埠
SSL: CERTIFICATE_VERIFY_FAILED
原因: SSL 憑證驗證失敗
解決方案:
- 更新憑證:
pip install --upgrade certifi - 確認系統時間正確:
date - 僅於開發環境(非正式環境)可在程式中關閉驗證
IndentationError: unexpected indent
原因: Python 縮排問題(混用 Tab 與空白)
解決方案:
- 使用一致縮排(Python 標準為 4 個空白)
- 編輯器設定使用空白取代 Tab
- VS Code 設定
"editor.insertSpaces": true及"editor.tabSize": 4
UnicodeDecodeError 或 UnicodeEncodeError
原因: 字元編碼問題
解決方案:
# 讀取檔案時
with open('file.txt', 'r', encoding='utf-8') as f:
content = f.read()
# 寫入檔案時
with open('file.txt', 'w', encoding='utf-8') as f:
f.write(content)
尋求協助
若您已嘗試上述排除方式仍有問題:
1. 檢閱現有資源
- 文件: 閱讀 README 和課程指示
- 硬體指南: 查看 hardware.md 的硬體相關資訊
- Seeed Studio Wiki: Seeed Studio Wiki 查找 Grove 元件資訊
2. 搜尋類似問題
- GitHub Issues: 搜尋 現有問題
- Stack Overflow: 搜尋錯誤訊息
- 裝置論壇: 查詢 Raspberry Pi 論壇或 Arduino 論壇
3. 建立 GitHub Issue
若找不到解決方案:
- 前往 GitHub Issues
- 點擊「New Issue」
- 提供:
- 清楚問題描述
- 重現步驟
- 錯誤訊息(完整)
- 硬體/軟體版本
- 已嘗試過的方案
- 相關截圖(若有)
4. 加入社群
- Discord: Microsoft Foundry Discord
- Microsoft Learn: Microsoft Learn IoT
5. 提供完整的 Bug 回報
一份好的 Bug 回報應包含:
- 環境: 作業系統、Python 版本、硬體環境
- 重現步驟: 導致問題的準確步驟
- 預期行為: 應該發生的狀況
- 實際行為: 實際發生的狀況
- 錯誤訊息: 完整的錯誤文字,非截圖
- 程式碼: 最小化能重現問題的範例程式碼
預防小貼士
一般最佳實踐
- 保持備份: 定期備份可用的 SD 卡/程式碼
- 記錄變更: 在註解中記錄有效的方法
- 版本控制: 使用 git 追蹤程式碼變更
- 逐步測試: 先測試小的變更再合併
- 閱讀錯誤訊息: 錯誤訊息常告訴你問題所在
- 定期更新: 保持軟體/韌體最新
- 使用優質元件: 避免使用低價線材/電源供應器
- 穩定電源: 使用適當電源供應器(尤其是 Pi)
開發工作流程
- 從簡開始: 從可用的範例程式碼開始
- 一次變更一件事: 更容易找出問題所在
- 經常測試: 早期發現問題
- 保持整潔: 合理組織檔案與程式碼
- 註解程式碼: 未來的你會感謝這些註解
此疑難排解指南由社群維護。如果你找到此處未列出的解決方案,請考慮貢獻幫助其他人!
免責聲明:
本文件係使用 AI 翻譯服務 Co-op Translator 進行翻譯。雖然我們力求準確,但請注意自動翻譯可能包含錯誤或不準確之處。原文文件的母語版本應視為權威依據。對於重要資訊,建議尋求專業人工翻譯。我們不對因使用本翻譯而造成的任何誤解或誤譯負責。