物联网之PWM呼吸灯、脉冲、LEDC

MENU

  • 前言
  • 原理
  • 硬件电路设计
  • 软件程序设计
    • analogWrite()函数实现呼吸灯效果
    • LEDC输出PWM信号


前言

学习制作呼吸灯,通过LED灯的亮度变化来验证PWM不同电压的输出。呼吸灯是指灯光在单片机的控制之下完成由亮到暗的逐渐变化,感觉好像是人在呼吸。


原理

脉冲宽度调制(PWM),是英文Pulse Width Modulation的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在测量、通信到功率控制与变换的许多领域中。
PWM通过调节输出不同频率(频率是指1秒钟内信号从高电平到低电平再回到高电平的次数,一个周期)、占空比(一个周期内高电平出现时间占总时间比例)的方波。以实现固定频率或平均电压输出。频率固定,改变占空比可改变输出电压。

PWM


硬件电路设计

材料名称数量
直插式LED1
1kΩ电阻1
杜邦线(跳线)若干
面包板1

LED的正极接开发板的D12引脚,并串联一个电阻,负极接GND。

接线

一定要接电阻,不然会由于电流过大,烧坏LED。


软件程序设计

analogWrite()函数实现呼吸灯效果

使用Arduino自带的analogWrite(pin, value)函数输出PWM。
pin是要写入的Arduino引脚。允许的数据类型为int。
value是占空比,介于0(始终关闭)和255(始终开启)之间。允许的数据类型为int。

// 宏定义GPIO输出引脚
#define LED_PIN 12void setup() {// 配置GPIO输出引脚pinMode(LED_PIN, OUTPUT);
}void loop() {// 实现渐亮效果for (int i = 0; i < 256; i++) {// 设置亮度模拟值analogWrite(LED_PIN, i);// 延时10msdelay(10);}// 实现渐灭效果for (int i = 255; i >= 0; i--) {// 设置亮度模拟值analogWrite(LED_PIN, i);// 延时10msdelay(10);}
}

LEDC输出PWM信号

使用ESP32的LEDC外设,在 ESP32 上有一个 LEDC 外设模块专用于输出 PWM 波形。
LED PWM控制器可以生成16路通道(0~15)波形,波形的周期和占空比可配置。分为高低速两组,高速通道(0~7)由80MHz时钟驱动,低速通道(8~15)由1MHz时钟驱动。另外,每路LED PWM支持自动步进式地增加或减少占空比,可以用于LED RGB彩色梯度发生器。
作为刚入门的学习者,上面这段概念不理解也不影响后续的学习,需要了解的是LEDC的控制函数以及PWM信号的产生流程。
打开esp32_hal_led.h文件后,可以看到LEDC的所有控制函数。

// 设置LEDC通道对应的频率和计数位数(占空比分辨率),返回最终频率
// 分辨率的意思就是把一个周期分成2的resolution_bits份。
uint32_t ledcSetup(uint8_t channel, uint32_t freq, uint8_t resolution_bits);// 指定通道输出一定占空比波形
void ledcWrite(uint8_t channel, uint32_t duty);// 类似于arduino的tone ,当外接无源蜂鸣器的时候可以发出某个声音(根据频率不同而不同)
uint32_t ledcWriteTone(uint8_t channel, uint32_t freq);//  该方法是上面方法的进一步封装,可以直接输出指定调式和音阶声音的信号
uint32_t ledcWriteNote(uint8_t channel, note_t note, uint8_t octave);// 返回指定通道占空比的值
uint32_t ledcRead(uint8_t channel);// 返回指定通道当前频率(如果当前占空比为0则该方法返回0)
uint32_t ledcReadFreq(uint8_t channel);// 将LEDC通道绑定到指定IO口上以实现输出
void ledcAttachPin(uint8_t pin, uint8_t channel);// 解除IO口的LEDC功能
void ledcDetachPin(uint8_t pin);

使用LEDC外设的时候需要遵循以下步骤。
1、使用ledcSetup()函数建立LEDC通道;
2、通过ledcAttachPin()将GPIO口与LEDC通道关联;
3、通过ledcWrite()、ledcWriteTone()、ledcWriteNote()设置频率、设置蜂鸣器音调等等;
4、通过ledcDetachPin()解除GPIO口与LEDC通道的关联。
实现呼吸灯效果的代码。

// 频率
#define FREQ 2000
// 通道
#define CHANNEL 0
// 分辨率
#define RESOLUTION 8
// LED引脚
#define LED 12void setup() {// 设置通道ledcSetup(CHANNEL, FREQ, RESOLUTION);// 将通道与对应的引脚连接ledcAttachPin(LED, CHANNEL);
}void loop() {// 逐渐变亮for (int i = 0; i < pow(2, RESOLUTION); i++) {// 输出PWMledcWrite(CHANNEL, i);delay(5);}// 逐渐变暗for (int i = pow(2, RESOLUTION) - 1; i >= 0; i--) {// 输出PWMledcWrite(CHANNEL, i);delay(5);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/879283.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【中秋月饼系列】2024年立体月饼新鲜出炉----python画月饼(1)附完整代码

【中秋月饼系列】2024年立体月饼新鲜出炉 ----python画月饼&#xff08;1&#xff09;附完整代码 本文目录&#xff1a; 零、时光宝盒 一、2024年中秋节立体逼真月饼&#xff08;效果展示&#xff09; 二、Python 海龟画图主要方法 &#xff08;1&#xff09;海龟画图的主…

学习大数据DAY56 业务理解和第一次接入

作业1 1 了解行业名词 ERP CRM OA MES WMS RPA SAAS 了解每个系统的功能和应用 ERP 系统&#xff0c;&#xff08;Enterprise Resource Planning&#xff0c;企业资源计划系统&#xff09;&#xff1a;ERP 系统 是一种用于管理企业各类资源的软件系统&#xff0c;包括生产管理…

攻防世界 ics-05

ics-05 隐藏的变量传参&#xff0c;php弱类型比较 只有设备维护中心可以点击进去 查看源码&#xff0c;发现有个隐藏的超链接变量传参 看到变量传参&#xff0c;有可能存在文件包含漏洞读取源码&#xff0c;这个站是php的站&#xff0c;所以可以使用php伪协议读取源码 index.p…

软件测试工程师面试整理-测试类型

软件测试类型多种多样,涵盖了从功能验证到性能评估的不同方面。了解各种测试类型有助于在软件开发生命周期的不同阶段选择合适的测试方法,确保软件的质量和可靠性。以下是常见的软件测试类型: 1. 功能测试(Functional Testing) ● 目标:验证软件功能是否按照需求文档正确…

2024年9月HarmonyOS鸿蒙应用开发者高级认证全新题库(覆盖99%考题)

一个小时通过鸿蒙高级认证 1、在开发 Harmony0S 应用工程时&#xff0c; 随着业务的发展&#xff0c;现在需要创建一个模块&#xff0c; 关于在 DevEco Studio 中创建 Module &#xff0c; 下列选项哪种方式是错误的? 必对 在 hvigor 目录下&#xff0c;单击鼠标右键&#xf…

Docker Swarm管理(Docker技术集群与应用)

如上图所示&#xff0c; 三台主机&#xff1a;恢复到docker的快照&#xff1b; 然后上传到三台服务器所需的镜像&#xff1b; 同步会话。执行导入脚本将镜像导入到系统中&#xff1b; 然后取消会话的同步&#xff0c;设置各个主机的主机名&#xff1b; 然后同步会话修改hosts…

Java JUC(一) 线程概念与常用方法

Java JUC&#xff08;一&#xff09; 线程概念与常用方法 一. JUC 基本概念 Java JUC&#xff08;Java Util Concurrent&#xff09; 是Java平台提供的一个并发编程工具包&#xff08;java.util.concurrent&#xff09;&#xff0c;全称为Java Concurrency Utilities。这个工具…

深入剖析 MQTT 协议:物联网通信的核心力量

摘要&#xff1a; 本文全面深入地探讨了 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;协议。详细阐述了 MQTT 协议的起源与发展背景&#xff0c;介绍其基本概念、特点及工作原理。深入分析了 MQTT 的架构组成&#xff0c;包括客户端、代理服务器及主题的作…

Jenkins部署若依项目

一、配置环境 机器 jenkins机器 用途&#xff1a;自动化部署前端后端&#xff0c;前后端自动化构建需要配置发送SSH的秘钥和公钥&#xff0c;同时jenkins要有nodejs工具来进行前端打包&#xff0c;maven工具进行后端的打包。 gitlab机器 用途&#xff1a;远程代码仓库拉取和…

《C++初始化列表陷阱:谨慎前行,避免潜在风险》

一 在 C编程中&#xff0c;初始化列表是一个强大的工具&#xff0c;它允许在对象创建时直接初始化成员变量。然而&#xff0c;就像任何强大的工具一样&#xff0c;如果使用不当&#xff0c;初始化列表也可能会带来一些陷阱。在本文中&#xff0c;我们将深入探讨 C中的初始化列表…

研1日记10

1. 日志 6.python接口自动化测试_日志类的封装与使用_哔哩哔哩_bilibili 简单的写法&#xff1a;python日志模块的封装(loguru)_哔哩哔哩_bilibili 2.open()函数 在Python中&#xff0c;使用open()函数打开文件时&#xff0c;第二个参数指定了文件的打开模式。w和a是两种常…

MongoDB 原子操作

MongoDB 原子操作 MongoDB 是一种流行的 NoSQL 数据库,以其灵活的数据模型和强大的查询语言而闻名。在处理数据时,MongoDB 提供了多种原子操作,确保了数据的一致性和安全性。本文将深入探讨 MongoDB 中的原子操作,包括其重要性、使用场景以及如何在实际应用中实现这些操作…

基于Linux的ARMxy工控机IEC61850协议实践

工业自动化水平的不断提高&#xff0c;对设备间高效、可靠通信的需求日益增长。IEC61850标准作为电力系统自动化领域的重要国际标准之一&#xff0c;其应用范围正在从传统的电力行业向更广泛的工业自动化领域扩展。本文将探讨基于ARM架构的工业计算机如何在Linux操作系统环境下…

解码未来:H.265与H.266技术对比及EasyCVR视频汇聚平台编码技术优势

随着视频技术的不断发展&#xff0c;视频编码标准也在不断更新迭代。H.265&#xff08;也称为HEVC&#xff0c;High Efficiency Video Coding&#xff09;和H.266&#xff08;也称为VVC&#xff0c;Versatile Video Coding&#xff09;作为当前和未来的主流视频编码标准&#x…

BrainSegFounder:迈向用于神经影像分割的3D基础模型|文献速递--Transformer架构在医学影像分析中的应用

Title 题目 BrainSegFounder: Towards 3D foundation models for neuroimagesegmentation BrainSegFounder&#xff1a;迈向用于神经影像分割的3D基础模型 01 文献速递介绍 人工智能&#xff08;AI&#xff09;与神经影像分析的融合&#xff0c;特别是多模态磁共振成像&am…

golang学习笔记11——Go 语言的并发与同步实现详解

推荐学习文档 golang应用级os框架&#xff0c;欢迎star基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总golang学习笔记01——基本数据类型golang学习笔记02——gin框架及基本原理golang学习笔记03——gin框架的核心数据结构golang学…

[前端][JS]html中js不同位置的区别

里面&#xff0c;写到下面&#xff0c;这三种有什么区别&#xff1f; javascript代码写在<head>里面&#xff1a; 由于这时候网页主体&#xff08;body&#xff09;还未加载&#xff0c;所以这里适合放一些不是立即执行的自定义函数&#xff0c;立即执行的语句则很可能…

【机器学习】马尔可夫随机场的基本概念、和贝叶斯网络的联系与对比以及在python中的实例

引言 马尔可夫随机场&#xff08;Markov Random Field&#xff0c;简称MRF&#xff09;是一种用于描述变量之间依赖关系的概率模型&#xff0c;它在机器学习和图像处理等领域有着广泛的应用 文章目录 引言一、马尔科夫随机场1.1 定义1.2 特点1.3 应用1.4 学习算法1.5 总结 二、…

【数据分析预备】Pandas

Pandas 构建在NumPy之上&#xff0c;继承了NumPy高性能的数组计算功能&#xff0c;同时提供更多复杂精细的数据处理功能 安装 pip install pandas导入 import pandas as pdSeries 键值对列表 # 创建Series s1 pd.Series([5, 17, 3, 26, 31]) s10 5 1 17 2 3 3 26 4 31 dt…

Windows更新之后任务栏卡死?桌面不断闪屏刷新?

前言 小白这几天忙于工作&#xff0c;更新就变得异常缓慢。但就算这么忙的情况下&#xff0c;晚上休息的时间还是会给小伙伴们提供咨询和维修服务。 这不&#xff0c;就有一个小伙伴遇到了个很奇怪的问题&#xff1a;电脑Windows更新之后&#xff0c;任务栏点了没反应&#xf…