李 偉,董安定
(鹽城衛生職業技術學院 醫學影像系,江蘇 鹽城 224000)
Raspberry PI是英國一個慈善機構推出的一個超小型的電腦,尺寸與銀行卡相當,開發者為劍橋大學的Eben Upton所帶領的一個團隊。其最引人注目的一個特點就是“超級便宜但可用性高”,價格僅需25美元卻可以運行Linux操作系統,甚至可以播放分辨率為1080p的視頻,這使得它一露面便引起極大的關注。自2012年4月正式問世以來,其銷量已遠超于基金會的預期。Raspberry PI包括兩種型號:Model A(25 美元)與 Model B(35 美元)。 相對于Model A來說,后者在功能上的增強非常限:幾乎僅多了一個USB口和以太網接口。
Raspberry PI主要由以下幾個部分構成[1]:
CPU:為一基于ARM11系列的 32位,主頻 700 MHz的芯片,其計算能力與iPhone 3G相當。Model B包含了512MB的內存,Model A有256MB。
SD卡插槽:Raspberry PI本身沒有硬盤,當前也沒有軟件,其操作系統和數據全部都存儲到SD卡上。系統本身并不包括SD卡,由用戶另外購買并自行將操作系統寫入到SD卡中。
USB口:Raspberry PI有兩種USB接口,一個MicroUSB口用于向系統本身供電,另還有兩個(Model A僅有一個)用于作為普通的USB口使用。一般來講至少需要兩個USB口才夠維持系統正常工作,一個用于鼠標一個用于鍵盤。如果要擴展其它外部設備或模塊(比如Arduino[2])就必須添加一個USB HUB。
以太網接口:僅Model B有一個標準的以太網RJ45接口,而Model A沒有。替代的方案是選擇一個USB接口的無線網卡。
HDMI:HDMI接口提供數字的視頻和音頻輸出,Raspberry PI支持14種不同的分辨率。考慮到目前許多顯示器的視頻接口為VGA或DIV,我們可以選擇HDMI-DIV或HDMI-VGA的轉換線,以能夠連接到大多數普通的顯示器上。
音頻輸出:除了通過HDMI輸出音頻信號,Raspberry PI也有一個標準的3.5 mm插孔,能夠接入普通的音箱或耳機。
GPIO(通用輸入輸出口):Raspberry PI電路板有 26根引腳(2x13),支持幾種目前較為流行的幾種總線標準,包SPI、I2C、UART等,還可以向外部提供3.3 V和5 V的電壓。要注意GPIO的耐受電壓是3.3 V,盡管它可以向外提供5 V的電壓輸出。
顯示串行接口:Raspberry PI可以通過一個15針的扁平帶狀線纜與LCD或LED顯示器通信攝像頭串行接口:此端口允許直接將攝像頭模塊連接到電路板。
Raspberry PI基于移動設備的芯片,因而其操作系統與桌面電腦有所區別。目前支持的系統:
Raspbian[3]:Raspbian是一個基于Debian而對 Raspberry PI優化了的系統。對于初學者來說,官方推薦使用這個系統。由于Raspbian是由官方出品的系統,因而保證了其可靠性與穩定性,我們實際上也使用這一版本。
Arch Linux Arm:Arch Linux ARM 基于 Arch Linux,是基于ARM系列芯片的linux[4]的一個分支。其目標是簡單和終端用戶對操作系統的完全控制,然而一般來講,靈活性越大難度也就越大,因而不適合初學者。
另外還有一個RISC OS,這是一個一開始就為ARM芯片開發的系統,由于與主流的Linux系統區別較大,因而不推薦使用。
Raspberry PI的官方網站提供以上系統下載。我們選擇Raspbian和適用于 Windows系統的寫入工具Win32DiskImager。成功寫入操作系統后,即可插入Raspberry PI的SD卡插槽,接上電源,顯示器及鼠標鍵盤啟動,由于Raspberry PI本身沒有電源開關,接入電源即啟動。供電接口為MicroUSB,因而電源線可以很方便的獲得,比如說手機的充電器,或直接使用普通電腦的USB口。
Raspberry PI的用途比較廣泛:通用計算,編程、項目開發平臺,甚至可以拿來開發產品。我們關心的是利用Raspberry PI來直接對硬件進行控制,相對于單片機系統來說,Raspberry PI除了硬件優勢之外,它運行于一個完整的Linux操作系統之上。這意味著我們可以幾乎不用去關心寄存器這類的細節末節,而將主要精力放在功能的實現上。由于有了一個完整的操作系統,我們有多種高級編程語言可供選擇,這將大大的降低編程的難度,提高學生的興趣,也可以明顯的縮短項目的開發周期。對于GPIO[5]的輸入輸出控制大致上可以分為兩類,一類是使用shell來進行控制,主要有以下幾個步驟:
1)在使用命令行控制輸入輸出之前必須使當前用戶為超級用戶,以便于讀取linux內核文件
2)使用echo命令指定要使用的引腳號碼,如果我們要使用4號引腳,那么命令如下:

語句的作用即為將13號引腳輸出到用戶空間以便使用,echo命令會把要用的引腳號寫到目錄/sys/class/gPio中的export文件。當我們將引腳號寫到這個特殊的文件中的時候會創建一個對此引腳進行控制的目錄,在本例中為“/sys/classgPio/gPio4”
3)將當前目錄改為/sys/classgPio/gPio4,用ls命令可以看到目錄中包括以下文件
active_low direction edge power subsystem uevent value
其中的dicrction就是用來控制輸入輸出的文件,如果是輸出的話那么shell命令為:

即設定為輸出,輸出高電平則為

輸入與輸出類似:

稍微有點不同的是需要讀取輸入值

相對于shell腳本語言來說,使用如java、C++或python語言的好處是顯而易見的。比如程序的可讀性更好,便于移植等等,也更容易使得代碼模塊化以編寫更為復雜的程序。我們可以在網上找到各種主流語言有關Raspberry PI的相關庫函數或封裝類,使得代碼的編寫更加簡單。比如,以下分別是輸入、輸出的java語言程序[6](使用framboos庫):

Java語言的好處是其語法與Arduino使用的processing(源于Java)類似,因而對于學生來講當使用兩者聯合搭建開發平臺時會使程序的編寫較為容易。另一方面,從上面的代碼我們可以看到,C語言可以對延時的時間進行較為精確的控制,因而適合于實時性較高的場合,如信號采集。Java語言還有一個優點,可以通過http協議使用java webapp控制來控制Raspberry PI的GPIO。
基于Raspberry PI的課程設計比較適合于學過單片機的學生,或用于學生實習回校后的畢業設計。這對學生的軟件與硬件設計能力和邏輯思維能力都會有一個很大的提高,給學生一個對所學知識進行充分發揮的機會,使學生走出校園后適應工作崗位也是一個較好的鍛煉。如果能夠把Raspberry PI和Arduino結合起來使用效果當然會更好,對于個別能力比較高并且有興趣的學生我們可以單獨輔導,充分發揮學生的聰明才智。
[1]Upton E,Halfacree G.Raspberry Pi User Guide[M].USA:John Wiley&Sons Inc,2012.
[2]Banzi M.Getting Started with Arduino[M].USA:O'Reilly Media Inc,2011.
[3]Richardson M,Wallace S.Getting Started with Raspberry Pi[M].USA:O'Reilly Media Inc,2012.
[4]鳥哥著,王世江改編.鳥哥的Linux私房菜:基礎學習篇[M].3版.北京:人民郵電出版社,2010.
[5]RPi Low-level peripherals[EB/OL](2013).http://elinux.org/RPi_Low-level_peripherals.
[6]Wong H.RPi and Java Embedded GPIO[EB/OL](2013).http://blogs.oracle.com/hinkmond.
[7]Henderson G.WiringPi Examples[EB/OL](2013).http://projects.drogon.net/raspberry-pi.