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

本文介绍如何使用Python控制树莓派的GPIO引脚进行输出和读取操作,包括闪烁LED、轮询和中断方式读取引脚状态,并提供具体代码实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

树莓派瞎玩~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函数将使代码处于阻塞状态,直到发生对应的信号状态变换,代码才继续执行。

树莓派是一个非常受欢迎的小型计算机平台,适合各种嵌入式项目和学习硬件编程。树莓派5虽然尚未正式发布(截至我的知识更新到2024年3月),我们可以基于现有版本的知识来进行说明。 对于使用Python语言控制GPIO(通用输入输出端口)的操作,在树莓派上通常是通过`RPi.GPIO`库或者其他类似功能的第三方库完成的。以下是简单的步骤指南: ### 安装必要的软件包 首先你需要安装Python GPIO库,可以打开终端并运行下列命令来安装它: ```bash sudo apt-get update sudo apt-get install python3-rpi.gpio ``` 如果你是在较新的Raspbian系统中操作,则可以直接使用pip工具进行安装: ```bash pip3 install RPi.GPIO ``` ### 编写Python脚本控制GPIO引脚 接下来就可以编写一段简单的Python代码来配置、读取以及设置GPIO引脚的状态了。下面的例子展示了如何点亮一个连接至特定编号引脚上的LED灯泡: ```python import RPi.GPIO as GPIO import time # 设置模式为BCM而不是BOARD(物理管脚编号) GPIO.setmode(GPIO.BCM) # 配置某个具体的GPIO针作为输出,并初始化其状态为低电平(关闭) led_pin = 18 # 这里假定你将LED接到BCM编号下的第18号引脚 GPIO.setup(led_pin, GPIO.OUT) GPIO.output(led_pin, False) try: while True: print("Turning LED on") GPIO.output(led_pin, True) # 点亮LED time.sleep(1) # 持续一秒 print("Turning LED off") GPIO.output(led_pin, False) # 关闭LED time.sleep(1) except KeyboardInterrupt: pass # 当用户按下Ctrl+C时退出循环 finally: GPIO.cleanup() # 清理使用的资源以便下次能正常使用 ``` 以上程序会在指定间隔内交替开启/关闭接在设定好的GPIO引脚上的外部设备(如LED)。注意实际应用中需要根据所使用的具体型号调整相应的引脚分配规则等信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值