初步學習RPi.GPIO模塊的過程中寫了一個控制8個LED的模塊,基本上只是一個對RPi.GPIO的一個封裝
推薦閱讀:
《Python開發技術詳解》.( 周偉,宗傑).[高清PDF掃描版+隨書視頻+代碼] http://www.linuxidc.com/Linux/2013-11/92693.htm
Python腳本獲取Linux系統信息 http://www.linuxidc.com/Linux/2013-08/88531.htm
Raspberry Pi 樹莓派搭LAMP服務器 http://www.linuxidc.com/Linux/2013-06/86687.htm
在樹莓派Raspberry Pi上安裝游戲模擬器 http://www.linuxidc.com/Linux/2013-07/86842.htm
Raspberry Pi 樹莓派上安裝Weston http://www.linuxidc.com/Linux/2013-06/86685.htm
用於Raspberry Pi 的Linux 操作系統已經可用 http://www.linuxidc.com/Linux/2012-03/56058.htm
Raspberry Pi(樹莓派)試用小記 http://www.linuxidc.com/Linux/2013-10/91008.htm
Raspberry Pi(樹莓派)的安裝、配置IP及軟件源等入門 http://www.linuxidc.com/Linux/2013-10/91009.htm
電路圖
按照電路圖所示,在面包板上進行連接。
首先得確定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.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()設置的狀態。退出程序之前一定要調用,否則下次調用的時候會報錯。
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() 的一個封裝
Python 的詳細介紹:請點這裡
Python 的下載地址:請點這裡