之前写过一个关于树莓派的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或者终端下:
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
安装的时候出现错误:
source/py_gpio.c:23:20: fatal error: Python.h: No such file or directory
缺少Python.h文件,没安装python编译环境:
sudo apt-get install python-dev
再次安装:
sudo python setup.py install
没问题就安装好了.
二 使用python操作gpio
先测试下输出,新建个led.py文件:
#!/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的缩进.
终端下运行:
sudo python led.py
如果LED出现一闪一闪就表示成功了.
在添加个按钮:
这里使用复位按键,一段接到GND,一段加到PIN12,再接10k电阻到3v3上拉
程序 :
#!/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 了: