中级篇——python控制树莓派IO口使用操作+实例代码演示
2021/10/18 17:40:02
本文主要是介绍中级篇——python控制树莓派IO口使用操作+实例代码演示,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
背景故事
树莓派主板集成了丰富的IO口,可以用于输入输出,通信等功能,常常用于物联网控制、传感器数据交互等方面,这里我们讲解一下怎么使用IO口作为输入输出,并控制一些简单的电路。
硬件准备
- 树莓派主板(这里以3B为例)
- 基础电路1搭建:面包板流水灯电路
软件准备
- 确保树莓派系统为官方系统,系统安装可以参考我的其他教程。非官方系统安装方式因系统而异,不在本篇讨论。
- 安装pigpio库
pigpio是一个由C语言编写的库函数,并提供Python接口。
安装指令如下:
sudo apt-get install pigpio python-pigpio python3-pigpio
- pigpio库的基本介绍
根据官方文档上的介绍,这个库主要特性有(翻译自官方文档,可能有错漏):
- 能够同时在31个GPIO口进行精确至5微秒的硬件定时采样
- 能够同时在31个GPIO口产生硬件定时PWM
- 能够同时在31个GPIO口产生硬件定时伺服脉冲
- 同时监听31个GPIO口,电平更改时进行回调(精确到几个微秒)
- 同时监听31个GPIO口,电平更改时通过管道发送通知 可以在规定的时间间隔内进行回调
- 可以同时读取/写入存储区中的所有GPIO(0-31,32-53)
- 可以实现对GPIO状态的读,写模式和内部拉动 提供套接字和管道接口
- 可以用于生成GPIO电平变化的波形(精确到几个微秒)
- 可以使用任何用户的GPIO的软件串行链接 通过套接字和管道接口进行基本权限控制
- 安装完检查
4.1 输入如下指令:
dpkg -l|grep pigpio
返回结果如下:
4.2 输入 sudo pigpiod
检查能否启动gpio守护进程
正常启动后不会有任何返回,也不会报错,仿佛不存在一样,返回结果如下:
此时可通过查看进程来确定是否运行,输入如下指令:
ps -ef|grep pigpio
返回结果如下:
我这个遇到一个端口占用问题,返回结果如下:
通过查看端口和进程ID,查询到有个jupyter-lab软件也使用了8888端口,修改该软件的默认端口,或者关闭该进程即可恢复正常。
关于如何通过端口查看进程,可以参考我的这篇文章:中级篇——Linux下通过进程名、ID、端口号查看进程信息
编写简易流水灯程序
#!/usr/bin/python3 # -*- coding: utf-8 -*- """ gpio 控制简易流水灯实验 1. 4个led从左流到右,又从右到左,循环往复 """ __date__ = "2021/9/5" __version__ = "1.1.0" from time import sleep import pigpio # 定义编号1到4流水灯的GPIO引脚 LED1 = 4 LED2 = 17 LED3 = 27 LED4 = 22 def delay(): sleep(0.5) def main(): pi = pigpio.pi() # IO初始化 pi.set_mode(LED1, pigpio.OUTPUT) # 设置为推挽输出 pi.set_mode(LED2, pigpio.OUTPUT) # 设置为推挽输出 pi.set_mode(LED3, pigpio.OUTPUT) # 设置为推挽输出 pi.set_mode(LED4, pigpio.OUTPUT) # 设置为推挽输出 # 简易流水灯 while True: pi.write(LED1, 1) pi.write(LED2, 0) pi.write(LED3, 0) pi.write(LED4, 0) delay() pi.write(LED1, 0) pi.write(LED2, 1) pi.write(LED3, 0) pi.write(LED4, 0) delay() pi.write(LED1, 0) pi.write(LED2, 0) pi.write(LED3, 1) pi.write(LED4, 0) delay() pi.write(LED1, 0) pi.write(LED2, 0) pi.write(LED3, 0) pi.write(LED4, 1) delay() pi.write(LED1, 0) pi.write(LED2, 0) pi.write(LED3, 1) pi.write(LED4, 0) delay() pi.write(LED1, 0) pi.write(LED2, 1) pi.write(LED3, 0) pi.write(LED4, 0) delay() if __name__ == '__main__': # 版本控制 print("当前版本: ", __version__) main()
代码解读
- 注意需要先设置推挽输出,增加输出能力。
- 单独定义灯的编号,方便随时修改,单独定义延时,也是为了方便后期修改
- 注意LED编号是下图圈住的数字,不要弄错了
效果展示
绿灯为电源指示灯
拓展示例:PWM输出
#!/usr/bin/python3 # -*- coding: utf-8 -*- """ gpio 控制简易流水灯实验 1. gpio产生PWM波 2. 控制一个LED呼吸渐变 """ __date__ = "2021/9/5" __version__ = "1.1.0" from time import sleep import pigpio # 定义编号1到4流水灯的GPIO引脚 LED1 = 4 # 定义占空比变量 PWM = 0 def delay(): sleep(0.025) def main(): global PWM, LED1 pi = pigpio.pi() # IO初始化 pi.set_mode(LED1, pigpio.OUTPUT) # 设置为推挽输出 pi.set_PWM_frequency(LED1, 1000) # 设定14号引脚产生的pwm波形的频率为1000Hz,方便录像,减少频闪 pi.set_PWM_range(LED1, 2000) # 指定要把14号引脚上的一个pwm周期分成多少份,这里是分成2000份,这个数据的范围是25-40000 pi.set_PWM_dutycycle(LED1, 150) # 指定pwm波形的占空比,这里的占空比为150/2000,2000是上一个函数设定的 flag_dir = 1 # 呼吸灯渐变方向,默认为1,增加,当变为0时,数值减小 # 简易呼吸灯 while True: if flag_dir == 1: PWM += 10 if PWM >= 1000: flag_dir = 0 else: PWM -= 10 if PWM <= 0: flag_dir = 1 pi.set_PWM_dutycycle(LED1, PWM) delay() if __name__ == '__main__': # 版本控制 print("当前版本: ", __version__) main()
呼吸灯效果展示
祝大家玩的愉快!
·
·
·
欢迎各位老铁一键三连,本号后续会不断更新树莓派、人工智能、STM32、ROS小车相关文章和知识。
大家对感兴趣的知识点可以在文章下面留言,我可以优先帮大家讲解哦
原创不易,转载请说明出处。
这篇关于中级篇——python控制树莓派IO口使用操作+实例代码演示的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门
- 2024-11-14Python编程入门指南
- 2024-11-13Python基础教程
- 2024-11-12Python编程基础指南
- 2024-11-12Python基础编程教程
- 2024-11-08Python编程基础与实践示例
- 2024-11-07Python编程基础指南
- 2024-11-06Python编程基础入门指南
- 2024-11-06怎么使用python 计算两个GPS的距离功能-icode9专业技术文章分享