【方法】树莓派GPIO控制使用教程

本文详细介绍了树莓派的GPIO(通用输入/输出端口)使用方法,包括编码规范的选择、引脚的设置与控制,以及如何利用PWM(脉冲宽度调制)实现电机的变速控制。通过具体的代码示例,展示了电平控制和PWM控制的具体实现。

介绍

GPIO(General Purpose I/O Ports)意思为通用输入/输出端口,通过它们可以输出高低电平或者通过它们读入引脚的状态(是高电平或是低电平)。

树莓派使用GPIO的方法有很多种,库函数包括了wiringPi以及RPi.GPIO,这里我主要介绍RPi.GPIO库,这个库是树莓派系统自带的。

使用说明

1、首先加载库

import RPi.GPIO as GPIO

2、设置编码规范

gpio.setmode(gpio.BOARD)

这里需要解释的是:因为要使用GPIO口,那么你得明确使用的是哪一个口(下面代码中 pin 对应的就是端口号),这就引入了一个编号问题,目前存在的有三种编码规范。
1)BOARD: 从左到右,从上到下:左边基数,右边偶数:1-40
2)BCM:编号侧重 CPU 寄存器,根据 BCM2835 的 GPIO 寄存器编号
3)wpi: 编号侧重实现逻辑,把扩展 GPIO 端口从 0 开始编号,这种编号方便编程。
通过一张图我们就能看清楚
在这里插入图片描述
3、引脚设置

# 将引脚设置为输入模式
GPIO.setup(pin, GPIO.IN)

# 将引脚设置为输出模式
GPIO.setup(pin, GPIO.OUT)

# 为输出的引脚设置默认值
GPIO.setup(pin, GPIO.OUT, initial=GPIO.HIGH)

4、控制电平

GPIO.output(pin, state)

状态可以设置为0 / GPIO.LOW / False / 1 / GPIO.HIGH / True
也可以一次性设置多个引脚

pin_list = [11,12]
GPIO.output(pin_list, GPIO.LOW)

5、读取引脚的输入状态

GPIO.input(pin)

6、释放

GPIO.cleanup()

代码

电平控制

控制方法有两种,第一种是直接用高低电平实现控制,这样的方法电机速度只有最大速度以及停止;在后面会介绍使用PWM实现变速控制。
完整代码:

# coding:utf-8
# 本代码实现 树莓派+L298N驱动板 小车的2s前进运动

import RPi.GPIO as gpio
import time

# 定义引脚,你怎么接的怎么改
in1 = 12
in2 = 16
in3 = 18
in4 = 22

# 设置GPIO口为BOARD编号规范
gpio.setmode(gpio.BOARD)

# 设置GPIO口为输出
gpio.setup(in1, gpio.OUT)
gpio.setup(in2, gpio.OUT)
gpio.setup(in3, gpio.OUT)
gpio.setup(in4, gpio.OUT)

# 设置输出电平
gpio.output(in1, gpio.HIGH)
gpio.output(in2, gpio.LOW)
gpio.output(in3, gpio.HIGH)
gpio.output(in4, gpio.LOW)

# 秒级延迟
time.sleep(2)
# 释放
gpio.cleanup()

PWM控制

现在来介绍一下PWM控制的方法:
1、设置PWM波频率,频率越高,调节反应越快

pwm = gpio.PWM(pin, 500)

2、对PWM控制速度进行初始化

pwm.start(0)   # 括号中范围为0.0~100.0,0为不动,100为最大

3、过程中调整速度

pwm.ChangeDutyCycle(50)   # 括号中范围为0.0~100.0,0为不动,100为最大

4、PWM控制结束

pwm.stop()

完整代码

# coding:utf-8
# 实现树莓派小车的变速控制
import RPi.GPIO as gpio
import time

# 定义引脚,你怎么接的怎么修改
in1 = 12
in2 = 16
in3 = 18
in4 = 22

# 设置GPIO口为BOARD编号规范
gpio.setmode(gpio.BOARD)

# 设置GPIO口为输出
gpio.setup(in1, gpio.OUT)
gpio.setup(in2, gpio.OUT)
gpio.setup(in3, gpio.OUT)
gpio.setup(in4, gpio.OUT)

# 设置PWM波,频率为500Hz
pwm1 = gpio.PWM(in1, 500)
pwm2 = gpio.PWM(in2, 500)
pwm3 = gpio.PWM(in3, 500)
pwm4 = gpio.PWM(in4, 500)

# 初始化
pwm1.start(0)
pwm2.start(0)
pwm3.start(0)
pwm4.start(0)

pwm1.ChangeDutyCycle(50)
pwm2.ChangeDutyCycle(0)
pwm3.ChangeDutyCycle(50)
pwm4.ChangeDutyCycle(0)

# 停3秒 
time.sleep(3) 

pwm1.stop()
pwm2.stop()
pwm3.stop()
pwm4.stop()
gpio.cleanup()

效果是电机转3秒停下来

在这里补充一个L298N的工作原理图
在这里插入图片描述

通过上图可以发现,本来就有一对PWM波控制的接口,所以可以只接两根ENA和ENB,然后控制这两个就行

### 树莓派 GPIO 的 Python 库及其使用方法 树莓派提供了多种方式来控制GPIO 口,其中最常用的库之一是 `RPi.GPIO`。该库被广泛应用于树莓派的开发环境中,并且易于学习和使用。 #### 1. 安装必要的软件 为了能够正常使用 `RPi.GPIO` 库,需要先确保它已安装在树莓派的操作系统中。可以通过以下命令安装所需的依赖项: ```bash sudo apt-get update sudo apt-get install python3-rpi.gpio ``` 如果操作系统为较新的版本,则可能已经预装了此库[^2]。 --- #### 2. 导入库并初始化环境 以下是基本的代码框架,用于配置 GPIO 引脚: ```python import RPi.GPIO as GPIO # 导入 RPi.GPIO 库 import time # 导入时间模块以便延时操作 # 禁用警告信息 GPIO.setwarnings(False) # 设置 GPIO 编码模式 (BCM 或 BOARD) GPIO.setmode(GPIO.BCM) # 使用 BCM 模式表示引脚号基于芯片内部编号 # 如果希望使用实际物理引脚编号,则改为:GPIO.setmode(GPIO.BOARD)[^3] # 配置指定引脚为输出模式 pin_number = 18 # 替换为你计划使用的具体引脚编号 GPIO.setup(pin_number, GPIO.OUT) ``` --- #### 3. 控制 GPIO 输出状态 下面是一段简单的示例代码,展示如何通过 GPIO 引脚发送信号以点亮 LED 灯: ```python try: while True: # 将引脚设置为高电平(开启) GPIO.output(pin_number, GPIO.HIGH) print(f"Pin {pin_number} is now HIGH") time.sleep(1) # 延迟一秒 # 将引脚设置为低电平(关闭) GPIO.output(pin_number, GPIO.LOW) print(f"Pin {pin_number} is now LOW") time.sleep(1) # 再次延迟一秒 except KeyboardInterrupt: pass # 当按下 Ctrl+C 后退出循环 finally: # 清理 GPIO 资源 GPIO.cleanup() print("GPIO resources have been cleaned up.") ``` 这段代码实现了周期性的开关动作,适用于测试硬件连接是否正常工作[^3]。 --- #### 4. 进阶功能扩展 尽管 `RPi.GPIO` 提供了基础的功能支持,但它并不涵盖 SPI、I²C 或者 One-Wire 总线协议的支持。对于这些更复杂的通信需求,可以考虑其他专门设计的库或工具链[^1]。 例如,针对 I²C 接口可采用如下步骤启用服务并与设备交互: ```bash sudo raspi-config # 在界面菜单中选择 Enable I2C 功能 sudo apt-get install python-smbus i2c-tools ``` 之后利用 `smbus` 模块编写相应的驱动逻辑。 --- #### 注意事项 - **编码模式的选择**:`BOARD` 和 `BCM` 是两种不同的引脚命名方案,请根据实际情况决定选用哪一种。 - **资源释放的重要性**:每次实验结束前务必调用 `GPIO.cleanup()` 方法清理占用的端口,防止后续冲突发生。 ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yzy_1996

买杯咖啡,再接再厉

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值