目录
3.1 如何用 Raspberry Pi Pico 控制GPIO针脚
3.3 项目:控制 Raspberry Pi Pico 自带的LED闪烁
1 何为GPIO
大多数用户永远不会使用 GPIO,但如果你想构建东西,GPIO 是必不可少的。
GPIO 是一组引脚
在最基本的层面上,GPIO 是指计算机主板或附加卡上的一组引脚。这些引脚可以发送或接收电信号,但它们不是为任何特定目的而设计的。这就是为什么它们被称为“通用”IO。(“IO”指Input/Output,即输入/输出)
这与USB或DVI等常见端口标准不同。使用这些电缆,连接内部的每个引脚都有指定的用途,由制定标准的管理机构确定。
GPIO 让您负责每个引脚的实际功能。尽管 GPIO 阵列上仍有不同类型的引脚。
以 Raspberry Pi为例,您会发现几种类型的引脚:
- 以典型电压(例如 3.3V 或 5V)供电的引脚。这是为没有自己的电源的连接设备供电,例如简单的 LED。
- 不输出功率但完成某些电路所必需的接地引脚。
- GPIO 引脚,可配置为发送或接收电信号。
- 特殊用途的引脚,根据所讨论的特定 GPIO 有所不同。
GPIO 实现在每个设备的具体细节上可能有所不同,但其理念始终是允许用户接收或发送电信号到几乎任何东西。
GPIO 有什么用途?
GPIO 最常见的用途是操作定制电子设备。无论您是构建自己的机械臂还是 DIY 气象站,GPIO 接口都可以让您自定义信号,以便它们正确操作您的设备。
GPIO 接口通常与“面包板”一起使用。面包板是一种临时电路板。您可以通过添加、移除或移动电子元件来制作电路原型。许多涉及 Raspberry Pi 等设备的项目让您将设备组装在面包板上,然后使用电线将其连接到您的 GPIO 引脚。
Raspberry Pi 计算机最简单的 GPIO 项目之一是添加一个简单的电源按钮,这是标准板所缺少的。
另一个具有 GPIO 功能的流行设备是Arduino微控制器。这不是像 Raspberry Pi 那样的完整计算机,而是一种设计用于专门用于控制其他设备的可编程设备。例如,您可以将光传感器连接到 Arduino,然后对其进行编程以在太阳下山时打开您的花园灯。Arduinos 对于向那些可能无法进入工程和编程领域的人们打开机器人技术和发明的世界至关重要。
Raspberry Pi 基金会有自己的 Arduino 竞争对手,价格为 4 美元的Pico,这也是我们马上就要提到的。Pico 具有 30 个 GPIO 引脚,其中一些可以处理模拟信号,而不是更常见的数字脉冲。
如何使用 GPIO
除了将您的 GPIO 引脚连接到外部电路板或设备上的正确连接之外,您的计算机或微控制器需要知道通过这些电线发送什么或如何理解进入 GPIO 接口的信号。
这意味着您需要软件,而这些软件通常是您必须编写的!在 Raspberry Pi 系统上,通常使用Python编写软件来告诉 GPIO 控制器要发送什么或监听到达的信号。毕竟,“Pi”指的是 Python!
Arduino 微控制器有自己的编程语言,这使得组合项目变得特别容易。但是,您也可以使用称为MicroPython的特殊 Python 版本 。
GPIO的危险
当您使用经过认证的 USB 电缆将 USB 设备插入 USB 端口时,发生灾难性错误的可能性几乎为零。这是因为这些 IO 标准经过精心设计、测试,然后再进行一些测试以确保它们是安全的。
当涉及到 GPIO 时,您的负担就停止了。你是设计你的接口和电路的人。如果您将引脚短路,将电源连接到不应通电的东西上,或者以其他方式快速和松散地使用您的电路和连接,您的手上可能会有一堆死组件(和 GPIO 板)。这就是为什么你可能想要一个带教程的Raspberry Pi套件,因为它们通常带有您需要的硬件和练习项目 ,以便您可以安全地学习和使用它。
(以上文段选自知乎上的“什么是 GPIO,你可以用它做什么?”)
2 Raspberry Pi Pico 上的 GPIO
树莓派 Pico板上有26个裸露的GPIO连接。
它们的排列顺序很好,在GPIO 22和GPIO 26之间有一个 “空隙”(这些 “缺失 “的引脚在内部使用)。
这些引脚都有多种功能,你可以为PWM配置多达16个引脚。
有两个I2C总线,两个UART和两个SPI总线,这些可以配置使用多种GPIO引脚。
至于什么是PWM,I2C,UART和SPI,我们在后面会讲到。
好了,介绍好了我们接下来的主角-------GPIO,我们就来搭建自己的第一个Raspberry Pi Pico项目吧!
3 点亮Pico自带的LED灯
3.1 如何用 Raspberry Pi Pico 控制GPIO针脚
Raspberry Pi Pico 的硬件库是machine,在MicroPython文档中,它对这个库的描述是这样的:
该 machine 模块包含与特定板上硬件相关的特定功能。该模块中的大多数功能允许实现对系统硬件块(如 CPU、定时器、总线等)的直接和不受限制的访问和控制。使用不当,这可能会导致电路板故障、锁定、崩溃,在极端情况下还会导致硬件损坏。
machine库中有一个控制GPIO针脚的类----Pin,它的定义是这样的:
class Pin(id, mode = -1, pull = -1, *, value, drive, alt):
id
是强制性的,可以是任意对象。可能的值类型包括:int(内部GPIO接口编号、str(Pin 名称)和元组([port, pin] 对)。
mode
指定引脚模式,可以是以下之一:
Pin.IN
- 引脚配置为输入。如果将其视为输出,则该引脚处于高阻抗状态。
Pin.OUT
- 引脚配置为(正常)输出。
Pin.OPEN_DRAIN
- 引脚配置为开漏输出。开漏输出的工作方式如下:如果输出值设置为0,则该引脚处于低电平有效;如果输出值为 1,则引脚处于高阻抗状态。并非所有端口都实现此模式,或者某些端口可能仅在某些引脚上。
Pin.ALT
- 引脚配置为执行特定于端口的替代功能。对于以这种方式配置的引脚,任何其他引脚方法(除了 Pin.init())都不适用(调用它们将导致未定义或特定于硬件的结果)。并非所有端口都实现此模式
Pin.ALT_OPEN_DRAIN
- 与 相同Pin.ALT
,但引脚配置为开漏。并非所有端口都实现此模式。pull参数指定引脚是否连接了(弱)上拉电阻,并且可以是以下之一:
None
- 没有上拉或下拉电阻。
Pin.PULL_UP
- 上拉电阻使能。
Pin.PULL_DOWN
- 下拉电阻启用。
value
仅对 Pin.OUT 和 Pin.OPEN_DRAIN 模式有效,如果给定,则指定初始输出引脚值,否则引脚外设的状态保持不变。
drive
指定引脚的输出功率,可以是以下之一:Pin.LOW_POWER
,Pin.MED_POWER
或Pin.HIGH_POWER
。实际的当前驱动能力取决于端口。并非所有端口都实现此参数。
alt
为引脚指定一个备用功能,它可以采用的值取决于端口。此参数仅对Pin.ALT
和Pin.ALT_OPEN_DRAIN
模式有效。当一个引脚支持多个备用功能时,可以使用它。如果仅支持一个引脚备用功能,则不需要此参数。并非所有端口都实现此参数。
3.2 利用machine.Pin类控制LED
根据上节所述,Pin 类的构造函数中,只有id参数是必须的,这个参数指定的是GPIO的引脚编号。例如,我们这个Pico上的LED灯GPIO针脚编号是25,那么我们创建控制这个LED的控制实例代码如下:
from machine import Pin # 导入所需模块
led = Pin(25, Pin.OUT) # 创建引脚类
提示:上方代码中,Pin.OUT标识不是必须的,在Pin类的定义中,这个值是默认值。
控制GPIO高低电平的两种办法
1 · 通过实例方法控制。例如要将GP25设置为高电平,可以使用value()方法,代码如下:
led.value(1) # 设置为高电平(点亮)
led.value(0) # 设置为低电平(关闭)
2 · 直接将实例作为函数使用,代码如下:
led(1) # 点亮LED(设置为高电平)
led(0) # 关闭LED(设置为低电平)
3.3 项目:控制 Raspberry Pi Pico 自带的LED闪烁
我们现在已经学了控制LED的开与关,我们来写一个小项目吧。这个项目将实现如下功能:
- 控制LED闪烁
好吧,我相信有点人有点懵,怎么就一个功能啊,那不是吗,你刚开始学,就想着能编出来啥项目,想啥呢????
代码如下:
from machine import Pin
import time
led = Pin(25, Pin.OUT)
while True:
led.value(1)
time.sleep(1)
led.value(0)
time.sleep(1)
相信这个代码不用过多解释了。就是一个LED灯不断闪烁,间隔时间一秒。这个等待N秒钟的函数是由time模块中的sleep()函数实现的。使用方法也很简单。先导入time模块,再使用time.sleep()函数,在括号里填上你想等待的秒数,就能实现了。
好了,这次课就讲到这里了。我们下节课再见!
哦对了,我建了一个树莓派Pico交流QQ群(最近建的),请有兴趣的伙伴们进来聊聊哈
入群密码CSDN