玩转树莓派程序员机器人·学

第5章 用树莓派点亮LED灯

2019-04-15  本文已影响112人  vctea

   用树莓派点亮一个LED灯是非常简单的事情,但却非常重要,是利用GPIO控制外部硬件设备的基础,机器人的大部分功能都可以通过操纵GPIO来实现的。换句话说,能控制一个LED灯,就能让机器人动起来。本章将的主要内容如下。

5.1 搭建实验平台

   为便于后续的实验,我们首先需要搭建一个多功能实验平台(见图5.1,含本章所需材料),各部件的功能用途如下。

图 5.1 多功能实验平台

5.2 GPIO引脚

   前面我们讲过,树莓派与普通计算机最大的区别就在于它拥有若干个可编程的GPIO,可以用来控制外部设备、从外部设备获取信息或是和硬件进行数据交互等,因此了解各个GPIO引脚的功能和使用方法是非常重要的。树莓派GPIO接口已发布了3个版本,原始的两个版本仅有26个引脚,“+”型树莓派版本有40个引脚,本章及后续章节我们将主要介绍“+”型树莓派版本的GPIO。
   树莓派GPIO接口有BOARD、BCM和wiringPi三种编号方式,三种编码方式的对应关系如表5.1所示。

表 5.1 树莓派40Pin引脚对照表

   B+型树莓派主板的40个引脚提供了17个GPIO专用接口,1个UART总线接口、1个SPI总线接口、1个I2C总线接口、2个5V电源接口、2个3.3V电源接口、8个地接口,使用的时候一定先要清楚选择了那套编号方式,相应的库是否支持。

提示:

  • 通电后不要使用金属物体(如螺丝刀等)接触GPIO接口,或短接GPIO引脚。
  • 外接输入输出设备时,要先仔细了解设备的额定功率(含电压和电流),不要直接连接高功耗原件(如直流电机等),或输出电压超3.3V的设备。当使用低功率LED时,最好在LED的正极串联一个限流电阻。
  • GPIO工作在3.3V逻辑电平上,0V表示逻辑0,3.3V则表示逻辑1。调试GPIO程序时,可以使用万用表测试GPIO引脚电压,判断输出是否正确。
  • GPIO接口仅提供数字的输入和输出,当需要用到模拟输入时,可以使用ADC芯片或采用电阻式传感器来实现。

5.3 点亮LED灯

   在前面的章节中,我们已经介绍了大量的基础理论,接下来我们将进入实战,开始有趣的实验。本节将介绍如何使用树莓派控制一个LED灯,您将看到一个LED灯在树莓派的控制下不停的闪烁。

5.3.1 实验电路

   本实验的电路原理图如图5.2所示,一个红色发光二极管正极通过一个限流电阻串连到树莓派的GPIO19上,负极则连接到树莓派的GND上,从而形成一个完整的回路。

图 5.2 树莓派点亮LED电路图

   GPIO引脚的输出电压约为3.3V,高于LED上约1.7V的压降,如果直接串联,会有一个非常大的电流通过LED,这个电流通常大到可以损坏LED,甚至供电设备。因此,需要在LED和电源(GPIO引脚)间串联一个电阻限制电流,从而对LED和为其供电的GPIO引脚提供保护。不同厂家,不同颜色压降略有区别,我们假设所用LED的压降为1.8V,GPIO引脚的电流为3mA,限流电阻大小的计算方法如下:

R = ( 3.3V - 1.8V ) / 3mA = 500Ω  

   因此,我们选择使用一个1kΩ的电阻。该电路的最终实物连线图如图5.3所示。

图 5.3 电路实物连接图

提示:

  • 除了使用以上的方法计算限流电阻的值,您还可以访问类似实用工具大全http://tool.520101.com/网站,使用网站提供的LED限流电阻计算器进行计算。实际上,这个网站还提供了不少实用的电子电路计算工具,非常有助于我们后续章节的学习。
  • 限流电阻的阻值不应太小,也不能太大。太小,则起不到限流的作用;太大,则LED的亮度会比较暗。
  • 为保障树莓派主板和电子元件的安全,连线工作应在为断电的情况下进行,并在确定线路连接无误后再通电。

5.3.2 程序思路

   程序的基本设计思路如下:

BEGIN  
    引入GPIO库  
    引入time库  
    将GPIO13设置为输出模式  
    DO FOREVER  
        点亮LED
        等待1秒钟
        熄灭LED
        等待1秒钟
    ENDO
    清理释放GPIO资源
END

5.3.3 程序代码

   Python操作GPIO需要用到RPi.GPIO库,Raspbian系统默认未安装这个库,所以请先使用XShell远程登录树莓派运行以下命令安装RPi.GPIO库。

sudo apt install python3-rpi.gpio  

   RPi.GPIO库安装完毕后,按照第4章介绍的方法新建一个项目,然后输入以下代码并运行,运行效果如图5.4所示。程序的详细说明见注释,这里我们使用了try: Finally: 结构捕捉异常,确保当我们中断程序时(如使用Ctrl+C或者操作系统提供的方法),GPIO.cleanup()函数能被执行,以清理释放GPIO资源。在Pycharm下运行程序时,点击工具栏上的Stop按钮也可以中断程序。

import RPi.GPIO as GPIO                 # 引入GPIO模块  
import time                             # 引入time模块  

GPIO.setmode(GPIO.BCM)                  # 使用BCM编号方式  

GPIO.setup(19, GPIO.OUT)                # 将GPIO19设置为输出模式  

if __name__ == '__main__':
    try:
        while True:                     # 无限循环  
            GPIO.output(19, True)       # 将GPIO19设置为高电平,点亮LED  
            time.sleep(1)               # 等待1秒钟  
            GPIO.output(19, False)      # 将GPIO19设置为低电平,熄灭LED  
            time.sleep(1)               # 等待1秒钟  
    finally:
        GPIO.cleanup()                  # 清理释放GPIO资源,将GPIO复位  
图 5.4 实验运行效果

5.4 本章小结

   本章首先介绍搭建一个树莓派多功能实验平台所需的材料及其功能用途,然后详细介绍了树莓派GPIO引脚的三种编号方式、功能和使用注意事项,最后介绍用树莓派点亮一个LED灯的电路、程序设计思路和代码。

上一篇下一篇

猜你喜欢

热点阅读