开发板购买链接
https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.50111deb2Ij1As&ft=t&id=626366733674
开发板简介
开发环境搭建 windows
源码示例:
0_Hello Bug (ESP_LOGX与printf) 工程模板/打印调试输出
1_LED LED亮灭控制
2_LED_Task 使用任务方式控制LED
3_LEDC_PWM 使用LEDC来控制LED实现呼吸灯效果
4_ADC_LightR 使用ADC读取光敏电阻实现光照传感
5_KEY_Short_Long 按钮长按短按实现
6_TouchPad_Interrupt 电容触摸中断实现
7_WS2812_RMT RGB_LED彩虹变色示例
8_DHT11_RMT 使用RMT实现读取DHT11温湿度传感器
9_SPI_SDCard 使用SPI总线实现TF卡文件系统示例
10_IIC_ADXL345 使用IIC总线实现读取ADXL345角度加速度传感器
11_IIC_AT24C02 使用IIC总线实现小容量数据储存测试
12_IR_Rev_RMT 使用RMT实现红外遥控接收扫码(NEC)
13_IR_Send_RMT 使用RMT实现红外数据发送(NEC)
14_WIFI_Scan 附近WIFI信号扫描示例
15_WIFI_AP 创建软AP示例
16_WIFI_AP_TCP_Server 在软AP模式下实现TCP服务端
17_WIFI_AP_TCP_Client 在软AP模式下实现TCP客户端
18_WIFI_AP_UDP 在软AP模式下实现UDP通讯
19_WIFI_STA 创建STA站模
20_WIFI_STA_TCP_Server 在站模式STA下实现TCP服务端
21_WIFI_STA_TCP_Client 在站模式STA下实现TCP客户端
22_WIFI_STA_UDP 在站模式STA下实现UDP通讯
23_LVGL_Test LVGL图形库简单示例
一、硬件设计/原理
查看开发板原理图,可以看到开发板上有两个指示灯,一个是电源指示灯,直接3.3V到地,不受程序控制,APP_LED接在ESP32-WROOM-32E集成模拟的GPIO4脚上,看原理图可得知IO4拉高LED即灭掉,到地则亮起
二、程序设计
LEDC是ESP封装好的LED控制器使用的是PWM定时器实现
LED Control (LEDC)模块主要是为了调节LED的亮度而设计的,而且它也可以用于产生其他用途的PWM信号。它有16个通道,可以产生独立的波形,可以用来驱动例如变色RGB灯,呼吸灯,电机调速等器件
先引用必要头文件
// LEDC_PWM Example
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/ledc.h"
#include "esp_err.h"
#include <esp_log.h>
宏定义
#define LEDC_TOTAL_NUM 1 // LED个数,可以多个
#define LEDC_HS_TIMER LEDC_TIMER_0 // 使用哪个定时器0-3
#define LEDC_HS_MODE LEDC_HIGH_SPEED_MODE// 模式
#define LEDC_HS_CH0_GPIO 4 // LED控制器通道对应GPIO
#define LEDC_HS_CH0_CHANNEL LEDC_CHANNEL_0 // LED控制器通道号
#define LEDC_TEST_DUTY 8000 // 渐变的变大最终目标占空比
#define LEDC_TEST_FADE_TIME 3000 // 变化时长
主函数
void app_main()
{
int ch;
ESP_LOGI(TAG, "APP Start......");
ledc_timer_config_t ledc_timer = {
.duty_resolution = LEDC_TIMER_13_BIT, // PWM占空比分辨率
.freq_hz = 5000, // PWM信号频率
.speed_mode = LEDC_HS_MODE, // 定时器模式
.timer_num = LEDC_HS_TIMER // 定时器序号
};
// 配置定时器0的高速通道
ledc_timer_config(&ledc_timer);
ledc_channel_config_t ledc_channel[LEDC_TOTAL_NUM] = {
{
.channel = LEDC_HS_CH0_CHANNEL,
.duty = 0,
.gpio_num = LEDC_HS_CH0_GPIO,
.speed_mode = LEDC_HS_MODE,
.timer_sel = LEDC_HS_TIMER
},
};
// 配置LED控制器
for (ch = 0; ch < LEDC_TOTAL_NUM; ch++) {
ledc_channel_config(&ledc_channel[ch]);
}
// 初始化淡入淡出服务
ledc_fade_func_install(0); // 注册LEDC服务,在调用前使用,参数是作为是否允许中断
while (1) {
ESP_LOGI(TAG,"PWM to max %d\n", LEDC_TEST_DUTY);
// 循环渐变每个LED,这里只有一个
for (ch = 0; ch < LEDC_TOTAL_NUM; ch++) {
// 配置LEDC定时器
ledc_set_fade_with_time(
ledc_channel[ch].speed_mode,
ledc_channel[ch].channel,
LEDC_TEST_DUTY,
LEDC_TEST_FADE_TIME);
// 开始渐变
ledc_fade_start(
ledc_channel[ch].speed_mode,
ledc_channel[ch].channel,
LEDC_FADE_NO_WAIT);
}
// 等待渐变完成
vTaskDelay(LEDC_TEST_FADE_TIME / portTICK_PERIOD_MS);
ESP_LOGI(TAG,"PWM to min 0\n");
// 循环渐变每个LED,这里只有一个
for (ch = 0; ch < LEDC_TOTAL_NUM; ch++) {
// 配置LEDC定时器
ledc_set_fade_with_time(
ledc_channel[ch].speed_mode,
ledc_channel[ch].channel,
0,
LEDC_TEST_FADE_TIME);
// 开始渐变
ledc_fade_start(
ledc_channel[ch].speed_mode,
ledc_channel[ch].channel,
LEDC_FADE_NO_WAIT);
}
// 等待渐变完成
vTaskDelay(LEDC_TEST_FADE_TIME / portTICK_PERIOD_MS);
}
}
三、下载测试
打开ESP-IDF Command Prompt
cd命令进入此工程目录
cd F:\ESP32_DevBoard_File\2_LED_Task
查看电脑设备管理器中开发板的串口号
执行idf.py -p COM9 flash monitor从串口9下载并运行打开口显示设备调试信息 Ctrl+c退出运行
可以看到开发板的APP_LED从亮到灭再从灭到亮开始渐变。
来源:oschina
链接:https://my.oschina.net/u/4261790/blog/4556585