树莓派主板集成了丰富的IO口,可以用于输入输出,通信等功能,常常用于物联网控制、传感器数据交互等方面,这里我们讲解一下怎么使用IO口作为输入输出,并控制一些简单的电路。
sudo apt-get install pigpio python-pigpio python3-pigpio
dpkg -l|grep pigpio
返回结果如下:
4.2 输入 sudo pigpiod
检查能否启动gpio守护进程
正常启动后不会有任何返回,也不会报错,仿佛不存在一样,返回结果如下:
此时可通过查看进程来确定是否运行,输入如下指令:
ps -ef|grep pigpio
我这个遇到一个端口占用问题,返回结果如下:
通过查看端口和进程ID,查询到有个jupyter-lab软件也使用了8888端口,修改该软件的默认端口,或者关闭该进程即可恢复正常。
#!/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()
绿灯为电源指示灯
#!/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小车相关文章和知识。
大家对感兴趣的知识点可以在文章下面留言,我可以优先帮大家讲解哦
欢迎大家光临我的淘宝小店,会定期推出教程中使用的物美价优的硬件,你的光临就是对我的支持
原创不易,转载请说明出处。