返回文章列表

Jetson Nano 樹莓派開發

本文提供 Jetson Nano 與樹莓派開發板的組態、設定與應用,涵蓋硬體需求、作業系統安裝、GPIO 控制、PWM 應用、OLED 顯示介面設定,以及攝影機模組的使用,適合嵌入式系統開發入門。

嵌入式系統 硬體開發

Jetson Nano 與樹莓派都是常用的嵌入式系統開發板,本文將引導讀者完成從硬體設定到軟體應用的完整流程。文章涵蓋 Jetson Nano 的硬體需求、microSD 卡的格式化與燒錄、首次啟動與設定、網路介面卡安裝,以及樹莓派的 GPIO 控制、PWM 應用、OLED 顯示介面設定和攝影機模組的使用,提供豐富的程式碼範例與解說,讓讀者快速上手嵌入式系統開發。 透過詳細的步驟說明和圖示,讀者可以輕鬆理解並實作各種應用,例如控制 LED 燈、使用 PWM 調節亮度、在 OLED 螢幕上顯示資訊,以及使用攝影機模組拍攝照片和錄製影片。 此外,文章也提供了一些進階的應用技巧,例如在拍攝的圖片上新增文字,讓讀者能夠更深入地探索嵌入式系統的應用。

組態與設定Jetson Nano開發板

硬體需求與初始設定

要開始使用Jetson Nano開發板,首先需要準備以下硬體:

  • Jetson Nano開發板
  • 至少16GB容量的microSD卡(建議使用高速卡以提高效能)
  • micro USB電源供應器(5VDC,3A)
  • 鍵盤
  • 滑鼠
  • HDMI顯示器
  • 內建SD卡讀卡器或外部SD卡轉接器

microSD卡的格式化與燒錄作業系統映像檔

  1. 下載Jetson Nano Developer Kit的作業系統映像檔:可從NVIDIA官方網站下載(https://developer.nvidia.com/jetson-nano-sd-card-image)。確保電腦上有超過6GB的可用空間。
  2. 格式化microSD卡
    • 下載並安裝SD卡格式化工具(https://www.sdcard.org/downloads/formatter/sd-memory-card-formatter-for-windows-download/)。
    • 選擇與microSD卡對應的磁碟機。
    • 選擇快速格式化選項,並清空卷標欄位。
    • 點選「格式化」按鈕開始處理。

圖示:SD卡格式化工具介面

此圖示顯示了SD卡格式化工具的使用介面。

  1. 燒錄作業系統映像檔
    • 使用BalenaEtcher軟體(https://www.balena.io/etcher)將下載的作業系統映像檔燒錄到microSD卡上。
    • 操作步驟與燒錄Raspberry Pi的作業系統映像檔類別似。

圖示:BalenaEtcher燒錄介面

此圖示顯示了BalenaEtcher軟體在燒錄前的介面。

Jetson Nano的首次啟動

  1. 將含有作業系統映像檔的microSD卡插入Jetson Nano模組底部的插槽中。
  2. 使用micro USB聯結器為Jetson Nano供電,或使用直流插孔作為替代的+5V DC輸入方式。
  3. 將顯示器透過HDMI埠連線,同時連線USB滑鼠和USB鍵盤。
  4. 開啟電源後,綠色LED燈亮起,Jetson Nano開始首次啟動。

圖示:microSD卡插槽位置與首次啟動畫面

此圖示展示了microSD卡的插槽位置以及Jetson Nano首次啟動時的畫面。

首次啟動後的初始設定

首次啟動將引導使用者進行一系列初始設定畫面,包括:

  • NVIDIA Jetson軟體最終使用者授權協定的審閱與接受。
  • 語言、時區和鍵盤佈局的選擇。
  • 電腦名稱、使用者名稱和密碼的輸入。
  • APP分割區大小的選擇。

圖示:使用者名稱與密碼輸入畫面

此圖示顯示了輸入使用者名稱和密碼的畫面。

完成這些步驟後,Jetson Nano將成功啟動並顯示桌面環境,同時展示鍵盤快捷鍵。

為Jetson Nano安裝網路介面卡(NIC)

由於Jetson Nano沒有內建Wi-Fi和藍牙功能,需要透過M.2 Key E擴充套件槽安裝網路介面卡(NIC)來實作無線連線功能。這裡使用的是Intel Dual Band Wireless AC 8265 NIC。

Intel 8265AC NIC規格

專案規格
NIC晶片Intel 8265AC
協定802.11ac
工作頻段2.4/5 GHz
最大速度300 Mbps/867 Mbps
藍牙版本4.2
介面M.2 Key E
天線聯結器IPEX聯結器
重量50 g
模組尺寸22 mm × 30 mm × 2.4 mm

安裝步驟:

  1. 移除SODIMM Jetson Nano模組:小心地移除模組兩側的螺絲並取下模組。

    圖示:移除SODIMM模組後的Jetson Nano開發板

    此圖示顯示了移除SODIMM模組後的開發板。

  2. 連線天線:將UFL聯結器從天線連線到NIC上。

  3. 安裝NIC:將NIC插入M.2 Key E擴充套件槽,並鎖緊螺絲固定。

    圖示:安裝NIC後的Jetson Nano開發板

    此圖示展示了安裝NIC後的開發板狀態。

  4. 重新安裝SODIMM模組:將SODIMM模組放回原位並鎖緊螺絲。

圖表翻譯:

上述過程中使用的Plantuml圖表詳細展示了Jetson Nano開發板的硬體組態與NIC的安裝流程。此圖表清晰地呈現了各個元件之間的連線關係以及安裝步驟中的關鍵細節。

簡單的樹莓派應使用案例項

在全球各地,人們使用樹莓派來學習程式設計技能、構建簡單的專案、實作簡單的叢集,以及進行少量的邊緣運算。樹莓派被視為一種低成本、袖珍型的迷你電腦,用於各種應用。在本章中,我們專注於一些簡單應用的實際操作實作,例如介面 LED、OLED 顯示、攝像頭介面以捕捉視訊/圖片、不同型別的馬達控制,以及最後實作與手機的藍牙連線。為了實作這些範例,我們使用了已整合到 Raspbian OS 中的 Thonny Python IDE。

讓 LED 閃爍

要透過通用輸入/輸出(GPIO)引腳將 LED 與樹莓派連線,我們需要了解如何存取樹莓派的 GPIO。樹莓派的 GPIO 引腳可用於與通用輸入/輸出(I/O)裝置介面。樹莓派 3 B+ 具有板載的 26 個可程式設計 GPIO 引腳,用於介面和控制多個 I/O 裝置。它可以使用板載 WiFi 或 WiFi USB 介面卡連線到網際網路,並且一些引腳還被多路復用為 I2C、SPI、UART 等。

樹莓派 GPIO 存取

有幾種方法可以指定樹莓派的 GPIO 引腳,如圖 3.1 所示。 i. 物理(BOARD):引腳編號從 1 到 40,對應於標頭上的物理位置。 ii. Broadcom(BCM):通常稱為“GPIO”(GPIO1–GPIO26)或 RPi.GPIO。 iii. WiringPi—圖 3.1b 顯示了 Wiring Pi 中的引腳編號。

安裝 RPi.GPIO Python 函式庫

可以使用 ‘RPi.GPIO’ Python 函式庫組態 I/O 引腳進行讀寫。有兩種簡單的方法可以安裝 GPIO 函式庫。

方法 1:從倉函式庫安裝 GPIO

步驟 1:開啟樹莓派控制檯並使用以下命令更新可用的套件版本:

sudo apt-get update

步驟 2:使用以下命令安裝 RPi.GPIO 套件:

sudo apt-get install rpi.gpio
方法 2:手動安裝

步驟 1:使用以下命令下載函式庫:

wget https://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.5.11.tar.gz

步驟 2:使用以下命令解壓縮下載的檔案:

tar -xvf RPi.GPIO-0.5.11.tar.gz

步驟 3:導航到新目錄。

cd RPi.GPIO-0.5.11

步驟 4:使用以下命令安裝 RPi.GPIO:

sudo python setup.py install

用於閃爍 LED 的 Python 程式

在此範例中,四個 LED 與樹莓派的 GPIO 相連。這裡需要四個 LED、四個 330 Ω 電阻和一個樹莓派板。每個 LED 有兩個引線——一個陰極(較短的引線)和一個陽極(較長的引線)。選擇陰極並使用 330-Ω 電阻將其接地(引腳 6)。另一端分別連線到引腳 10、11、12 和 13。如圖 3.2a 所示進行連線,並給出了整個實作的流程圖(圖 3.2b)。在 Thonny IDE 中輸入以下程式碼並執行。

# 使4個LED閃爍
import RPi.GPIO as GPIO
from time import sleep

GPIO.setmode(GPIO.BOARD)
pin_1 = 10
pin_2 = 11
pin_3 = 12
pin_4 = 13

GPIO.setup(pin_1, GPIO.OUT)
GPIO.setup(pin_2, GPIO.OUT)
GPIO.setup(pin_3, GPIO.OUT)
GPIO.setup(pin_4, GPIO.OUT)

GPIO.output(pin_1, GPIO.HIGH)
sleep(2)
GPIO.output(pin_2, GPIO.LOW)
sleep(2)
GPIO.output(pin_3, GPIO.HIGH)
sleep(2)
GPIO.output(pin_4, GPIO.LOW)

GPIO.cleanup()

上述程式的解釋

import RPi.GPIO as GPIO

匯入 RPi.GPIO 包,該包具有控制 GPIO 的類別,以便在 Python 中使用樹莓派 GPIO 引腳。

from time import sleep

匯入時間模組,當執行陳述式“sleep(t)”時,下一個程式碼行將在 t 秒後執行。例如,sleep(2) 表示下一條陳述式將在 2 秒後執行。

程式碼詳細解密:

  1. 匯入必要的模組:首先,我們匯入了 RPi.GPIOtime 模組。RPi.GPIO 用於控制樹莓派的 GPIO 引腳,而 time 模組用於在 LED 的狀態變化之間建立延遲。

  2. 設定 GPIO 模式GPIO.setmode(GPIO.BOARD) 將 GPIO 模式設定為根據板的編號系統,這意味著我們將根據引腳在樹莓派板上的物理位置來參照它們。

  3. 定義引腳:我們定義了將用於連線 LED 的引腳(pin_1 = 10, pin_2 = 11, pin_3 = 12, pin_4 = 13)。

  4. 設定引腳為輸出模式:使用 GPIO.setup() 將我們定義的引腳設定為輸出模式,這是因為我們要控制 LED 的狀態(亮或滅)。

  5. 控制 LED:使用 GPIO.output() 控制 LED 的狀態。例如,GPIO.output(pin_1, GPIO.HIGH) 將第一個 LED 亮起,而 GPIO.output(pin_2, GPIO.LOW) 將第二個 LED 熄滅。sleep(2) 用於在每個 LED 狀態變化之間建立一個延遲。

  6. 清理 GPIO:最後,GPIO.cleanup() 用於清理在程式結束時由 GPIO 操作所使用的資源,這是一種良好的實踐,有助於避免潛在的問題。

這個程式展示瞭如何使用 Python 控制與樹莓派相連的 LED,是學習物聯網專案和樹莓派程式設計的一個很好的起點。

使用脈寬調變(PWM)控制LED燈

脈寬調變(PWM)是一種利用數位訊號源產生類別比訊號的方法。PWM訊號包含兩個主要元件:工作週期和頻率。工作週期描述了訊號處於高電平(開啟狀態)的時間佔整個週期的百分比。頻率決定了PWM完成一個週期的速度,例如,100 Hz代表每秒100個週期,因此它在高低狀態之間切換的速度。

PWM的工作原理

PWM用於控制數位訊號的振幅,以控制裝置。與使用類別比電位器調節功率輸出相比,PWM的優勢在於功率損失非常小。使用電位器調節功率輸出會透過限制電氣路徑來消耗功率,從而導致功率損失以熱的形式出現。相反,PWM實際上是關閉功率輸出,而不是限制它。

使用Python控制LED燈的PWM範例

import RPi.GPIO as GPIO
from time import sleep

# 設定GPIO模式為BOARD模式
GPIO.setmode(GPIO.BOARD)

# 設定PWM輸出的引腳為18
pin = 18
GPIO.setup(pin, GPIO.OUT)

# 設定PWM頻率為200 Hz
frequency = 200
pwm1 = GPIO.PWM(pin, frequency)

# 啟動PWM,初始工作週期為0%
pwm1.start(0)

try:
    # 逐漸增加工作週期到100%
    for i in range(0, 100):
        pwm1.ChangeDutyCycle(i)
        sleep(0.02)
    
    # 逐漸減少工作週期到0%
    for i in range(100, 0, -1):
        pwm1.ChangeDutyCycle(i)
        sleep(0.02)
finally:
    # 停止PWM並清理GPIO資源
    pwm1.stop()
    GPIO.cleanup()

內容解密:

  1. GPIO.setmode(GPIO.BOARD):設定GPIO的編號模式為實體引腳編號。
  2. GPIO.setup(pin, GPIO.OUT):將指定的引腳設定為輸出模式。
  3. pwm1 = GPIO.PWM(pin, frequency):在指定的引腳上初始化PWM,設定頻率。
  4. pwm1.start(0):啟動PWM,初始工作週期設為0%。
  5. pwm1.ChangeDutyCycle(i):改變PWM的工作週期。
  6. sleep(0.02):延遲一段時間,以控制工作週期變化的速度。
  7. pwm1.stop():停止PWM輸出。
  8. GPIO.cleanup():清理GPIO資源,釋放引腳。

OLED顯示介面

為了與外界互動並使顯示更具吸引力和可讀性,OLED顯示器與樹莓派板相連。它透過引腳3(SDA)和5(SCL)支援I2C通訊。樹莓派的引腳1(3.3V)和9(GND)用於為OLED供電。

連線OLED顯示器

  1. 將OLED顯示器的VCC連線到樹莓派的3.3V(引腳1)。
  2. 將OLED顯示器的SDA連線到樹莓派的SDA(引腳3)。
  3. 將OLED顯示器的SCL連線到樹莓派的SCL(引腳5)。
  4. 將OLED顯示器的GND連線到樹莓派的GND(引腳9)。

在樹莓派上設定I2C

  1. 檢查I2C匯流排是否已在樹莓派上啟用。
  2. 開啟命令終端,輸入 sudo raspi-config
  3. 導航到“介面選項”並啟用I2C。

安裝必要的函式庫

sudo apt update
sudo apt upgrade

使用以下命令檢查I2C十六進位地址:

i2cdetect -y 1

在Thonny IDE中安裝Adafruit_Python_SSD1306函式庫

  1. 開啟Thonny IDE。
  2. 選擇“工具” > “管理外掛”。
  3. 搜尋“Adafruit_Python_SSD1306”並安裝。

在OLED上顯示文字的範例程式碼

import Adafruit_SSD1306
from PIL import Image, ImageDraw, ImageFont

# 初始化OLED顯示器
disp = Adafruit_SSD1306.SSD1306_128_32(rst=None)

# 初始化顯示器
disp.begin()

# 清除顯示內容
disp.clear()
disp.display()

# 建立一個影像物件
width = disp.width
height = disp.height
image = Image.new('1', (width, height))

# 在影像上繪圖
draw = ImageDraw.Draw(image)
draw.rectangle((0, 0, width, height), outline=0, fill=0)

# 繪製一些形狀
padding = 2
shape_width = 20
top = padding
bottom = height - padding
x = padding

# 在這裡新增您的繪圖程式碼

內容解密:

  1. disp = Adafruit_SSD1306.SSD1306_128_32(rst=None):初始化SSD1306 OLED顯示器。
  2. disp.begin():初始化顯示器。
  3. disp.clear()disp.display():清除顯示內容並更新顯示。
  4. image = Image.new(‘1’, (width, height)):建立一個新的單色影像。
  5. draw = ImageDraw.Draw(image):建立一個繪圖物件。
  6. draw.rectangle((0, 0, width, height), outline=0, fill=0):繪製一個矩形以清除影像。

此圖示展示了使用樹莓派控制LED燈和OLED顯示器的基本步驟和程式碼範例。透過這些範例,您可以瞭解如何使用Python控制硬體裝置,並實作一些簡單的應用。

樹莓派(Raspberry Pi)攝影機模組應用

簡介

本章節將介紹如何使用樹莓派(Raspberry Pi)與其攝影機模組(Camera Module)進行圖片拍攝、影片錄製以及影像效果處理。所有目前的樹莓派型號都具備攝影機序列介面(CSI)埠,用於連線攝影機模組。

攝影機模組版本

攝影機模組有兩個主要版本:

  • 標準版本:適用於正常光線下的拍攝。
  • NoIR 版本:具備紅外線濾鏡,可在黑暗環境中與紅外線光源配合使用。

安裝 Picamera 函式庫

要使用攝影機模組,需安裝 picamera 函式庫。安裝步驟如下:

  1. 使用 apt 安裝:

sudo apt-get update sudo apt-get install python-picamera # 適用於 Python 2 sudo apt-get install python3-picamera # 適用於 Python 3


2.  或者使用 Python 的 `pip` 工具安裝:

    ```bash
sudo pip install picamera
sudo pip install "picamera[array]"
sudo pip install -U picamera  # 更新安裝

連線攝影機模組至樹莓派

  1. 開啟攝影機埠:關閉樹莓派電源,位於 LAN 連線埠和 HDMI 連線埠之間的 CSI 埠即為攝影機模組連線埠。使用兩根手指輕輕拉起兩端以開啟埠。

  2. 插入攝影機線纜:將線纜的藍色一側朝向乙太網路連線埠,銀色一側朝向 HDMI 連線埠,輕輕拉開 CSI 埠的夾子並插入相機模組的排線。

  3. 關閉攝影機埠:將塑膠夾子推回原位以關閉埠。

  4. 啟用樹莓派上的攝影機介面:開啟樹莓派,進入主選單,開啟樹莓派設定工具,選擇介面標籤並確保攝影機已啟用。

  5. 透過命令列測試攝影機模組:開啟終端機視窗,輸入以下命令以拍攝靜態圖片並儲存至桌面:

raspistill -o Desktop/image.jpg


    此命令執行時,攝影機預覽將開啟 5 秒後拍攝靜態圖片。

### 使用 Python 程式控制攝影機模組

#### 範例程式碼:拍攝圖片

```python
# 使用攝影機模組拍攝圖片的 Python 程式
from picamera import PiCamera
from time import sleep

filepath = "/home/pi/Desktop/img%s.jpg"
camera = PiCamera()
camera.resolution = (1280, 720)

for i in range(0, 5):
    sleep(5)
    camera.capture(filepath % i)
    print("圖片已拍攝")

#### 內容解密:

  • 程式碼首先匯入必要的函式庫,包括 PiCamerasleep
  • 設定圖片儲存路徑和檔名格式。
  • 初始化 PiCamera 物件並設定解析度為 1280x720。
  • 使用迴圈每隔 5 秒拍攝一張圖片,共拍攝 5 張。

範例程式碼:在拍攝圖片上新增文字

# 在拍攝圖片上新增文字的 Python 程式
from picamera import PiCamera
from time import sleep

filepath = "/home/pi/Desktop/image.jpg"
camera = PiCamera()
camera.resolution = (2592, 1944)
camera.framerate = 15
camera.start_preview()
camera.annotate_text = "Hello Friends!"
camera.annotate_text_size = 100
sleep(5)
camera.capture(filepath)
camera.stop_preview()

#### 內容解密:

  • 程式碼初始化 PiCamera 物件並設定解析度和幀率。
  • 啟動預覽並在預覽上新增註解文字「Hello Friends!」。
  • 設定註解文字大小並等待 5 秒後拍攝圖片。
  • 將圖片儲存至指定路徑並停止預覽。

範例程式碼:錄製影片

# 使用攝影機模組錄製影片的 Python 程式
from picamera import PiCamera
from time import sleep

camera = PiCamera()
camera.resolution = (1920, 1080)
camera.start_preview()
camera.start_recording('/home/pi/Desktop/video.h264')
sleep(10)
camera.stop_recording()
camera.stop_preview()

#### 內容解密:

  • 程式碼初始化 PiCamera 物件並設定解析度。
  • 啟動預覽和錄製功能,將影片儲存至指定路徑。
  • 等待 10 秒後停止錄製並關閉預覽。

本章節介紹瞭如何使用樹莓派和其攝影機模組進行圖片拍攝、新增文字和影片錄製。透過上述範例和程式碼解說,讀者可以輕鬆上手並實作更多有趣的應用。