前言

呼吸灯是常见的LED应用。LED呼吸灯的流程是缓缓点亮LED灯,再缓缓熄灭LED灯。在夜色下,缓慢闪烁的LED显得格外迷人。

一、PWM单元介绍

ESP8266有四个PWM输出接口,分别是:PWM0(GPIO12)、PWM1(GPIO15)、PWM2(GPIO14)、PWM3(GPIO4)。由于PWM接口是由软件来实现的,因此用户可自行拓展(最大可拓展8个,详细请参考ESP8266 SDK的pwm.h文件)。

PWM可调节的周期在1000us~10000us,即100HZ~1KHZ之间。

有关PWM的介绍请自行上网查阅资料。

二、PWM配置流程介绍

1.首先对PWM的占空比、周期以及PWM通道进行配置。

2.配置系统定时器,将呼吸灯运行程序配置成每30ms运行一次,以刷新PWM的占空比。

三、相关API介绍

1、pwm_init

API 介绍 - -
功能介绍 初始化PWM配置 -
函数原型 void pwm_init(uint32 period, uint32 *duty, uint32 pwm_channel_num, uint32 (*pin_info_list)[3]); -
参数介绍 period PWM周期
- *duty 各PWM通道的占空比
- pwm_channel_num 需要使用的PWM通道数量
- (*pin_info_list)[3] 使用的PWM通道的GPIO参数

示例:

uint32_t io_info[ ][ 3 ] =
{
/** 该参数在ESP8266 SDK的user_light.h中 */
{ PWM_1_OUT_IO_MUX, PWM_1_OUT_IO_FUNC, PWM_1_OUT_IO_NUM },
};uint32_t duty[] = {0};/** 配置PWM的周期为1000us,占空比为0,PWM通道数量为1 */
pwm_init( 1000, duty, 1, io_info );

2、pwm_start

API 介绍 - -
功能介绍 更新PWM配置
函数原型 void pwm_start(void)
注释 在PWM参数配置完成后需要调用该函数

3、pwm_set_duty

API 介绍 - -
功能介绍 设置某PWM通道的占空比 -
函数原型 void pwm_set_duty(uint32 duty, uint8 channel) -
参数介绍 duty 新的PWM通道占空比
- channel 需要设置的PWM通道(从零开始算)

示例:

/** 设置PWM通道1的占空比为100 */
pwm_set_duty( 100, 0 );/** 使PWM配置生效 */
pwm_start();

4、pwm_get_duty

API 介绍 - -
功能介绍 获取某通道的占空比的数值 -
函数原型 uint32 pwm_get_duty(uint8 channel) -
参数介绍 channel 需要设置的PWM通道(从零开始算)
返回值 该通道的占空比 -

5、pwm_set_period

API 介绍 - -
功能介绍 设置某PWM通道的周期 -
函数原型 void pwm_set_period(uint32 period, uint8 channe) -
参数介绍 period 新的PWM通道周期
- channel 需要设置的PWM通道(从零开始算)

示例:

/** 设置PWM通道1的周期为100us */
pwm_set_period( 100, 0 );/** 使PWM配置生效 */
pwm_start();

6、pwm_get_period

API 介绍 - -
功能介绍 获取某通道的周期 -
函数原型 uint32 pwm_get_period(uint8 channel) -
参数介绍 channel 需要设置的PWM通道(从零开始算)
返回值 某通道的周期 -

注:详细的介绍详见ESP8266 SDK说明文档。

四、例程

   #include "ets_sys.h"#include "osapi.h"#include "user_light.h"#include "gpio.h"#include "user_interface.h"static os_timer_t os_timer;/** 呼吸灯运行程序 */void ESP8266_PWM_RUN( void ){/** PWM占空比变量 */static u8 set_duty = 0;/** 占空比加减标志 */static bool f = true;if ( f == true ){if ( ++set_duty >= 100 ){f = false;}}else{if ( --set_duty <= 0 ){f = true;}}/** 更新PWM通道0的占空比 */pwm_set_duty( set_duty, 0 );pwm_start();}/** 初始化PWM配置、系统定时器配置 */void ESP8266_PWM_Init( void ){//    struct pwm_param pwm_config;uint32_t io_info[ ][ 3 ] ={{ PWM_1_OUT_IO_MUX, PWM_1_OUT_IO_FUNC, PWM_1_OUT_IO_NUM }, };uint32_t duty[ ] = { 0 };//    pwm_config.duty[ 0 ] = 0;//    pwm_config.freq = 0;//    pwm_config.period = 1000;pwm_init( 1000, duty, 1, io_info );/** 配置定时器每30ms执行一次ESP8266_PWM_RUN()函数 */os_timer_disarm( &os_timer );os_timer_setfn( &os_timer, (ETSTimerFunc *) ( ESP8266_PWM_RUN ), NULL );os_timer_arm( &os_timer, 30, true );}/** 用户初始化程序,根据测试该程序只运行一次 */void user_init(void){ESP8266_PWM_Init();}

参考资料

[1]. ESP8266技术参考
[2]. ESP8266Non-OS SDK API参考

ESP8266 PMW介绍相关推荐

  1. 安信可ESP-12F(ESP8266)介绍与使用

    介绍 安信可常见模块对比 ESP-12F参数 ESP-12F引脚 ESP-12F推荐电路 ESP-12F内部原理图 可以看到板载的LED被连到了GPIO2 内部晶振频率是26MHz SPI FLASH ...

  2. 物联网系列之WIFI模块ESP8266一介绍

    内容 Change history 内容 1        前言 1.1        目的 2        计划 2.1        测试环境 2.2        计划 3        行动 ...

  3. 嵌入式网络基础——ESP8266的介绍和使用

    文章目录 前言 网络基础 IP地址 端口号 网络协议--TCP/UDP 网络知识重点 ESP8266引入 实物图 ESP8266介绍 原理图 常用AT指令介绍和展示 AT指令说明 AT和AT + RS ...

  4. ESP8266 分区表介绍

    乐鑫 ESP8266 文档基本都是英文的,本文仅对官方文档做了一些翻译整理 原文链接:Partition Tables 概述 每片 ESP8266 的 Flash 可以包含多个应用程序以及多种不同类型 ...

  5. ESP8266 中断(Interrupts)和计时器(Timers)功能介绍

    ESP8266 中断(Interrupts)和计时器(Timers)功能介绍 在本指南中,您将学习如何使用Arduino IDE与ESP8266 NodeMCU使用中断和计时器.中断允许您检测GPIO ...

  6. ESP32,ESP8266之间WiFi互联实验

    ▌ESP32,ESP8266模块互联 ESP32,ESP8266 模块具有很丰富的功能,便于设计一些现场需要联网的场合.基于此在AI视觉组基于ESP32的裁判系统第一版本设计要求 就使用了ESP32进 ...

  7. ESP8266访问网站-urequest get方法

    §01 利用ESP8266访问网站 在制作基于ESP8266的联网的智能门控系统,ESP8266负载将局部的基于人脸识别的门控系统的信息与管理网站之间进行信息的交互.利用了 http 中的 get 方 ...

  8. ESP8266初次如何实现无线通信(基于电脑与ESP8266)

    目录 一.需要的软件及硬件 1.软件 2.硬件 二.ESP8266的使用 1.ESP8266的介绍 2.ESP8266进行初始AT指令的配置步骤 三.所用软件安装分享 一.需要的软件及硬件 1.软件 ...

  9. 基于ESP8266远程舵机的控制与实现

    一.ESP8266 CP2102介绍 NodeMCU板载ESP-12E(4MBFlash) WIFI模组和USB转TTL串口(CP2102/CH340)芯片,方便下载固件和调试, NodeMCU默认为 ...

最新文章

  1. 关于 fallocate 文件系统预分配 的一些细粒度测试
  2. JSON 之 SuperObject(16): 实例 - 解析 Google 关键字搜索排名
  3. BAPI_PO_CHANGE修改NETPRICE
  4. iOS中如何监测来电
  5. python每秒20个请求_使用Python每秒百万个请求
  6. Xml文档添加节点和属性
  7. python100以内自然数之和_python教程:利用while求100内的整数和
  8. 【英语学习】【医学】Unit 01 The Skeletal System
  9. 小米平板5系列共三款机型:全系搭载2K/120Hz屏幕
  10. Spring的AOP面向切面编程
  11. rup 裁剪_建筑企业信息系统RUP裁剪模型及其应用研究
  12. iText生成pdf带目录
  13. 2021年的理财收益,2022继续加油
  14. Xcode The 'Apple Push Notification' feature is only available to users enrolled in Apple Develo.
  15. Java中map的含义
  16. Vcam项目下载及编译
  17. 源码:JAVA在线编译器模拟
  18. linux设置NLS_LANG
  19. 关闭X-Powered-By 信息(隐藏PHP版本信息)
  20. 智慧城市排水管网监测系统解决方案

热门文章

  1. 二叉树的基本性质及证明
  2. slice(),splice(),split(),substring(),substr()使用方法和区别
  3. 支付宝支付学习:蚂蚁沙箱环境是什么?怎样使用蚂蚁沙箱环境?
  4. 关于图像模式识别的几种分类方法概述
  5. 付费搞来的Excel资源,请低调使用!
  6. 学生学籍管理系统数据流图
  7. 中国电子竞技产业研究报告
  8. 证券业上云内参: 深圳证券信息
  9. 【渝粤教育】广东开放大学 广东开放大学学习指引 形成性考核 (28)
  10. 广州大学 数据结构实验报告