Adafruit的树莓派教程:GPIO配置
概览
树莓派最令人兴奋的特点之一是它有一个GPIO连接器可以用来接其他的硬件设备。
GPIO连接器实际上是由许多不同类型的接口组成的:
真正的GPIO(General Purpose Input Output,通用输入/输出)针脚,你可以用来控制LED灯的开和关。
I2C(Inter-Integrated Circuit)接口针脚,使你能够仅使用2个控制针脚连接硬件模块。
SPI(Serial Peripheral Interface,串行外设接口)接口用以连接SPI设备,概念上与I2C接口类似,但是标准不同。
Serial Rx和Tx针脚用于和其他的串行外围设备通信。
另外,一些针脚可被用于PWM(pulse Width Modulation, 脉冲宽度调制)进行电源控制,以及PPM(Pulse Position Modulation,脉冲位置调制)控制马达。
在这篇教程里,你实际上用不着组装任何东西,但你将学到如何配置你的树莓派并且安装有用的类库来为连接外部电子元件做准备。
注意:这篇教程只适用于Raspbian和Raspbian衍生的系统(例如Occidentalis)GPIO连接器 下面的图表展示了第一版树莓派的GPIO连接器的针脚(当这篇文章发布时存在的版本)第二版的只是用27针替换了21针,其他都是一样的。
![20140615182235270-0](http://images.ncnynl.com/rpi/2016/20140615182235270-0.jpg)
![20140615182235280-0](http://images.ncnynl.com/rpi/2016/20140615182235280-0.jpg)
一定要确认确认再确认连接线的第一针标识靠近树莓派的角落。如果你使用的是灰色的连接线,它是红色条纹,而黑色的连接线是白色的条纹。那一针一定不能挨着TV连接口。把连接线翻个个或者拧一下使它翻到正确的方向。这里使用了一个带状电缆来连接GPIO到一个无焊点的面包板上,这样你就可以在它上面连接其他电子元件了。 Adafruit Pi Code 为了方便那些想要连接电子元件到他们的小派上的人们,Adafruit编写了许多可以扩展的非常有用的代码集合。这包含了大量电子元件的简单Python类库,例如显示,传感器和PWM控制等等。 要获得这些代码,你需要使用一个名为”git”的软件。这预装在Occidentalis里面了,但是在Raspbian上你必须通过在终端里输入下面的命令来安装。 你会在桌面上找到终端LX Terminal的快捷方式。
![20140615182235687](http://images.ncnynl.com/rpi/2016/20140615182235687.png)
![20140615182235607](http://images.ncnynl.com/rpi/2016/20140615182235607.png)
git clone http://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git
cd Adafruit-Raspberry-Pi-Python-Code
ls
如果上面的步骤出现了一些问题,你会看到一条错误信息。通常导致安装失败的原因有以下几点:
网络连接问题
命令拼写错误。要记得Linux下是大小写敏感的。最好是在树莓派上直接打开这个页面,这样你就只需要复制粘贴就可以了
在这里你将会找到好多好东东,我们会在今后的教程里用到它们。
配置GPIO
GPIO针脚可被用于数字输出和数字输入。作为数字输出,你可以写程序切换某些针的高低电平。如果置为3.3V就是高电平,0V就是低电平。要使得一个针脚控制LED灯,你需要一个1kΩ的电阻连接到LED上,因为GPIO针脚可管理的电量很小。
如果你用针脚作为数字输入,你可以把开关和简单的传感器连到一针上然后检查它是否打开或关闭(也就是是否激活)。
一些使用GPIO的Adafruit项目:
http://learn.adafruit.com/raspberry-pi-e-mail-notifier-using-leds
http://learn.adafruit.com/playing-sounds-and-using-buttons-with-raspberry-pi
http://learn.adafruit.com/basic-resistor-sensor-reading-on-raspberry-pi
要使用Python对GPIO端口进行编程,我们需要安装一个十分有用的Python 2 类库,它叫做Rpi.GPIO。这个Python类库使我们了能够十分容易的控制GPIO针脚。
安装流程对于Raspbian或者Occidentalis来说都是一样的。实际上,一些版本的Raspbian已经包含了这个类库,但是也推荐你升级到最新版本,这是值得的。
sudo apt-get update
要安装RPI.GPIO,你首先需要安装RPi.GPIO所需的Python Development toolkit。
通过下面的命令来安装:
sudo apt-get install python-dev
然后安装Rpi.GPIO:
sudo apt-get install python-rpi.gpio
你可能会收到提示,只需要按’Y’确认就行了。
就是这样了,现在你可以尝试我上面提到的那些项目了。
配置I2C
I2C是一个广泛使用的芯片通信设计标准。所以我们可以在树莓派上连接许多带I2C接口的芯片和模块。
以下是一些使用I2C设备和模块的Adafruit项目:
http://learn.adafruit.com/mcp230xx-gpio-expander-on-the-raspberry-pi
http://learn.adafruit.com/adafruit-16×2-character-lcd-plus-keypad-for-raspberry-pi
http://learn.adafruit.com/adding-a-real-time-clock-to-raspberry-pi
http://learn.adafruit.com/matrix-7-segment-led-backpack-with-the-raspberry-pi
http://learn.adafruit.com/mcp4725-12-bit-dac-with-raspberry-pi
http://learn.adafruit.com/adafruit-16-channel-servo-driver-with-raspberry-pi
http://learn.adafruit.com/using-the-bmp085-with-raspberry-pi
如果你正在使用Occidentalis,那你的小派已经配置好I2C接口了,如果你使用Raspbian,你需要打开LXTerminal终端窗口并且输入下面的命令:
sudo nano /etc/modules
并且在文件末尾添加下面两行:
i2c-bcm2708
i2c-dev
编辑完成后,你需要重启来使改动生效。
如果在Raspbian上你的I2C有问题,那最好升级到最新版本。这篇教程的测试版本是2012-10-28。
I2C总线允许你连接多个设备到树莓派上,每一台设备都有一个唯一地址,这通常可以通过改变模块上的跳线进行设置。能看到哪台设备连接到你的小派上非常有用,因为这样可以让你确保所有事情都正常工作。
要达到这一点,你需要在命令行里敲入下面的命令来安装i2c-tools工具。
sudo apt-get install python-smbus
sudo apt-get install i2c-tools
根据你的发行版,你可能会找到一个这样的文件:
/etc/modprobe.d/raspi-blacklist.conf
如果没有这个文件,那什么都不用动,如果找到了这个文件,你需要编辑它注释掉下面两行:
blacklist spi-bcm2708
blacklist i2c-bcm2708
通过在行首添加一个’#’来进行注释。
通过键入下面的命令打开编辑器:
sudo nano /etc/modprobe.d/raspi-blacklist.conf
然后像下图那样编辑文件,然后使用CTRL+X和CTRL+Y保存退出。
一旦完成,你就可以通过下面的命令看到连接的设备了(假设你使用的是512MB的Model B型树莓派)
sudo i2cdetect -y 1
上图显示有两个I2C地址被使用 – 0×40和0×70。
注意如果你还使用的是先前版本的树莓派(256MB的Model B型)那你需要把命令改为:
sudo i2cdetect -y 0
树莓派不同型号的I2C端口不同。所以要记住:512M的小派使用i2c端口1,256MB的使用端口0!
测试和配置
最好的测试方法是挑选一个项目(最好从一个十分简单的项目开始)然后自己亲手试一试。
下面是我推荐的一些可以作为入门项目的教程:
http://learn.adafruit.com/raspberry-pi-e-mail-notifier-using-leds
http://learn.adafruit.com/playing-sounds-and-using-buttons-with-raspberry-pi
http://learn.adafruit.com/matrix-7-segment-led-backpack-with-the-raspberry-pi