無論開發人員是專業人士還是業余愛好者,Raspberry Pi 開發板在整個開發周期都對非常有用。盡管 Raspberry Pi Zero 得到了人們的極大關注,但一直是很難獲得的稀缺品。幸運的是,設計人員可以使用Pi 家族中的其它板子,這些板子同樣功能出色,能滿足各種應用要求。
Raspberry Pi 3 使用其四核處理器,并可提供比單核 Pi Zero 多一倍的內存。對于需要較小設計封裝,但又對 Pi Zero 的性能感到失望的開發人員,Raspberry Pi 計算模塊 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)
1GB RAM
NVM: Micro SD 卡插槽
85 mm x 56 mm
Pi 40 引腳針座
40 個 GPIO
802.11n Wi-Fi
藍牙 4.1
AV 端口
相機接口 (CSI)
顯示器接口 (DSI)
Pi CM3 同 Pi 3
1GB RAM
NVM: 4 GB eMMC 板載閃存
67.6 mm x 31 mm
200 引腳 SODIMM
48 個 GPIO
2 個 I2C
2 個 SPI
2 個 UART
2 個 SD/SDIO
HDMI
USB
DPI、SMI、CSI、DSI
Pi Zero BCM2835(1 GHz 單核 ARM1176)
512 MB RAM
NVM: Micro SD 卡插槽
65mm x 30mm
Pi 40 引腳通孔
HDMI
USB
HAT 兼容針座
復合視頻和復位針座
CSI 相機連接器
表 1: Raspberry Pi 3、計算模塊 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 用戶可以從第三方供應商處找到多種擴展板,并將其全都構建在這個標準接口上。
圖 1: Pi 開發板(包括 Pi 3 和 Pi Zero)具有通用的 40 引腳接口,此接口會從主機板處理器和相關元器件中引出 GPIO 和其他線路。(圖片來源: Raspberry Pi Foundation)
然而,對于 Pi Zero 用戶,該 40 引腳接口以PCB 上的電鍍通孔形式提供,需要用戶壓接或焊接到通孔連接器針座上。對于 Pi 3,連接器針座本身是標準的(圖 2),同時還針對 Wi-Fi 和以太網等 Pi Zero 不可用的功能來配備連接器,如表中所示。
圖 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)。
圖 3: 開發人員只需插入 HAT 即可為 Pi 開發板添加功能,例如這個 Pi Sense HAT,可提供多個傳感器以及 LED 點陣和五按鈕操縱桿,方便用戶交互。(圖片來源: Raspberry Pi Foundation)
Sense HAT 本身就是一個復雜的子系統: 除了自有的 Microchip Technology 8 位 ATtiny MCU (ATTINY88) 外,該擴展板還包括 STMicroelectronics LSM9DS1 慣性測量裝置 (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 Technology 114990831 提供了 2 通道 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 的 led.on() 命令,從而處理底層硬件,依靠庫來管理基礎的 GPIO 事務。
利用 Grove
Pi HAT 接口標準為第三方開發人員提供了有吸引力的基礎,但仍然局限于 Pi 平臺。相比之下,Grove 接口提供了跨硬件平臺的單一標準基礎,吸引了更多的擴展板開發人員。Seeed Technology Grove 入門套件提供了一個帶有多個 Grove 兼容連接器的 Pi 兼容 HAT 板。與其他 HAT 一樣,Grove HAT 安裝在 Pi 3 40 引腳連接器上(圖 4)。
圖 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 通常會提供完成 OS 和擴展硬件之間接口所需的低級代碼。
Pi 架構大大消除了 Pi 用戶安裝和配置 BSP 的不同硬件設備需求。相反,Pi 系統使用設備樹,可以提供加載模塊和管理資源分配的機制,從而避免多個軟件模塊之間競爭相同資源的沖突。如果硬件設備需要專門的軟件,則 Pi 用戶只需要設置一些配置項。OS 內核會自動查找并加載與相應硬件設備相關的模塊。例如,Pi 系統中的 I2C 功能默認為禁用。開發人員只需編輯配置文件 config.txt,將一行文字取消注釋:
#dtparam=i2c_arm=on
Pi 平臺甚至簡化了這一步。當 Raspbian 首次啟動時,會運行一個配置工具,向用戶顯示配置項目的菜單,包括啟用各種接口的功能。
對于依賴于基于 I2C 硬件的應用,較高級別的庫(如前面提到的那些)可消除開發人員在 I2C 事務級別編碼的需要。當開發人員確實需要開發用于專門的 I2C 操作的代碼時,他們可以找到用于 Linux 的 I2C 工具等可以直接使用或者用作創建自定義 I2C 軟件示例的軟件。
嵌入式 Pi
對于想要將 Pi 系統嵌入到產品中的設計人員,最近推出的 CM3 提供了一個緊湊的直接替換型 Pi 解決方案(圖 5)。基于與 Pi 3 相同的四核處理器,CM3 還提供與 Pi 3 相同的功能和功能。此外,CM3 在電路板上采用 4 GB eMMC 閃存:而其他 Pi 開發板則提供了一個可用于添加外部閃存卡的 micro SD 插槽。(Raspberry Pi 還提供 CM3L – CM3 的“Lite”版本,其中包括該產品上除板載閃存之外的所有內容。)
圖 5: Raspberry Pi 計算模塊 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 連接到目標系統。
圖 6: Raspberry Pi CM3 并未采用其他 Pi 開發板上的 40 引腳接口,而是提供 200 引腳分線處理器和其他電路板元器件。(圖片來源: Raspberry Pi Foundation)
為簡化開發,工程師可以利用 Raspberry Pi CM3 開發套件將 CM3 模塊與 Raspberry Pi 計算模塊 IO 板組合在一起。IO 板是一個簡單的開源電路板,帶有用于 CM3 的 DDR2 SODIMM 連接器以及斷開 200 引腳 CM3 接口的針座(圖 7)。另外,IO 板還提供了 Pi 3 開發板上提供的 HDMI、USB、相機和顯示器端口的連接器。
圖 7: CM3 開發套件中采用的 Raspberry Pi 計算模塊 IO 板提供了適用于 CM3 的 DR2 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 系列等內核的重要功能,專為確定性實時應用而設計。
工程師可以使用 Maxim Integrated DS3231 等精密 RTC IC 輕松彌補這一不足。DS3231 RTC IC 在消費溫度范圍內具有 ±2ppm 的精度,可產生用于驅動軟件系統定時器的方波輸出。此外,它提供了一個簡單的 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 每個都具有四核處理器和兩倍于單核 Pi Zero 的可用板載 RAM。
就其本身而言,Pi 3 提供了一個更為強大的計算基礎,可以利用大量符合 Pi 標準 40 引腳 GPIO 接口的可用擴展板。使用 CM3,開發人員即可獲得兼具 Pi Zero 的小尺寸以及 Pi 3 的性能優勢的計算基礎。使用這些最新的 Pi 開發板、硬件擴展和現有的軟件庫,開發人員可以快速實施定制系統,從而滿足不同的應用需求。
-
處理器
+關注
關注
68文章
19159瀏覽量
229113 -
操作系統
+關注
關注
37文章
6737瀏覽量
123190 -
定時器
+關注
關注
23文章
3237瀏覽量
114464
發布評論請先 登錄
相關推薦
評論