闪亮登场!在树莓派上点亮LED灯的简单详细方法

news/2024/7/5 5:58:54

文章目录

  • 树莓派开发与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):

image-20230620121930339

  • 同样可以在 树莓派官网 可查找到引脚的对照表:

image-20230620121822433

(注:本表格适用于各版本,并且兼容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即可获得下面结果:

image-20230622093148340

  通过上述三图,不难看出,当树莓派的物理引脚为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布局 image-20230622094117226
  • 一些说明

image-20230622094207387

  • 对外开放的引脚

image-20230622094504465


http://lihuaxi.xjx100.cn/news/1267404.html

相关文章

旷视研究院获 CVPR 2023 自动驾驶国际挑战赛 OpenLane Topology 赛道冠军

近日,为期三个月的 CVPR 2023 自动驾驶国际挑战赛比赛结果揭晓。旷视研究院在OpenLane Topology 赛道中击败 30 余支国内外队伍,夺得冠军。 自动驾驶技术已经渗透到人们的日常生活中,但是传统的感知方法仍不能满足大家对 L5 级自动驾驶的追逐…

Vue 中利用 new Date() 获取当前时间的方法详解

系列文章目录 文章目录 系列文章目录前言一、使用 new Date() 方法获取当前时间二、常见的时间格式化方法1.格式化为指定格式的字符串2.获取时间的各个部分 三、常见的时间格式化方法总结 前言 在 Vue 开发中,获取当前时间是一项常见的需求。而利用 JavaScript 中的…

Mac中idea常用快捷键

1.commandF 在当前文件进行文本查找 2.commandshiftF 进行工程和模块中的文件搜索 3.command/ 对代码进行注释,并且自动移动到下一行 4.optioncommandL 进行格式化代码 5.双击shift : 全局搜索(类) 6.commandoption⬅️ : 返回上一步代码 7.commando…

决策分析——层次分析法

工程测量与经济决策方案 决策分析——层次分析法 一、描述 层次分析法的基本原理:根据问题的性质和要达到的总目标,将问题分解为不同的组成因素,并按照因素间的相互关联影响以及隶属关系将因素按不同层次聚集组合,形成一个多层次…

强化学习:AI领域的下一步里程碑

第一章:引言 近年来,人工智能(AI)的快速发展引起了全球范围内的广泛关注。在AI的众多技术领域中,强化学习(Reinforcement Learning)作为一种类似于人类学习的方式,在解决复杂问题方…

人工智能时代,你知道ai绘画如何使用吗?

在数字时代的今天,人工智能正逐渐渗透到我们生活的方方面面,艺术创作也不例外。ai绘画软件作为一种创新的工具,为艺术爱好者、设计师和创作者提供了崭新的创作方式。但是,对于初次接触这类软件的人来说,可能会感到一些…

英语口语进阶:让你的疲劳与口渴表达更地道

前言 🏠个人主页:我是沐风晓月 🧑个人简介:大家好,我是沐风晓月,阿里云社区博客专家 😉😉 💕 座右铭: 先努力成长自己,再帮助更多的人,一起加油进…