控制灯

利用程序来控制灯,是入门硬件开发的一个常见的例子。在这个例子中,我们将演示如何通过程序来控制灯的亮度和闪烁等

点亮 LED

通过控制引脚的电平,可以控制 LED 的亮灭。

from machine import Pin  # 导入Pin类,用于操作GPIO
import time  # 导入time模块,用于时间相关的操作

led = Pin(2, Pin.OUT)  # 创建一个Pin对象,代表GPIO2,设置为输出模式

while True:  # 无限循环
    led.value(not led.value())  # 读取LED当前的值,取反后再设置回去,实现LED的闪烁
    time.sleep(1)  # 暂停1秒

利用 PWM 控制亮度

利用 PWM 可以控制 LED 的亮度,PWM 是 Pulse Width Modulation 的缩写,即脉宽调制。通过调整脉冲的宽度,可以控制 LED 的亮度。

原理:通过调整脉冲的宽度,可以控制 LED 的亮度。脉冲的宽度越大,LED 亮度越高,脉冲的宽度越小,LED 亮度越低。

from machine import Pin, PWM  # 导入PWM类,用于操作PWM
import time  # 导入time模块,用于时间相关的操作

led = PWM(Pin(2), freq=500, duty=0)  # 创建一个PWM对象,设置频率为500Hz,占空比为0

while True:  # 无限循环
    for i in range(1024):  # 从0递增到1023
        led.duty(i)  # 设置PWM的占空比
        time.sleep(0.001)  # 暂停1毫秒
    for i in range(1023, -1, -1):  # 从1023递减到0
        led.duty(i)  # 设置PWM的占空比
        time.sleep(0.001)  # 暂停1毫秒

小知识

Q:频率为什么是 500?

A:频率是 PWM 信号中每秒钟的周期数,单位是赫兹(Hz)。 500Hz 是一个常见的选择,因为它足够高,使得 LED 的闪烁不可见,从而看起来是稳定的光线,同时它也不太高,以致于控制器能够轻松处理。 具体频率的选择可以根据应用需求和硬件特性进行调整。对于 LED 调光,通常的频率范围在 100Hz 到 1kHz 之间,这样既能提供平滑的调光效果,也能确保 LED 不会闪烁。

Q:为什么是 1023?

A:这是因为在 ESP8266 和 ESP32 等微控制器中,PWM(脉宽调制)的占空比是通过一个 10 位的分辨率来控制的。 10 位分辨率意味着占空比可以设置为 0 到 1023 之间的值(2^10 = 1024 个值)。 因此,使用 for i in range(1024)来从 0 递增到 1023,再用 for i in range(1023, -1, -1)来从 1023 递减到 0,以实现从 0 到最大占空比再回到 0 的循环。

Last Updated: