隨著物聯網和邊緣運算的興起,Python 憑藉其易用性和豐富的函式庫,逐漸在嵌入式系統領域嶄露頭角。本文將介紹如何在 Raspberry Pi、MicroPython Pyboard 和 Jetson Nano 等平台上使用 Python 進行嵌入式開發,並結合實際案例說明 Python 在物聯網應用中的優勢。從感測器資料採集到雲端資料處理,Python 提供了簡潔高效的解決方案,讓開發者能更專注於應用邏輯的實作。
Python 在嵌入式系統的應用與物聯網簡介
根據 IEEE Spectrum 的報告,Python 目前在程式語言排行榜中名列第一。自 2016 年以來,Python 不斷上升,並在 2017 年躍升至綜合評比的第一名。雖然 Python 是一種非常有趣的程式語言,但它在嵌入式領域的影響力仍待加強。目前已有 Zerynth 和 MicroPython 等平台崛起,用於嵌入式系統開發。然而,嵌入式程式碼仍主要以 C 語言編寫。C 語言專家認為 C 語言執行速度更快且更為緊湊。
Python 能否用於嵌入式系統?
多年來,C/C++ 程式語言在嵌入式系統程式設計中佔據主導地位。另一方面,Python 有許多優點,使其成為適合嵌入式程式設計的語言。Python 不僅是最受歡迎的語言,也是嵌入式運算領域中成長最快的語言。或許這聽起來有些荒謬,但事實是 Python 已經開始侵蝕 C/C++ 的空間。
Python 可用於嵌入式、小型或最小硬體裝置,具體取決於裝置的限制程度。
問題來了:Python 能否用於微控制器的程式設計?
MicroPython 是 Python 3 程式語言的高效最佳化實作,允許對微控制器進行程式設計。MicroPython 是 Python 標準函式庫的一個小型子集,針對微控制器和受限環境進行了最佳化。
我們還將討論 PyBoard,一款專門為使用 MicroPython 程式設計而設計的微控制器板。
物聯網簡介
「物聯網」(IoT)一詞最初由 Kevin Ashton 於 1999 年提出,後來在全球範圍內得到廣泛接受。IoT 是由稱為「事物」的物理物件或人員組成的網路,這些物件內嵌有軟體、硬體、網路連線和感測器,使這些物件能夠收集和交換資料。IoT 透過提高資料收集、人工智慧演算法和連線性的潛力,使生活的各個方面變得「智慧」和「便捷」。IoT 系統基本上有四個組成部分,即感測器、連線性、資料處理和使用者介面,如圖 1.7 所示。
感測器
感測器/裝置是 IoT 系統的重要組成部分,有助於從周圍環境收集即時資料。這些資料複雜多樣。有時,裝置可能具有其他型別的感測器,除了感測外還執行某種智慧任務。
連線性
連線性是 IoT 的另一個組成部分。從感測器收集的所有資料都將傳送到雲端。這些感測器資料將透過多種通訊協定傳送到雲端,例如藍牙、無線、NFC、RFID、無線電協定和 Wi-Fi-Direct。
資料處理
一旦資料被收集並上傳到雲端,各種可用的資料處理軟體就會執行所需的處理演算法。
使用者介面
在對資料進行處理後,處理後的資料必須以某種方式提供給終端使用者。終端使用者在其智慧裝置上取得這些資料。有時,遠端使用者可以透過 IoT 控制各種裝置。
圖 1.7 IoT 的基本組成部分
圖表翻譯: 圖 1.7 展示了 IoT 的四個基本組成部分:感測器、連線性、資料處理和使用者介面。感測器負責收集即時資料,連線性確保資料傳輸到雲端,資料處理對收集的資料進行分析,最終透過使用者介面將處理結果呈現給使用者。
物聯網應用
IoT 有助於創造機會,透過使用感測器和網際網路與物理世界進行連線和互動。IoT 系統允許裝置透過網際網路進行遠端控制。這些裝置的互連有助於整個系統的自動化,從而提高系統的準確性、效率和經濟效益,同時將人工干預降至最低。
IoT 裝置在消費、商業、工業和基礎設施領域都有廣泛的應用。下面列舉了一些 IoT 的應用範例:
能源應用
IoT 在能源領域有廣泛的應用。節能非常重要,因此人們需要有效地利用能源。個人和組織正在尋找各種方法來最小化和控制能源消耗。隨著 IoT 技術的進步,可以在裝置級別、家庭級別、電網級別和配電級別監控能源消耗。它還有助於監控系統效能。
# 一個簡單的能源監控範例
class EnergyMonitor:
def __init__(self, device_id):
self.device_id = device_id
self.energy_consumption = 0
def update_energy_consumption(self, consumption):
self.energy_consumption = consumption
def get_energy_consumption(self):
return self.energy_consumption
# 使用範例
monitor = EnergyMonitor("Device123")
monitor.update_energy_consumption(100)
print(monitor.get_energy_consumption()) # 輸出:100
內容解密:
此範例展示了一個簡單的能源監控類別 EnergyMonitor,它具有初始化裝置 ID、更新和取得能源消耗的功能。這說明瞭 IoT 如何透過簡單的程式碼實作對裝置能源消耗的監控。
智慧家居/智慧城市
這是 IoT 最常見的實際應用之一。智慧家居系統確保了便利性和家居安全。在智慧城市下,它允許人們存取網際網路。IoT 有助於管理交通、垃圾管理、水資源分配和電力管理等。這將為城市管理部門提供便利。
醫療保健應用
在當今世界,健康監測非常重要。目前,人們需要定期監測自己的健康狀況。病人的智慧裝置不斷將資料更新到雲端,並在緊急情況下通知醫院/醫生。因此,如果病人緊急來到醫院,到達醫院時,他的健康報告已經被醫生診斷,醫院可以快速做出治療決定,這是非常關鍵的。
教育
IoT 在教育領域發揮著重要作用。教育系統中的 IoT 意味著更好的學習連線,有助於彌補教育領域的差距。如今,許多學校和學院已將 IoT 嵌入到他們的日常學習中。它提高了整體教育品質。
空氣和水汙染
IoT 在監測環境汙染方面也發揮著重要作用。有各種感測器可用於檢測空氣和水中的汙染。透過採用 IoT 系統,可以實作自動化並減少人為干預監測的工作。
農業
農業是我們經濟的主要支柱。如今,智慧農業非常重要,因為農民將獲得各種農業引數的即時資訊。安裝在遠端地區的 IoT 裝置測量各種引數,如土壤濕度、化學品施用、大壩水位,並將這些資訊即時提供給農民。
圖表翻譯: 此圖示展示了 IoT 系統的工作流程:首先透過感測器收集資料,然後將資料傳輸到雲端,接著在雲端進行資料處理,最後將處理結果呈現給使用者。這一流程清晰地展示了 IoT 系統如何實作自動化和智慧化。
組態Raspberry Pi、MicroPython Pyboard和Jetson Nano進行Python開發
在當今世界,人們無需花費大量時間來組態和熟悉任何嵌入式平台。主要重點應放在快速將設計的應用程式推向市場。考慮到這些要點,作者提供了詳細的步驟,介紹如何組態和程式設計平台。本文重點介紹三種不同的嵌入式平台,例如用於基本介面應用的Raspberry Pi板、用於物聯網(IoT)應用的MicroPython Py板,以及用於機器學習和深度學習應用的NVIDIA Jetson Nano板,使用Python程式設計與霧計算/雲端運算。
Raspberry Pi板的特點
Raspberry Pi是一款小型單板電腦(SBC)。透過連線鍵盤、滑鼠、顯示器等外設到Raspberry Pi,它將成為一台迷你個人電腦。Raspberry Pi常用於影像/影片處理、物聯網和機器人應用。與通用桌面相比,Raspberry Pi的速度有限,但仍能以更低的功耗和成本提供相當的能力。根據Debian的NOOBS作業系統(OS)和Raspbian OS是Raspberry Pi的官方作業系統。此外,還有其他作業系統,如Archlinux、Ubuntu、Windows 10、RISC OS、IoT Core等,適用於Raspberry Pi平台。目前,Raspbian OS已針對在Raspberry Pi上使用進行了最佳化。在Raspbian OS上可以高效地處理Python程式設計、瀏覽、文書處理、遊戲等任務。建議使用至少8GB儲存空間的microSD卡,以確保作業系統的平穩執行。本文使用的是Raspberry Pi 3 B+板,如圖2.1所示。
Raspberry Pi 3 B+硬體
圖2.2中突出顯示了Raspberry Pi 3 B+的硬體。以下是重要硬體功能的說明。“Raspberry Pi 3 Model B+”。https://static.raspberrypi.org/files/product-briefs/Raspberry-Pi-Model-Bplus-Product-Brief.pdf
不同版本Raspberry Pi的功能
表2.1列出了較為常見的Raspberry Pi型號及其功能。
| 功能 | Raspberry Pi型號B | Raspberry Pi 2型號B | Raspberry Pi 3型號B+ | Raspberry Pi Zero |
|---|---|---|---|---|
| SOC | Broadcom 2835 | Broadcom 2836 | Broadcom 2837B0 | Broadcom 2835 |
| CPU | ARM-11 | A7四核心 | A53四核心 | ARM-11 |
| 執行頻率(GHz) | 0.7 | 0.9 | 1.4 | 1 |
| RAM(SDRAM) | 512 MB | 1 GB | 1 GB | 512 MB |
| GPU速度(Videocore IV) | 0.25 GHz | 0.25 GHz | 0.4 GHz | 0.25 GHz |
| 儲存(microSD) | 支援 | 支援 | 支援 | 支援 |
| 乙太網路 | 支援 | 支援 | 支援 | 不支援 |
| 無線網路 | 不支援 | 不支援 | 藍牙和Wi-Fi | 不支援 |
GPIO與處理器
Raspberry Pi提供了通用輸入輸出(GPIO),可用於諸如控制馬達、感測器等多種應用。Raspberry Pi的運算單元是根據ARM的Broadcom處理器SoC,該SoC具有片上GPU(圖形處理單元)。根據Raspberry Pi的不同型號,處理器的時脈速度範圍從0.7到1.2 GHz。提供了容量從256 MB到1 GB不等的SDRAM。Raspberry Pi上提供了諸如SPI、I2C、I2S和UART等流行的序列介面。
樹莓派(Raspberry Pi)硬體特性與組態
樹莓派是一款廣泛使用的單板電腦,具備多種介面和功能,使其成為物聯網(IoT)和嵌入式系統開發的理想選擇。本章節將詳細介紹樹莓派的硬體特性及其組態方法。
樹莓派硬體特性
樹莓派3型號B+(Raspberry Pi 3 Model B+)具備多種介面和功能,包括:
- CSI攝像頭介面:用於連線Pi攝像頭至Broadcom處理器。
- HDMI介面:用於傳輸未壓縮的視訊和數位音訊至支援HDMI的顯示器。
- 複合音訊和視訊輸出:用於將音訊和視訊傳輸至音訊/視訊系統。
- 電源LED:紅色LED指示電源狀態,當供電電壓低於4.63V時開始閃爍。
- DSI顯示介面:使用15針線纜連線至LCD,是一種高速、高解析度的顯示介面,直接從GPU傳輸視訊資料至顯示器。
- 活動LED:綠色LED指示microSD卡活動狀態。
樹莓派組態
燒錄作業系統映像至樹莓派
樹莓派作業系統(Raspberry Pi OS)是根據Debian 10的開源作業系統。有兩種方法可將Raspberry Pi OS安裝至空白的microSD卡:
使用Raspberry Pi Imager(方法1)
- 下載並安裝Raspberry Pi Imager。
- 開啟Raspberry Pi Imager並選擇作業系統。
- 插入microSD卡並選擇其作為安裝目標。
- 點選“寫入”開始燒錄程式。
使用balenaEtcher(方法2)
- 下載Raspberry Pi Desktop OS。
- 下載並安裝balenaEtcher。
- 使用balenaEtcher選擇下載的映像檔案並燒錄至microSD卡。
首次啟動樹莓派
- 將microSD卡插入樹莓派。
- 連線電源、鍵盤、滑鼠和顯示器。
- 根據提示完成快速設定,包括選擇國家、語言、時區、設定帳戶密碼、連線無線網路和設定桌面。
MicroPython Pyboard特性與組態
MicroPython Pyboard是一款小型開發板,設計用於執行MicroPython,以實作各種物聯網專案。Pyboard V1.1規格包括:
- STM32F405RG微控制器(時脈頻率168 MHz Cortex-M4核心)
- 1024 KB快閃記憶體,192 KB RAM
- microUSB連線埠供電
- MMA7660 3軸加速計
- microSD卡插槽
- 多個GPIO、實時時鐘(RTC)、模數轉換器(ADC)和數模轉換器(DAC)
組態MicroPython Pyboard
- 將Pyboard連線至電腦,作為USB儲存裝置顯示。
- 編輯
main.py檔案並儲存MicroPython程式碼。 - 按下重置按鈕(RST)以執行程式碼。
程式碼範例與詳解
以下是一個簡單的MicroPython程式碼範例,用於控制Pyboard上的LED燈閃爍:
import pyb
# 初始化LED
led = pyb.LED(1)
while True:
# 開啟LED
led.on()
# 延遲500毫秒
pyb.delay(500)
# 關閉LED
led.off()
# 延遲500毫秒
pyb.delay(500)
內容解密:
import pyb:匯入Pyboard的MicroPython模組。led = pyb.LED(1):初始化第一個LED燈。while True:進入無限迴圈,使LED燈持續閃爍。led.on()和led.off():開啟和關閉LED燈。pyb.delay(500):延遲500毫秒,控制閃爍頻率。
Jetson Nano 開發板特性與組態
Jetson Nano 簡介
Jetson Nano 是一款強大的單板電腦(SBC),專為嵌入式系統和機器學習應用而設計。其搭載的 NVIDIA Maxwell 架構 GPU 提供了強大的平行運算能力,使其能夠處理影像分類別、物件偵測和模式識別等複雜任務。
硬體規格
Jetson Nano 的硬體規格如下:
- 處理器:四核心 ARM Cortex-A57,時脈 1.43 GHz
- GPU:128 核心 NVIDIA Maxwell 架構,效能達 472 GFLOPs
- 記憶體:4 GB 64 位元 LPDDR4 RAM,搭配 16 GB eMMC 儲存
- 介面:MIPI-CSI 相機插槽、千兆乙太網路埠、四個 USB 3.0 插槽、microSD 卡槽、HDMI 和顯示埠、Power-over-Ethernet (PoE)
- 擴充介面:40 針腳擴充介面,提供 GPIO、I2C、I2S、SPI、PWM 和 UART 等功能
Jetson Nano 的組態
燒錄作業系統映像檔至 microSD 卡
要使用 Jetson Nano,首先需要將作業系統映像檔燒錄至 microSD 卡。建議使用至少 32 GB 容量的 microSD 卡(UHS-1 級別),64 GB 或以上更佳。
# 使用 dd 指令燒錄映像檔至 microSD 卡(需在 Linux 或 macOS 環境下執行)
sudo dd if=jetson_nano_image.img of=/dev/sdX bs=4M status=progress
sync
內容解密:
if=jetson_nano_image.img:指定要燒錄的映像檔路徑。of=/dev/sdX:指定 microSD 卡的裝置路徑,需根據實際情況替換sdX。bs=4M:設定每次讀寫的區塊大小為 4 MB,以加快燒錄速度。status=progress:顯示燒錄進度。sync:確保所有資料已寫入 microSD 卡。
電源供應
Jetson Nano 可透過 micro USB 5V 電源供應,需大於 3A,或使用 DC 直流電源輸入,需大於 4A,並在 J48 接頭上安裝跳線帽。
NVIDIA JetPack SDK 和 Deepstream SDK
Jetson Nano 專為利用 NVIDIA 的 JetPack SDK 和 Deepstream SDK 中的深度學習、圖形和電腦視覺函式庫而設計,提供強大的加速能力。
Jetson Nano 硬體架構圖
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title Python嵌入式系統應用與物聯網實踐
package "物聯網架構" {
package "感知層" {
component [感測器] as sensor
component [執行器] as actuator
component [嵌入式裝置] as device
}
package "網路層" {
component [閘道器] as gateway
component [MQTT Broker] as mqtt
component [邊緣運算] as edge
}
package "平台層" {
cloud "IoT Platform" as platform
database [時序資料庫] as tsdb
component [規則引擎] as rules
}
package "應用層" {
component [監控儀表板] as dashboard
component [告警系統] as alert
component [數據分析] as analytics
}
}
sensor --> device : 資料採集
device --> gateway : 資料傳輸
gateway --> mqtt : MQTT 協議
mqtt --> edge : 邊緣處理
edge --> platform : 雲端上傳
platform --> tsdb : 資料儲存
platform --> rules : 規則處理
rules --> alert : 觸發告警
tsdb --> analytics : 資料分析
analytics --> dashboard : 視覺化
@enduml
圖表翻譯: 此圖表展示了 Jetson Nano 的主要硬體組成,包括處理器、GPU、記憶體、儲存裝置、擴充介面和各種輸入輸出介面。這些元件共同構成了 Jetson Nano 的強大功能,使其能夠支援多種應用場景。