返回文章列表

Python嵌入式系統應用與物聯網實踐

本文探討 Python 在嵌入式系統和物聯網領域的應用,涵蓋 MicroPython、Raspberry Pi 和 Jetson Nano 等平台的特性、組態方法與程式碼範例。從硬體特性、作業系統安裝到程式碼實踐,提供讀者 Python

物聯網 嵌入式系統

隨著物聯網和邊緣運算的興起,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型號BRaspberry Pi 2型號BRaspberry Pi 3型號B+Raspberry Pi Zero
SOCBroadcom 2835Broadcom 2836Broadcom 2837B0Broadcom 2835
CPUARM-11A7四核心A53四核心ARM-11
執行頻率(GHz)0.70.91.41
RAM(SDRAM)512 MB1 GB1 GB512 MB
GPU速度(Videocore IV)0.25 GHz0.25 GHz0.4 GHz0.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卡:

  1. 使用Raspberry Pi Imager(方法1)

    • 下載並安裝Raspberry Pi Imager。
    • 開啟Raspberry Pi Imager並選擇作業系統。
    • 插入microSD卡並選擇其作為安裝目標。
    • 點選“寫入”開始燒錄程式。
  2. 使用balenaEtcher(方法2)

    • 下載Raspberry Pi Desktop OS。
    • 下載並安裝balenaEtcher。
    • 使用balenaEtcher選擇下載的映像檔案並燒錄至microSD卡。

首次啟動樹莓派

  1. 將microSD卡插入樹莓派。
  2. 連線電源、鍵盤、滑鼠和顯示器。
  3. 根據提示完成快速設定,包括選擇國家、語言、時區、設定帳戶密碼、連線無線網路和設定桌面。

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

  1. 將Pyboard連線至電腦,作為USB儲存裝置顯示。
  2. 編輯main.py檔案並儲存MicroPython程式碼。
  3. 按下重置按鈕(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)

內容解密:

  1. import pyb:匯入Pyboard的MicroPython模組。
  2. led = pyb.LED(1):初始化第一個LED燈。
  3. while True:進入無限迴圈,使LED燈持續閃爍。
  4. led.on()led.off():開啟和關閉LED燈。
  5. 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

內容解密:

  1. if=jetson_nano_image.img:指定要燒錄的映像檔路徑。
  2. of=/dev/sdX:指定 microSD 卡的裝置路徑,需根據實際情況替換 sdX
  3. bs=4M:設定每次讀寫的區塊大小為 4 MB,以加快燒錄速度。
  4. status=progress:顯示燒錄進度。
  5. 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 的強大功能,使其能夠支援多種應用場景。