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

  • 搭建一个树莓派多功能实验平台的材料及其功能用途。
  • 树莓派的GPIO引脚功能和基本用法。
  • 点亮一个LED灯的电路、程序设计思路和代码。

5.1 搭建实验平台

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

图 5.1 多功能实验平台

  • 1:树莓派3B+型主板(含电源)
       一块树莓派3B+型主板(含电源),该主板应配备有一张已经安装好Raspbian系统的MicroSD卡。

  • 2:面包板
       实验过程中,面包板非常适用于电子电路的组装和调试,各种电子元器件可以根据需要随意插入或拔出,而无需焊接,节省了电路的组装时间,而且元件可以重复使用。

  • 3:T型GPIO扩展版
       GPIO扩展版上标有GPIO引脚的功能,与面包板配合使用非常便于对GPIO进行外接。

  • 4:40P排线
       用于连接树莓派与T型GPIO扩展版,长度适中即可。

  • 5:实验平台底座
       使用一块亚克力板作为实验平台的底座,用于固定树莓派主板和面包板,以便于实验操作,同时对树莓派主板形成一定的保护。

  • 6:万用表
       在进行GPIO硬件控制调试的时候,如果实验结果不是事先所预计的,那么我们可以使用万用表对电路进行简单的测试,排查问题。

  • 7:LED灯
       发光二极管LED是一种廉价和高效的光源,常在电路及仪器中作为指示灯,或者组成文字或数字显示。LED灯非常便于显示GPIO引脚的输出状态,在开发树莓派外部硬件控制程序时,可以先使用LED灯确定GPIO引脚输出正确后再连接要控制的硬件,避免由于GPIO输出错误而导致外部硬件损坏。本章我们需要用到到一个红色的LED灯,需要注意的是LED较长的引脚为正极,较短的引脚为负极。

  • 8:电阻
       实验过程中,请根据实际选择必要的电阻,本章需要用到一个470Ω或1kΩ的电阻。

  • 9:杜邦线
       用于连接各电子元件,无需焊接,本章仅需要用到两根公对公的杜邦线。为便于识别,建议遵循有关规范,连接电源(GPIO引脚)的线采用红色线连接,接地端使用黑色线连接。

5.2 GPIO引脚

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

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

  • BOARD
       BOARD编号方式是树莓派主板上P1接头上的的引脚号,从左到右,从上到下进行编号,左边为奇数,右边为偶数,支持BOARD编号方式的库主要有RPi.GPIO、WiringPi-Go。

  • BCM
       BCM编号侧重于CPU寄存器,是根据Broadcom SOC的GPIO寄存器编号的,支持的库比较多,用的也比较多,是后续章节主要使用的编号方式。为便于使用BCM编号方式,建议采用类似“T型GPIO扩展版”或“GPIO参考卡片”等配件,让引脚功能一目了然。

  • wiringPi
       wiringPi编号侧重于实现逻辑,GPIO端口从0开始编号,WiringPi库是支持wiringPi编号方式的最主要GPIO库。

  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库  将GPIO19设置为输出模式  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灯的电路、程序设计思路和代码。

第5章 用树莓派点亮LED灯相关推荐

  1. 树莓派点亮LED灯需要几行代码?3行。小孩子都能学会

    [TOC] 点亮LED灯 硬件连接 找一个LED灯,连接如上图,注意长短引脚,经过这些年的狂轰乱炸,大家对于这个应该不漠视,毕竟Arduino都进教材了. 代码 我们先来看图形化的版本: from g ...

  2. 树莓派点亮led灯C语言,树莓派点亮你的LED小灯——GPIO学习笔记

    这篇博文是我Coursera学习笔记整理所得,入门操作基本都在这里了.闲话不多说,直接进入正题. 1.树莓派的GPIO## GPIO是General Purpose Input Output (通用输 ...

  3. IMX6ULL裸机开发之点亮LED灯

    裸机点亮LED灯 该实验使用正点原子的linux开发板和下载工具 知识储备 GPIO时钟控制器 在<IMX6ULL用户手册>中,时钟控制器模块介绍在第18章 首先看CCM Clock Ga ...

  4. 嵌入式开发学习之--点亮LED灯(中)

    上篇我们主要学习的是环境搭建和实际操作,这篇详细记录一下整个思考的过程. 首先,我们需要想一个问题,这个灯为什么会亮? 物理上来说,LED灯属于发光二极管,只要有正确的电压就会发亮.也就是说,我们烧写 ...

  5. 嵌入式开发学习之--点亮LED灯(上)

    在嵌入式学习里,点亮LED灯的地位就如同编程语言学习里的"hello world",是每个初学者都必须经历的一关,因为点亮了LED灯,至少可以说明几件事: 1.开发环境没问题,包括 ...

  6. 一灯大师,基于imx6ull点亮LED灯

    一.imx6ull GPIO原理 1. STM32 GPIO回顾 我们一般拿到一款全新的芯片,第一个要做的事情的就是驱动其 GPIO,控制其 GPIO 输出高低电平,我们学习 I.MX6U 也一样的, ...

  7. 30个物联网传感器小实验:三行代码点亮LED灯

    30个物联网传感器小实验:三行代码点亮LED灯 三行代码点亮LED灯 LED灯闪烁 LED灯调亮度 LED淡入淡出 不写一行代码点亮LED灯 全彩RGB灯 面包板 30个物联网传感器小实验:三行代码点 ...

  8. 和12岁小同志搞创客开发:手撕代码,点亮LED灯

    目录 1.Arduino编程架构 2.点亮LED灯 机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_381069 ...

  9. STM32F 103C8T6开发板 点亮LED灯

    每组IO口含下面7个寄存器.7个寄存器可以控制一组GPIO的16个IO口. GPIOx_CRL:端口配置低寄存器 GPIOx_CRH:端口配置高寄存器 GPIOx_IDR:端口输入寄存器 GPIOx_ ...

最新文章

  1. 代码生成器项目正式启动
  2. Centos7单端口单配置文件多IP
  3. Python8:logging Module
  4. Memory and Trident
  5. bzoj3143,P3232-[Hnoi2013]游走【数学期望,高斯消元,贪心】
  6. Github Pages + Jekyll 独立博客一小时快速搭建上线指南
  7. C#利用反射将Datatable转化为指定实体类ListT
  8. json 转换 java odl_JSON与JAVA数据的转换
  9. 笔记本交还公司了,伴随了我两年的家伙。
  10. java 链表_java数据结构与算法之顺序表与链表深入分析(一)
  11. 黑马程序员Java基础视频教程-课程总结文档
  12. 关于计算机听课如何做笔记,学霸听课怎么记笔记?5个笔记秘诀,帮你提高听课效率,完成逆袭...
  13. dw中css制作导航,Dreamweaver导航条按钮制作方法
  14. 2021-04-27
  15. 江苏华罗庚中学2021高考成绩查询,2021年常州各高中高考成绩排名及放榜最新消息...
  16. java获取jira上的任务
  17. 互联网打印机协议IPP分析
  18. VideoReader Failed to init Ubuntu 18.04
  19. 游戏数据分析报告--<野蛮时代>
  20. latex 中画✔(打勾)

热门文章

  1. 最全详细图解 策树原理(上)
  2. 深入浅出Pytorch函数——torch.numel
  3. SAS base认证知识点汇总一(2)
  4. node笔记——调用免费qq的smtp发送html格式邮箱
  5. c++ 实现 blocking queue
  6. 国内研究者在关注着大家的哪些心理变化?横断历史研究介绍与趋势分析
  7. 安卓访问网络超时闪退? 安卓如何访问网络?求解
  8. 表格序号_如何在表格中插入或删除行时保持序号连续?
  9. js 如何通过代码复制内容到粘贴板
  10. word中添加java代码怎么写_Java如何在word文档中写一个段落?