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盛行的当下,这么做反而是效率最高的方式。

相关推荐
AOI小白新手上路4 小时前
韦东山 3-5 I.MX6ULL 的 LED 编程 · 学习笔记
arm开发·笔记·单片机·学习·架构·硬件架构
测试学习test5 小时前
SPI读取W25Q64硬件驱动(HAL库)
数据库·stm32·嵌入式硬件·算法
xingzhemengyou15 小时前
STM32对函数进行CRC校验
stm32·单片机·嵌入式硬件
FPGA小徐5 小时前
STM32引脚详解:PC13-TAMPER-RTC 多功能复用引脚完全剖析(踩坑+配置+布线)
单片机·嵌入式硬件
M78佐菲5 小时前
ARM学习笔记(9)
linux·arm开发·笔记·嵌入式硬件·学习
铅笔小新z5 小时前
【stm32】中断与异常
stm32·单片机·嵌入式硬件
沐欣工作室_lvyiyi6 小时前
无线遥控电动阀门开关模块设计(论文+源码)
单片机·无线遥控
番茄灭世神6 小时前
PN学堂GD32教程第11篇——I2C与EEPROM
c语言·stm32·单片机·嵌入式·gd32
阿钱真强道7 小时前
27 嵌入式操作系统 | C 网关:串口 ⇄ UDP 转发(先用 UDP 当上位机替身)
c语言·单片机·网关·udp·uloop
沐欣工作室_lvyiyi7 小时前
基于STM32的便捷式智能气象仪设计(论文+源码)
stm32·单片机·嵌入式硬件·单片机毕业设计·电子信息工程毕业设计·河北工程技术学院·廊坊师范学院