Raspberry Pi 简明教程

Raspberry Pi - GPIO Connector

在本文中,我们将学习树莓派中的 GPIO(通用输入输出)连接器。

GPIO Pinout

树莓派的一个强大功能是 GPIO(通用输入输出)引脚的行,而 GPIO 引脚排列是这些 GPIO 引脚的交互式参考。

下图显示了 40 针 GPIO 接头,它位于所有当前树莓派板上 −

gpio pinout

图表来源 www.raspberrypi.org

Voltages

从上图中,我们可以看到板上有两个 5V 引脚和两个 3V3 引脚。它还有几个接地引脚 (0V)。所有这些引脚都是不可配置的。

Outputs

GPIO 引脚可指定为输出引脚。设置为输出引脚的引脚可以设置为 3V3(高)或 0V(低)。

Inputs

GPIO 引脚可指定为输入引脚。设置为输入引脚的引脚可读为 3V3(高)或 0V(低)。您可以使用内部上拉或下拉电阻。

您可以在上图中看到,GPIO2 和 GPIO3 引脚具有固定的上拉电阻,但对于其他引脚,您可以在软件中配置它。

Alternative Functions

GPIO 引脚可与各种替代功能配合使用。其中,有些适用于所有引脚,而另一些则适用于特定引脚。

PWM: Pulse-width modulation

软件 PWM 适用于所有引脚,而硬件 PWM 适用于 GPIO12、GPIO13、GPIO18 和 GPIO19。

SPI: Serial Peripheral Interface

SPI 适用于以下引脚 −

SPI0: MOSI (GPIO10); MISO (GPIO9); SCLK (GPIO11); CE0 (GPIO8), CE1 (GPIO7)
SPI1: MOSI (GPIO20); MISO (GPIO19); SCLK (GPIO21); CE0 (GPIO18); CE1 (GPIO17); CE2 (GPIO16)

I2C: Inter-integrated Circuit

I2C 适用于以下引脚 −

Data: (GPIO2); Clock (GPIO3)
EEPROM Data: (GPIO0); EEPROM Clock (GPIO1)

Serial

串行功能适用于以下引脚 −

TX(GPIO14)
RX(GPIO15)

Connect GPIO to Raspberry Pi

以下是在使用 GPIO 连接器时减少树莓派电路板损坏风险的一些简单规则 −

  1. 请勿尝试在任何 GPIO 引脚上放置超过 3.3V。

  2. 每个输出引脚不要尝试提取 3mA 以上的电流。虽然可以提取更多的电流,但为了延长 Pi 板的使用寿命,应该将提取的电流限制在 3mA 以内。

  3. 当 Raspberry Pi 板通电时,不要用螺丝刀去戳 GPIO 接头。

  4. 5V 的电源已经足够为 Raspberry Pi 供电。不要尝试提供更大的电源。

  5. 3.3V 供电引脚不能提取超过 50mA 的总电流。

Output of GPIO pins

要使用 Python 设置 GPIO 引脚的输出,并读取输入值,需要安装 RPi.GPIO Python 库。

Install RPi.GPIO python library

要在 Raspberry Pi 的终端窗口中安装 RPi.GPIO Python 库,键入以下命令:

sudo apt-get install python-dev
sudo apt-get install python-rpi.gpio

几乎所有最新的发行版都已安装了 RPi.GPIO,如果已经安装,上述命令会将其更新到最新版本。

I2C Device

我们来检查如何让 I2C 在 Raspberry Pi 上运行。

Case 1: Using Adafruit Occidentalis 0.2 or later

如果您正在使用 Adafruit Occidentalis,则无需执行任何操作。原因是该发行版已预先配置了 I2C 支持。

Case 2: Using Raspbian

如果您正在使用 Raspbian,则需要进行以下配置更改:

首先,使用以下命令编辑 /etc/modules 文件:

sudo nano /etc/modules

现在,我们需要在该文件末尾添加以下行:

i2c-bcm2708
i2c-dev

接下来,我们需要编辑名为 /etc/modprobe.d/raspi-blacklist.conf 的文件,添加一个 # 将以下行注释掉:

blacklist i2c-bcm2708
#blacklist i2c-bcm2708

完成后,使用以下命令安装 Python I2C 库:

sudo apt-get install python-smbus

现在,重新引导 Raspberry Pi,它将做好使用 I2C 的准备。

Find I2C Address

一台 I2C 设备连接到 Raspberry Pi 计算机,您想知道它的地址。

为此,我们需要按照如下方式安装 i2c-tools:

sudo apt-get install i2c-tools

完成后,将 I2C 设备连接到 Raspberry Pi 开发板,然后运行以下命令:

sudo i2cdetect -y 1

在这里,我们需要注意以下两件事:

  1. 首先,如果您有较新的发行版,那么很有可能已经安装了 i2c-tools。

  2. 其次,如果您使用旧版本 1 的开发板,请在上述代码行中将 1 更改为 0。

Serial Peripheral Interface (SPI)

让我们检查一下如何将 SPI(串行外设接口)总线与 Raspberry Pi 一起使用。

Case 1: Using Adafruit Occidentalis 0.2 or later

如果您使用 Adafruit Occidentalis,则不必执行任何操作,因为此发行版预先配置了 SPI 支持。

Case 2: Using Raspbian

如果您正在使用 Raspbian,则需要进行以下配置更改:

首先,使用以下命令编辑 /etc/modules 文件:

sudo nano /etc/modules

现在,我们需要在该文件末尾添加以下行:

spidev

接下来,我们需要编辑名为 /etc/modprobe.d/raspi-blacklist.conf *and comment out the following line by adding a *# 的文件:

blacklist spi-bcm2708
#blacklist spi-bcm2708

完成后,使用以下命令安装 Python 库以通过 Python 程序进行通信:

cd ~
sudo apt-get install python-dev
git clone git://github.com/doceme/py-spidev
cd py-spidev/
sudo python setup.py install

现在,重新启动 Raspberry Pi,它将为 SPI 做好准备。

Serial Port

假设您想在 Raspberry Pi 开发板上使用串行端口(即 Rx 和 Tx 引脚),但 Linux 操作系统将其用作控制台连接。为了禁用此功能,我们需要注释掉名为 /etc/inittab 的文件中的某一行。

使用以下代码行打开此文件:

sudo nano /etc/inittab

现在,通过在此文件末尾向下滚动来查找以下行:

T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

现在,我们需要使用 # 对此行进行注释:

#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

现在,保存此文件并重新启动 Raspberry Pi。

Access serial port from Python

我们还可以通过使用 Python 在 Raspberry Pi 开发板上使用串行端口(即 Rx 和 Tx 引脚)。为此,我们需要按照如下方式安装 PySerial 库:

sudo apt-get install python-serial

建议在使用 PySerial 之前禁用(如我们上面所做)Raspberry Pi 的串行控制台。

Test the serial port

一旦开始使用串口,您可能希望从终端会话发送和接收串口命令。为此,我们需要按照如下方式安装 Minicom

sudo apt-get install minicom

在使用 Minicom 之前,建议禁用(如上所述)Raspberry Pi 的串行控制台。

现在 Minicom 已安装完毕,我们可以使用以下命令用与 GPIO 连接器的 RXD 和 TXD 引脚相连的串行设备启动串行通信会话:

minicom -b 9600 -o -D /dev/ttyAMA0

在此,在上面的命令中,-b 后面是波特率,-D 后面是串行端口。我们应该使用与我们正在通信的服务上设置的相同波特率。