Raspberry Pi GPIO 教程(1)闪烁LED

Raspberry Pi 的一个强大功能是电路板顶部边缘的一排 GPIO 引脚。GPIO 代表通用输入/输出(General-Purpose Input/Output)。这些引脚是 Raspberry Pi 与外界之间的物理接口。在最简单的层面上,你可以将它们视为可以打开或关闭(输入)或 Pi 可以打开或关闭(输出)的开关。

GPIO 引脚允许 Raspberry Pi 通过连接到电子电路来控制和监控外界。Pi 能够控制 LED、打开或关闭它们、运行电机以及许多其他东西。它还能够检测开关是否被按下、温度和光线。我们将其称为物理计算。

Raspberry Pi 上有 40 个引脚(早期型号为 26 个引脚),它们提供各种不同的功能。

Image

GPIO 引脚编号Raspberry Pi 上的 GPIO 引脚有两种编号系统:Board 和 Boardcom (BCM)。例如,Board 引脚 8 和 BCM 引脚 14 指的是同一个引脚。根据您使用的编程语言和库,编号很重要。

Image

1. BCM 编号

BCM 编号与 Raspberry Pi 上印刷的小标签相匹配,例如 GPIO14。它用于大多数编程语言,例如 Python 和 Scratch。

2. 电路板(Board)编号

电路板编号基于 Raspberry Pi 上引脚的物理位置。它从左上角开始作为引脚 1,从左到右然后是下一行,右下角是最后一个引脚,即引脚 40。电路板编号不太常用,您唯一会看到的地方可能是在一两个 Python 库中。

3. 引脚的功能

pi 上的每个引脚都有不同的功能,它们的物理位置可能因型号而异。没有 BCM 编号的引脚是电源输出引脚,例如 GND 和 5VDC。带有 BCM 编号的引脚都是 PWM 引脚,可用作输入或输出。除了作为 PWM 引脚之外,它们还具有其他独特功能,例如 GPIO 02 和 GPIO 03 也是用于 I²C 通信的 SDA 和 SCL 引脚。您可以参考每个型号的引脚排列以了解每个引脚的更多详细信息。

流行的Python GPIO 库

使用物理计算组件对 Raspberry Pi 进行编程有很多选择,包括 Scratch、Bash、Node.js、C 等。我们将在这里重点介绍 Python。下面是使用两个不同库但执行完全相同操作的两个代码。

1. gpiozero

关于 gpiozero 库,要记住的主要一点是它专注于按钮和 LED,而不是实际的 GPIO 引脚。即 LED = OUTPUT,按钮 = INPUT。有些人可能会发现语法更容易理解,例如打开 LED 实际上是 leds.on()。gpiozero 简单快捷,是初学者开始实验的好地方。但如果您实际上没有使用 LED 或按钮,它可能会有点混乱,并且与其他库的代码合并也不太兼容。

2. RPi.GPIO

注:此库目前不适用于 Raspberry Pi 5。如果您使用的是 Pi 4 或更早版本,则没问题。

RPi.GPIO 是一个允许 Python 与 GPIO 通信的代码库。它被广泛使用和支持。事实上,gpiozero 是基于 RPi.GPIO 开发的。这个库更接近 Arduino IDE 中的 C++。例如,它使用 HIGH 和 LOW,而不是 on() 和 off()。

了解了以上的基础知识,让我们在Proteus中进行模拟。

新建一个Protues项目,选择创建固件Firmware项目,在下拉菜单中选择Raspberry Pi4,并选中“创建快速启动文件”

Image

在零件库里选择黄色LED,并进行如下电路图连接,将LED连到Pi的18号GPIO针脚。

Image

在Source Code 的main.py文件中输入以下代码:

Image
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD)

LED = 18
GPIO.setup(LED, GPIO.OUT)

from time import sleep

while True:
      GPIO.output(LED,GPIO.HIGH)
      sleep(1)
      GPIO.output(LED,GPIO.LOW)
      sleep(1)

让我们逐行分解此代码:

import RPi.GPIO as GPIO
import tim

这将导入 Raspberry Pi GPIO 库并为其赋予别名“GPIO”,还导入用于创建延迟的时间库time。

GPIO.setmode(GPIO.BOARD)

将引脚编号系统设置为 BOARD 模式,意味着使用电路板上的物理引脚编号(1-40)。

LED = 18

将引脚 18 分配给变量 LED,在 BOARD 模式下,这指的是 Raspberry Pi 上的物理引脚 18。

GPIO.setup(LED, GPIO.OUT)

将引脚 18 配置为输出引脚,这意味着该引脚可以发送信号(高电平或低电平)来控制 LED 等组件。

from time import sleep

仅从 time 模块导入 sleep 函数用来控制LED灯的延迟。

while True:
      GPIO.output(LED,GPIO.HIGH)
      sleep(1)
      GPIO.output(LED,GPIO.LOW)
      sleep(1)

创建一个无限循环:

  • 将 LED 引脚设置为 HIGH (3.3V),打开 LED
  • 等待 1 秒
  • 将 LED 引脚设置为 LOW (0V),关闭 LED
  • 等待 1 秒
  • 永远重复

此代码将使连接到引脚 18 的 LED 以 1 秒的间隔连续闪烁。

运行模拟,可以看见LED灯以1秒的频率在闪烁。

Image