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

相关推荐
KOAN凯擎小妹5 小时前
无源晶振为什么有串联谐振和并联谐振?MCU为什么使用并联晶体?
单片机·嵌入式硬件·晶振·元器件
茯苓gao6 小时前
嵌入式开发笔记:CAN与CAN FD完全指南——从帧格式差异到MCU选型实战
网络·笔记·stm32·嵌入式硬件·学习·汽车
论迹复利7 小时前
蓝牙 OTA 升级断连、升级失败底层链路问题定位
嵌入式硬件·安全·bt
振南的单片机世界8 小时前
3.5T静默分帧,CRC16校验:Modbus-RTU帧结构解析
arm开发·stm32·单片机·嵌入式硬件
LingzhiPi8 小时前
零知派ESP32--AS5600磁吸旋钮音量控制器
c++·单片机·嵌入式硬件
尼喃8 小时前
42V热拔插认证过压保护芯片:70V耐压+响应<1μs+可调OVP+SOT23-6
嵌入式硬件
0x3F(小茶)9 小时前
STM32 SPI的5种方向模式
c语言·stm32·单片机·嵌入式硬件
BSD_CGQ10 小时前
FSR压力传感器信号调理电路设计要点
单片机·嵌入式硬件·压力传感器·源头工厂·薄膜压力传感器
爱就是恒久忍耐10 小时前
CanFestival移植到STM32 F103芯片(基于HAL库)
stm32·单片机·嵌入式硬件
txh050711 小时前
如何使用示波器
嵌入式硬件·硬件工程