李 偉,董安定
(鹽城衛(wèi)生職業(yè)技術(shù)學(xué)院 醫(yī)學(xué)影像系,江蘇 鹽城 224000)
Raspberry PI是英國一個慈善機(jī)構(gòu)推出的一個超小型的電腦,尺寸與銀行卡相當(dāng),開發(fā)者為劍橋大學(xué)的Eben Upton所帶領(lǐng)的一個團(tuán)隊。其最引人注目的一個特點(diǎn)就是“超級便宜但可用性高”,價格僅需25美元卻可以運(yùn)行Linux操作系統(tǒng),甚至可以播放分辨率為1080p的視頻,這使得它一露面便引起極大的關(guān)注。自2012年4月正式問世以來,其銷量已遠(yuǎn)超于基金會的預(yù)期。Raspberry PI包括兩種型號:Model A(25 美元)與 Model B(35 美元)。 相對于Model A來說,后者在功能上的增強(qiáng)非常限:幾乎僅多了一個USB口和以太網(wǎng)接口。
Raspberry PI主要由以下幾個部分構(gòu)成[1]:
CPU:為一基于ARM11系列的 32位,主頻 700 MHz的芯片,其計算能力與iPhone 3G相當(dāng)。Model B包含了512MB的內(nèi)存,Model A有256MB。
SD卡插槽:Raspberry PI本身沒有硬盤,當(dāng)前也沒有軟件,其操作系統(tǒng)和數(shù)據(jù)全部都存儲到SD卡上。系統(tǒng)本身并不包括SD卡,由用戶另外購買并自行將操作系統(tǒng)寫入到SD卡中。
USB口:Raspberry PI有兩種USB接口,一個MicroUSB口用于向系統(tǒng)本身供電,另還有兩個(Model A僅有一個)用于作為普通的USB口使用。一般來講至少需要兩個USB口才夠維持系統(tǒng)正常工作,一個用于鼠標(biāo)一個用于鍵盤。如果要擴(kuò)展其它外部設(shè)備或模塊(比如Arduino[2])就必須添加一個USB HUB。
以太網(wǎng)接口:僅Model B有一個標(biāo)準(zhǔn)的以太網(wǎng)RJ45接口,而Model A沒有。替代的方案是選擇一個USB接口的無線網(wǎng)卡。
HDMI:HDMI接口提供數(shù)字的視頻和音頻輸出,Raspberry PI支持14種不同的分辨率??紤]到目前許多顯示器的視頻接口為VGA或DIV,我們可以選擇HDMI-DIV或HDMI-VGA的轉(zhuǎn)換線,以能夠連接到大多數(shù)普通的顯示器上。
音頻輸出:除了通過HDMI輸出音頻信號,Raspberry PI也有一個標(biāo)準(zhǔn)的3.5 mm插孔,能夠接入普通的音箱或耳機(jī)。
GPIO(通用輸入輸出口):Raspberry PI電路板有 26根引腳(2x13),支持幾種目前較為流行的幾種總線標(biāo)準(zhǔn),包SPI、I2C、UART等,還可以向外部提供3.3 V和5 V的電壓。要注意GPIO的耐受電壓是3.3 V,盡管它可以向外提供5 V的電壓輸出。
顯示串行接口:Raspberry PI可以通過一個15針的扁平帶狀線纜與LCD或LED顯示器通信攝像頭串行接口:此端口允許直接將攝像頭模塊連接到電路板。
Raspberry PI基于移動設(shè)備的芯片,因而其操作系統(tǒng)與桌面電腦有所區(qū)別。目前支持的系統(tǒng):
Raspbian[3]:Raspbian是一個基于Debian而對 Raspberry PI優(yōu)化了的系統(tǒng)。對于初學(xué)者來說,官方推薦使用這個系統(tǒng)。由于Raspbian是由官方出品的系統(tǒng),因而保證了其可靠性與穩(wěn)定性,我們實際上也使用這一版本。
Arch Linux Arm:Arch Linux ARM 基于 Arch Linux,是基于ARM系列芯片的linux[4]的一個分支。其目標(biāo)是簡單和終端用戶對操作系統(tǒng)的完全控制,然而一般來講,靈活性越大難度也就越大,因而不適合初學(xué)者。
另外還有一個RISC OS,這是一個一開始就為ARM芯片開發(fā)的系統(tǒng),由于與主流的Linux系統(tǒng)區(qū)別較大,因而不推薦使用。
Raspberry PI的官方網(wǎng)站提供以上系統(tǒng)下載。我們選擇Raspbian和適用于 Windows系統(tǒng)的寫入工具Win32DiskImager。成功寫入操作系統(tǒng)后,即可插入Raspberry PI的SD卡插槽,接上電源,顯示器及鼠標(biāo)鍵盤啟動,由于Raspberry PI本身沒有電源開關(guān),接入電源即啟動。供電接口為MicroUSB,因而電源線可以很方便的獲得,比如說手機(jī)的充電器,或直接使用普通電腦的USB口。
Raspberry PI的用途比較廣泛:通用計算,編程、項目開發(fā)平臺,甚至可以拿來開發(fā)產(chǎn)品。我們關(guān)心的是利用Raspberry PI來直接對硬件進(jìn)行控制,相對于單片機(jī)系統(tǒng)來說,Raspberry PI除了硬件優(yōu)勢之外,它運(yùn)行于一個完整的Linux操作系統(tǒng)之上。這意味著我們可以幾乎不用去關(guān)心寄存器這類的細(xì)節(jié)末節(jié),而將主要精力放在功能的實現(xiàn)上。由于有了一個完整的操作系統(tǒng),我們有多種高級編程語言可供選擇,這將大大的降低編程的難度,提高學(xué)生的興趣,也可以明顯的縮短項目的開發(fā)周期。對于GPIO[5]的輸入輸出控制大致上可以分為兩類,一類是使用shell來進(jìn)行控制,主要有以下幾個步驟:
1)在使用命令行控制輸入輸出之前必須使當(dāng)前用戶為超級用戶,以便于讀取linux內(nèi)核文件
2)使用echo命令指定要使用的引腳號碼,如果我們要使用4號引腳,那么命令如下:
語句的作用即為將13號引腳輸出到用戶空間以便使用,echo命令會把要用的引腳號寫到目錄/sys/class/gPio中的export文件。當(dāng)我們將引腳號寫到這個特殊的文件中的時候會創(chuàng)建一個對此引腳進(jìn)行控制的目錄,在本例中為“/sys/classgPio/gPio4”
3)將當(dāng)前目錄改為/sys/classgPio/gPio4,用ls命令可以看到目錄中包括以下文件
active_low direction edge power subsystem uevent value
其中的dicrction就是用來控制輸入輸出的文件,如果是輸出的話那么shell命令為:
即設(shè)定為輸出,輸出高電平則為
輸入與輸出類似:
稍微有點(diǎn)不同的是需要讀取輸入值
相對于shell腳本語言來說,使用如java、C++或python語言的好處是顯而易見的。比如程序的可讀性更好,便于移植等等,也更容易使得代碼模塊化以編寫更為復(fù)雜的程序。我們可以在網(wǎng)上找到各種主流語言有關(guān)Raspberry PI的相關(guān)庫函數(shù)或封裝類,使得代碼的編寫更加簡單。比如,以下分別是輸入、輸出的java語言程序[6](使用framboos庫):
Java語言的好處是其語法與Arduino使用的processing(源于Java)類似,因而對于學(xué)生來講當(dāng)使用兩者聯(lián)合搭建開發(fā)平臺時會使程序的編寫較為容易。另一方面,從上面的代碼我們可以看到,C語言可以對延時的時間進(jìn)行較為精確的控制,因而適合于實時性較高的場合,如信號采集。Java語言還有一個優(yōu)點(diǎn),可以通過http協(xié)議使用java webapp控制來控制Raspberry PI的GPIO。
基于Raspberry PI的課程設(shè)計比較適合于學(xué)過單片機(jī)的學(xué)生,或用于學(xué)生實習(xí)回校后的畢業(yè)設(shè)計。這對學(xué)生的軟件與硬件設(shè)計能力和邏輯思維能力都會有一個很大的提高,給學(xué)生一個對所學(xué)知識進(jìn)行充分發(fā)揮的機(jī)會,使學(xué)生走出校園后適應(yīng)工作崗位也是一個較好的鍛煉。如果能夠把Raspberry PI和Arduino結(jié)合起來使用效果當(dāng)然會更好,對于個別能力比較高并且有興趣的學(xué)生我們可以單獨(dú)輔導(dǎo),充分發(fā)揮學(xué)生的聰明才智。
[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私房菜:基礎(chǔ)學(xué)習(xí)篇[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.