这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 换取逻辑分析仪+ESP32C6+【ESP-IDF】GPIO的使用

共3条 1/1 1 跳转至

换取逻辑分析仪+ESP32C6+【ESP-IDF】GPIO的使用

菜鸟
2024-10-06 23:11:25     打赏

简介

前一段时间买了一块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 功能。


ESP32-C6-DevKitC-1


引脚定义如下:


image.png

image.png


ESP - IDF 的安装

我这边使用的安装方式是vs code + esp-idf的插件的方式进行安装的,我们只需要在插件中搜索ESP-IDF即可, 如果你已经在本地安装过ESP-idf的话,那么你可以直接使用本地的ESP-IDF环境即可,只需要在插件中指向你本地的安装目录。 第二种方式则是下载最新的ESP-IDF 到你的电脑上。(插件自动下载)


image.png


创建项目


在插件中选择new project Wizard, 然后输入project的名称, 并且选中开发板的芯片,以及选择开发板的串口(可以等会选)

image.png


接下来点击Choose template 来选择项目的模板


image.png


下面选中的红色方框功能分别为: 选择串口, 选择芯片, 构建, 下载, 监视。 我们可以快速的使用这个工具来构建或者烧录我们的项目到开发板中


image.png


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做的非常好, 注释都加的十分清楚。


image.png


代码写完之后,我们可以点击工具栏的扳手图标进行项目的构建。构建完成之后控制台还会打印出内存的占用情况。


image.png


点击闪电图标进行烧录


image.png


烧录完成,此时便可以根据GPIO 0 的状态来切换GPIO 1 (按下按钮的时候LED点亮, 再次按下的话LED熄灭)


d6ec92d092d6ef5fc50445b42f9c8ba.jpg



总结


本章节我们学习了如何使用ESP-idf中GPIO的使用,比如输入和输出, 那么在下一个章节里我们将看下如何使用ESP-32-C6的中断





专家
2024-10-07 09:12:59     打赏
2楼

谢谢分享


院士
2024-10-23 14:20:38     打赏
3楼

这个入门指导好是详细啊

赞一下


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]