文章目录

  • 一、前言
  • 二、设置PWM输出
  • 三、修改PWM精度
  • 四、修改PWM频率
  • 五、呼吸灯实战

一、前言

ESP8266的PWM(Pulse Width Modulation)由FRC1在软件上实现,可实现同频率、不同占空比的最多8路的PWM波形输出。需要注意如下:

  • PWM驱动接口不能跟硬件定时器接口函数同时使用,因为二者共用同一个硬件定时器;
  • PWM驱动使用NMI中断,为最高优先级中断,可以保证PWM输出波形的准确度;
  • 不能将自动睡眠模式设置为Light Sleep,Light Sleep模式下停用CPU不能响应NMI中断;
  • PWM周期需要设置在1000us(1kHz)~10000(100Hz)。

二、设置PWM输出

在arduino中使用如下函数设置PWM输出:

analogWrite(gpioID, pwmValue);

我们可以将如下所示NodeMCU的全部10个IO口设置为PWM输出,但是因为GPIO1和GPIO3作为调试串口的TX和RX,一般不做使用,所以NodeMCU一般可支持同时输出8路PWM输出。编写程序如下所示:

void setup() {analogWrite(5, 15);   // D1 analogWrite(4, 31);   // D2analogWrite(0, 63);   // D3analogWrite(2, 127);  // D4analogWrite(14, 191); // D5analogWrite(12, 15);  // D6analogWrite(13, 31);  // D7analogWrite(15, 63);  // D8analogWrite(3, 127);  // RXanalogWrite(1, 191);  // TX
}void loop() {delay(300);
}

三、修改PWM精度

使用analogWrite(gpioID, pwmValue);函数可以设置PWM输出,pwmValue的默认范围为0~255,这就决定了PWM波形的精度,当我们把这个范围扩大后,就可以提高PWM的精度,使用如下函数修改:

analogWriteRange(uint32_t range);    //调整后的范围为0~range

通过查看源文件core_esp8266_wiring_pwm.cpp,可以知道最大范围可设置到65535:


但是这个可能存在一个bug,即当范围设置为65535时,analogWrite()函数填入大于53804的数不能实现想要得到的波形。另外当范围超过53687时无法实现100%占空比,所以建议最大范围为53687。


四、修改PWM频率

频率(F) = 1/周期(T),所以修改频率就等同于修改周期,使用如下函数可以修改PWM的频率:

analogWriteFreq(uint32_t freq)

通过查看源文件core_esp8266_wiring_pwm.cpp,可以知道其频率范围为100Hz~1kHz:


但实际上,我们可以将其范围设置为10hz~90kHz,使用示例如下:

void setup() {analogWriteFreq(90000);analogWriteRange(65535);analogWrite(2, 32863);  // D4 LED
}void loop() {delay(300);
}

五、呼吸灯实战

/*ESP8266 使用PWM实现LED呼吸灯
*/void setup() {analogWriteFreq(1000);            // 频率设置为1kHz,即周期为1msanalogWriteRange(1000);           // 范围设置为1000,即占空比步长为1usanalogWrite(2, 750);              // GPIO2 - D4 - LED
}void loop() {uint8_t dir = 0;uint32_t pwmval = 750;while(1){if(dir) {        // dir==1  pwmval递增pwmval++;                 }else {            // dir==0  pwmval递减pwmval--;                    }if( pwmval == 0 ) {    // pwmval降低至0后,方向为递增dir=1;        }if( pwmval == 1000) {  // pwmval递增到1000后,方向改为递减dir=0;        }analogWrite(2, pwmval);           // 修改占空比if( pwmval==1000 ) delay(300);    // 在LED熄灭时等待300msdelay(3);}
}

程序烧录到开发板之后,可以看到板载小灯慢慢亮,慢慢灭,就行呼吸一样。

ESP8266--Arduino开发(PWM)相关推荐

  1. ESP8266 Arduino开发之路(2)— 连接到无线WiFi路由器

    ESP8266 Arduino开发之路(2)- 连接到无线WiFi路由器 一.前言 ESP8266可以通过WiFi连接到无线路由器,这种方式和手机通过WiFi连接无线路由器的模式是相同的,我们称该模式 ...

  2. ESP8266 arduino开发 esp8266开启AP模式

    本文档为个人博客文档系统的备份版本.作者:小游.作者博客:点击访问 #include <ESP8266WiFi.h> // 设置热点的名字 #define AP_SSID "XI ...

  3. Arduino文档阅读笔记-WeMos D1 ESP8266 WIFI开发板入门

    WeMos D1开发板以ESP8266WIFI开发板为基础,使用Arduino开发板的设计,工作电压为3.3V设计出来的开发板,这个开发板仅仅是使用了Arduino uno的布局设计,并不是Ardui ...

  4. arduino开发ESP8266配置方法,入门必看,esp8266开发板库离线安装包package2.7.1

    公众号关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 群里经常有朋友问arduino开发ESP8266的配置方法,今天在之前的文章基础上, ...

  5. 200528更新arduino开发ESP8266配置方法,入门必看,esp8266开发板库离线安装包package2.7.1...

    公众号关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 群里经常有朋友问arduino开发ESP8266的配置方法,今天(200528)在之 ...

  6. 利用HFS软件一分钟搭建好ESP8266基于Arduino开发环境

    利用HFS一分钟搭建好ESP8266基于Arduino开发环境

  7. 使用arduino开发esp8266和esp32时首选项设置方法(附国内开发板管理网址)

    摘要:本文介绍arduino在开发esp8266和esp32时的首选项设置方法.其中给出的国内开发板管理器网址速度飞起. 基于esp8266开发的板子有很多种,例如D1等. esp8266的开发板管理 ...

  8. Arduino开发ESP8266时开发板管理器无法下载问题解决办法

    文章目录 一.问题描述 二.解决办法 1预先下载好对应版本的安装包 2还未解决怎么办? 总结 一.问题描述 ESP8266基于Arduino开发时需要到开发板管理器里面下载对应的ESP8266开发板, ...

  9. 和ESP8266 Arduino谈场恋爱 01 一条具有中国特色的开发环境安装道路

    前言 废话不多说,环境先搞起来. 非著名情感博主 IoT小能手 twowinter,耗费数月心血,编著长篇言情小说<和ESP8266 Arduino谈场恋爱>,为广大技术宅男传授深度撩妹技 ...

  10. 【ESP8266之Arduino开发】二、实战YeeLink平台远程控制小灯

    硬件准备:200欧电阻,LED以及NodeMCU 虽然模块仍然使用nodemcu,但是使用Arduino开发. 不再使用Lua及其固件! arduino IDE 直接下载程序进ESP8266,相当于下 ...

最新文章

  1. 谷歌全新轻量级新模型ALBERT刷新三大NLP基准
  2. 两个单体内置对象_Global和Math
  3. java 函数名调用_粉丝提问|c语言:如何定义一个和库函数名一样的函数,并在函数中调用该库函数...
  4. 界面设计语言_使用任何语言设计界面的提示
  5. Unity3D 动态加载 图片序列正反播放
  6. ant-design之form-重置表单多个值
  7. PHP获取客户端ip的五种方式
  8. android studio butterknife配置,!!!!在AndroidStudio中添加butterknife插件
  9. 当个年轻的又不太有经验的老板有多难?
  10. 7-5 华氏度转摄氏度(四舍五入) (5分) java pta
  11. 淘客返利机器人,淘宝,拼多多,京东三合一查券返利机器人搭建教程
  12. php远程开机ubuntu,ubuntu的远程开机、关机和远程桌面控制
  13. c语言rst关系,为什么服务器突然回复RST——小心网络中的安全设备
  14. 手把手教你如何高效落地单项目管理 | 一看既会
  15. 电脑上怎么同时录制系统和麦克风声音
  16. docker build 时出现no space left on device解决方法
  17. 工程流体力学笔记暂记9(伯努利方程在工程中的应用)
  18. Paper:《YOLOv4: Optimal Speed and Accuracy of Object Detection》的翻译与解读
  19. AS400(系列)第一章 入门简介
  20. 创新创业理论研究与实践杂志社创新创业理论研究与实践编辑部2022年第18期目录

热门文章

  1. 解决MySQL报错:LOAD DATA LOCAL INFILE file request rejected due to restrictions on access.
  2. 《塔木德智慧全书》摘要(之三)
  3. Collections.sort方法对list排序的两种方式
  4. t1900d台式计算机,中端2.0王者之战!漫步者R1900TIII惠威D1080MKII全面PK评测
  5. matlab运行后没反映,这个matlab程序运行没反应是怎么回事?在线急等
  6. 高中计算机试题一,高中计算机考试试题集(一)
  7. hashmap中的key是有序的么_关于HashMap中KEY的有序排列的反思和总结(对应TreeMap)
  8. linux的qt中出现error2,Windows下Qt代码出现的错误总结
  9. spark入门三(RDD基本运算)
  10. 让雷军都压力山大的首位 00 后 CEO 抄袭了程序员的开源项目