树莓派主板集成了丰富的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端口,修改该软件的默认端口,或者关闭该进程即可恢复正常。
关于如何通过端口查看进程,可以参考我的这篇文章:中级篇——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()
绿灯为电源指示灯
#!/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小车相关文章和知识。
大家对感兴趣的知识点可以在文章下面留言,我可以优先帮大家讲解哦
原创不易,转载请说明出处。