工程筆記本 / Jetson單板電腦系列

Jetson單板電腦系列

[開箱]NVIDIA® Jetson Orin Nano™ Super 開發者套件專用外殼-Panini 外殼開箱與組裝教學(OLED顯示系統資訊教學)

郭 俊廷📅 2025-12-22👁 87
撰寫/攝影 郭俊廷
時間 1~2 小時 材料表 NVIDIA® Jetson Orin Nano™ 開發者套件– 機器人王國商城 M.2 SSD 硬碟 鍵盤滑鼠 Jetson Orin Nano™ Super 開發者套件專用外殼Panini(白色版)
成本
難度 ★★☆☆☆
前言
如果你手邊有一塊NVIDIA® Jetson Orin Nano™ Super 開發者套件,一定會發現它裸露的電路板,但在攜帶或佈署上總是有點讓人提心吊膽。今天要來開箱這款由 ROBOCO 推出的 "Panini" 專用機殼,它主打免工具安裝、優異散熱以及高擴充性。
裝設NVIDIA® Jetson Orin Nano™ 開發者套件專用外殼 Panini相關注意事項
  1. 需準備一台原廠 **NVIDIA® Jetson Orin Nano™ 開發者套件**。
  2. 作業系統建議使用 **JetPack 6.2(L4T 36.4.3)** 並安裝 OLED 套件,請盡量使用相同版本以避免相容性問題。
  3. 需連接OLED的 GPIO 線材及 Button Header 接線,請在開機上電前多次確認接線正確,否則可能導致無法開機或硬體異常。
  本文為實際開箱與組裝教學整理,適用於 Jetson Orin Nano / Orin Nano Super Developer Kit 之 Panini 專用外殼。 在 AI 邊緣運算與教學應用快速普及的情況下,Jetson Orin Nano™ Super 開發者套件已成為許多教育單位、系統整合商與開發者的首選平台。然而,在實際部署與長時間運作情境中,結構保護、散熱與擴充性 往往比效能本身更為關鍵。 本篇文章將參考 Panini 原廠產品說明書(PDF) 與原廠網站資訊,完整開箱 Jetson Orin Nano™ Super 專用 Panini 外殼,並一步步說明實際組裝流程與進階安裝方式,協助你快速完成組裝部署。 Panini 原廠產品說明書(PDF)檔案如下可點選以下連結下載: https://drive.google.com/file/d/1uqJXT98x0viHIo9VWrDdkAzOTmNrL6oE/view?usp=sharing

Panini 外殼產品簡介

Panini 是專為 NVIDIA Jetson Orin Nano / Orin Nano Super Developer Kit 所設計的專用外殼,整體採用金屬結構,並搭配模組化設計,兼顧桌面使用與懸臂(VESA)安裝需求。

主要特色

  • 專用尺寸設計,完整對應 Jetson Orin Nano Super 開發者套件
  • 金屬機殼結構,提升保護性與散熱穩定度
  • 支援電源按鈕、重開機按鈕
  • 可選配 0.96 吋 I2C OLED 顯示模組(OLED 版本)
  • 支援 M.2 SSD(2280)安裝
  • 支援 GPIO、CSI Camera 等擴充
  • 可桌面擺放或安裝於 VESA 75 懸臂

外殼規格

  • 材質:SPCC 金屬、ABS、壓克力、橡膠
  • 尺寸:130 × 125 × 43 mm
  • 重量:約 400 g

開箱內容物一覽

盒子外觀如下,可以看到外殼的圖片以及Panini的名稱,還可以看到下面寫著Design and made in Taiwan。 打開盒子後可以看到Panini外殼本體以及說明書,如果想要快速組裝完成可以參考說明書即可快速組裝好並使用。 實際開箱後,Panini 外殼包裝中包含以下零組件: Panini 外殼以及Orin nano以及等等會用到的線材放在一起的位置。 首先拿到如果我們是要放在桌面使用的話第一件事就是把橡膠腳墊 ×4先裝上底部才可以避免機殼磨損 只要輕輕將橡膠腳墊 ×4ㄊ推進四個洞孔裡面即可固定。

外殼結構件

  • 上蓋(Top Cover)
  • 下蓋(Bottom Cover)
  • SSD 蓋板(SSD Cover)
  • 載板固定板(Board Holder)

螺絲與配件

  • 手擰螺絲(Thumb Screw)
  • M2 主板六角柱與主板螺絲
  • M3 懸臂固定螺絲 ×4
  • 橡膠腳墊 ×4

組裝前準備事項

在開始組裝前,請先完成以下準備:
  • Jetson Orin Nano Super 開發者套件需完全斷電
  • 移除電源線、HDMI、USB 等外接裝置
  • 建議於防靜電環境操作

Panini 外殼組裝步驟教學

步驟一:拆卸外殼上蓋

  1. 逆時鐘旋轉手擰螺絲
  2. 依箭頭方向拉動把手,向上取下上蓋

步驟二:移除載板固定板

  1. 再次逆時鐘旋轉內部手擰螺絲
  2. 將載板固定板取出,預備安裝主板

步驟三:安裝 Jetson Orin Nano Super 主板

建議先完成步驟五前面板線材與 Jumper 的連接,再安裝主板進入外殼。 由於 Panini 外殼在主板就位後,載板下方的系統控制腳位(System Button Header)視野會受到遮擋,實務上會較難清楚辨識腳位名稱,因此建議依以下順序操作:
  1. 先將 Power Button、Reset Button 及相關 Jumper 線材,連接至 Jetson Orin Nano 載板下方的系統控制腳位
  2. 確認線材方向正確且固定牢靠
  3. 將 Jetson Orin Nano Super 對準 Panini 外殼內的滑槽
  4. 從側邊將主板平行滑入固定溝槽中
  5. 確認 I/O 介面(USB、HDMI、LAN、DC-IN)皆與外殼開孔完全對齊

步驟四:裝回載板固定板

將載板固定板裝回原位並鎖緊,使主板穩固不晃動。

步驟五:連接前面板與 OLED

依照上圖說明,請將 Panini 外殼的 Power Button 與 Reset Button 連接至 Jetson Orin Nano 載板下方的系統控制腳位(System Button Header)

若為 OLED 版本,可將隨附的 0.96 吋 I2C OLED 顯示模組 連接至 Jetson Orin Nano 的 I2C 腳位,包含 VCC、GND、SDA 與 SCL。相關 GPIO 與 I2C 腳位定義可參考 NVIDIA 官方文件。

此外,需特別注意,除了上述的電源與重置按鍵接線外,還必須將 Jumper 接至「AUTO ON DIS」腳位(如下圖紅框所示),否則系統將維持預設行為,在接上電源後即自動開機,導致前面板電源鍵無法正常控制開機流程。

OLED到ORIN NANO的GPIO接線實際位置圖 OLED GPIO接線位置   OLED套件函示庫安裝方法: 首先先安裝OLED需要用到的函示庫
sudo apt install -y i2c-tools
sudo i2cdetect -y -r 7
sudo apt install -y python3-pip python3-smbus
pip3 install adafruit-circuitpython-ssd1306 psutil netifaces
sudo -H pip3 install --upgrade --force-reinstall jetson-gpio
執行sudo i2cdetect -y -r 7 的時候應該要顯示如以下畫面,這時候代表OLED接線都正確

OLED顯示程式

oled_sysinfo.py 可以點選以下連結下載,或是複製以下程式碼至您的ORIN NANO中並命名為oled_sysinfo.py https://drive.google.com/file/d/1cjRBRMXt4bKOdPUw6mXTrAc99oHlHbXV/view?usp=sharing 新版程式(IP字體大小會隨著號碼數量增減): https://drive.google.com/file/d/18Qn2tsx3s4KiUsRRbXTsdhEREKkiwfp-/view?usp=sharing
import time
import subprocess
import board
import busio
from PIL import Image, ImageDraw, ImageFont
import adafruit_ssd1306
import psutil
import socket

# --- 設定 ---
# I2C Bus,Orin Nano 的 Pin 3,5
I2C_BUS = 7
OLED_ADDR = 0x3c

# CPU 溫度感測器路徑
CPU_TEMP_PATH = "/sys/class/thermal/thermal_zone1/temp"

# --- 初始化 I2C 和 OLED ---
try:
    i2c = busio.I2C(board.SCL, board.SDA)
    display = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=OLED_ADDR)
    print("OLED display initialized successfully.")
except Exception as e:
    print(f"Error initializing I2C or OLED: {e}")
    exit()

# --- 清除螢幕 ---
display.fill(0)
display.show()

# --- 建立畫布 ---
width = display.width
height = display.height
image = Image.new("1", (width, height))
draw = ImageDraw.Draw(image)

# --- 載入字型 ---
try:
    font = ImageFont.truetype(
        "/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf", 12
    )
except IOError:
    font = ImageFont.load_default()

# ---------------------------------------------------------------------
# IP 顯示:優先 Wi-Fi → Ethernet → 其他介面
# ---------------------------------------------------------------------
def get_ip_address():
    wifi_ifaces = []
    eth_ifaces = []
    other_ifaces = []

    for iface, addrs in psutil.net_if_addrs().items():
        for addr in addrs:
            if addr.family == socket.AF_INET:
                ip = addr.address

                # 排除 loopback
                if ip.startswith("127."):
                    continue

                if iface.startswith(("wlan", "wlp")):
                    wifi_ifaces.append((iface, ip))
                elif iface.startswith(("eth", "en")):
                    eth_ifaces.append((iface, ip))
                else:
                    other_ifaces.append((iface, ip))

    if wifi_ifaces:
        iface, ip = wifi_ifaces[0]
        return f"WiFi IP: {ip}"
    elif eth_ifaces:
        iface, ip = eth_ifaces[0]
        return f"ETH  IP: {ip}"
    elif other_ifaces:
        iface, ip = other_ifaces[0]
        return f"IP: {ip}"
    else:
        return "IP: Not found"

# --- 系統資訊 ---
def get_cpu_usage():
    cpu = psutil.cpu_percent(interval=None)
    return f"CPU Use: {cpu:05.2f}%"

def get_mem_usage():
    mem = psutil.virtual_memory()
    return f"RAM Use: {mem.percent:05.2f}%"

def get_cpu_temperature():
    try:
        with open(CPU_TEMP_PATH, 'r') as f:
            cpu_temp = int(f.read()) / 1000.0
        return f"CPU Temp: {cpu_temp:.1f}°C"
    except FileNotFoundError:
        return "CPU Temp: N/A"
    except Exception:
        return "CPU Temp: Err"

# --- 主循環 ---
print("Starting system monitor loop. Press Ctrl+C to exit.")
while True:
    try:
        # 清除畫布
        draw.rectangle((0, 0, width, height), outline=0, fill=0)

        # 取得資訊
        ip_text = get_ip_address()
        cpu_temp_text = get_cpu_temperature()
        cpu_usage_text = get_cpu_usage()
        mem_usage_text = get_mem_usage()

        # OLED 排版
        draw.text((0, 0), ip_text, font=font, fill=255)
        draw.text((0, 16), cpu_temp_text, font=font, fill=255)
        draw.text((0, 32), cpu_usage_text, font=font, fill=255)
        draw.text((0, 48), mem_usage_text, font=font, fill=255)

        # 顯示
        display.image(image)
        display.show()

        time.sleep(1)

    except KeyboardInterrupt:
        print("\nExiting. Clearing display.")
        display.fill(0)
        display.show()
        break
    except Exception as e:
        print(f"An error occurred: {e}")
        time.sleep(5)
這裡執行程式oled_sysinfo.py檢查OLED是否顯示正常。 python3 oled_sysinfo.py 如出現以下畫面代表程式順利執行:

建立 systemd service(讓OLED程式可以在每次開機時自動啟動)

剛剛測試python3 oled_sysinfo.py程式OLED都正常顯示的話就可以建立開機時自動啟動的服務了,這樣每次開機時就不用另外執行python程式了。 建立服務檔案: sudo nano /etc/systemd/system/oled.service 貼上以下內容:
  1. [Unit]
    
    Description=OLED 系統資訊顯示服務
    
    After=network.target
    
    
    [Service]
    
    Type=simple
    
    ExecStart=/usr/bin/python3 /home/jetson/oled_sysinfo.py
    
    WorkingDirectory=/home/jetson
    
    StandardOutput=journal
    
    StandardError=journal
    
    Restart=always
    
    User=jetson
    
    [Install]
    
    WantedBy=multi-user.target
      ⚠️ 如果您的帳號名稱不是 jetson,請把 User=jetson 改成你實際的帳號名稱。(當然如果您使用自己的OLED程式也需要更改檔案的位置及名稱)  

? 啟用服務

重新載入 systemd: sudo systemctl daemon-reexec 啟用服務(開機自動啟動): sudo systemctl enable oled.service 立刻啟動服務: sudo systemctl start oled.service

? 檢查狀態

使用以下指令檢查服務狀態是否正常 systemctl status oled.service 如果都正常啟動服務會出現如下畫面:

步驟六:裝回上蓋並完成固定

  1. 確認線材未被擠壓
  2. 蓋回上蓋
  3. 順時鐘旋轉手擰螺絲完成固定

擺放與安裝方式

桌面模式

  • 將隨附的橡膠腳墊黏貼於外殼底部
  • 提供良好止滑與桌面散熱空間

懸臂模式(VESA 75)

  • 使用 M3 螺絲將 Panini 固定於支援 VESA 75 的螢幕懸臂
  • 懸臂需另行準備

進階與可選安裝項目

安裝 GPIO 與 CSI Camera

  • 可依需求安裝 40-pin GPIO 線材
  • 支援 CSI Camera 模組(如官方或相容相機)

安裝 M.2 SSD(2280)

建議在安裝上外殼前就把SSD先安裝好
  1. 移除 SSD 蓋板與固定螺絲
  2. 以斜角插入 M.2 SSD(注意方向)
  3. 鎖回 SSD 螺絲並裝回 SSD 蓋板

組裝完成檢查清單

  • 主板是否穩固無晃動
  • 所有 I/O 介面是否可正常插拔
  • 電源鍵與重置鍵是否正常
  • OLED 是否正常顯示
  • 風扇與散熱模組無干涉卡住等情形

實際使用與應用情境

Panini 外殼特別適合以下使用情境:
  • AI / IoT 教學與課程實作
  • Jetson Orin Nano Super 專案展示機
  • 長時間運作的邊緣運算系統
  • 搭配 OLED 顯示 IP、系統狀態的教學案例
金屬外殼在穩定度、耐用性與整體專業度上,明顯優於裸板或壓克力外殼。

結語

透過 Panini 專用外殼,Jetson Orin Nano™ Super 開發者套件不僅在外觀上更加專業,也在實際部署、保護性與擴充性上大幅提升。   參考資料: https://roboco.tw/zh/paniniwh#overview https://developer.nvidia.com/embedded/learn/jetson-orin-nano-devkit-user-guide/hardware_spec.html

相關文章 📎

留言 💬 (0)

還沒有留言,來當第一個。