Arduino 编程 ESP8266 12F NodeMCU 实现 PWM 控制呼吸灯

本文介绍了如何使用Arduino编程通过ESP8266 12F NodeMCU实现PWM控制LED灯的呼吸效果,探讨了官方定义的模拟信号范围、代码实现细节、示波器观察及实际效果,适合嵌入式学习者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Arduino 编程 ESP8266 12F NodeMCU 实现 PWM 控制呼吸灯

有两种版本的 ESP Node MCU,都可以使用,只是下载串口的驱动不同而已,所有引脚都一样
IO 引脚中,只有带有波浪线的引脚,才具备输出 PWM 模拟信号的能力

GPIO宏定义引脚
4D2
14D5
12D6
15D8

在这里插入图片描述
在这里插入图片描述

一、官方手册中的定义

  • 文档中说道,默认的值范围为 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在亮灭之间变化着,完成了呼吸灯现象

  • 谢谢支持,一个正在学习路上的嵌入式人,如果觉得有用的话麻烦大佬点个赞吧
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值