2026年10月3日 星期六

ASUS Ascent GX10 × Raspberry Pi 5:邊緣大腦 + 現場 I/O 的完整控制架構

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 語音/視覺自動化開關

情境:大模型理解到「開燈」或視覺辨識到「有人進入」→ 自動開關實體繼電器。

步驟一:硬體的連法

  1. GX10 經 10G LAN 連區網(或 Wi-Fi)
  2. Pi 5 連同一區網(本環境實測:192.168.1.236)
  3. 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. 安全與穩定(必讀)

  1. Pi 5 的 GPIO 是 3.3V —— 接 5V 模組前確認模組本身有 3.3V 相容的 IN 腳(多數繼電器模組有)
  2. 馬達/繼電器回灌雜訊 —— 大電流迴路與 GPIO 分開供電,地線共接
  3. 網路權限 —— Flask 只綁區網(或用 firewall 限制來源 IP 只允許 192.168.1.25),5000 埠別對外
  4. MQTT 加認證 —— mosquitto 開啟 password_file + TLS,避免區網內誰都能開關燈
  5. 看門狗 —— Pi 端程式用 systemd service + Restart=always,斷線自動回連
  6. 安全聯動 —— 高風險動作(斷氣、斷電源)要「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 先跑通,再換繼電器。

沒有留言:

張貼留言