glutamine 发表于 2012-6-24 01:56:50

树莓接口的开发

(看到坛里有人问如何驱动GPIO,想起论坛里关于介绍树莓底层接口的帖子实在太少,只记得u大发过“raspberry pi/树莓派外部接口说明”系列。正好树莓官方的杂志MagPi第二期(http://www.raspberrypi.org/archives/1328)上有一个for beginner的接口使用教程,就把关键内容搬过了来,还加上了一些自己的话。本人业余菜鸟一枚,帖子里可能有很多问题,希望有专业人士能来补充指正,不胜感激。下面正文开始……)


      不要担心自己电子知识不足,本文会教你最基本的原理并且用相对简单软硬件示例来带你入门。
      首先要认识到计算机的基本构件是成千上万的晶体管开关,在计算机眼里只有通(1)和断(0),这就是所谓的数字信号。相对的,像温度值这样的叫做模拟信号,它比数字信号要复杂,需要额外的设备来处理。这里我们只局限于数字信号接口。Raspberry Pi有一套叫做GPIO的接口,即通用接口,你可以将它们用于任何你希望的目的。这些GPIO可以用作input和ouput目的。需要注意的是Raspberry Pi上的GPIO是低功率的,所以有时你可能需要一块扩展板来用于需要高功率的场合。
      好了,下面我们来进行一个简单的实验,这个实验不需要扩展板,仅需要开关和LED就可以了。
      开关:我们需要一个像这样的按键开关。一般开关可以分为两种,闭锁开关(latching switch)和瞬时开关(momentary switch)。前者可以保持开或关的状态,就像电灯开关那样;后者则只有你按下它的时候才接通,比如键盘按键。这里我们用的是一个普通的轻触开关。
      LED:发光二级管非常常见,它们通常被用作指示灯。我们只要一支普通的3mm LED就可以了。


      为方便实验,我们还需要一块面包板和一些导线。它们可以使你非常方便的连接和修改电路。最后我们还需要10千欧、1千欧和47欧的电阻三支,三条母对公杜邦线用来连接Raspberry Pi和面包板。


      现在把所有元件插上面包板,有时你可能需要加工一下元件的引脚以方便插入。注意开关两脚必需跨在电源槽和空插槽之间,就像图中那样。LED正负极不要接错,一般而言,正极引脚比较长,插在C4孔,负极引脚端,插在C5。三条杜邦线接Raspberry Pi的pin1、pin6和pin11(如下图,把Raspberry Pi接口管脚摆在左上方,就像http://www.shumeipai.net/read.php?tid-89.html所示的方位)。


      连接好电路后打开Raspberry Pi,按下开关,LED应该亮起,否则请检查电路。如果LED在开关放开的情况下仍然发光,可以把开关取下旋转90度插回。
      因为Raspberry Pi的接口不带buffer保护,所以我们接入R2作为保护。而10千欧的R3作为上拉电阻,确保pin11始终处在高电位,而当我们按下开关,pin11就被拉到低电位。我们的最终电路图如下。


楼下继续……

glutamine 发表于 2012-6-24 01:59:12

构建完成电路后我们就可以进入编程环节了,这里我们使用python语言。如果你用的是Raspberry Pi官网上的debian系统的话,python已经包含在里面了。
      你需要做的第一件事是安装一个python程序包来赋予Raspberry Pi控制GPIO的能力。从这里http://pypi.python.org/pypi/RPi.GPIO下载最新的版本(目前是0.2.0)。
      我们使用终端来安装程序包。打开accessories→LXTerminal,输入gunzip RPi.GPIO-0.2.0.tar.gz执行,然后tar -xvf RPi.GPIO-0.2.0.tar。现在我们有了一个GPIO-0.2.0文件夹,接下来执行安装过程,输入cd RPi.GPIO-0.2.0,然后sudo python setup.py install。在此过程中可能会被要求输入密码。
现在我们可以开始写一个程序来监视开关状态并在屏幕上显示些东西。先回到起始目录:cd ..,打开文本编辑器,创建一个名为mybutton.py的文件,输入以下代码:
#!/usr/bin/python
import time
import RPi.GPIO as GPIO
GPIO.setup(11, GPIO.IN)
while True:
    mybutton = GPIO.input(11)
    if mybutton == False:
      print "giggle"
      time.sleep(.2)
(所有缩进是必需的,用tab键实现--本人注)
      首先我们引入time和RPi.GPIO以使用其中的函数,然后我们把pin11配置为input模式以接收开关状态。while True是一个不终止的循环。if语句判断pin11当前的状态,当它变成低电位,即我们按下开关时,就在屏幕上输出一个giggle。为了防止整个屏幕充满giggle,我们在最后让程序休息0.2秒。
      输入sudo python mybutton.py来启动程序,按下开关,应该可以看见屏幕上出现的giggle。按ctrl+c可以终止程序运行。
      以下程序可以计数按键次数:
#!/usr/bin/python
import time
import RPi.GPIO as GPIO
GPIO.setup(11, GPIO.IN)
count = 0
while True:
    mybutton = GPIO.input(11)
    if mybutton == False:
      count = count+1
      print "count", count
      time.sleep(.2)
      本文就到此为止,现在你已经了解了GPIO接口编程的最基本知识了。如果你有任何问题,或者你有好的程序,可以发到in.control@themagpi.com或者到我们的论坛里讨论。

树老大 发表于 2012-6-24 02:20:11

感谢兄弟熬夜翻译和解释,事情虽小,确实个好的带头,功劳却大。
谢谢。

glutamine 发表于 2012-6-24 02:41:20

居然精了, ,谢老大
据说MagPi第三期还有这方面的续集,有必要的话我继续翻译,和大家一起学习

ukonline2000 发表于 2012-6-24 08:14:29

哈哈,不错,加油,我还在焦急的等待中。。。。

树老大 发表于 2012-6-24 13:22:39

你看到好的东西,认为可以翻译的,大家都欢迎。

wyjail 发表于 2012-6-24 21:29:08

有没有人试一试的

root 发表于 2012-6-26 12:05:44

还能这么玩.太好了

root 发表于 2012-6-27 14:49:56

顺便问下楼主,可以通过编程来控制灯泡的打开和熄灭吗

glutamine 发表于 2012-6-28 01:51:26

回 root 的帖子

root:顺便问下楼主,可以通过编程来控制灯泡的打开和熄灭吗 (2012-06-27 14:49) images/back.gif

必然可以的,你可以去官方wiki里找找看,有示例代码的
页: [1] 2
查看完整版本: 树莓接口的开发