树莓派raspberry使用python实现GPIO输入输出-按键LED

之前写过一个关于树莓派的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闪亮一下.

电路:

piled

实验图:

pi_led_button

《树莓派raspberry使用python实现GPIO输入输出-按键LED》上有6条评论

  1. 试了一下,sudo python led.py后,没按按钮,灯直接就亮了,然后再按才正常,怎样改程式让运行后,灯不亮,按下按钮后才亮

  2. 新版本的 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)
    

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Time limit is exhausted. Please reload the CAPTCHA.

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据