)
【 声明版权所有欢迎转载请勿用于商业用途。 联系信箱feixiaoxing 163.com】pwm其实用的还是挺多的尤其是很多和电机相关的地方都是和pwm搭边的。舵机的话就是发pwm控制不同的空占比可以调节不同的旋转角度。而如果换成普通电机中间接好驱动电路的话不同的pwm方波那么电机就以不同的速度驱动起来。这些都是pwm的用途。那么不是电机的场景我们就可以换成led灯。根据不同的空占比就可以制造出呼吸灯的效果。这也是pwm可以产生的另外一个效果。1、准备gpio这个gpioesp32上面很多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盛行的当下这么做反而是效率最高的方式。