一、实验要求

点亮一个LED灯是电子开发最常见的入门实验。本次实验分为三个小实验:

(1)点亮单个LED灯,并让其亮暗闪烁

(2)通过脉宽调制(PWM)点亮单个LED灯,并让其亮暗闪烁

(3)让LED灯从暗到亮缓慢变化,再从亮到暗缓慢变化,不断循环

二、实验材料

  • LED灯1个
  • 电阻1个
  • 杜邦线若干
  • 树莓派4B、RPi.GPIO库

三、实物连接

本次实验的树莓派GPIO采用BCM编号方式。LED灯的正极与树莓派4B的13号引脚连接,实物连接中电阻的作用是作为保护电阻。

四、实验代码

4.1 点亮单个LED灯,并让其亮暗闪烁

import RPi.GPIO as GPIO
import timeGPIO.setmode(GPIO.BCM)          #引脚采用BCM编号方式
GPIO.setup(13, GPIO.OUT)        #13号引脚设置为输出模式
GPIO.output(13, GPIO.LOW)       #初始化,13号引脚置低电平,默认状态下LED暗
while True:GPIO.output(13, GPIO.HIGH)  #13号引脚置高电平,此时LED灯被点亮time.sleep(0.3)             #持续0.3sGPIO.output(13, GPIO.LOW)   #13号引脚置低电平,此时LED灯熄灭time.sleep(0.3)             #持续0.3s

4.2 通过脉宽调制(PWM)点亮单个LED灯,并让其亮暗闪烁

import RPi.GPIO as GPIO
import timeGPIO.setmode(GPIO.BCM)      #引脚采用BCM编号方式
GPIO.setup(13, GPIO.OUT)    #13号引脚设置为输出模式
GPIO.output(13, GPIO.LOW)       #初始化,13号引脚置低电平,默认状态下LED暗p = GPIO.PWM(13, 1)         #在13号引脚处调制频率为1Hz的脉冲
p.start(50)                 #占空比为50%的脉冲开始输出
time.sleep(6)               #持续时间6S
p.ChangeDutyCycle(100)      #把输出脉冲的占空比设置为100%
time.sleep(4)               #持续时间4S
p.stop()                    #停止输出脉冲
GPIO.cleanup()              #清理GPIO口资源

代码分析:

4.3 让LED灯从暗到亮缓慢变化,再从亮到暗缓慢变化,不断循环

import time
import RPi.GPIO as GPIOGPIO.setmode(GPIO.BCM)            #引脚采用BCM编号方式
GPIO.setup(13, GPIO.OUT)          #13号引脚设置为输出模式
GPIO.output(13, GPIO.LOW)       #初始化,13号引脚置低电平,默认状态下LED暗p = GPIO.PWM(13, 100)             #在13号引脚处调制频率为100Hz的脉冲
p.start(0)                        #占空比为0的脉冲开始输出
try:while 1:for dc in range(0, 101, 5):       #从0到100,每次循环加5p.ChangeDutyCycle(dc)         #把输出脉冲的占空比设置为dc%time.sleep(0.1)               #持续时间0.1Sfor dc in range(100, -1, -5):     #从100到0,每次循环减5p.ChangeDutyCycle(dc)         #把输出脉冲的占空比设置为dc%time.sleep(0.1)               #持续时间0.1S
except KeyboardInterrupt:                 #按键盘Ctrl+C会中止程序pass
p.stop()
GPIO.cleanup()

为什么这部分代码的实验现象是:LED灯从暗到亮缓慢变化,再从暗到亮缓慢变化?

简单的说,PWM技术就是不停的通断电路并控制通断持续的时间片段长度来控制用电器在单位时间内实际得到的电能。这么说好像还是复杂了,再简单点说,如果你的手足够快,打开电灯开关后马上关闭,如果这个时间间隔足够短,灯丝还没有全部亮起来就暗下去了。你再次打开电灯再关闭,再打开再关闭。如果你一直保持相同的频率,那么电灯应该会保持一个固定的亮度不变。理论上,你可以通过调整开灯持续的时间长度和关灯持续的时间长度的比例就能得到不同亮度了。这个比例被称为“占空比”。

平均电压的角度来分析,假设占空比为10%,那么这10块时间里,只有1块的时间让LED导通,剩下9块的时间里LED截止。假设PWM信号的幅值是5V,那么在导通的1块时间里LED电压的确是5V的,但是在剩下9块时间里,它的电压却是0V。也就是说从一个周期整体看来,LED的平均电压只有5*0.1+0*0.9=0.5V。PWM信号频率很高的,我们无法通过肉眼来观察到每一个周期LED灯亮灭的变化过程,所以只好通过平均电压这样一种方式来决定这个LED的亮的程度了。

所以在PWM技术中,可以通过调节占空比来控制LED灯的亮暗程度。

五、视频演示

5.1 点亮单个LED灯,并让其亮暗闪烁

5.2 通过脉宽调制(PWM)点亮单个LED灯,并让其亮暗闪烁

5.3 让LED灯从暗到亮缓慢变化,再从亮到暗缓慢变化,不断循环

树莓派GPIO入门(一):点亮一个LED灯相关推荐

  1. java gpio_单片机基础——使用GPIO输出点亮一个LED灯

    1. 准备工作 硬件准备 开发板 首先需要准备一个小熊派IoT开发板,并通过USB线与电脑连接. 软件准备 需要安装好Keil - MDK及芯片对应的包,以便编译和下载生成的代码,可参考MDK安装教程 ...

  2. 51单片机入门教程(1)——点亮一个LED灯

    51单片机入门教程(1)--点亮一个LED灯 一.什么是单片机 单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU.随机存储器 ...

  3. 51单片机(入门保姆级教程)——点亮一个LED灯

    一.为什么要学习单片机? 作为一名工科学生,进入大学参加各种活动,例如:电子设计大赛.寻迹车比赛.LED电子灯比赛以及各种各样的微控.弱控强电路等,都离不开单片机的身影.电路.c语言.数电.模电.计算 ...

  4. 从零点亮一个led灯

    Stm32学习笔记一:stm32cubemx和keil5从零开始点亮一个LED灯 一.软件材料准备:stm32cubemx和keil5软件(下载方式可自行上网搜,这里不再详细叙述) 二.硬件材料准备: ...

  5. lajp linux教程,linux IMX6 汇编点亮一个LED灯

    驱动Linux引脚与驱动STM32其实是一样的,都是在操作寄存器,在相应的寄存器上附上相应的值即可驱动. IMX6U手册上有各个管脚的命名,跟STM32不同,IOMUXC_SW_MUC_CTL_PAD ...

  6. 如何利用CubeMX生成代码驱动STM32H750点亮一个LED灯

    如何利用CubeMX生成代码驱动STM32H750点亮一个LED灯 CubeMX软件的配置 GPOI或者说引脚配置 第一步 第二步 工程文件的配置 最后一步:完整生成好的代码 CubeMX软件的配置 ...

  7. 3.基础实验-实验01-点亮一个LED灯

    目录 3.1 实验01-点亮一个LED灯 3.1.1 STM32CubeMX软件配置 ​3.1.2 代码编写 3.1.3 编译与下载程序 3.1.4 查看实验结果 3.1 实验01-点亮一个LED灯 ...

  8. GD32学习笔记1(高难度工程,点亮一个LED灯)

    系列文章目录 第一章 GD32学习笔记1(高难度工程,点亮一个LED灯) 文章目录 系列文章目录 前言 一.工作流程 二.新建工程的准备工作 三.新建工程 四.工程目录管理 五.代码实现 1.初始化 ...

  9. MSP430F1612 第一个程序,点亮一个LED灯

    I/O操作 MSP430有6组IO端口,其中P1和P2具有中断功能,其他端口不具备中断功能.而点亮一个LED灯只需要控制一个引脚的高低电平即可.这里不需要用到中断功能.那在这里,我们编码涉及的寄存器只 ...

最新文章

  1. 架构师之路 — 软件架构 — 软件质量模型
  2. python 关闭 os.popen()
  3. 实现Evernote的OAuth授权
  4. 用python分析拼多多_利用Python分析拼多多上卖的最热的产品, 结果出乎大多数人意料!...
  5. maven学习(五)——maven命令的组合使用
  6. 系统虚拟化与虚拟机的区别
  7. 开关电源基础知识(上)_拓扑类型、效率与输入输出及占空比的关系
  8. 跨站脚本攻击基础 ——合天网安实验室学习笔记
  9. 【积水成渊-逐步定制自己的Emacs神器】3:为Emacs安装扩展
  10. iOS 项目源码大全 github 国内外大神
  11. MotionEvent 事件解读
  12. 整理所学|单片机原理及应用-第三版-张毅刚(一:考试要点)
  13. WiFi万能钥匙破解显密码版。
  14. 物联网lora无线数传模块应用案例:LoRawan网关通信技术
  15. Python数据标准化
  16. 【开源项目】Imagine图片压缩工具
  17. 10类人不适合睡前喝牛奶助眠
  18. UTF-8字符C2A0引起的问题
  19. MySQL基础 , 基本SQL,SELECT查询详解
  20. linux中电商环境配置,Linux CentOS 7.0中java安装与配置环境变量的步骤详解

热门文章

  1. python入门笔记——内置函数作业
  2. Kony开发入门及学习路线介绍
  3. springmvc页面跳转错误404/找不到页面/拒绝访问
  4. 关于表征学习(Representation Learning)的浅显理解
  5. 你真的会用@Transactional吗?
  6. 大哥無極的币圈沉浮史:从负债1亿到身家10亿
  7. petalinux使用-终极教程
  8. 到底啥是分布式系统开发经验?
  9. 《论语》原文及其全文翻译 学而篇3
  10. 基于嵌入式linux 的蓝牙通信系统设计与实现的研究意义,嵌入式Linux操作系统通信管理机的设计研究...