from machine import Pin
from time import sleep
led = Pin("LED", Pin.OUT)
while True:
led.toggle()
sleep(1)
MPY: soft reboot
執行前請確認 Pico 透過 USB 連接電腦,並在 Thonny 選擇 Raspberry Pi Pico 的 MicroPython 直譯器。
範例三:用手機控制 Pico 2 W LED
Codex 提示詞Raspberry Pi Pico 2 W 內建一個網站,可以經由手機來控制板上的 LED ON/OFF
補充提示詞可以內建 AP
Codex 與 Thonny
Codex
可以內建 AP
已建立 Pico 2 W 熱點與 LED 控制網站。
SSID: Pico2W-LED Password: picoled123 Open http://192.168.4.1
Thonny / Pico 2 W
MicroPython — Raspberry Pi Pico 2 W
ap = network.WLAN(network.AP_IF)
ap.config(ssid="Pico2W-LED", password="picoled123")
ap.active(True)
if b"GET /on" in request:
led.on()
elif b"GET /off" in request:
led.off()
Wi-Fi AP ready Open http://192.168.4.1
手機連線到 Pico2W-LED,密碼為 picoled123,再開啟 http://192.168.4.1,即可看到 LED ON 與 LED OFF 按鈕。
完整網站程式
import network
import socket
from machine import Pin
led = Pin("LED", Pin.OUT)
ap = network.WLAN(network.AP_IF)
ap.config(ssid="Pico2W-LED", password="picoled123")
ap.active(True)
while not ap.active():
pass
print("Open http://192.168.4.1")
addr = socket.getaddrinfo("0.0.0.0", 80)[0][-1]
server = socket.socket()
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(addr)
server.listen(1)
while True:
client, remote = server.accept()
request = client.recv(1024)
if b"GET /on" in request:
led.on()
elif b"GET /off" in request:
led.off()
status = "ON" if led.value() else "OFF"
page = "<h1>Pico 2 W LED</h1>"
page += "<p>LED: " + status + "</p>"
page += "<a href='/on'><button>LED ON</button></a>"
page += " <a href='/off'><button>LED OFF</button></a>"
response = "HTTP/1.1 200 OK" + chr(13) + chr(10)
response += "Content-Type: text/html" + chr(13) + chr(10)
response += "Connection: close" + chr(13) + chr(10) + chr(13) + chr(10)
client.send((response + page).encode())
client.close()
安全提醒:本文的 AP 名稱與密碼是示範用設定。實際使用時請更換密碼,並避免在公開環境中使用簡單密碼。
FastAPI REST API 和 MCP Server 不需要二選一。REST API 面向一般軟體 client,讓呼叫端依 URL 和 HTTP 方法呼叫服務;MCP Server 面向 AI host/Agent,讓 client 透過標準協定探索和呼叫工具。實務上,可把業務邏輯寫一次,再同時提供 REST 與 MCP 介面。選擇時先看呼叫端是一般應用程式還是 AI Agent,再決定要暴露哪一種介面。
# Windows PowerShell:在目前終端機工作階段設定
$env:OPENAI_API_KEY = "你的有效 API 金鑰"
python mcp_agent.py
成功時,MCP Server 終端機會記錄 Agent 傳給 echo_message 的內容;Agent 終端機會印出依工具結果整理的回覆。模型的實際回覆文字可能略有不同。
八、常見錯誤:API 金鑰與額度
錯誤訊息
代表狀況
處理方式
401 invalid_api_key
Agent 呼叫模型時使用的 API 金鑰無效、錯誤或程式讀到另一把金鑰。
確認 OPENAI_API_KEY 在執行 Agent 的同一個終端機中設定,並確認 API Platform 的金鑰有效。不要把金鑰貼到對話、程式碼或公開儲存庫。
429 insufficient_quota credit_balance_exhausted
金鑰已辨識,但該 API 組織沒有可用點數,或帳務額度不足。
前往 API Platform 帳務頁檢查正確組織的餘額、付款方式和支出限制;購買點數後等待帳務頁更新,再重試。
連線錯誤/Connection refused
Agent 無法連到 MCP Server endpoint。
確認 server 已啟動,URL 路徑是 /mcp,埠號相符;若跨電腦連線,檢查 IP、防火牆及網路路由。
兩段不同的連線:Agent 先連 OpenAI API 取得模型推理服務,同時由本機 Python 程式連 MCP Server 執行工具。API 的 401/429 與 MCP endpoint 的連線錯誤,是不同位置的問題。ChatGPT 訂閱與 API 用量分別計費;使用 ChatGPT Plus 不會自動提供 API 點數。可參閱 OpenAI 計費說明 與 API 預付額度說明。
九、適用情境與安全原則
適合:用自然語言要求 Agent 搜尋資料、查詢系統、整理文件,或執行由 MCP Server 明確公開的功能。