micropython+ESP32示例(1)——点亮LED灯

摘要

ESP32上面自带2个LED灯,一个在通电时会亮起,另一个可以通过程序点亮,本文将介绍如何通过代码控制该LED的亮灭、频闪。

所需硬件

1、电脑

2、ESP32开发板

3、USB数据线(要能传输的线,不能是只能充电的线)

前提

完成环境部署,具体可参考文章micropython ESP32环境部署-CSDN博客

了解Thoney基本操作,Thonny安装-CSDN博客

一、点亮LED灯

USB线连接ESP32和电脑,打开Thonny,解释器选择MicroPython(ESP32)

可以看到,此时ESP32只有一个LED灯是亮的

在代码编辑区输入如下三行代码


import machine
led = machine.Pin(2,machine.Pin.OUT)
led.value(1)

运行程序,此时ESP32两个LED灯都亮了

下面分析下这三行代码

第1行 import machine

导入machine包,machine包是ESP32硬件功能的基础包,里面包含了ESP32一系列功能,只要开发ESP32程序,都必须要引入这个包

第2行 led = machine.Pin(2,machine.Pin.OUT)

定义一个变量led,指向ESP32的GPIO2引脚,类型为输出,GPIO2即蓝色LED灯对应的引脚,machine.Pin.OUT表明我们要对该GPIO引脚进行输出,即设置其为高电平还是低电平

第3行 led.value(1)

将GPIO2设为高电平,此时蓝色LED灯亮起,如果执行led.value(0)会将该GPIO设为低电平,此时,蓝色LED灯灭

二、设置LED灯闪烁

想要让LED灯闪烁,只需设置让灯亮一会,灭一会,再亮一会,灭一会,依次循环,所以很容易想到用循环控制语句来实现

其代码为

import machine
import time
led = machine.Pin(2,machine.Pin.OUT)
while True:
    led.value(1)
    time.sleep(1)
    led.value(0)
    time.sleep(1)

点击运行,此时,我们可以看到蓝灯一直闪烁

下面我们分析下代码

第2行 import time

导入包time,该包用于让程序暂停一定时间,达到控制灯持续亮一段时间或持续灭一段时间的效果

第6和第8行 time.sleep(1)

该行的作用是让程序暂停1秒钟,程序暂停期间灯的亮灭状态不变

因此第5-8行的作用就是

让灯亮、程序暂停1秒钟,让灯灭,程序暂停1秒钟

结合外面的循环体,效果就是 灯亮1秒钟、灯灭1秒种、灯亮1秒钟、灯灭1秒种……,于是就看到灯闪烁的样子

注意:代码第8行即最后一行的time.sleep(1)不能省略,否则就变成

让灯亮、程序暂停1秒钟,让灯灭、让灯亮、程序暂停1秒钟,让灯灭……,灯灭了马上就亮,人眼看到的效果就是灯一直亮着。

修改程序的暂停时间可以控制灯闪烁的频率,比如,将第6和第8行改成 time.sleep(2),让灯亮2秒再灭2秒,就闪烁的比之前慢了,

将第6和第8行改成time.sleep_ms(500),让灯亮500毫秒再灭500毫秒,就闪烁的比之前快了

三、按钮控制灯的亮灭

ESP32自带两个按钮,EN按钮和BOOT按钮,其中BOOT按钮可以实现用户定义功能,在按下时触发用户自定义的逻辑。

在这里我们让每次按下BOOT按钮时都改变灯的亮灭状态。

其代码为

import machine
led = machine.Pin(2,machine.Pin.OUT)
def changeLed(pin):
    led.value(not led.value())
btn = machine.Pin(0, machine.Pin.IN)
btn.irq(trigger=machine.Pin.IRQ_FALLING, handler=changeLed)

代码共6行

第1行 import machine

导入machine包,machine包是ESP32硬件功能的基础包,里面包含了ESP32一系列功能,只要开发ESP32程序,都必须要引入这个包

第2行 led = machine.Pin(2,machine.Pin.OUT)

定义一个变量led,指向ESP32的GPIO2引脚,类型为输出,GPIO2即蓝色LED灯对应的引脚,machine.Pin.OUT表明我们要对该GPIO引脚进行输出,即设置其为高电平还是低电平

第3、第4行,定义一个函数,在函数内对led的值取反,原本是1变成0,原本是0变成1,即改变LED灯的亮灭状态

第5行 btn = machine.Pin(0, machine.Pin.IN)

定义一个变量btn,指向ESP32的GPIO0引脚,类型为输入,GPIO0引脚即ESP32上USB口右边的BOOT按钮,类型为输入,表明我们要读取其状态

第6行 btn.irq(trigger=machine.Pin.IRQ_FALLING, handler=changeLed)

设置按钮的中断,trigger=machine.Pin.IRQ_FALLING指定当检测到引脚输入信号下降沿时触发中断程序,handler=changeLed表明中断服务程序是咱们前面第3行、第4行定义的函数changeLed,这样当我们按下按钮时,就会调用函数changeLed,修改灯的状态。

至此,我们实现了控制灯的亮灭和闪烁。

### ESP32 控制 LED 教程 #### 使用 ESP32 控制单个 LED 的亮度 通过PWM(脉宽调制),可以实现对LED亮度的平滑调节。ESP32具有多个支持PWM功能的GPIO引脚,这使得它非常适合用于控制LED亮度。 下面是一个简单的Arduino IDE中的代码示例来展示如何利用ESP32内置的功能调整LED泡的亮度: ```cpp // 定义使用的 GPIO 引脚编号 const int ledPin = 18; void setup() { // 设置指定引脚为输出模式 pinMode(ledPin, OUTPUT); } void loop() { // 增加亮度从0到最大值 for (int dutyCycle = 0; dutyCycle <= 255; dutyCycle++) { analogWrite(ledPin, dutyCycle); // 改变占空比从而改变亮度 delay(15); // 短暂等待以便观察变化效果 } // 减少亮度回到最小值 for (int dutyCycle = 255; dutyCycle >= 0; dutyCycle--) { analogWrite(ledPin, dutyCycle); delay(15); } } ``` 这段程序会让连接在定义好的`ledPin`上的LED逐渐变亮再慢慢熄灭,形成呼吸的效果[^2]。 对于更复杂的RGB光条带应用,则推荐使用专门设计用来简化这类操作过程的库文件——例如 `ESP32_LED_STRIP` 库。此库允许开发者轻松创建绚丽多彩的颜色组合以及动态显示图案而无需深入了解底层硬件细节[^1]。 #### RGB LED 条带控制实例 当涉及到多颜色或多像素点阵列时,采用上述方法会变得非常复杂。因此建议借助第三方开发人员维护和支持的良好文档化的类库来进行编程工作。以下是基于`ESP32_LED_STRIP`库的一个基础例子: 首先需要安装对应的依赖项并导入必要的头文件;之后初始化对象代表实际物理存在的设备;最后编写逻辑处理函数完成特定任务需求。 ```cpp #include <FastLED.h> #define DATA_PIN 18 // 数据线所接的管脚号 #define COLOR_ORDER GRB // 颜色顺序 #define CHIPSET WS2812B // 芯片型号 #define NUM_LEDS 30 // 总共多少颗珠 CRGB leds[NUM_LEDS]; void setup() { FastLED.addLeds<CHIPSET, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip); FastLED.setBrightness(50); } void loop() { static uint8_t startIndex = 0; FillRainbow(leds, NUM_LEDS, startIndex, 75); startIndex += 1; FastLED.show(); delay(20); } void FillRainbow(CRGB *leds, int numToFill, byte initialHue, byte deltaHue) { for(int i = 0; i < numToFill; i++) { leds[i].setHSV(initialHue+(i*deltaHue)/numToFill, 255, 255); } } ``` 该段代码实现了彩虹渐变动画,在每次循环迭代过程中更新起始色调,并重新绘制整个光谱范围内的色彩过渡序列。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值