之前写过一个关于树莓派的gpio的输入输出驱动,用了个c文件来调用该字符设备实现led点亮.不过树莓派在gpio上被做得很成熟了,可用完全使用python语言来调用GPIO,实现各种功能,比如:输入输出,SPI,i2c等接口.今天就使用python来实现对按键的响应,以及点亮led灯.
个人原创,转载请注明原文出处,并保留原文链接:
http://www.embbnux.com/2014/04/17/raspberry_use_python_gpio_to_output_input/
参考: Raspberry User Guide —- Eben Upton Gareth Halfacree (推荐初学者阅读)
一 安装python gpio库
SSH或者终端下:
1 2 3 4 5 6 7 8 9 10 11 12 | mkdir gpio cd gpio wget https: //pypi .python.org /packages/source/R/RPi .GPIO /RPi .GPIO-0.5.7. tar .gz #或者到这里下载最新版本:https://pypi.python.org/pypi/RPi.GPIO tar xvzf RPi.GPIO-*. tar .gz cd RPi.GPIO-*/ sudo python setup.py install |
安装的时候出现错误:
1 | source /py_gpio .c:23:20: fatal error: Python.h: No such file or directory |
缺少Python.h文件,没安装python编译环境:
1 | sudo apt-get install python-dev |
再次安装:
1 | sudo python setup.py install |
没问题就安装好了.
二 使用python操作gpio
先测试下输出,新建个led.py文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/usr/bin/env python import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BOARD) GPIO.setup( 11 ,GPIO.OUT) while True : GPIO.output( 11 , True ) time.sleep( 1 ) GPIO.output( 11 , False ) time.sleep( 1 ) |
注意: 这里使用GPIO.BOARD模式,所以对于引脚号的排序,是按26个pin的顺序,不是gpio1这样的.也就是说pin1就是板子上的3V3. 把led的负极接到板子上的pin11.正极接一个3K3的电阻,在接到3V3上,防止烧坏. 特别注意python的缩进.
终端下运行:
1 | sudo python led.py |
如果LED出现一闪一闪就表示成功了.
在添加个按钮:
这里使用复位按键,一段接到GND,一段加到PIN12,再接10k电阻到3v3上拉
程序 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #!/user/bin/env python import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BOARD) GPIO.setup( 11 ,GPIO.OUT) GPIO.setup( 12 ,GPIO.IN) while True : in_value = GPIO. input ( 12 ) if in_value = = False : GPIO.output( 11 , False ) time.sleep( 1 ) GPIO.output( 11 , True ) while in_value = = False : in_value = GPIO. input ( 12 ) |
对按钮进行下降沿检测.按下按钮后led闪亮一下.
电路:
实验图:
试了一下,sudo python led.py后,没按按钮,灯直接就亮了,然后再按才正常,怎样改程式让运行后,灯不亮,按下按钮后才亮
在while True之前加一句GPIO.output(11,True)就可以了
– -‘ 我
sudo apt-get install rpi.gpio
之后发现,树莓派内置有 RPi.GPIO 了。这感情好
新版系统都自带了
新版本的 Raspbian 可以用下面更简单的语句操作 led 了:
from gpiozero import LED
from time import sleep
led = LED(21) # GPIO 21
while True:
led.on()
sleep(1)
led.off()
sleep(1)