ASUS Ascent GX10(NVIDIA GB10 Grace Blackwell,1 PFLOP AI 算力)與 Raspberry Pi 5 的結合,是一種「大腦(Brain)+ 現場 I/O(Actuator & Sensor)」的強勢分工:GX10 沒 GPIO,但有頂級 AI 推論;Pi 5 有完整的 GPIO/I2C/SPI/UART,但算力只適合即時控制。兩者過區域網路結在一起,就是完整的邊緣 AI 控制系統。
ASUS Ascent GX10控制的第一台: Raspberry Pi 5
1. 核心分工:誰做什麼
| ASUS Ascent GX10(大腦) | Raspberry Pi 5(現場) | |
|---|---|---|
| 硬體角色 | GB10 超級晶片、121GB 統一記憶體 | GPIO 40 pin、I2C/SPI/UART、Hailo NPU 可擴充 |
| 做什麼 | 地端 LLM(DeepSeek-R1、Llama 3)、視覺辨識、多 Agent 協調 | 接馬達、感測器、繼電器、LED,產生 PWM/高低電位 |
| 輸出入 | 收環境數據 → AI 推論 → 下高階指令 | 收高階指令 → 轉實體電信號;感測數據回傳 |
| 典型指令 | 「辨識到異常,關 3 號馬達」 | GPIO 17 拉低 → 繼電器動作 |
關鍵觀念:不要讓大模型直接碰 GPIO(延遲太高、不可重現),也不要讓 Pi 跑大語言模型(算力不够)。中間一層「結構化指令」(JSON)是最乾淨的分界線。
2. 通訊方案比較
兩台都跑 Linux,又都在區域網路內,網路通訊 > USB 序列埠(更快、可擴充、能跨房間):
| 方案 | 適用場景 | 本環境狀態 |
|---|---|---|
| A. MQTT(推薦) | 多設備、事件型、即時開關、可存最後值 | ✅ GX10 上 mosquitto 已跑 |
| B. SSH + 指令 | 除錯、一次性操作、批量指令 | ✅ 金鑰免登入已建置 |
| C. REST API | 點對點、網頁整合、同步要回傳值 | 需在 Pi 端跑 Flask/FastAPI |
實務分工:狀態與事件走 MQTT、控制與除錯走 SSH、要同步確認的用 HTTP。
3. 實作範例:AI 語音/視覺自動化開關
情境:大模型理解到「開燈」或視覺辨識到「有人進入」→ 自動開關實體繼電器。
步驟一:硬體的連法
- GX10 經 10G LAN 連區網(或 Wi-Fi)
- Pi 5 連同一區網(本環境實測:192.168.1.236)
- 5V 繼電器模組:VCC→Pi 5V、GND→GND、IN→GPIO 17
步驟二:Pi 5 端的 HTTP 控制器(Flask)
from flask import Flask, request, jsonify
import gpiozero
app = Flask(__name__)
relay = gpiozero.OutputDevice(17) # 接在 GPIO 17 的繼電器/LED
@app.route('/api/device', methods=['POST'])
def control_device():
action = (request.json or {}).get('action')
if action == 'on':
relay.on()
return jsonify({"status": "success", "message": "Device turned ON"})
if action == 'off':
relay.off()
return jsonify({"status": "success", "message": "Device turned OFF"})
return jsonify({"status": "error", "message": "Invalid action"}), 400
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
request.json加or {}避免沒有 body 時崩掉;if __name__ == '__main__'才是正確的模組保護。
步驟三:GX10 端的 AI 決策
import requests, json
PI5_IP = "192.168.1.236" # 本環境 Pi 5 的實際位址
def send_to_pi5(action):
url = f"http://{PI5_IP}:5000/api/device"
try:
r = requests.post(url, json={"action": action}, timeout=5)
print("Pi 5 回應:", r.json())
return r.json()
except Exception as e:
print("連線失敗:", e)
return None
# GX10 上的地端大模型(Ollama/vLLM)已把語音/視覺判斷成結構化意圖:
ai_decision = {"target": "light", "status": "on"} # 來自 LLM 的 function-call 結果
send_to_pi5(ai_decision["status"])
requests.post(url, json=...) 會自動帶 Content-Type 並序列化,不用手動 dumps。
方案 A(MQTT)的對照版
# Pi 5:監聽主題,收到就動作
import paho.mqtt.client as mqtt
import gpiozero
relay = gpiozero.OutputDevice(17)
def on_msg(client, userdata, msg):
if msg.topic == "iot/relay1" and msg.payload == b"on":
relay.on()
elif msg.topic == "iot/relay1" and msg.payload == b"off":
relay.off()
c = mqtt.Client()
c.on_message = on_msg
c.connect("192.168.1.25", 1883, 60) # GX10 上的 mosquitto
c.subscribe("iot/relay1")
c.loop_forever()
# GX10:AI 決策後 publish
import paho.mqtt.client as mqtt
c = mqtt.Client()
c.connect("192.168.1.25", 1883, 60)
# LLM 判斷 → 開燈
c.publish("iot/relay1", "on", retain=True)
MQTT 的好處:retain=True 讓 Pi 重開機後自動恢復最後狀態;多路繼電器只要多訂閱幾個主題,不用改架構。
4. 安全與穩定(必讀)
- Pi 5 的 GPIO 是 3.3V —— 接 5V 模組前確認模組本身有 3.3V 相容的 IN 腳(多數繼電器模組有)
- 馬達/繼電器回灌雜訊 —— 大電流迴路與 GPIO 分開供電,地線共接
- 網路權限 —— Flask 只綁區網(或用 firewall 限制來源 IP 只允許 192.168.1.25),5000 埠別對外
- MQTT 加認證 —— mosquitto 開啟
password_file+ TLS,避免區網內誰都能開關燈 - 看門狗 —— Pi 端程式用 systemd service +
Restart=always,斷線自動回連 - 安全聯動 —— 高風險動作(斷氣、斷電源)要「LLM 意圖 + 人工確認」兩段式,純自動只給低風險負載
5. 本機的落地優勢
這套架構的元件這台機房全部現成:
– MQTT broker(mosquitto)已在 GX10 跑
– Pi 5 16GB RAM + NVMe,連 Ollama 小模型都能跑(邊緣備援)
– Hailo NPU 可做視覺預判(偵測到人 → 才叫喚大模型),省算力
– Hermes multi-profile 可直接當「語音/對話層」,對話 → 意圖 → MQTT
下一步建議:①Pi 5 裝 Flask + systemd unit ②GX10 加 intent→MQTT 的 adapter ③用一個 LED 先跑通,再換繼電器。
沒有留言:
張貼留言