树莓派实验教程:1、使用管脚控制二极管发光闪烁

硬件

  • 树莓派一台。1代B,B+,2代或者2016年刚出的3代都可以。我自己用的是2代,GPIO的管脚编号1代的和2代,3代可能会稍微有些差异,相应的需要注意或修改的地方我会在文中说明。另外,今后教程的硬件部分不再特意提到树莓派了。
  • LED发光管(可以理解成小灯泡)一只,什么颜色都可以,一般卖电子零件的商店肯定有卖。
  • 母头杜邦线两条,就是电线,带插头的是公头,带插座的是母头。我们这个实验用两端都是母头的杜邦线。
  • 原理说明
    LED灯有一长一短两根针脚,如果将较长的一根连上电源正极,较短的一根脸上电源负极造成电位差就可以点亮LED灯。
    但如果两个针脚同时都是负极(低电平)或者都是正极(高电平)则不会产生电位差也就不会被点亮。
    将较短的一根连上树莓派的GND(也就是负极)端,较长的一根不要直接连上树莓派的5V或者3.3V(两者都可理解为正极或高电平,以后统称高低电平,不再另行解释),而是连接到一个GPIO针脚上。
    然后我们可以通过程序控制GPIO口的电位高低状态即可控制LED的亮(GPIO口设置为高电平)或灭(GPIO口设置为低电平)。

    树莓派GPIO针脚说明(适合1代Mode B+或者2代Mode B或是3代Mode B)

    右上角有左右两排共40根针脚,并不是所有的针脚都是GPIO针脚。详情参考下图:
    树莓派GPIO针脚说明
    注意这两张图的上下左右顺序已经对齐了,实际连线的时候不要看错方向接错针脚。否则有损坏树莓派的可能。

    硬件连接

  • 选择开发语言
    控制GPIO口有很多方式,比如
    • shell直接控制
    • raspberry-gpio-python库(Python语言)
    • wiringPi库(C语言)
    • BCM2835 C Library(C语言)
      我们采用易于开发的python脚本语言作为开发语言。

    安装Python以及GPIO库

    • 先安装python-dev,输入以下指令。
      1 sudo apt-get install python-dev
    • 安装RPi.GPIO,依次输入以下指令。特别说明,由于RPi.GPIO仍处于不断完善的过程中,推荐去官网下载最新代码。
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      # 下载
      $ wget http://raspberry-gpio-python.goo … .GPIO-0.5.3a.tar.gz
      # 有朋友反映上面这句执行不成功提示连接超时,原因是国内google被墙了
      # 这里我提供我已经下载好的文件,下载链接在文章最后
      # 解压缩
      $ tar xvzf RPi.GPIO-0.5.3a.tar.gz
      # 进入解压之后的目录
      $ cd RPi.GPIO-0.5.3a
      # 启动安装
      $ sudo python setup.py install

    写代码

    代码里有详细的注释,代码很简单。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    #!/usr/bin/env python
    # encoding: utf-8

    import RPi.GPIO
    import time

    # 指定GPIO口的选定模式为GPIO引脚编号模式(而非主板编号模式)
    RPi.GPIO.setmode(RPi.GPIO.BCM)

    # 指定GPIO14(就是LED长针连接的GPIO针脚)的模式为输出模式
    # 如果上面GPIO口的选定模式指定为主板模式的话,这里就应该指定8号而不是14号。
    RPi.GPIO.setup(14, RPi.GPIO.OUT)

    # 循环10次
    for i in range(0, 10):
    # 让GPIO14输出高电平(LED灯亮)

            RPi.GPIO.output(14, True)
    # 持续一段时间

            time.sleep(0.5)
    # 让GPIO14输出低电平(LED灯灭)

            RPi.GPIO.output(14, False)
    # 持续一段时间

            time.sleep(0.5)

    # 最后清理GPIO口(不做也可以,建议每次程序结束时清理一下,好习惯)
    RPi.GPIO.cleanup()

发表评论