esp开发与应用(pwm呼吸灯)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

pwm其实用的还是挺多的,尤其是很多和电机相关的地方,都是和pwm搭边的。舵机的话,就是发pwm控制,不同的空占比,可以调节不同的旋转角度。而如果换成普通电机,中间接好驱动电路的话,不同的pwm方波,那么电机就以不同的速度驱动起来。这些都是pwm的用途。那么不是电机的场景,我们就可以换成led灯。根据不同的空占比,就可以制造出呼吸灯的效果。这也是pwm可以产生的另外一个效果。

1、准备gpio

这个gpio,esp32上面很多pin,我们随便插一个即可,比如gpio 14。

2、准备好元器件

主要的元器件就是led灯、esp32模块、面包板、杜邦线。其中因为涉及到面板的缘故,所以杜邦线尽量使用那种母转公的杜邦线。

3、连接电路

这部分不复杂,就是从gpio 14连出来,接到led上,然后再接到gnd。注意,led插入到面包板的时候,控制到方向,否则可能出现led灯不亮的情况,到时候查起来就比较麻烦。

4、ai生成代码

这部分关于led灯呼吸的内容,esp32有现成的结构体和函数。但是这些统统都不需要自己去学习,我们需要做的就是告诉ai,用esp32的gpio14制造一个呼吸灯的效果,接下来等着ai实现代码即可。

复制代码
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/ledc.h"
#include "driver/gpio.h"

// Breathing LED Configuration
#define LED_GPIO       14          // GPIO14 for LED
#define LEDC_CHANNEL   LEDC_CHANNEL_0
#define LEDC_TIMER     LEDC_TIMER_0
#define LEDC_MODE      LEDC_LOW_SPEED_MODE
#define LEDC_DUTY_RES  LEDC_TIMER_13_BIT  // 0-8191
#define LEDC_FREQ_HZ   5000              // 5kHz PWM frequency

void breathing_led_task(void *arg)
{
    // Configure LED PWM timer
    ledc_timer_config_t ledc_timer = {
        .duty_resolution = LEDC_DUTY_RES,
        .freq_hz = LEDC_FREQ_HZ,
        .speed_mode = LEDC_MODE,
        .timer_num = LEDC_TIMER,
        .clk_cfg = LEDC_AUTO_CLK,
    };
    ledc_timer_config(&ledc_timer);

    // Configure LED PWM channel
    ledc_channel_config_t ledc_channel = {
        .channel = LEDC_CHANNEL,
        .duty = 0,
        .gpio_num = LED_GPIO,
        .speed_mode = LEDC_MODE,
        .hpoint = 0,
        .timer_sel = LEDC_TIMER,
    };
    ledc_channel_config(&ledc_channel);

    printf("Breathing LED on GPIO%d started\n", LED_GPIO);

    while (1)
    {
        // Fade in: 0 to max brightness
        for (int duty = 0; duty <= 8191; duty += 5)
        {
            ledc_set_duty(LEDC_MODE, LEDC_CHANNEL, duty);
            ledc_update_duty(LEDC_MODE, LEDC_CHANNEL);
            vTaskDelay(2 / portTICK_PERIOD_MS);
        }

        // Fade out: max brightness to 0
        for (int duty = 8191; duty >= 0; duty -= 5)
        {
            ledc_set_duty(LEDC_MODE, LEDC_CHANNEL, duty);
            ledc_update_duty(LEDC_MODE, LEDC_CHANNEL);
            vTaskDelay(2 / portTICK_PERIOD_MS);
        }
    }
}

void app_main(void)
{
    printf("ESP32 Breathing LED Demo\n");
    printf("LED GPIO: %d\n", LED_GPIO);

    // Start breathing LED task
    xTaskCreate(breathing_led_task, "breathing_led", 2048, NULL, 5, NULL);
}

5、编译、调试和学习

有了代码,就可以编译、下载和调试了。这是最基础的。代码不能编译,或者编译出错,代码的价值就很低了。等确认好效果之后,就可以学习这份代码了。听上去这有点匪夷所思,但是目前ai code盛行的当下,这么做反而是效率最高的方式。

相关推荐
feifeigo1231 小时前
基于 STM32F103C8T6 的恒定水温控制系统
stm32·单片机·嵌入式硬件
JNX_SEMI1 小时前
EG2129带过流保护全桥驱动芯片:600V耐压双路比较器,硬件级过流保护让全桥设计更安全
单片机·嵌入式硬件
崇山峻岭之间1 小时前
单片机USmart实验
单片机·嵌入式硬件
SmartRadio1 小时前
STM32WLE5 Smart TDMA 完整工程(STOP2 低功耗终极版)-【10】
stm32·单片机·lora·tdma·低功耗自组网·smart tdma
国科安芯2 小时前
AS32S601芯片抗辐照性能试验验证与空间环境适应性分析
前端·分布式·单片机·嵌入式硬件·架构·risc-v·安全性测试
sxstj2 小时前
stm32最小板和uno I2C能直接连接吗?
stm32·单片机·嵌入式硬件
sxstj2 小时前
5伏的传感器能直接在stm32上使用吗?
stm32·单片机·嵌入式硬件
搁浅小泽2 小时前
SCM、MCU、SoC 三者区别与详解
单片机·嵌入式硬件
Silicore_Emma2 小时前
芯谷科技—D3815 40V/0.8A 高调光比LED恒流驱动器
单片机·消费电子·芯谷科技·智能家居系统·恒流驱动器·控制器电路·智能照明设备