这篇文章来源于DevicePlus.com英语网站的翻译稿。近年来,Raspberry Pi因其可以用作可用于媒体和复古视频游戏的廉价、兼容的Linux机器以及网络设备而备受喜爱。多年来,一些业余爱好者一直以这些方式来使用他们的Pi,但是有些人并不清楚设备侧面的引脚到底是做什么的。
其实,正是这些引脚发挥着Pi的真实功用。它们可以控制家居设备、机器、新的发明,甚至机器人。那么,为什么这么多人都对这些引脚不甚了解呢?
GPIO1.jpg

这些引脚的实际作用是什么?
这40个(或26个,取决于您的Pi型号)引脚是所谓的“GPIO接口”的一部分。在这些接口中,有四种主要的引脚:
电源: 提供3.3V和5V的直流电源
接地(GND): 连接到地端,以闭合电路
DNC: 代表“不连接”,所以可以忽略
GPIO: 可以设置为发送或接收控制电压
GPIO代表“通用输入/输出”,正是这些引脚让Raspberry Pi发挥了其功效。因为这些引脚没有特定的功能,所以可以设置为某个专用功能,例如控制信号。
GPIO2-300x200.jpg
设置为输出的GPIO引脚可以提供3.3V(高电平信号)或0V(低电平信号)的电压。当设置为输入时,该引脚可以读取相同数值的电压。

GPIO引脚不能提供过多电源
需要谨记的很重要的一点是GPIO引脚(以及3.3V电源引脚)是用于控制其他组件并与之通信的。
您可以从组合的3.3V引脚中获取约51mA的电流,但是在连接的时候需要小心;如果您试图让电路从这些3.3V引脚获取过大的电流,这可能会烧坏整个电路板。
而5V电源引脚则可以为您获取电源提供的所有电流,其中要减去Raspberry Pi本身使用的电源。

将GPIO引脚连接到面包板
当您第一次使用这些GPIO引脚时,最好使用一个面包板。这样的话可以在不进行焊接的情况下构建电路并对其进行修改。
如果您以前从来没有使用过面包板,请通过以下视频了解其基础知识:
GPIO扩展板也会起到很大的作用,可以通过引线将其连接到GPIO接口,并将引脚直接放置在面包板上,这些引脚带有明确的标记。
不过这需要一些空间:面包板每侧需要20行。一个小的板子几乎就只有20行!有多余的40行左右的面包板可以为初学者提供充足的空间。

具有特殊用途的GPIO引脚
每个GPIO引脚都可以设置为用于发送和接收高电平和低电平信号。有些引脚也会有一些特殊用途。
我们不会在这里进行深入探究,只需要了解大概就好。

硬件 PWM
GPIO引脚输出3.3V或0V:一个高电平信号或低电平信号。脉宽调制或PWM,是一种通过快速打开和关闭引脚来模拟介于两者之间电压的方法。
这不是真正的模拟信号,但是可以用于调暗LED光线之类的功能。它的闪烁速度要大于您的视觉敏感频率,所以您看到的只是灯光变暗了而已。
您可以使用低通滤波器将PWM平滑为模拟信号。如果您对音质不是很挑剔的话,可将其用于模拟音频,比如用于门铃或者玩具就不错。
您可以使用软件通过任意GPIO引脚生成PWM信号,但是操作系统会将其与其他任务并行处理,所以该信号可能会发生振动。
GPIO引脚18和19上有可用的硬件PWM。硬件PWM和耳机插孔使用相同的电路,所以不能同时使用。

串行总线引脚
当您查看下面的图表时(被称作Raspberry Pi“引脚图”),您会看到一些引脚是I2C、 SPI以及UART串行。这些是可用于与其他组件之间进行数据发送和接收的串行总线协议。
GPIO3-300x221.png
您可以将这些与模拟转换器或DAC结合使用,以输出模拟信号。如果想要高质量的音频或者想要控制许多组件,这种方式可能比使用PWM方式更可取。

上拉和下拉电阻
通常,您会希望Raspberry Pi GPIO引脚可以读取按钮或者开关的位置。这通过接线可以很容易实现,因为接线之后,被连接于控制电压以读取高电平信号或接地以读取低电平信号的电路将会闭合。
问题是当这个电路断路而没有任何信号连接到引脚时,它可能会返回任何值,这被称为“浮动”,是完全没有任何作用的。
您可以使用“上拉”或“下拉”电阻来防止浮动。
将一个上拉电阻连接到您的控制电压,当没有其他任何连接时,引脚将读取高电平信号。将一个下拉电阻接地,引脚将读取低电平信号。使用任何一个都会为您提供您的开关或按钮的相反值。
您不需要将这些电阻连接到电路中。它们已经内置在Raspberry Pi中,您可以通过软件控制它们。

使用软件控制GPIO引脚
控制GPIO引脚的最简单方法之一是使用Python中的GPIO Zero 库。如果您以前写过Python代码,这对您来说将会很容易上手。
如果这是您第一次使用Python,您可能需要先学习一些介绍性的教程。如果您不打算学习这些教程,也可以直接使用下面的指令,但是您可能会理解不了。“用Python将枯燥的工作自动化(utomate the Boring Stuff With Python)”的网络版本是个不错的选择,而且是免费的。
GPIO Zero是默认安装在Raspbia Desktop映像上的。如果您使用的是Raspbian Lite或其他操作系统,那么可能需要另行安装。

让我们使用它来开启灯光
现在,让我们来试试打开LED吧!这么简单的工作其实不需要使用计算机,但我们将在GPIO引脚中加入Raspberry Pi。
为此,您将需要:
一个带电源的Raspberry Pi以及一个安装了Raspbian的SD卡 GPIO4.jpg
一个面包板 GPIO5.jpg
一个GPIO扩展板(可选,但是推荐使用) GPIO6.jpg
一个LED GPIO7.jpg
您还会需要一些通用设备,例如:
• 电阻值在220Ω~1000Ω之间的电阻
• 一个USB键盘,或者SSH连接:可以让您输入指令的设备
• 跨接电缆或电线
• 一个下推按钮

连接电源轨
如果您使用的是扩展板,请将其连接到Raspberry Pi和面包板上。然后将3.3V电源引脚连接到穿过面包板底部的正电源轨,并将接地引脚连接到负电源轨。

连接并测试按钮
现在将您的按钮添加到面包板的中间。将按钮的一个引脚连接到一个Raspberry Pi GPIO引脚。我用的是13,因为这是我的幸运数字。
然后,将按钮对角相对的引脚连接到负电源轨。当您按下此按钮时,电路将会闭合。
最后,我们需要让Pi注意这个引脚,所以我们需要打开Python解释器。在命令行中输入:
python3
然后在解释器中输入:
from gpiozero import Button
如果您收到一条消息说“ImportError”,就检查一下字母的大小写是否正确。如果显示“ModuleNotFoundError”,则需要安装GPIO Zero。
如果没有以上情况发生,那么就可以将引脚指定给按钮了:
button = Button(13)
这个Button类负责分配上拉电阻。现在让我们通过输入以下指令来测试其是否有效:
while True:
  if button.is_pressed:
  print(‘Sweet, the button works!’)
  break
Python对缩进很敏感,所以一定要对空格严加控制。然后再次按下Enter键运行循环代码。
这个循环代码会一直运行,直到有人按下按钮。这时候按下按钮,应该会产生一条说明按钮有效的消息。这就意味着您已经成功构建了一个可以向您的Raspberry Pi发送消息的简单电路。太棒了!
如果没有产生这个结果,请检查所有连接是否正确,然后重试。

连接并测试LED
LED中的D代表“二极管”,也就是说LED只能往一个方向导通。
您会注意到LED有一个引脚稍长:这将会被连接到正极。在本项目中,正极就是GPIO引脚。我使用的是引脚26,没有什么特别的原因。
将LED放在面包板上,确保LED的引脚之间在水平方向有间隔,以避免短路。现在将正极引脚连接到您的GPIO引脚。
LED应与电阻串联,所以将电阻的一端连接到LED的短引脚上,另一端连接到负电源轨上。电阻没有方向性,可以与任意端连接。
GPIO8-e1592473417859-300x236.jpg
现在让我们告诉Raspberry Pi发生了什么。类型:镜像  Pi & Breadboard
from gpiozero import LED
led = LED(26)
如果一切连接正确,您将能够使用以下指令打开和关闭LED:
led.on()
led.off()

使用按钮控制LED
现在已经完成了连接,并且经检查一切正常,输入:
button.when_pressed = led.on
然后按下按钮。LED应亮起并保持亮起的状态。现在输入:
button.when_released = led.off
再次按下按钮。松开按钮后LED应关闭。

恭喜!您已经实现了GPIO引脚的使用!
虽然这些原理看起来很简单,但是它们可以作为基础来构建数千个现目,甚至可以构建您自己的项目。请注意安全,谨慎操作,但是最重要的一点是,一定要玩得开心!

来源:techclass.rohm