简介
前一段时间买了一块ESP32-C6 dev kit, 然后在Arduino IDE上跑了简单的功能验证,但是实际上乐鑫的ESP-IDF开发环境更加适合ESP32-C6, 由于之前并没有系列的学习过ESP-IDF, 因此开个贴子,准备系列的更新ESP-IDF的使用教程。
正文
ESP32-C6-DevKitC-1 是一款入门级开发板,使用带有 8 MB SPI flash 的通用型模组 ESP32-C6-WROOM-1(U)。该款开发板具备完整的 Wi-Fi、低功耗蓝牙、Zigbee 及 Thread 功能。
引脚定义如下:
ESP - IDF 的安装
我这边使用的安装方式是vs code + esp-idf的插件的方式进行安装的,我们只需要在插件中搜索ESP-IDF即可, 如果你已经在本地安装过ESP-idf的话,那么你可以直接使用本地的ESP-IDF环境即可,只需要在插件中指向你本地的安装目录。 第二种方式则是下载最新的ESP-IDF 到你的电脑上。(插件自动下载)
创建项目
在插件中选择new project Wizard, 然后输入project的名称, 并且选中开发板的芯片,以及选择开发板的串口(可以等会选)
接下来点击Choose template 来选择项目的模板
下面选中的红色方框功能分别为: 选择串口, 选择芯片, 构建, 下载, 监视。 我们可以快速的使用这个工具来构建或者烧录我们的项目到开发板中
GPIO 输入和输出
我们简单的写一个GPIO的输入和输出的功能, 在我们使用GPIO的时候,需要使用driver/gpio.h的库文件。
#include <stdio.h> #include <inttypes.h> #include "sdkconfig.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "esp_chip_info.h" #include "esp_flash.h" #include "esp_system.h" #include "driver/gpio.h" #define DEBOUNCE_DELAY_MS 50 // 消抖延迟(毫秒) bool debounce_button(gpio_num_t gpio_num) { // 读取初始按键状态 if (!gpio_get_level(gpio_num)) { vTaskDelay(DEBOUNCE_DELAY_MS / portTICK_PERIOD_MS); // 消抖延迟 // 再次读取按键状态确认是否稳定 if (!gpio_get_level(gpio_num)) { return true; // 按键按下 } } return false; // 按键未按下 } void app_main(void) { bool index = 0; // 配置 GPIO 1 作为输出 gpio_config_t gpio; gpio.mode = GPIO_MODE_OUTPUT; gpio.pull_up_en = GPIO_PULLUP_ENABLE; gpio.pin_bit_mask = (1ULL << GPIO_NUM_1); // 使用 GPIO 1 gpio.pull_down_en = GPIO_PULLDOWN_DISABLE; gpio_config(&gpio); gpio_intr_disable(GPIO_NUM_1); // 配置 GPIO 0 作为输入 gpio.mode = GPIO_MODE_INPUT; gpio.pin_bit_mask = (1ULL << GPIO_NUM_0); // 使用 GPIO 0 gpio_set_intr_type(GPIO_NUM_0, GPIO_INTR_DISABLE); // 禁用中断 gpio_config(&gpio); while (1) { if (debounce_button(GPIO_NUM_0)) // 检查按键是否被按下 { index = !index; // 切换状态 gpio_set_level(GPIO_NUM_1, index); // 设置 GPIO 1 输出 } vTaskDelay(50 / portTICK_PERIOD_MS); // 延迟,防止过于频繁的切换 } }
乐鑫的SDK做的非常好, 注释都加的十分清楚。
代码写完之后,我们可以点击工具栏的扳手图标进行项目的构建。构建完成之后控制台还会打印出内存的占用情况。
点击闪电图标进行烧录
烧录完成,此时便可以根据GPIO 0 的状态来切换GPIO 1 (按下按钮的时候LED点亮, 再次按下的话LED熄灭)
总结
本章节我们学习了如何使用ESP-idf中GPIO的使用,比如输入和输出, 那么在下一个章节里我们将看下如何使用ESP-32-C6的中断