歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 在樹莓派上用Python控制LED

在樹莓派上用Python控制LED

日期:2017/3/1 9:45:11   编辑:Linux編程

初步學習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

所需材料

  • 一個已經安裝配置好了的樹莓派
  • 連接控制樹莓派所用的其他必須設備
  • 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 time

channels = [16,18,22,24,26,19,21,23]

def init():
GPIO.setmode(GPIO.BOARD)
for x in channels:
GPIO.setup(x,GPIO.OUT)
pass

def 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
pass

def 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() 的一個封裝

Python 的詳細介紹:請點這裡
Python 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved