GPIO 引脚大概是树莓派最让初学者困惑的部分了。我当初也好奇那些小引脚到底是干嘛的。这些年我测试过大量项目,所以我来解释一下 GPIO 的工作原理,并分享几个实用的入门例子。
树莓派有 40 个 GPIO 引脚,可用于输入和输出。它们可以用来连接各种设备,比如传感器、开关和电机。
在这篇文章中,我会介绍使用树莓派 GPIO 的不同方式,并给出一些项目创意或使用场景的例子,展示它们有多实用。
开关控制
从点亮 LED 到控制你的家。
用树莓派 GPIO 能做的最基本的事,就是开关东西。简单来说,每个 GPIO 引脚只有两种状态:开(高电平)或关(低电平)。我们可以通过程序或脚本控制每个引脚的状态。
但"开"和"关"到底是什么意思?它们只是两种不同的电压或功率等级;电子传感器和组件在不同电压下的行为会不同。
作为一个基础例子,我们来看下面这个简单电路:
在这个电路中,我们通过一个电阻将 LED 连接到树莓派的 GPIO 16。现在我们可以写一个简单的 Python 程序,运行后点亮这个 LED:
from gpiozero import LED# Initialize LED on GPIO 16led = LED(16)# Turn LED ONled.on()
如果你对基础电子元件感到困惑,可以阅读文章:树莓派GPIO基础
如你所见,只需执行一条命令,我们就把一个 GPIO 引脚从关变成了开。这个简单原理也可以应用到更实际的场景中。
不过,树莓派 GPIO 有一个根本限制:它只能驱动低压(LV)负载,比如 LED。要驱动家里的高压(HV)负载,比如灯或风扇,我们需要一种把低压信号转换为高压信号的方法。
这种信号转换的实际电路对初学者来说比较有挑战。好在市面上有预制的继电器模块可用。
我们可以用这样的继电器模块连接到树莓派,用它替代传统开关(如下图所示),把你的普通风扇变成智能风扇。
你可以把这个例子中的风扇换成任何你想通过树莓派 GPIO 控制的设备。
这种电路让你能自动化家里的设备。你可以设定它们在特定时间开关,或根据特定传感器输入来触发。把笨设备变成智能家居设备。
检测按钮状态
把按键动作转化为实际操作。
用 GPIO 开关东西的反面,是用 GPIO 感应某个东西是开还是关。GPIO 除了作为输出,还可以作为输入使用。这样我们就可以在程序中检测某个引脚是高电平(开)还是低电平(关)。
我们用按键作为例子,看看树莓派如何通过 GPIO 读取输入。连接图如下:
在这个例子中,我们把一个按键连接到树莓派的 GPIO 18。现在我们可以用一个简单的程序来读取这个按键的状态:
from gpiozero import Buttonfrom signal import pausebutton = Button(18)button.when_pressed = lambda: print("Button pressed")button.when_released = lambda: print("Button released")pause() # keeps program running
如你所见,通过一个简单的 Python 程序,我们就能读取 GPIO 的状态,进而转化为按键的状态——是否被按下。
你可以把这个按键输入作为触发动作的起点。比如,我们也可以把 LED 连接到树莓派,按下按钮时点亮 LED,如下面这个视频所示。
这个例子显然过于简化了。你可以做更复杂的事,比如把按键输入作为树莓派脚本的触发点,或作为你正在做的游戏的控制输入。
与传感器通信并测量数据
读取温度、湿度等真实数据。
除了前面讨论的简单输入输出,GPIO 还可以用于与数字传感器进行更复杂的通信。
这方面的实用例子包括:用红外或运动传感器检测移动。你的树莓派可以用这种传感器检测到移动并发出提醒。HC-SR501 这类传感器常被用于此目的。
你可以把这个传感器接到树莓派上,每当传感器检测到运动,就会把对应的 GPIO 引脚拉高。然后你可以在 Python 程序中读取这个高电平(就像我们对按键做的那样),用它触发动作,比如发送提醒。
这种设置可以用于安防系统,或监控家里孩子、宠物的活动。
另一个选择是把它和前面的开关控制例子结合。我们可以设计一个程序,检测特定动作(比如早上起床时的脚步),并据此打开某个设备(比如房间的灯)。
从物理动作获取输入并控制各种电子设备的能力,让我们能开发出大量项目创意。 我们可以用这类传感器控制楼梯灯,或在没人时自动关掉风扇和灯,节约用电。
红外传感器的行为类似按键,但像 DHT22 温湿度传感器 这类传感器需要传输的不只是一个比特。它们需要传输更复杂的数据,比如环境中的精确温度和湿度。
为此,这类传感器通常用特定协议对数据进行串行化。通过串行化,这些传感器只用一个 GPIO 引脚就能传输数据。
有些传感器,比如 MPU-6050 加速度计和陀螺仪传感器,甚至需要双向通信——树莓派发送指令,传感器做出响应。
事实上,很多传感器都可以通过 GPIO 引脚连接到你的树莓派。
自然地,由于这些传感器使用特定通信协议而非简单的高低电平信号,它们需要特定的库。比如 DHT22,你可以用 adafruit-circuitpython-dht 这个 Python 库。
这些传感器通常提供更强大的功能。比如,你可以用 DHT22 监测环境温湿度,并根据读数控制空调系统。
或者,你可以在机器人项目中使用 MPU-6050,让树莓派感知自身的朝向和运动。
我特别喜欢的一个项目是:用 DHT22 温湿度传感器搭配光传感器,打造一个自动园艺/温室控制环境。浇水、通风和光照都根据传感器数据精确控制。
当你意识到有多少传感器可以接入树莓派时,你才会真正开阔眼界,明白树莓派能为你做多少事。
控制电机,做可动项目
从简单机械到完整机器人。
我最常用 GPIO 的场景之一就是机器人相关项目。在机器人中,树莓派充当大脑,接收多个传感器的信息,并据此控制驱动轮子或机械臂的电机。
市面上有大量机器人套件。比如我特别喜欢这个四驱智能小车套件
这个套件容易组装,对初学者非常友好。它用了超声波测距传感器、循迹传感器和摄像头。
一个很有趣的机器人套件是这个 ArmPi 机械臂套件你可以用这个套件配合自带的树莓派 5,做出既好玩又实用的机械臂。
等你真正熟悉了树莓派 GPIO 和机器人之后,可以更进一步,造一架属于自己的树莓派无人机。其实比你想的要简单。
四轴飞行器框架套件在 Amazon 上很容易买到。然后你可以搭配一个轻量的 树莓派 Zero 或 树莓派 Pico,加上你选的传感器,做出自己的 FPV 四轴飞行器。
你可以用 Tim Hanwick 的 Scout 飞行控制器程序,或者自己写一个来控制四轴飞行器。
事实上,树莓派爱好者社区在不断壮大,大家都很乐意帮你做机器人项目。网上有详细的文章,手把手教你开发自己的机器人。
另外,很多机器人套件都是专门为初学者设计的,是很好的起点。总的来说,这是一个很棒的爱好,不仅能学到很多,上手之后也非常有意思。
与其他电子设备通信
树莓派 GPIO 的一个小众但实用的用途,是与其他电子设备通信。我在设计中常用的一个方案是:树莓派 + Arduino Nano / 树莓派 Pico。
这种组合让树莓派负责项目中更复杂的任务,而 Arduino 负责与模拟电路或不被树莓派直接支持的传感器对接。
但要实现这一点,我需要让 Arduino 和树莓派能互相通信。你可以用 GPIO 的 Tx 和 Rx 引脚建立可靠的通信。
这种设置能帮你把多个微控制器或开发板的能力结合起来,还能让你接入传统上无法直接连树莓派的传感器。
类似 Arduino,你也可以用同样的方法在树莓派和树莓派 Pico 之间建立通信。除了 UART 串行通信,树莓派还支持 I2C 和 SPI 通信。
很多模块使用这些通信协议,可以接入你的树莓派。比如,你可以通过 I2C 把树莓派连到 1602 LCD 面板,用来显示重要信息。
同样,你可以通过 SPI 接口把 1.8 英寸彩色 LCD 显示屏接到树莓派上,用来显示图形。
事实上,很多传感器和模块都用这些通信协议。比如前面提到的 MPU-6050 加速度计和陀螺仪传感器也使用 SPI 通信。
这些高级通信协议的优势在于:只用几个 GPIO 引脚就能传输大量数据。所以这些模块的接线相对简单。
而且由于这些是几乎通用的通信协议,你几乎可以通过树莓派的 GPIO 与任何电子设备或开发板通信。
用扩展板(HAT)增加功能
不用复杂接线,就能增加复杂功能。
用 GPIO 还能做的一件很棒的事,是给树莓派用 HAT(Hardware Attached on Top,硬件附加板)。HAT 是预制的 PCB 或电子电路,可以方便地装到树莓派上,增强其功能和能力。
HAT 有很多种可选,每种针对不同的能力。比如,你可以用 M.2 NVMe SSD HAT 给树莓派 5 加上 NVMe SSD。
这个 HAT 使用树莓派 5 的 PCIe 2.0 接口,通过排线连接。但它用 GPIO 来供电和控制信号。
另一个对离网项目非常有用的 HAT 是 UPS HAT。
这个 HAT 让你可以用 18650 锂离子电池给树莓派供电,同时还能当备用电源。它用 GPIO 来供电和传递控制信号,比如电量百分比。
大多数 HAT 设计为可以叠放使用。但为确认兼容性,请查阅 HAT 厂商的文档。根据我的经验,大多数 HAT 互相兼容。
我常用的另一个 HAT 是这个3.5英寸触摸屏HAT
当你没有专门的显示器、键盘和鼠标连接树莓派时,这个 HAT 就派上用场了。
如你所见,HAT 非常有用,能显著提升树莓派的生产力。树莓派的 HAT 种类繁多,本文只是冰山一角。
GPIO 基本上就是树莓派区别于迷你 PC 的核心所在。GPIO 允许直接控制电子元件和供电,因此你用树莓派 GPIO 能做的事非常多。
事实上,在我的大多数树莓派项目中,选择树莓派而不是更便宜的主板或 PC 的首要原因,就是 GPIO 的存在——它让我能原生接入电子元件和电路。
Tip:对于刚接触树莓派的新手来说,面对英文文档、零散教程和复杂配置,很容易无从下手。pidoc.cn( https://pidoc.cn/ )就是为解决这些痛点而生的树莓派中文一站式学习平台,界面清晰、内容系统、更新及时,堪称新手入门的“保姆级” 网站,让零基础用户也能轻松上手树莓派。
关注树莓派开发者,了解树莓派最新消息!
200