Arduino 编程 ESP8266 12F NodeMCU 实现 PWM 控制呼吸灯
有两种版本的 ESP Node MCU,都可以使用,只是下载串口的驱动不同而已,所有引脚都一样
IO 引脚中,只有带有波浪线的引脚,才具备输出 PWM 模拟信号的能力
GPIO | 宏定义引脚 |
---|---|
4 | D2 |
14 | D5 |
12 | D6 |
15 | D8 |

一、官方手册中的定义
文档中说道,默认的值范围为 0-255,但是在 3.0 之前的版本中,默认范围变更为 0-1023
至于范围我们可以调用 analogWriteRange(new_range) or analogWriteResolution(bits) 进行调整
- 在我写代码的时候,使用255时观察示波器波形发现的,波形高电平最高只能占到一个周期的 1/4,查找官方手册发现了是这个原因
二、开发板代码
- 我们再来看看实际中的代码,我的开发板 PWM value 值默认范围为 0 - 1023,官方手册查得
- 但是在实际使用中,值大于 700 后 LED 的亮度变化就不太明显了
#include <ESP8266WiFi.h> // 本程序使用 ESP8266WiFi库
int brightness = 0;
void setup(void){
pinMode(D6, OUTPUT);
Serial.begin(9600);
}
void loop(void){
//Low to High,实际大于 700 后亮度变化不明显
for(brightness = 0; brightness <= 700; brightness++){//0 - 1023
analogWrite(D6, brightness);
Serial.println(brightness);
delay(10);
}
//High to Low
for(brightness = 700; brightness >= 0; brightness--){
analogWrite(D6, brightness);
Serial.println(brightness);
delay(10);
}
}
- 对于输出模拟信号还有其他接口,靠大家自己去探索了
int analogRead(uint8_t pin);
void analogReference(uint8_t mode);
void analogWrite(uint8_t pin, int val);
void analogWriteFreq(uint32_t freq);
void analogWriteRange(uint32_t range);
三、 示波器现象
范围在 0-1023之间变化的波形
占空比为 0%

占空比为 50%

占空比为 100%

四、实物现象
LED在亮灭之间变化着,完成了呼吸灯现象


- 谢谢支持,一个正在学习路上的嵌入式人,如果觉得有用的话麻烦大佬点个赞吧