[ESP32]点亮LED灯
ESP32C3点亮LED灯
准备
开发板:合宙ESP32C3开发板,USB数据线,VSCode+ESP32插件
代码
通过开发板的原理图可知两个LED分别连接在IO12和IO13引脚上:
相关库函数
参考自ESP32官网:API手册
引入头文件:components/driver/include/driver/gpio.h
1. GPIO模式设置
esp_err_t gpio_config(constgpio_config_t *pGPIOConfig)
参数是个结构体指针,拥有四个成员:
uint64_t pin_bit_mask
: 使用位掩码进行设置,每个位映射到一个 GPIO
gpio_mode_tmode
: 设置输入/输出模式
gpio_pullup_tpull_up_en
: 上拉使能
gpio_pulldown_tpull_down_en
: 下拉使能
gpio_int_type_tintr_type
: 中断类型
2. GPIO重置
esp_err_t gpio_reset_pin(gpio_num_tgpio_num)
将一个IO口重置为默认状态(选择GPIO功能,启用上拉并禁用输入和输出)
3. 输出电平
esp_err_t gpio_set_level(gpio_num_tgpio_num, uint32_t level)
4. 设置方向
esp_err_tgpio_set_direction(gpio_num_tgpio_num, gpio_mode_tmode)
方向选择为GPIO_MODE_OUTPUT
或GPIO_MODE_INPUT
整体代码
LED闪烁代码修改自官方例程:blink
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "esp_log.h"
#include "led_strip.h"
#include "sdkconfig.h"static const char *TAG = "example";/* 定义LED引脚 */
#define BLINK_GPIO_1 12
#define BLINK_GPIO_2 13static uint8_t s_led_state = 0;static void blink_led(void)
{/* Set the GPIO level according to the state (LOW or HIGH)*/gpio_set_level(BLINK_GPIO_1, s_led_state);gpio_set_level(BLINK_GPIO_2, s_led_state);
}static void configure_led(void)
{ESP_LOGI(TAG, "Example configured to blink GPIO LED!");gpio_reset_pin(BLINK_GPIO_1);gpio_reset_pin(BLINK_GPIO_2);/* Set the GPIO as a push/pull output */gpio_set_direction(BLINK_GPIO_1, GPIO_MODE_OUTPUT);gpio_set_direction(BLINK_GPIO_2, GPIO_MODE_OUTPUT);
}void app_main(void)
{/* Configure the peripheral according to the LED type */configure_led();while (1) {ESP_LOGI(TAG, "Turning the LED %s!", s_led_state == true ? "ON" : "OFF");blink_led();/* Toggle the LED state */s_led_state = !s_led_state;vTaskDelay(CONFIG_BLINK_PERIOD / portTICK_PERIOD_MS);}
}
下载至开发板后可看到两个LED开始闪烁。
呼吸灯
相关库函数
后续补充
整体代码
设置两个任务,一个任务让LED1闪烁,一个任务让LED2呼吸。
#include <stdio.h>
#include "driver/gpio.h"
#include "driver/ledc.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"#define LED1_PIN 12
#define LED2_PIN 13TaskHandle_t xHandle_task_led = NULL;/*** @brief led_pwm task**/
void app_led_pwm(void *pvParameters)
{/* setup */ledc_timer_config_t ledc_timer = {.speed_mode = LEDC_LOW_SPEED_MODE,.timer_num = LEDC_TIMER_0,.duty_resolution = LEDC_TIMER_13_BIT,.freq_hz = 5000,.clk_cfg = LEDC_AUTO_CLK,};ledc_channel_config_t ledc_channel_0 = {.channel = LEDC_CHANNEL_0,.duty = 0,.gpio_num = LED2_PIN,.speed_mode = LEDC_LOW_SPEED_MODE,.hpoint = 0,.timer_sel = LEDC_TIMER_0,};ledc_timer_config(&ledc_timer);ledc_channel_config(&ledc_channel_0);/* endless */for (;;){for (int i = 0; i < 8191; i += 10){ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, i);ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0);vTaskDelay(pdMS_TO_TICKS(10));}for (int i = 8191; i > 0; i -= 10){ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, i);ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0);vTaskDelay(pdMS_TO_TICKS(10));}vTaskDelay(pdMS_TO_TICKS(500));}
}/*** @brief main task**/
void app_main(void)
{xTaskCreatePinnedToCore(app_led_pwm, "task-led_pwm", 2048, NULL, 1, &xHandle_task_led, tskNO_AFFINITY);gpio_config_t led = {.pin_bit_mask = 1 << LED1_PIN,.mode = GPIO_MODE_OUTPUT,.pull_up_en = GPIO_PULLUP_DISABLE,.pull_down_en = GPIO_PULLDOWN_DISABLE,.intr_type = GPIO_INTR_DISABLE,};gpio_config(&led);int state = 0;for (;;){state = !state;gpio_set_level(LED1_PIN, state);vTaskDelay(pdMS_TO_TICKS(500));}
}
[ESP32]点亮LED灯相关推荐
- 和12岁小同志搞创客开发:手撕代码,点亮LED灯
目录 1.Arduino编程架构 2.点亮LED灯 机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_381069 ...
- STM32F 103C8T6开发板 点亮LED灯
每组IO口含下面7个寄存器.7个寄存器可以控制一组GPIO的16个IO口. GPIOx_CRL:端口配置低寄存器 GPIOx_CRH:端口配置高寄存器 GPIOx_IDR:端口输入寄存器 GPIOx_ ...
- STC89C52单片机 点亮LED灯
点亮LED灯 一.什么是LED LED全称为半导体发光二极管,采用半导体材料制成的,以直接将电能转化为光能,电号转换成光信号的发光器件:其特点是功耗低.高亮度.色彩艳丽.坑振动.寿命长(正常发光8-1 ...
- Raspberry PI 系列 —— 裸机点亮LED灯
Raspberry PI 系列 -- 裸机点亮LED灯 背景 近期刚买了Raspberry PI B+,配置执行了官方提供的Raspbian系统,折腾了一周Linux系统,感觉没啥意思,于是就试着想了 ...
- 蓝桥杯小白系列之汇编点亮led灯
蓝桥杯小白系列之汇编点亮led灯 1.源代码 2.逐条分析 (1)ORG 0000H (2)START: 伪指令,编译器可识别,单片机不可识别,可以随便起. (3)蜂鸣器设置 蓝桥板插电以后蜂鸣器常会 ...
- 【STM32】STM32CubeMX教程二--基本使用(新建工程点亮LED灯)
前言 在配置好CubeMX之后,就是新建工程的开始了,那么首先我们需要一些准备,本片博客我们会很详细的介绍STM32CubeMx的基本使用和如何创建一个新的工程并且点亮LED灯 面向初学者 如果 ...
- STM8学习笔记---点亮LED灯
对单片机操作时一般有三个步骤,1.系统时钟选择.2.单片机外设初始化.3主程序编写. 同样要点亮LED灯时,也要按照这个步骤来. 首先选择系统时钟,打开STM8S中文参考手册,找到时钟寄存器 可以看到 ...
- 51单片机点亮LED灯以及实现2盏LED灯的交替闪烁
点亮LED灯,根据单片机原理图 将LED灯1和LED灯2介入单片机的口设为低电平即可 代码如下: #include "reg52.h" sbit led1= P3^7; void ...
- 【STM32学习笔记-点亮LED灯】
STM32学习笔记-点亮LED灯 文章目录 STM32学习笔记-点亮LED灯 一.原理图分析 二.代码分析 1.mian函数 2.led.c函数 3.led.h函数 4.函数文件整理 5.LED_In ...
最新文章
- App设计灵感之十二组精美的数据图表展示App设计案例
- 解决del找不到关键词‘province‘的问题和思想
- 牛客 - 共鸣问题(贪心+思维)
- 轻量级锁_并发编程实战05:锁的状态
- Apollo进阶课程㊱丨Apollo ROS深入介绍
- 换行符javajava去除字符串中的空格、回车、换行符、制表符
- python 之路,200行Python代码写了个打飞机游戏!
- KindEditor 插件API使用说明
- sc.textFile()默认读取本地系统文件还是HDFS系统文件?
- 快速排序算法_经常用到的的排序(快速排序和归并排序)简单的计算机算法学习...
- MSP430F415IRTDR
- xp系统启动时0x0000007B(0XF799A524,0XC0000034,0X00000000,0X00000000)错误
- onedrive电脑手机不同步_关于OneDrive,移动端同步以及显示不及时的问题。
- 怎样将pdf压缩得很小?如何把pdf压缩到最小?怎么把pdf压缩到最小?如何把pdf文档压缩变小?怎么将pdf文档压缩至更小?怎么把pdf压缩到最小方法软件网站有哪些?
- Java中for循环的用法(亲测)
- Javascript 对象不支持此属性或方法,Object doesn’t support this property or method
- 替换运动学插件TRAC-IK
- 《用Chrome学编程》真心话大冒险
- c语言测量身体健康的程序,c++ c语言 学生健康管理系统.doc
- python在水文领域中的应用_python在水利工程或者水文方向上有什么案例可以学习一下么?或者还要学什么库。?...
热门文章
- win xp 读写 mac 的时间机器移动硬盘
- 雷神推出行业首款浸没式水冷游戏主机 官宣LGD战队合作
- 计算机网络新手实操,嗜血印新手操作入门指南 游戏基础玩法攻略介绍
- 数据中心机柜PDU应该怎么选?
- Dell T110 S100如何创建磁盘阵列
- list_for_each,list_for_each_entry和list_for_each_entry_safe
- MSF小练习——MSF的arp_sweep主机存活扫描
- html中购物车小球飞入的效果,vue项目中css3实现加入购物车小球抛物线飞入动画效果...
- 十六进制转换成十进制的方法
- NO.3.2-图片处理