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

相关推荐
✎ ﹏梦醒͜ღ҉繁华落℘21 小时前
单片机基础知识---stm32单片机的优先级
stm32·单片机·mongodb
u152109648491 天前
S.S.Audio PRO A2音频隔离器
嵌入式硬件·音视频·实时音视频·视频编解码·视频
zd8451015001 天前
RS485 总线详解
单片机·嵌入式硬件
半条-咸鱼1 天前
【STM32】I2C协议原理、HAL读写与OLED显示操作
嵌入式硬件·c·信息与通信
wohoo_wangzi1 天前
苏州晟雅泰电子:关于W25Q128JVSIQ这个芯片物料的参数,规格及应用领域
嵌入式硬件
✎ ﹏梦醒͜ღ҉繁华落℘1 天前
编程基础 --高内聚,低耦合
c语言·单片机
科芯创展1 天前
1A,1MHz,30VIN,XZ4115,降压恒流LED驱动芯片
单片机·嵌入式硬件
集芯微电科技有限公司1 天前
四通道2A输出集成功率电感降压模块专为紧凑型方案设计
人工智能·单片机·嵌入式硬件·生成对抗网络·计算机外设
踏着七彩祥云的小丑1 天前
嵌入式测试学习第 37 天:异常场景测试:断电、拔插、干扰、非法指令
单片机·嵌入式硬件·学习
望眼欲穿的程序猿1 天前
读取芯片内部温度传感器
嵌入式硬件·rust