使用 Raspberry Pi 3 快速進行開發(相較於難以取得的 Pi Zero)

資料提供者:Digi-Key 北美編輯群

Raspberry Pi 板的各種款式已經為開發人員帶來眾多優勢,無論是專業或業餘人士都受用。即便 Raspberry Pi Zero 受到萬眾矚目,但取得相當不易。幸好,設計人員仍可挑選其他 Pi 系列板件,同樣具備優異特點,能滿足應用需求。

Raspberry Pi 3 搭載四核心處理器,且記憶體是單核心 Pi Zero 的兩倍。對於需要小型設計覆蓋區,但又對 Pi Zero 效能感到失望的開發者而言,Raspberry Pi Compute Module 3 (CM3) 兼具 Pi 3 的高效能表現,又採用 Pi Zero 一樣的信用卡大小覆蓋區。利用相當多種附加硬體開發板以及立即可用的軟體,開發人員能夠藉由 Pi 3 與 CM3 滿足眾多應用的需求。

Raspberry Pi 入門與運作

Raspberry Pi 系統提供穩固的開放原始碼基礎,讓廠商、第三方開發人員及使用者本身能利用不斷成長的軟硬體生態系統並對其作出貢獻。Pi 的硬體一開始是由 Raspberry Pi Foundation 開發作為運算教學的低成本平台,後來演變成適用於快速原型開發、功能強大但仍保持低成本的平台,並且逐漸成為嵌入式運算平台。

Pi 的軟體能提供類似的效能,並且容易取得。Pi 板件運行 Raspbian 作業系統,是一種專為 Raspberry Pi 板件進行最佳化的 GNU/Linux 作業系統 (OS) 版本。開發人員能將內含 Raspbian 安裝程式 NOOBS 的 SD 卡插入 Pi 板件的 SD 介面,幾秒鐘後便會出現熟悉的 Linux 環境並可開始使用。

由於 Raspberry Pi 的社群相當活躍,具有特定需求的開發人員也能選擇其他替代作業系統,包含桌面版 Ubuntu、Ubuntu Core、Windows 10 IoT Core、以 Linux 為基礎的 Open Source Media Center (OSMC) 以及 RISC OS 等等。若要使用這些發行版本,開發人員只需要將映像下載並儲存到 SD 卡中,然後載入到系統中即可。最後,軟體工程師享有一套豐富的軟體程式庫,可支援用多種程式語言進行開發。

Pi 的剖析

就硬體層面而言,Pi 的硬體已發展出三大分支,這些分支在效能、大小及功能方面存在一些顯著的差異(表 1)。最近推出的 Pi Zero 以體積小而聞名,可作為入門級板件使用,為了達到更低的成本與更小的覆蓋區,犧牲了一些功能要件。相比之下,Pi 3 及其嵌入式款式 CM3 則配有高效能的四核心處理器及大量記憶體,能提供嵌入式應用所需的健全硬體平台。而且,CM3 的覆蓋區與 Pi Zero 幾乎相同,又沒有犧牲效能或功能。

Pi 處理器 記憶體 尺寸 IO
Pi 3 BCM2837(1.2 GHz 64 位元四核心 ARM Cortex-A53,搭配雙核心 VideoCore IV GPU)

1 GB RAM

NVM:Micro SD 卡槽

85 mm x 56 mm

Pi 40 排針座

40 個 GPIO

802.11n Wi-Fi

藍牙 4.1

乙太網路

USB

HDMI

AV 埠

相機介面 (CSI)

顯示器介面 (DSI)

Pi CM3 與 Pi 3 相同

1 GB RAM

NVM:板載 4 GB eMMC 快閃

67.6 mm x 31 mm

200 引腳 SODIMM

48 個 GPIO

2x I2C

2x SPI

2x UART

2x SD/SDIO

HDMI

USB

DPI、SMI、CSI、DSI

Pi Zero BCM2835(1 GHz 單核心 ARM1176)

512 MB RAM

NVM:Micro SD 卡槽

65 mm x 30 mm

Pi 40 引腳通孔

HDMI

USB

HAT 相容排針座

複合視訊與重置排針座

CSI 相機連接器

表 1:Raspberry Pi 3、Compute Module 3 (CM3) 及 Pi Zero 的比較(來源:Digi-Key Electronics,依據 Raspberry Pi Foundation 的資料編製)

Raspberry Pi 等平台成功的關鍵要素在於採用標準型硬體介面。近期推出的 Pi 板件,包含 Pi 3 和 Pi Zero,皆提供相同的 40 引腳介面,能接出 28 個 GPIO 引腳,有些甚至更倍增以用於 I2C、SPI 與 UART 連接(圖 1)。除了 GPIO 引腳之外,Pi 的標準介面也提供 3.3 V、5 V、地線,以及其他像是 EEPROM ID 的線路。拜這種通用型引腳配置所賜,Pi 使用者能從第三方廠商找到眾多附加板,皆以此標準介面作為建構基礎。

Pi 板件包括 Pi 3 與 Pi Zero 的示意圖

圖 1:Pi 板件,包括 Pi 3 和 Pi Zero 皆具有 40 引腳介面,能從板件主機處理器及相關的元件中接出 GPIO 與其他線路。(圖片來源:Raspberry Pi Foundation)

但對於 Pi Zero 的使用者,此 40 引腳介面會在 PCB 上以電鍍通孔的形式提供,使用者需要壓入或在通孔連接器排針座上進行焊接。對於 Pi 3 來說,連接器排針座本身為標配(圖 2),同樣的,連接器也是標配,可連接 Pi Zero 不提供的功能,如 Wi-Fi 和乙太網路,如表格所示。

Pi Zero 與 Pi 3 板件圖片

圖 2:為了提供 Pi 的標準 40 引腳介面,Pi Zero (a) 僅提供通孔連接,而 Pi 3 (b) 則含有 40 引腳連接器,能夠接受稱為 HAT(加裝硬體)的附加板。(圖片來源:Raspberry Pi Foundation)

附加硬體

因為 Pi 介面提供電源、接地及 GPIO,開發人員能將自己的離散電路直接配線至 Pi 3 的 GPIO 介面引腳。但 Pi 平台無需讓使用者從頭開始為電路配線,而是提供更有效率的方式,來擴大 Pi 3 系統的功能。Pi 3 的 40 引腳排針座在此提供了標準的介面,能將附加板配置成加裝硬體 (HAT)。藉助這個簡易的電氣與機械介面,開發人員能利用應用專屬功能快速強化基礎的 Pi 3 板件。開發人員只要將相容於 Pi 的附加 HAT 壓入至 40 引腳連接器即可,甚至可打造附加電路板堆疊,共用這一個介面。

開發人員有大量的附加板可供選用。例如,Pi Sense HAT 含有方向或環境感測應用所需的全套感測器。此外還提供了 LED 矩陣以及五個按鈕的搖桿,可達到使用者回饋與互動(圖 3)。

Pi Sense HAT 圖片

圖 3:開發人員只要插入 HAT 即可在 Pi 板件中新增功能,例如這款 Pi Sense HAT。此板提供多個感測器,以及 LED 矩陣和五個按鈕的搖桿,方便使用者互動。(圖片來源:Raspberry Pi Foundation)

Sense HAT 本身便是一款精密的子系統:除了自有的 Microchip Technology 的八位元 ATtiny MCU (ATTINY88) 之外,此附加板還包含 STMicroelectronicsLSM9DS1 慣性量測單元 (IMU)、STMicroelectronics 的 HTS221 濕度/溫度感測器,以及 STMicroelectronics 的 LPS25HBTR 壓力感測器。

輕鬆部署

如同其他相容於 Pi 的附加板,開發人員只要將 HAT 推壓至 Pi 3 的 40 引腳排針座,就能將 Sense HAT 接到 Pi 3 系統。軟體介面也一樣簡易:官方支援的 Python sense-hat 函式庫,在簡單直覺的調用函式中置入低階硬體互動(清單 1)。

from sense_hat import SenseHat

sense = SenseHat()

temp = sense.get_temperature()

print("Temperature: %s C" % temp)

humidity = sense.get_humidity()

print("Humidity: %s %%rH" % humidity)

# get_orientation_degrees returns a Python dictionary

# with keys pitch, roll, and yaw

orientation = sense.get_orientation_degrees()

print("p: {pitch}, r: {roll}, y: {yaw}".format(**orientation))

清單 1:Raspberry Pi Sense HAT 函式庫能讓軟體開發人員使用一些直覺的調用函式從 Sense HAT 硬體獲取資料。(程式碼來源:Raspberry Pi Foundation)

除了 Pi Sense HAT 之外,開發人員還能找到可應付大部分典型應用要求的第三方 HAT。例如,Seeed Technology114990831 就提供雙通道的 16 位元數位類比轉換器 (DAC) 以及 24 位元的類比數位轉換器 (ADC),具備 8 個單端輸入或 4 個差動輸入通道。開發人員能找到許多種附加板,例如 Seeed GPS、DFRobot 超音波測距感測器、Adafruit 步進馬達以及其他多種板件

若現有的附加板無法滿足開發人員的需求,Seeed Technology 則提供分接板 HAT,其中含有 P-MOS、N-MOS、NPN 和 PNP 電晶體在內的一些內建元件。

使用 HAT 時,開發人員能夠利用 Raspberry Pi Foundation、廠商以及其他 Pi 社群成員提供的諸多軟體工具。例如 Raspberry Pi 的 raspi-gpio 工具,就能讓開發人員察看 GPIO 的狀態並修改其行為。程式設計師也能使用此工具的開源 C 程式碼當作模型,打造其專屬的 GPIO 控制軟體常式。

開發人員也能找到適用於較高階程式語言(例如 Python)的 GPIO 函式庫。利用 RPi.GPIO Python 模組,開發人員就能使用調用函式,在引腳層級控制 GPIO 功能的各個層面,像是使用 GPIO.input(channel) 來讀取 GPIO 引腳的值,以及使用 GPIO.output(channel, state) 將指定的 GPIO 引腳設定為指定狀態。

gpiozero Python 函式庫則可透過 MotionSensor、LightSensor、LED、Motor 等更高階的抽象化提升 GPIO 編程功能。透過此方法,程式設計師就能以更直覺的命令讀取狀態或設定成所需狀態,藉此處理內部硬體,像是使用 led.on() 命令來啟動 LED,可仰賴函式庫來管理內部的 GPIO 交易。

運用 Grove

Pi HAT 介面標準雖然能為第三方開發人員提供吸引人的基礎,但不免受限於 Pi 平台。相較之下,Grove 介面則提供可跨硬體平台的單一標準基礎,因此吸引更多附加板開發人員。Seeed Technology 的 Grove 入門套件提供相容於 Pi 的 HAT 板,並且配有多個相容於 Grove 的連接器。如同其他 HAT,Grove HAT 裝在 Pi 3 的 40 引腳連接器上(圖 4)。

Seeed Technology 的 Grove 入門套件圖片

圖 4:Seeed Technology 的 Grove 入門套件裝於 Pi 的標準 40 引腳連接器上,能讓開發人員使用多種相容於 Grove 的周邊裝置來增強 Pi 系統。(圖片來源: Seeed Technology)

使用 Grove HAT,開發人員能持續享有 Pi 3 的簡易性與效能,並享用多種相容於 Grove 的附加設備,包含致動器、氣體感測器、馬達控制裝置、揚聲器、無線收發器等。開發人員並非將附加功能直接插入 Pi 3 的 40 引腳連接器,而是將這些產品隨附的 Grove 連接器插入到 Grove HAT 頂端的其中一個 Grove 插槽中(圖 4)。

開發人員能找到 C、Java、Node.js、Python 和其他語言的 Grove 軟體函式庫,藉此將 Grove 功能插入到應用中。在此,較高階的常式能讓開發人員以類比資料收集的角度來思考(清單 2),仰賴函式庫中的低階常式來執行相對應的位元層級交易(清單 3)。

# Tweet the temperature, light, and sound levels with our Raspberry Pi

# http://www.dexterindustries.com/GrovePi/projects-for-the-raspberry-pi/raspberry-pi-twitter-sensor-feed/

import twitter

import time

import grovepi

import math

# Connections

sound_sensor = 0        # port A0

light_sensor = 1        # port A1

temperature_sensor = 2  # port D2

led = 3                 # port D3

intro_str = "DI Lab's"

# Connect to Twitter

api = twitter.Api(

    consumer_key='YourKey',

    consumer_secret='YourKey',

    access_token_key='YourKey',

    access_token_secret='YourKey'

    )

grovepi.pinMode(led,"OUTPUT")

grovepi.analogWrite(led,255)  #turn led to max to show readiness

while True:

    # Error handling in case of problems communicating with the GrovePi

    try:

        # Get value from temperature sensor

        [t,h] = grovepi.dht(temperature_sensor,0)

        # Get value from light sensor

        light_intensity = grovepi.analogRead(light_sensor)

        # Give PWM output to LED

        grovepi.analogWrite(led,light_intensity/4)

        # Get sound level

        sound_level = grovepi.analogRead(sound_sensor)

        # Post a tweet

        out_str ="%s Temp: %d C, Humidity: %d, Light: %d, Sound: %d" %(intro_str,t,h,light_intensity/10,sound_level)

        print (out_str)

       api.PostUpdate(out_str)

        time.sleep(60)

    except IOError:

        print("Error")

    except KeyboardInterrupt:

        exit()

    except:

        print("Duplicate Tweet or Twitter Refusal")

清單 2:開發人員能使用 Pi 板件、Grove 附加設備以及 Grove 軟體函式庫來快速實作複雜的應用,如同表中這個範例能模擬類似物聯網的流程,將環境資料發送到主機服務(在此例中為 Twitter)。(程式碼來源:Dexter Industries)

# Read analog value from Pin

def analogRead(pin):

      write_i2c_block(address, aRead_cmd + [pin, unused, unused])

      read_i2c_byte(address)

      number = read_i2c_block(address)

      return number[1] * 256 + number[2]

清單 3:Grove 軟體函式庫會處理存取硬體周邊裝置所需的位元層級作業,讓開發人員改用更直覺的調用函式,像是 analogRead(pin)。(程式碼來源:Dexter Industries)

簡化配置

過去要將新的硬體加到系統中,在許多層面都具有挑戰。硬體工程師必須設計出合適的機械與電氣介面。應用程式開發人員則需找到適合的軟體函式庫,以便提供必要的抽象化以徹底提升生產力。但藉著 Pi 的標準 40 引腳連接器以及上述立即可用的軟體函式庫,Pi 3 及其生態系統可克服這些挑戰。更進一步而言,雖然需找到和載入硬體專屬的板支援套件 (BSP),但 Pi 架構能省去開發人員近 ¾ 的額外作業。BSP 通常會提供所需的低階程式碼,完成作業系統與附加硬體之間的介接。

Pi 架構讓 Pi 使用者大可不必為不同的硬體裝置安裝與配置 BSP。反之,Pi 系統使用裝置樹狀目錄,提供載入模組與管理資源分配的機制,從而避免多個爭用相同資源的軟體模組之間發生衝突。若硬體裝置需要使用特殊的軟體,Pi 使用者只需設定一些配置項目即可。作業系統的核心會自動尋找並載入對應硬體裝置的相關模組。例如,Pi 系統中的 I2C 功能預設為停用。開發人員只需要編輯配置檔 config.txt,以將一行文字取消註解:

#dtparam=i2c_arm=on

Pi 平台甚至簡化了這個步驟。Raspbian 一開始啟動時會執行配置工具,向使用者顯示配置項目選單,其中包含啟用多個介面的功能。

對於仰賴 I2C 型硬體的應用,較高階的函式庫(如上文所述)能讓開發人員省去在 I2C 交易層級編寫程式碼。當需要針對特殊的 I2C 作業開發程式碼時,開發人員能找到像是 Linux 版的 I2C 工具等軟體,既可直接使用,也可當作範本以建立自訂的 I2C 軟體。

嵌入式 Pi

對於希望將 Pi 系統嵌入到產品中的設計者來說,近期推出的 CM3 是小巧的直接可用型 Pi 解決方案(圖 5)。CM3 和 Pi 3 採用相同的四核心處理器,亦提供和 Pi 3 相同的特點與功能。另外,CM3 還含有 4 GB eMMC 板載快閃,其他 Pi 板件則提供 micro SD 卡槽,以加入外接式快閃記憶卡。(Raspberry Pi 也提供 CM3L,即「輕量」版的 CM3,含有除了板載快閃以外的所有項目。)

Raspberry Pi 的 Compute Module 3 (CM3) 圖片

圖 5:Raspberry Pi 的 Compute Module 3 (CM3) 兼具 Pi Zero 的小巧體積和 Pi 3 的優異效能,並能接出比這兩種產品還要多的引腳。此板件也含有 4 GB 快閃模組(位於板的背面)。(圖片來源:Raspberry Pi Foundation)

CM3 並未採用 Pi 3 和 Pi Zero 使用的 40 引腳 IO 介面。反之,CM3 在板邊緣提供了 200 引腳 SODIMM(小型雙列直插式記憶體模組)連接器的擴充介面(圖 6)。事實上,CM3 板和 DDR2 SODIMM 外型尺寸相容,因此開發人員能透過標準 DDR2 SODIMM 連接器將 CM3 接到目標系統。

Raspberry Pi 的 CM3 示意圖

圖 6:Raspberry Pi 的 CM3 未採用其他 Pi 板件所用的 40 引腳介面,而是提供 200 引腳介面連接處理器引腳與其他板元件。(圖片來源:Raspberry Pi Foundation)

工程師能夠利用 Raspberry Pi 的 CM3 開發套件來簡化開發流程,此套件結合了 CM3 模組與 Raspberry Pi 的 Compute Module IO 板。此 IO 板是簡易的開放原始碼板,具有 DDR2 SODIMM 連接器可供 CM3 使用,並具備用於 200 引腳 CM3 介面的排針座(圖 7)。另外,此 IO 板也提供連接器,可連接 Pi 3 板件上的 HDMI、USB、相機以及顯示器埠。

Raspberry Pi 的 Compute Module IO 板圖片

圖 7:CM3 開發套件隨附的 Raspberry Pi Compute Module IO 板提供 CM3 用的 DDR2 SODIMM 連接器、200 引腳 CM3 介面用的排針座,以及 HDMI、USB、相機和顯示器埠用的連接器。(圖片來源:Raspberry Pi Foundation)

即時性應用

CM3 兼具高效能與小巧尺寸,相當適合用在電子產品(例如電視、音訊設備和類似的消費性產品)中當作嵌入式系統。若要達到即時應用,開發人員則需要考量 Pi 平台既有的一些限制。

其中最明顯的是,Pi 系統並未含有即時時脈 (RTC)。而且,Pi 3 與 CM3 使用的 Cortex-A53(或是 Pi Zero 使用的 ARM1176)等核心,並未具備計時感測器讀數等即時事件所需的功能,像是 SysTick 系統計時器。SysTick 計時器是 ARM Cortex-M 系列等核心的重要功能,專為確定性即時應用而設計。

工程師只要使用精密 RTC IC 就能輕易彌補此缺陷,例如 Maxim IntegratedDS3231。DS3231 RTC IC 在消費性溫度範圍中具有 ±2 ppm 的準確度,能產生可用來驅動軟體系統計時器的方波輸出。另外,此產品還提供簡易的 I2C 介面,可讀取即時時脈計數。開發人員能夠根據先前提到的 I2C 工具套件,使用 C 常式將 RTC 資料整合到即時應用中。

在及時應用中使用標準型 Pi 系統的另一個限制在於作業系統本身。典型的 Linux 發行版通常用於一般用途的應用,因此缺乏能可靠監測並控制即時流程所需的確定性反應。事實上,在 Linux 的預設操作模式中,即便是優先度極高的執行緒都有可能無法搶佔核心。因此,若某個高優先度的常式試著讀取感測器、控制馬達或進行類似作業,該「即時」常式可能需要等待一段不確定的等候時間。

幸好,Linux 核心內具有稱為 CONFIG_PREEMPT 的配置選項,能因應此限制。這個選項能讓高優先權常式搶佔核心,但特殊情況除外,例如當核心正在執行處於同步鎖定機制的核心執行緒(在等待資源時受阻擋)。實際上,為了確保能搶佔核心,除了修改此配置項目外還得進行其他步驟。開放原始碼社群已釋出 CONFIG_PREEMPT_RT 修補程式組,確立了「將 Linux 轉換成完全可搶佔的核心」流程。由於 Raspberry Pi Foundation 和 Pi 社群成員提供的程序均有完備的書面記錄,因此,這個修補程式程序要不非常簡單,不然就是很直覺化,因此已經成為相當平常的例行作業。

結論

儘管 Raspberry Pi Zero 板近來引人關注,但卻難以取得。Raspberry Pi 3 和 CM3 則為工程師提供更具吸引力的平台,能建立高效能系統。Pi 3 和 CM3 皆具有四核心處理器,提供的板載 RAM 則是單核心 Pi Zero 的兩倍。

Pi 3 本身能提供更為強大的運算基礎,從而運用眾多符合 Pi 標準 40 引腳 GPIO 介面的立即可用附加板。利用 CM3,開發人員則可獲得兼具 Pi Zero 的小巧尺寸與 Pi 3 的效能優勢的運算基礎。透過這些最新的 Pi 開發板、硬體附加設備及立即可用的軟體函式庫,開發人員便能快速實作客製化的系統,滿足多種不同的應用需求。

聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 Digi-Key Electronics 的意見、理念和觀點,亦非 Digi-Key Electronics 的正式原則。

關於出版者

Digi-Key 北美編輯群