文章目录

  • 前言
  • 一、代码实例
  • 二、基础用法
    • 1.GPIO.setmode--设置引脚编号
    • 2.GPIO.setwarnings(False)--GPIO口警告
    • 3.设置channel多通道方法
    • 4.GPIO.setup--设置通道
    • 5.GPIO.input(channel)--读取 GPIO 引脚的值
    • 6.GPIO.output(channel, state)--设置 GPIO 引脚的输出状态
    • 7.同一个调用中输出到多通道
    • 8.GPIO.cleanup()--清理释放
  • 三、RPi.GPIO 中使用 PWM
    • 1.创建 PWM 实例:
    • 2.启动 PWM:
    • 3.改变频率:
    • 4.更改占空比:
    • 5.要停止 PWM:
  • 四、总结

前言

树莓派中有40个引脚,就是GPIO,意思就是通用型输入输出。使用Python对其进行控制,就要使用第三方库 RPi.GPIO,这里简单介绍一下


一、代码实例

以下是双色LED灯实验,将中间引脚接入物理引脚编号为11的,将S接入物理引脚编号为12,G接入管脚为GND。

import time
try:import RPi.GPIO as GPIO  # 导入GPIO模块
except RuntimeError:print("Error importing RPi.GPIO!这可能是因为你需要超级用户权限。你可以通过使用'sudo'来运行你的脚本来实现这一点")colors = [0xFF00, 0x00FF, 0x0FF0, 0xF00F]
makerobo_pins = [11, 12]  # PIN管脚字典  GPIO.BOARD对应实际物理管脚  GPIO.BCM对应BCM编码GPIO.setmode(GPIO.BOARD)  # 采用实际的物理管脚给GPIO口
GPIO.setwarnings(False)  # 去除GPIO口警告
GPIO.setup(makerobo_pins, GPIO.OUT)  # 设置Pin模式为输出模式
GPIO.output(makerobo_pins, GPIO.LOW)  # 设置Pin管脚为低电平(0V)关闭LEDp_R = GPIO.PWM(makerobo_pins[0], 1000)  # 设置频率为1KHz
p_G = GPIO.PWM(makerobo_pins[1], 1000)  # 设置频率为1KHz# 初始化占空比为0(led关闭)
p_R.start(0)
p_G.start(0)# 按比例缩放函数
def makerobo_pwm_map(x, in_min, in_max, out_min, out_max):return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min# 设置颜色
def makerobo_set_Color(col):  # 例如:col = 0x1122# 第一个col=0xFF00 转为2进制 为16位1111 1111 0000 0000R_val = col >> 8  # 前8位给红色G_val = col & 0x00FF  # 后8位给红色# 把0-255的范围同比例缩小到0-100之间R_val = makerobo_pwm_map(R_val, 0, 255, 0, 100)G_val = makerobo_pwm_map(G_val, 0, 255, 0, 100)p_R.ChangeDutyCycle(R_val)  # 改变占空比p_G.ChangeDutyCycle(G_val)  # 改变占空比# 调用循环函数
def makerobo_loop():while True:for col in colors:makerobo_set_Color(col)time.sleep(0.5)# 释放资源
def makerobo_destroy():p_G.stop()p_R.stop()GPIO.output(makerobo_pins, GPIO.LOW)  # 关闭所有LEDGPIO.cleanup()  # 释放资源# 程序入口
if __name__ == "__main__":try:makerobo_loop()  # 调用循环函数except KeyboardInterrupt:  # 当按下Ctrl+C时,将执行destroy()子程序。makerobo_destroy()  # 释放资源

二、基础用法

1.GPIO.setmode–设置引脚编号

使用Python操作树莓派引脚时,有两种编码方式:

  • 一种是 BOARD编号,即树莓派上实际物理引脚编号
GPIO.setmode(GPIO.BOARD)  # BOARD编号,采用实际的物理管脚给GPIO口
  • 另一种是BCM 编号,指的是 Broadcom SOC 上的频道编号,可以对应图表来说明哪个通道编号连接到 RPi 板上的哪个引脚。
GPIO.setmode(GPIO.BCM)  # BCM编号

建议使用 BOARD 编号,这种实际物理管脚的优势在于,无论 RPi 的电路板版本如何,您的硬件始终可以工作。您无需重新连接连接器或更改代码。而 BCM 编号,可能会在 Raspberry Pi 板的修订版之间中断。

  • 以下为树莓派管脚图:可参考

2.GPIO.setwarnings(False)–GPIO口警告

你的树莓派的GPIO上可能有多个脚本/电路,因此,如果 RPi.GPIO 检测到某个引脚已配置为默认值(输入)以外的其他内容,则在尝试配置脚本时会收到警告,其实没有影响。要禁用这些警告:

GPIO.setwarnings(False) # 去除GPIO口警告

3.设置channel多通道方法

设置多个通道可以一起设置,可以使用列表或元组把他们作为一个整体

  • 列表方式
makerobo_pins = [11, 12]  # PIN管脚字典  GPIO.BOARD对应实际物理管脚  GPIO.BCM对应BCM编码
  • 元组
makerobo_pins = (11, 12)  # PIN管脚字典  GPIO.BOARD对应实际物理管脚  GPIO.BCM对应BCM编码

4.GPIO.setup–设置通道

4.1 GPIO.setup(channel, GPIO.IN)

  • 将通道配置为输入, makerobo_pins为设置多通道的列表方式
GPIO.setup(makerobo_pins, GPIO.IN)  # 设置Pin模式为输入模式

4.2 GPIO.setup(channel, GPIO.OUT)
示例代码中:

  • 将通道配置为输出, makerobo_pins为设置多通道的列表方式
GPIO.setup(makerobo_pins, GPIO.OUT))  # 设置Pin模式为输出模式

4.3 GPIO.setup(channel, GPIO.OUT, initial=GPIO.HIGH)

  • 还可以为输出通道指定初始值:

5.GPIO.input(channel)–读取 GPIO 引脚的值

这将返回 0 / GPIO.LOW / False 或 1 / GPIO.HIGH / True。

6.GPIO.output(channel, state)–设置 GPIO 引脚的输出状态

状态可以是 0 / GPIO.LOW / False 或 1 / GPIO.HIGH / True。

7.同一个调用中输出到多通道

chan_list = [11,12]                            # 适用于列表或元组
GPIO.output(chan_list, GPIO.LOW)                # 设置所有GPIO.LOW
GPIO.output(chan_list, (GPIO.HIGH, GPIO.LOW))   # 设置第一个高和第二个低

示例代码中:

GPIO.output(makerobo_pins, GPIO.LOW)  # 设置Pin管脚为低电平(0V)关闭LED

8.GPIO.cleanup()–清理释放

8.1 要在脚本结束时进行清理:

GPIO.cleanup()

8.2 程序退出时,可能不想清理每个频道而留下一些设置。可以清理单个频道、频道列表或元组:

GPIO.cleanup(channel)
GPIO.cleanup( (channel1, channel2) )
GPIO.cleanup( [channel1, channel2] )

三、RPi.GPIO 中使用 PWM

简单说一下频率和占空比,不是专业的,望补充:

  • 频率:每秒钟信号从高电平到低电平再回到高电平的次数。PWM是间接的,高电平是亮,低电平不亮,即高低电平交替,频率很快,所以人眼基本分辨不出来是一亮一暗的,而且高电平亮的时候会激活LED,低电平的时候LED不会瞬间暗,而是有一个由明到暗的一个过程。或许有疑问,为什么不一直高电平就常亮,因为高低电平的信号才方便我们进行控制。这里感谢我的嵌入式开发同事讲解
  • 占空比:高电平持续时间和低电平持续时间之间的比例。占空比越大,那个信号强度就越高,比如这里双色LED灯中,红色信号占空比大,就先显红色。

1.创建 PWM 实例:

p = GPIO.PWM(channel, frequency) #(通道、 频率)
示例代码中:

makerobo_pins = [11, 12]  # PIN管脚字典
...
p_R = GPIO.PWM(makerobo_pins[0], 1000)  # 设置频率为1KHz
p_G = GPIO.PWM(makerobo_pins[1], 1000)  # 设置频率为1KHz

2.启动 PWM:

p.start(dc) # 其中 dc 是占空比 (0.0 <= dc <= 100.0)
示例代码中:

# 初始化占空比为0(led关闭)
p_R.start(0)
p_G.start(0)

3.改变频率:

p.ChangeFrequency(freq) # 其中 freq 是以赫兹为单位的新频率

4.更改占空比:

p.ChangeDutyCycle(dc) # 其中 0.0 <= dc <= 100.0
示例代码中:

# 设置颜色
def makerobo_set_Color(col):  # 例如:col = 0x1122...p_R.ChangeDutyCycle(R_val)  # 改变占空比p_G.ChangeDutyCycle(G_val)  # 改变占空比

5.要停止 PWM:

p.stop()
示例代码中:

# 释放资源
def makerobo_destroy():p_G.stop()p_R.stop()...

四、总结

还有一些高级用法,比如线程回调,后面有时间再写吧。
欢迎各位交流。您的点赞是我坚持的动力。

Python面向树莓派使用RPi.GPIO库相关推荐

  1. csi python 摄像头 树莓派_树莓派之摄像头和人脸识别

    安装好Python与树莓派外置硬件GPIO库文件 sudo apt-get install python-rpi.gpio 在python中使用GPIO示例: import RPi.GPIO as G ...

  2. 【树莓派学习笔记】三、点亮一个LED灯(C语言 - WiringPi、Python - RPi.GPIO/GPIO Zero、bash脚本)

    目录 C语言 WiringPi Python RPi.GPIO GPIO Zero bash脚本 平台:树莓派3B 版本: 2021-05-07-raspios-buster-armhf 若GPIO输 ...

  3. python控制树莓派led_Python 控制树莓派 GPIO 输出:控制 LED 灯

    树莓派 GPIO 控制输出的入门应该都是从控制 LED 灯开始的吧. 树莓派版本:Model 3B+ 树莓派系统:Raspbian Stretch with desktop and recommend ...

  4. 树莓派python gpio 模仿iic_Adafruit的树莓派教程:GPIO配置

    概览 树莓派最令人兴奋的特点之一是它有一个GPIO连接器可以用来接其他的硬件设备. GPIO连接器实际上是由许多不同类型的接口组成的: 真正的GPIO(General Purpose Input Ou ...

  5. python控制树莓派gpioled,Python 控制树莓派 GPIO 输出:控制 LED 灯

    树莓派 GPIO 控制输出的入门应该都是从控制 LED 灯开始的吧. 树莓派版本:Model 3B+ 树莓派系统:Raspbian Stretch with desktop and recommend ...

  6. 树莓派Raspberry Pi上安装和使用RPi.GPIO模块以及引脚对照表

    记录自己学习树莓派的过程. 如果要使用Python来使用GPIO信号,需要使用RPi.GPIO模块. 如果你使用的是Python2版本,树莓派默认安装了RPi.GPIO模块(python-rpi.gp ...

  7. 树莓派教程 - 1.0 树莓派GPIO库wiringPi 点亮LED

    Git例程源码仓库:https://github.com/ZhiliangMa/raspberry.git 电脑需要提前安装的工具: SSH.串口 - 终端神器 MobaXterm,官网下载链接:ht ...

  8. 树莓派RaspberryPi的RPi.GPIO使用指南

    Python操作树莓派GPIO的必要准备 sudo apt-get install python-setuptools sudo easy_install -U distribute sudo apt ...

  9. 树莓派4B Ubuntu 21.04 自动温控开关风扇以及RPi.GPIO避坑指南

    本人对树莓派有一些了解,虽然学过模电数电,但也只是学过,过于硬件的东西也不懂. 好了,首先说明,树莓派GPIO引脚都是3.3v的,一般风扇都是5v的,所以不能用GPIO直接供电.即使你的风扇额定电压为 ...

最新文章

  1. PTA—输出全排列 (20分) 递归回溯思想
  2. 职称计算机考试题纲,2017年职称计算机考试大纲
  3. 《虚拟机深入应用实践》已经出版
  4. 更改Cmd默认默认路径(以设置为D:/为例)
  5. vim补全html标签,vim括号引号html标签自动补全
  6. 【Qt】Qt中QJsonValue类
  7. Linux-正则表达式的POSIX规范及流派
  8. cad中填充的剖面线不能被修剪_在模具行业中CAD二维制图的相关绘图规范
  9. Latex文本文档的排版
  10. 游戏筑基开发之利用文件函数取出配置文件(ini文件)的数据实体(C语言)
  11. 【POJ 1838 --- Banana】
  12. WQM软件使用说明书
  13. Java实现PDF添加图片水印和文字水印
  14. C语言求三角形斜边长
  15. 微信支付不靠谱 星巴克喝一杯咖啡被刷掉一千多
  16. 开发一个 app 有多难?需要多少钱?
  17. 在D天内送达包裹的能力
  18. Python定时任务库schedule的使用
  19. 仿QQ分组列表(UITableView)
  20. iOS开发 生成CSR(.certSigningRequest)文件

热门文章

  1. 互联网与神经学的交叉对比研究--论文全文
  2. 共享自习室微信小程序-研习屋 小程序前端设计
  3. SpringBoot教程(10) Jackson ObjectMapper使用和常用注解
  4. python 青少年 广州_广州小码王Python少儿编程班
  5. Jmeter函数分类及自定义开发
  6. server 2008 r2自建pptp服务器,增加外网端口
  7. debug版没有问题而release版本崩溃的解决方法探究
  8. 二维码在产品画册中的应用
  9. 2016php笔试题
  10. 移动端cube界面设计html,滴滴开源基于 Vue.js 的移动端组件库 cube-ui