文章目录
- 树莓派开发与STM32开发的比较
- 原理图以及树莓派引脚展示
- 点灯步骤
- 读取树莓派布局
树莓派开发与STM32开发的比较
树莓派和STM32都是常用的嵌入式设备,都可以使用GPIO来控制LED灯。它们的点灯方式和使用的编程语言以及开发环境略有不同:
-
相同点:
- 控制LED的原理都是使用GPIO输出高电平或低电平来点亮或关闭LED灯。
- 都需要使用适当的电阻来限制电流,以保护LED和芯片不被烧坏。
- 在编写控制代码时,都需要设置GPIO口为输出模式,以便灯亮控制。代码都需要类似
GPIO.setup(led_pin, GPIO.OUT)
这样的设置。
-
差异:
- 使用树莓派点灯时,可以不用初始化硬件;而STM32点灯时需要初始化的。
- 树莓派使用的是Linux操作系统,可以用Python等语言在操作系统层面上编写代码,对于开发者来说较为友好,使用编码时依赖的库也较多,开发速度较快。而STM32一般使用 C/C++编程,需要对硬件有一定的理解。
- 树莓派是一种基于Linux操作系统的开发板,处理能力较为强大,支持较多的软件,可用做很多类似于PC的应用(比如网络通讯、控制、通信等)或某些需要比较高的软件算力运算的应用。而STM32更侧重于与其它电子器件集成、实现控制及数据处理和物联网等,处理能力没有树莓派高。
- 对于单一的应用领域,STM32芯片电路更为小巧,在成本和功耗两方面的考虑下更加适合于它的应用领域。而树莓派在继承了嵌入式操作与控制的特点后,又兼具了计算机的行为,因而方便开发设计者在树莓派上进行嵌入式和PC操作系统上的软件开发,且可实现具有很大的灵活性。
原理图以及树莓派引脚展示
- 在 树莓派官网 可查找到下面原理图(已经模拟接上LED):
- 同样可以在 树莓派官网 可查找到引脚的对照表:
(注:本表格适用于各版本,并且兼容26Pin的树莓派B,树莓派B为26Pin,其引脚对应于上表的前26Pin。)
这里小编给个建议:开发前最好去看看这个表,因为树莓派在不同编码方式下拥有不用的引脚分配方式。
通过引脚对照表知:不同的编码方式所对应的引脚是不一样的,例如:在wPi编码格式下引脚8,而BCM编码格式下引脚就改成2,实际的物理引脚就变成4。
如果大家不能够确定上述两图是否与自己的树莓派引脚是否匹配,也可在命令行中输入gpio readall
。若大家第一次使用gpio
命令可能会报错bash: gpio: command not found
,这个是因为树莓派4自带的wiringPi 库默认是 2.50 ,无法映射到 gpio ,所以需要更新到 2.52 才能与树莓派映射。zero2w 则需要 2.60 。我们可以在命令行中输入下面两台命令解决这个问题:
# 下载 2.52 版本的 wiringPi
wget https://project-downloads.drogon.net/wiringpi-latest.deb
# 安装
sudo dpkg -i wiringpi-latest.deb
然后再输入命令gpio readall
即可获得下面结果:
通过上述三图,不难看出,当树莓派的物理引脚为16时,,BCM编码方式下该引脚为23,wPi编码方式下期引脚为4。
点灯步骤
- 我们可以使用RPi.GPIO这个库来控制GPIO,导入RPi.GPIO库:
import RPi.GPI0 as GPIO
- 如果此时运行代出现报错,通过以下命令即可安装:
pip3 install RPi.GPIO
- 在导入模块后要做的第—件事就是确定所采用的GPIO引脚编码方式:
GPIO.setmode(GPIO.BOARD)
如果大家想要换一种编码方式,那么只需要将GPIO.setup
前两句换成下面两句即可实现相同的功能:
# 设置编码方式
GPIO.setmode(GPIO.BOARD)
# 设置引脚
GPIO_Pin = 16
(注:使用该编码方式的好处是:树莓派各版本的BOARD编码方式是相同的,所以就算更换了树莓派版本,我们也无需修改代码。)
- 确定完编码方式之后,我们就要设置所用到的GPIO引脚(先设置,再使用):
#将引脚设置为输入模式
GPIO.setup (GPIO_Pin,GPIO.IN)
#将引脚设置为输出模式
GPI0.setup (GPIO_Pin,GPIO.OUT)
- 设置完之后,我们就可以通过GPIO.input和GPIO.output来接收或者发送高低电平:
#通过GPIO.input方法来判断接收的是高电平还是低电平
if GPIO.input(num) == GPIO.HIGH:
print(1)
else:
print(0)
#通过GPI0.output方法来发送高低电平
GPI0.output(num,GPIO.HIGH)
GPI0.output(num,GPIO.LOw)
- 使用完GPIO引脚后,我们要调用GPIO.cleanup()来将引脚释放掉:
#释放GPIO引脚资源
GPIo.cleanup ()
- 完整源码:
函数ledTest
实现LED间隔1s闪烁。
def ledTest():
""" 在树莓派上制作LED闪烁 时间间隔为1s """
# 设置编码方式
GPIO.setmode(GPIO.BCM)
# 设置引脚
GPIO_Pin = 23
# 设置GPIO引脚
GPIO.setup(GPIO_Pin, GPIO.OUT)
while True:
# 用16号引脚输出一个高电平,灯亮
GPIO.output(GPIO_Pin, GPIO.HIGH)
# 等1秒
time.sleep(1)
# 用16号引脚输出一个低电平,灯灭
GPIO.output(GPIO_Pin, GPIO.LOW)
# 等1秒
time.sleep(1)
# 使用结束,释放引脚
GPIO.cleanup()
读取树莓派布局
如果大家想要获取树莓派更多布局信息可以输入命令pinout
,其会给出结果:
- PCB布局
- 一些说明
- 对外开放的引脚