所需材料
- 一個已經安裝配置好了的樹莓派
- 連接控制樹莓派所用的其他必須設備
- 200Ω電阻 x 8
- led x 8
- 面包板及連接線若干
電路連接
電路圖
按照電路圖所示,在面包板上進行連接。
編寫程序
安裝RPi.GPIO
首先得確定RPi.GPIO已安裝。最新的系統已經自帶了,如果沒有的可以使用命令
sudo apt-get update
sudo apt-get install python-dev python-rpi.gpio
來安裝
編寫模塊
用文本編輯器新建一個led.py文件。(高手們都用vi,我只會用nano…)
cd
mdir GPIO
cd GPIO
nano led.py
python代碼如下:
import RPi.GPIO as GPIO
import timechannels = [16,18,22,24,26,19,21,23]
def init():
GPIO.setmode(GPIO.BOARD)
for x in channels:
GPIO.setup(x,GPIO.OUT)
passdef on(i):
GPIO.output(channels[i], GPIO.HIGH)def off(i):
GPIO.output(channels[i], GPIO.LOW)def ctrl(data):
for i in channels:
GPIO.output(i, data & 0×1)
data = data >> 1
passdef test():
for i in xrange(512):
ctrl(i)
time.sleep(0.1)def clean():
GPIO.cleanup()
你可以在樹莓派上直接編輯這個文件,也可以將文件在電腦上編輯好,然后用SFTP或者Linux下的scp命令傳到樹莓派上。
調用模塊
你可以編寫一個test.py調用剛剛編寫好的led模塊:
import led
led.init()
led.test()
led.clean()
也可以直接在python shell中操作,這里是我在python shell中調用寫好的模塊的一個例子
要注意的是,GPIO操作需要管理員權限,因此要用sudo。譬如視頻中我在啟動python shell的時候前邊加了sudo:
sudo python
而在運行自己寫的test.py的時候也要加sudo:
sudo python test.py
知識補充:
RPi.GPIO模塊函數說明:
RPi.GPIO.setmode(naming_system)
設置將GPIO針的命名方式。naming_system可用的取值有 RPi.GPIO.BCM 和 RPi.GPIO.BOARD,分別代表boardcom命名系統和樹莓派板子上的命名系統。而因為使用BCM 的時候(據說)不同的版本BVM針腳定義不一樣,所以同一套程序在多個樹莓派系統上使用的時候建議用BOARD。
RPi.GPIO.setup(channel, state)
將標號為channel的針設置為state模式。channel取值為1~26,state取值為RPi.GPIO.IN 或者RPi.GPIO.OUT,分別表示輸入和輸出。例如 RPi.GPIO.setup(1, RPi.GPIO.IN)表示將1號針設置為輸入模式;RPi.GPIO.setup(3, RPi.GPIO.OUT)表示將3號針設置為輸出模式。具體哪個號是哪根取決於setmode()中設置成什么。
RPi.GPIO.output(channel, state)
將標號為channel的針設置為state指定的電平。channel取值為1~26,state取值為RPi.GPIO.HIGH 和RPi.GPIO.LOW,或者1和0,或者True和False,表示高電平和低電平。例如RPi.GPIO.output(1, 1) 表示把1號針設置為高電平,RPi.GPIO.output(3, Flase) 表示將3號針設置為低電平。具體哪個號是哪根取決於setmode()中設置成什么。
RPi.GPIO.input(channel)
獲取將標號為channel的針的電平磚頭。channel取值為1~26。例如RPi.GPIO.input(1) 表示獲取1號針的狀態。
RPi.GPIO.cleanup()
清除掉之前RPi.GPIO.setup()設置的狀態。退出程序之前一定要調用,否則下次調用的時候會報錯。
led.py模塊說明
channel 中保存的是連接中使用的針的標號,按順序。
init() 是初始化GPIO接口的代碼,使用控制lcd去前要調用。主要工作是設置接口命名模式和 將channel中的針設置為輸出模式
on() / off() 是將channel 中第i個針設置為高電平/低電平
ctrl() 是根據參數設置全8根針的電平。參數的低0位、低1位、低2位…分別表示channel下標為0、1、2…的針的電平狀況,1為高電平、0為低電平
test() 是測試函數。用8位二進制表示8個燈的狀態,每隔0.1秒到下一個狀態: 0000 0000, 0000 0001, 0000 0010, 0000 0011,0000 0100 … 實際上就是從0數到255
clean() 是對 RPi.GPIO.cleanup() 的一個封裝