Raspberry Pi板子(以下簡稱rpi)上有26個GPIO 針腳(2x13),可用來連接其他電子元件。本篇將以其中兩個針腳連接LED,並寫Python程式讓它閃爍。我知道這很簡單、很無聊,但總是個開始。
注意,本篇將直接使用GPIO針腳,這是很危險的,搞不好的話會弄壞板子、弄壞板子上的晶片,安全的用法則該使用緩衝板(譬如Mike Cook的Buffer Board)。若你把rpi板子搞壞了,可別說我沒警告你喔。
下圖是rpi的功能區塊圖,左上角就是GPIO的排針。
雖然針腳有26個,但其中6個保留不用,另外有3個是5v、3.3v、0v(GND),所以還有17個針腳可用。
首先是硬體的部份,需製作一條排線,將rpi的針腳接出來。至少需要買一條排線與一個牛角母座。
26線的排線。我買彩色的,比較容易分辨。
牛角母座(2x13),用來壓排線。
將排線平平放進牛角母座的中間,不要突出來。
然後,應該用虎鉗壓緊,但我沒有,於是用鐵鎚敲一敲,嗯,還不錯嘛。
這一端就可以插進rpi的GPIO針腳了。
至於排線的另一端,在這篇裡只需要腳位1(3.3V)與腳位11(GPIO 0),所以我把這兩條線剝皮,腳位1接到紅線,腳位11接到藍紫線。
然後將這兩條線接到麵包板。
紅線(腳位1、3.3V)接LED的正極長腳,
LED負極短腳接1k ohm電阻,
電阻另一腳接藍紫線(腳位11、GPIO 0)。
硬體的部份完成囉。
然後是軟體的部份,將使用RPi.GPIO這套Python程式庫控制GPIO,請到這裡http://pypi.python.org/pypi/RPi.GPIO找到下載網址,我下載的是RPi.GPIO 0.3.1a(RPi.GPIO-0.3.1a.tar.gz)。
下載後解壓縮,
$ tar zxvf RPi.GPIO-0.3.1a.tar.gz
然後切換進入解壓縮後的目錄,以下列指令進行安裝,
$ sudo python setup.py install
但是卻安裝失敗,錯誤訊息說少了Python.h檔,到網路上搜尋後發現需要安裝python-dev這個套件,
$ sudo apt-get install python-dev
然後就能成功安裝RPi.GPIO了。
(目前需要自己手動安裝RPi.GPIO,將來此程式庫應該會被打包成套件。)
(2012.09.27更新:新的映像檔2012-09-18-wheezy-raspbian.img已經內建RPi.GPIO套件。)
接下來要開始寫程式了,請以root身分執行python,
$ sudo python
匯入程式庫,
>>> import RPi.GPIO as GPIO
使用rpi板子的腳位編號,
>>> GPIO.setmode(GPIO.BOARD)
將腳位11(GPIO 0)設為輸出模式,此時LED應該會亮起來,
>>> GPIO.setup(11, GPIO.OUT)
設定為HIGH,LED會熄滅,
>>> GPIO.output(11, GPIO.HIGH)
設定為LOW,LED又會亮起來,
>>> GPIO.output(11, GPIO.LOW)
然後寫個迴圈,讓LED不停閃爍,
>>> while True :
... GPIO.output(11, GPIO.HIGH)
... time.sleep(1)
... GPIO.output(11, GPIO.LOW)
... time.sleep(1)
哇,成功啦,想停止的話請按下Ctrl-C。
後記:
最好還是用虎鉗或老虎鉗壓排線,若用鐵鎚敲可能會敲壞喔,如下所示。
嗚嗚,壞掉啦,壓不緊了。
既然壞了,就拆開看看裡面的樣子吧。
參考資料:
Dr. Monk's DIY Electronics Blog的GPIO LED blink from Python using Slice of Pi。 我用排線接出GPIO針腳,而Dr. Monk使用Slice of Pi這塊擴充板將GPIO腳位接出來。
Raspberry Pi Spy的Simple Guide to the RPi GPIO Header and Pins與Control LED Using GPIO Output Pin,也是以Python程式庫RPi.GPIO以GPIO腳位讓LD閃爍。
RPi.GPIO程式庫的網站。
Hardware lesson with Gert: make your own ribbon cable connector,自己製作排線,比較省錢。
各種牛角母座與牛角公座。我在這篇將排線剝皮直接使用,一般來說會以母座與公座相連接。
Raspberry Pi的GPIO腳位配置。
RPi Low-level peripherals,rpi維基百科裡關於低階周邊的資料。
Tutorial: How to use your Raspberry Pi like an Arduino,以python、bash、c寫程式控制GPIO腳位。
Benchmarking Raspberry Pi GPIO Speed,以shell script、python、c、perl寫程式測試rpi的rpi的速度。
Jeremy's Blog的Raspberry Pi 7 segment displays,驅動七段顯示器。
2012/07/31
以Raspberry Pi的GPIO腳位讓LED閃爍
標籤: Raspberry Pi
在Raspberry Pi上開發Arduino
要把Raspberry Pi當做開發主機,在上面撰寫Arduino的程式,實在非常簡單,因為Raspberry Pi就是一台Linux機器,而Arduino軟體開發環境原本就支援Linux了。
我在Raspberry Pi在命令列模式下,讓Arduino的LED燈閃爍,步驟記錄如下。
我的環境是Raspbian wheezy,2012-07-15-wheezy-raspbian.img,後來也試過2014-06-20-wheezy-raspbian.img。板子是Arduino Uno Rev 3。
Arduino的軟體開發環境都已經打包好了,直接以apt-get安裝即可。
$ sudo apt-get install arduino arduino-mk
其中arduino-mk是要在命令列模式下以make進行編譯與燒錄動作所需要的套件。
安裝後,執行檔(arduino、avr-g++、avr-gcc、avrdude、等等)位於/usr/bin裡,avrdude的設定檔位於/etc/avrdude.conf,範例程式碼與API參考文件分別位於/usr/share/doc/arduino-core的子目錄examples與reference裡,Arduino核心程式碼位於/usr/share/arduino/hardware/arduino/cores/arduino裡,內建程式庫位於/usr/share/arduino/libraries裡,重要的就這些,請自行瀏覽其他相關目錄。
然後,在家目錄下新增子目錄sketchbook,在裡面新增BlinkByPi專案目錄,我們將需要兩支檔案,BlinkByPi.cpp與Makefile,內容如下。
BlinkByPi.cpp的內容:
#include <Arduino.h>
void setup(){
pinMode(13, OUTPUT);
}
void loop(){
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(500);
}
Makefile的內容:
TARGET = BlinkByPi
ARDUINO_DIR = /usr/share/arduino
BOARD_TAG = uno
ARDUINO_PORT =/dev/ttyACM0
include /usr/share/arduino/Arduino.mk
以ARDUINO_DIR指定Arduino軟體開發環境的路徑。若你從Arduino官方網站自行下載、自行解壓縮的話,請修改此路徑。
以TARGET指定最後產生出來的檔案的主檔名,最好跟此專案名相同。(註:有時若出問題,拿掉此項或可解決,那麼TARGET就會預設為當前目錄名。)
以BOARD_TAG指定你使用的板子。
以ARDUINO_PORT指定與板子連接的通訊埠,在Raspberry Pi上為/dev/ttyACM0。
然後使用include匯入內涵基本設定與規則的Arduino.mk。
如果使用內建函式庫的話,須再加入類似於底下的這一行:
ARDUINO_LIBS = Ethernet Ethernet/utility SPI
接下來,在此專案目錄裡以
$ make
即可編譯、連結,將會產生出build-cli子目錄,存放建置過程的中間檔,最後產生出來的.elf與.hex也會放在裡面。
然後以
$ make upload
即可燒錄。
哇,成功囉。
另外可用make clean清除,以make depends更新檔案相依性。
更詳細的用法可參考/usr/share/arduino/Arduino.mk裡的說明,以及底下的參考資料。
參考資料:
- Arduino Playground的Install on Debian。
- Arduino Playground的Installing Arduino on Linux。
- RaspberryPi @Homelabs的RaspberryPi the Arduino Development Tool。
- netduinoplusfun的Arduino IDE on Raspberry Pi with Arduino Uno。
- Dr. Monk's DIY Electronics Blog的Raspberry Pi and Arduino。
- Martin's Atelier: Arduino from the command line。
- Arduino 1.0 development with a makefile on Linux。
標籤: Arduino, Raspberry Pi
2012/07/30
一些很棒的Raspberry Pi專案
Raspberry Pi自從2012.02.29 06:00 GMT(台灣時間下午兩點)開始販賣,到現在已經五個月了,量產也追上了需求量,不再限定一筆訂單只能買一塊板子了;受到世界各地熱烈的討論,不少人運用Raspberry Pi打造出有趣的專案。
Code Club - Mini Band Project
吉他、鼓、沙球,讓我們來組個迷你樂團吧!

哇賽,不僅有Raspberry Pi,還用了Arduino耶。
PIE1 – Raspberry Pi Sends Live Images from Near Space
國外興起一股叫做High Altitude Ballooning的風潮,利用天氣觀測氣球將一些東西(相機、GPS、各種感測器、儀器)送上高度大約30公里的近空進行各種偵測與實驗。很自然地,當然會有人利用Raspberry Pi完成此壯舉囉。上升到近空傳回即時拍攝的照片,真不錯啊。
好,要升空了喔。
哇,居然可以在這麼高的地方拍照啊。
飛的範圍還真廣。
Camera Pi
將Raspberry Pi塞入Canon 5D Mark II,藉由傳輸線連接後,可直接讀取拍攝的照片,並透過無線方式傳送到另外一台電腦或平板,也能使用自動備份功能,這僅是剛開始而已,將來還會繼續擴增其他功能,。

Raspberry driven TB-2? Or better RPI-TB-2
當然啦,少不了將Raspberry Pi與機器人結合在一起。

FishPi | An autonomos drop in the Ocean
FishPi這項專案要打造一條自動在海上航行的船隻,能夠自動導航不需人類插手,預備橫渡大西洋,並且進行各種科學量測與實驗。
目前尚在建構中。

SNESDev-RPi: A SNES-Adapter for the Raspberry Pi
這位仁兄把Raspberry Pi改造成通用型電視遊樂器,製作轉接板將超級任天堂的手把與Raspberry Pi連接後,啟動模擬器,開始回味8位元、16位元的骨灰級遊戲吧。
轉接部分的硬體,將超任手把與Raspberry Pi連接。(當然,還有軟體的部份。)
連接後的樣子。
開始玩囉。
Project Glass: Real Time Translation … inspired
這是個"眼鏡"的專案,它可以即時翻譯,讓一個只會講英文、一個只會講西班牙文的兩人交談。
講話時,語音會被傳送到網路伺服器那進行翻譯,然後將翻譯後的文字顯示在眼鏡上。
哇,看起來好困難啊。
這裡有YouTube詳細影片可觀賞。
Portable Raspberry Pi
Raspberry Pi加上螢幕、鍵盤、行動電源,哈,變成筆電了嗎?
The Magic Wand
想要魔杖嗎?自己做一根吧。拿著魔杖快速的來回揮動,就能顯示文字喔。
看到桌上那根木棒了嗎,那就是魔杖喔。
來回快速揮動,哇,漂浮在空中的文字耶。
參考資料:
標籤: Raspberry Pi