树莓派瞎玩~5~控制GPIO之Python

树莓派瞎玩~5~控制GPIO之Python


在Raspbian中已经预装了Python2.7.9,直接在命令行输入python即可看到如下信息

pi@raspberrypi:~ $ python
Python 2.7.9 (default, Mar  8 2015, 00:52:26)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

使用Python控制GPIO时,常用的是raspberry-gpio-python模块,在2016-03-18-raspbian-jessie版本的系统镜像中,预装了最新的版本v0.6.2,我们可以在Python中输入下列命令查看:

>>> import RPi.GPIO as GPIO
>>> GPIO.VERSION
'0.6.2'
>>>

要退出python返回到命令行,可以输入exit()或按下CTRL+Z

>>> exit()
pi@raspberrypi:~ $

控制GPIO输出

现在,只需找个地方创建python脚本,然后使用raspberry-gpio-python模块来控制GPIO引脚的输出。

pi@raspberrypi:~ $ cd ~
pi@raspberrypi:~ $ mkdir python_gpio
pi@raspberrypi:~ $ cd python_gpio/
pi@raspberrypi:~/python_gpio $ touch gpio24_blink.py
pi@raspberrypi:~/python_gpio $ nano gpio24_blink.py

编辑脚本内容

import RPi.GPIO as GPIO
import time

GPIO_PIN = 24

GPIO.setmode(GPIO.BCM)
GPIO.setup(GPIO_PIN, GPIO.OUT)
while True:
        GPIO.output(GPIO_PIN,GPIO.HIGH)
        time.sleep(1)
        GPIO.output(GPIO_PIN,GPIO.LOW)
        time.sleep(1)

存盘后,使用python + 脚本文件名的方式执行这个脚本。

pi@raspberrypi:~/python_gpio $ python gpio24_blink.py

用万用表测量GPIO24引脚的电压,发现电压每隔一秒在3.3V和0V之间跳动。由于代码的循环条件是True,所以脚本将无限循环下去,按下Ctrl+C组合键终止脚本的运行。

读取GPIO引脚的状态(轮询)

轮询就是持续的检查一件事儿,在这里就是持续的检查引脚状态,我们可以发现在代码中是用while循环和if组合实现的,这种轮询的方式将占用大量的处理能力。循环中的sleep是为了释放CPU,给其他程序让出资源。

import RPi.GPIO as GPIO
import time

GPIO_PIN = 24
count = 5

GPIO.setmode(GPIO.BCM)
GPIO.setup(GPIO_PIN, GPIO.IN)

print("waiting 5 times...")

while count > 0:
    if(GPIO.input(GPIO_PIN) == 1):
        count = count - 1
        print("input high")
    time.sleep(0.1)

print("exit...")
GPIO.cleanup()

通过测试,如果将引脚悬空,引脚上没有任何接线,此时引脚为低电平;若将杜邦线的一头插入到引脚上,另一头悬空,即没有连接3.3V电源也没有接地时,引脚处于不稳定状态,表现为状态在0和1之间跳动。我们可以使用硬件内部的上拉电阻或下拉电阻,为输入引脚配置初始值,可以达到去除干扰抖动的效果。修改上述代码中的配置语句为GPIO.setup(GPIO_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN),然后执行脚本,每当将24引脚连接高电平时,就会输出input high,由于这里是轮询模式,在连接时间较长时,会输出多行。

pi@raspberrypi:~/python_gpio $ sudo python gpio24_in.py
waiting 5 times...
input high
input high
input high
input high
input high
exit...

读取GPIO引脚的状态(中断)

import RPi.GPIO as GPIO

GPIO_PIN = 24
count = 5

GPIO.setmode(GPIO.BCM)
GPIO.setup(GPIO_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

print("waiting 5 times...")

while count > 0:
        GPIO.wait_for_edge(GPIO_PIN, GPIO.RISING)
        count = count - 1
        print("input high")


print("exit...")
GPIO.cleanup()

其中的wait_for_edge函数将使代码处于阻塞状态,直到发生对应的信号状态变换,代码才继续执行。

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值