树莓派硬件编程

您所在的位置:网站首页 树莓派用啥编程 树莓派硬件编程

树莓派硬件编程

2023-08-13 04:24| 来源: 网络整理| 查看: 265

一、认识RPi.GPIO库

树莓派硬件编程不仅可以用Python进行开发,也可以用C++进行开发,那么想要对硬件进行控制,就需要了解树莓派的电路设计和芯片的控制规则,只有知道了这些,我们才能驱动我们的树莓派。那么RPi.GPIO库就是Python对树莓派的控制库,它提供了很多函数可以让我们获取引脚信息、与外部设备进行数据交互等等,所以RPi.GPIO是我们硬件编程非常重要的工具。

二、如何下载安装RPi.GPIO库

一般来讲,树莓派官方镜像已经默认安装了RPi.GPIO库的,我们可以用 pip3 list 来查看一下已安装库列表

如果没有安装的话,那么我们可以通过 pip3 install rpi.gpio 来对其进行安装,或者 apt-get install python3-rpi.gpio 进行安装;

这边友情提醒,不要好好的去卸载RPi.GPIO库,这是血泪教训,因为我想试验命令安装,然后把库给卸载了,命令应该没有错,但是可能现实其他依赖会有问题,所以,没事别瞎试;

三、引脚编号

我们通过上图可以看见,我们可以通过三种编码模式对树莓派引脚进行控制,那么这三种编码分别是什么意思呢?

wiringPi编码:这是在C++进行开发时所使用的编码,这边不做重点讲解;BCM编码:任何一个开发板想要进行控制,肯定会有一个主控芯片,那么这个芯片就会有很多引脚,不同的引脚就有不同的功能,我们这里引出的是40Pin,但是一般来讲这个芯片是多于40个的,多出的引脚就要负责其他零部件的控制等等;那么,BCM编码我们可以理解成是主控芯片的引脚编号,直接通过主控芯片来进行控制当然是没有问题的。但是这里就有一个问题,树莓派每个版本不一样,或者升级之后,不能够保证主控芯片不变,所以当树莓派进行升级之后,以前的程序可能就不能用了,所以我们一般不用BCM编码;BOARD编码:这个就很好理解了,我们拿着树莓派,从上到下这么数过去,就是BOARD编码,我们也叫它物理引脚; 那么BOARD编码和BCM编码有什么联系呢?这么来说吧,物理引脚和主控芯片的功能引脚一一对应,也就是说它始终和功能对应,所以当芯片升级或者其他原因,我们之前所写的代码都是可用的,这样就可以保证极好的兼容性。 那么物理引脚是连到哪的呢?整个板子是由主控芯片控制的呀,物理引脚肯定也是和芯片引脚相连呀。

总结:我们一般使用python进行硬件开发的时候,最好使用BOARD编码,这样可以保证其兼容性。

四、使用RPi.GPIO库控制LED灯闪烁 导入RPi.GPIO库 import RPi.GPIO as GPIO 指定编码模式 GPIO.setmode(GPIO.BOARD) # GPIO.setmode(GPIO.BCM) 设置引脚功能 GPIO.setup(引脚编码,引脚功能,initial=GPIO.HIGH)

引脚编号:这个就是根据不同的编码模式,配置其引脚编号

pin_list = [15,16] GPIO.setup(pin_list,GPIO.OUT) # 我们可以通过列表的方式,批量对引脚模式进行设置

引脚功能:我们可以将引脚配置成输出(GPIO.OUT)模式,输入后面再讲 initial=GPIO.HIGH:这个表示其引脚的初始状态为高电平状态,我们可以通过这么参数设置引脚的初始状态,且参数只有在输出模式才有

输出高电平 GPIO.output(引脚编号,状态)

引脚编号: 同上 状态:这里其实就是一个逻辑值,我们可以用True/False或者用1/0或者用GPIO.HIGH/GPIO.LOW

清理引脚 GPIO.cleanup()

这里为什么需要清理引脚呢?这是因为我们在结束程序的时候,我们要将所有的引脚恢复成初始的状态,一般来讲为输入模式,这是要避免短路造成设备的损坏。

OK,下面我们就举个LED灯闪烁的栗子:

import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BOARD) GPIO.setup(16,GPIO.OUT) try: while True: GPIO.output(16,GPIO.HIGH) time.sleep(1) GPIO.output(16,GPIO.LOW) time.sleep(1) except KeyboardInterrupt: # 异常处理,如果Ctrl+C退出程序 GPIO.output(16,GPIO.LOW) GPIO.cleanup() 五、使用RPi.GPIOk库实现呼吸灯效果

对于什么是呼吸灯,呼吸灯是怎么实现的,我的另一篇文章(炫酷LED呼吸灯)应该讲的比较清楚了,这里就不做赘述;

那么这边我们使用的还是PWM脉宽调制来实现LED灯的呼吸灯效果,PWM的实质就是控制高低电平的时间比,单位时间内,高电平比例越高,那么LED灯工作的时间就越长,也就越亮。PWM不仅可以控制LED灯的亮暗,直流电机的转速、舵机的角度、无源蜂鸣器的频率等等都可以控制,一句话总结:脉宽调制就是用数字信号来实现模拟信号输出的一种技术。

库导入、引脚编码、引脚功能设置等是常规操作 import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BOARD) GPIO.setup(16,GPIO.OUT) 划重点,创建一个PWM对象 p = GPIO.PWM(16,50) # 创建一个PWM对象 p.start(0) # 启动PWM,初始值为0

GPIO.PWM(引脚编号,频率): 这里的频率是指单位时间内变化的次数,即频率越高,亮暗过渡就越平滑 上面从左到右,频率分别是:10、20、50,大家可以对比他们的效果,区别还是比较明显的;

实现效果 try: while 1: for i in range(0,100,5): p.ChangeDutyCycle(i) time.sleep(0.05) for i in range(100,0,-5): p.ChangeDutyCycle(i) time.sleep(0.05) except KeyboardInterrupt: p.ChangeDutyCycle(0) GPIO.cleanup()

我们可以用 ChangeDutyCycle([0,100]) 来控制PWM的占空比,其实这里我们可以理解成百分比,给他多少能量,他就可以发出多大的亮光;



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3