https://www.raspberrypi.org/documentation/usage/gpio/README.md
2016/6/25
GPIO: 树莓派A和B
##介绍GPIO和在树莓派上进行物理编程
树莓派的强大特性就是那一排在板子周围的GPIO(一般目的的输入输出)插针,就在黄色的视频输出插孔的旁边。
GPIO pins
这些pin是pi和外界世界的物理接口。最简单,你可以把他们当作可以打开和关闭的开关(输入)或者树莓派可以打开或者关闭(输出)。26个插针的17个是GPIO插针,其他的是电源或者接地插针。
## 它们是用来做什么的?我们可以用它们来做什么?
你可以给pin编程,和真实的世界有趣地互动。输入不一定必须来自真的开关;比如:它可以是一个感应器或者其他电脑或设备的一个信号。输出也可以做很多事情,通过打开一个led来给其他的设备传递信号和数据。如果树莓派在网络上的话,你可以在任何地方控制接在它上面的设备,这些设备可以传回数据。通过互联网连接和控制物理设备是很强大的让人兴奋的事情,树莓派正是由这个想法而来。在我们的博客上有很多很棒的例子。
注意:不是说真的在任何地方,当然你需要连接网络的一些东西,连上网络的电脑和电。所以不要给我们因为这一点来给我们写信:)
## GPIO pins是如何工作的?
## 输出
注意:如果你依照下面的教程,误以为GPIO是安全而有趣的。随意地插上线或者电源在你的树莓派上,你可能会弄坏它。如果你插上需要使用很多电量的设备也可能会出现一些问题,led还是亮的,马达不转了。如果你为此担心的话,你可能需要考虑使用一个breakout电路板,比如pibrella知道你有信心完全直接使用GPIO。
先不考虑树莓派,最简单的电路就是用一个电池连接灯和一个开关(这里的电阻用来保护led)
当我们使用GPIO作为一个输出的时候,树莓派替换了上图中的开关和电源。每一个pin都可以打开或关闭,或者在电脑命令里变高或变低。当pin处于高的状态是3.3v,低就是没有。
线面是使用树莓派实现的同样的电路,led直接连接上了GPIO的pin(它可以输出+3v3)和一个接地的pin(0v就相当于电池的负极):
下面的步骤就是写一个程序高数pin升高或者降低。这里是个用python写的例子(看第二步),这里是如何在scratch里做到。
##输入
GPIO的输出很容易;要么开或关,高或低,3v3或者0v。输入就有点复杂了,因为要看具体数码设备的工作了。虽然可以只接一个按钮在输入pin和接地pin上,树莓派会混淆判断按钮是否开或者关。它也许能正常工作,也许不能。这有点像宇宙中漂浮的飞船,没有参照物无法知道它是否上升或者下降,甚至不知道什么是上升或者下降。
这就是为什么你会看见像“pull up”或者“pull down”的词语在树莓派的GPIO的教程里。这是给输入pin一个参照以便于知道什么时候接受一个输入。
如果你想要现在使用GPIO作为输入,可以看一下burping jelly baby 和 quick reaction game的教程,用python实现,或者一个reaction 游戏用 Scratch实现。
##术语表
GPIO
通用型输入输出; 在树莓派上就是特指pin和你能用它们做的事。之所以这么叫是因为你可能用它们达成很多目的。大多数可以用来作为输入或者输出,具体看你自己的程序。
LED
发光二级管,一个小的低耗能的光源,广泛应用在电子产品中。作为介绍树莓派上的现实计算切入点。
现实计算(physical computing)
计算包括所有可以直接连接电脑的实体,包裹标准输入输出设备比如键盘和显示器。think按钮,光,机器人,闹钟,感应器,家庭机器人, 被叫做Babbage的泰迪熊,或者其他的东西。我们喜欢现实计算是因为这很有趣, 这是个很强大的教学和学习的工具,激发创造力, 解决问题和合作研究。不只是显示器的计算吸引所有年龄段孩子,你自己也可以做出很酷的东西。
###附录
当给GPIO编程的时候,有两种方式来指出它们:GPIO的编码和现实中的编码
GPIO的编码
计算机用这种方式来认识GPIO pin。具体的数字对人来说没什么用,他们会 jump about all over the place,所以不方便记住他们。你可以打印一个参考册子或者一个引用电路板插在上面。
现实编码
另外指出pin的方法就是通过简单的从左上(靠近sd卡那边)作为第一个开始数, across and down。这是“现实编码”大概看起来是这样:
我该使用那种方式?
初学者和小孩可能会觉得现实编码会更简单 - 只是简单的数一下。你仍然需要一个图来知道是那些GPIO pin, 那一个是接地的那一个是电源。
大多数情况我们推荐使用GPIO编码,它更使用,大多数的资料上也用这种方式。不过随便你吧 - 只要在一个程序里使用同一个方式就可以了。注意pin编码根据你具体使用的编程语言:Scratch是 GPIO,在python里可以自己选择。