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

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

猜你喜欢

转载自blog.csdn.net/qq_53960242/article/details/131338572
今日推荐