普中esp32开发板点灯(基于ESP-IDF)

前言:

​ 本人在学习ESP32的时候发现网上使用普中开发板的教程很少且都是基于micropytion或者arduio的,但是它们的语法都过于简单,且难以了解底层,这对我来说是难以接受的,于是我就打算写一个博客以方便以后自己复盘和增进理解这些知识。

一、ESP32简介

​ ESP32 是由乐鑫科技推出的一类MCU,它有很多型号,有基础系列的ESP32,高性能的S系列的,低功耗的C系列等处理性能、外设丰富度各不相同。而普中开发板使用的则是基础系列的ESP32-WROOM-32,相比STM32它cpu是基于Xtensa LX6的主频达240MHz,而且还有2个。这使得它可以并行处理多个任务,比如一个核心处理wifi通信,另一个处理传感器数据。而且还有wifi和蓝牙功能且内存和flash比STM32大很多,具体可以查询ESP32的数据手册。

ESP32自 发布以来,它凭借高性价比、丰富的无线功能和灵活的开发特性,广泛应用于物联网(IoT)、智能家居、可穿戴设备、工业控制等领域。

二、普中ESP32开发板简介

​ 如下图,我们从普中的开发板资料的开发板攻略里找到了这些比较重要的东西,第一张是GPIO的使用说明,指出了哪些GPIO不能使用,哪些GPIO只能作为输入引脚,绿色的是可以随意接做输入输出引脚的。

​ 如下图是对除了核心esp32开发板外的扩展版,包含了一些额外的外设,如LED灯、按键、数码管、WS2812等,具体怎么接线后面可以看普中给的底板原理图。

在这里插入图片描述

三、新建工程及点灯。

​ 目前本人搭建好了vscode加ESP-IDF扩展环境,网上也有很多搭建vscode和idf搭建ESP32开发环境的教程,这里不再赘述。

​ 首先,我们到vscode里,配置好环境后打开vscode的esp-idf插件如下图,点击Quick actions里的New Project新建工程。
在这里插入图片描述

​ 点击后命令面板会弹出这一个选项点击。

在这里插入图片描述

​ 然后填写工程名如led_test,工程目录,第三个选项选择ESP32(我这里用的是ESP32-WROOM-32所以选择esp32,如果是其他芯片选择其他的),之后点击右下角的按钮选择工程模板。

在这里插入图片描述

​ 这里官方提供了很多外设的使用示例代码模板,我们可以直接拿来使用。然后我们这里则选择空的模板(main.c没有任何代码),如图这样选择,然后点击右上角的蓝色按钮使用这个空白工程模板然后右下角会提示新建完成,按打开工程即可,这样就新建完成了。

在这里插入图片描述

打开空白工程后将是这样的:

在这里插入图片描述
接下来就是看ESP32的GPIO如何操作和查看开发板的原理图。我们到普中官方资料里找到底板原理图。

在这里插入图片描述

可以看到一一共有8个LED的一端分别共地另外一端接入一组排针,所以我们只要把ESP32的某个IO口(有些IO口不能使用前面提到过)连到这组排针J1的某一个,然后在代码里控制该GPIO输出高电平就可以点亮LED了,反之熄灭。如下图GPIO15接到了J1的第一个,对应LED1。

在这里插入图片描述

然后回到我们vscode的main.c里,编写这样的代码,这里初始化GPIO的方式和STM32的很像。然后注意我们这里引入的头文件driver,它是官方的一个外设的库,它下面包含了gpio,iic,spi这些api,而gpio是driver下面之一。我们要使用的话是要去了解官方的api的。我们可以转到gpio.h里面看看有什么函数可以使用。里面有gpio_config这个结构体的定义,还有类似gpio_set_level()这样的各种api。

#include <stdio.h>
#include "driver/gpio.h"

#define LED_GPIO_PROT GPIO_NUM_15

void gpio_init(void)
{
    gpio_config_t gpio_init_struct = {0};

    //配置IO为通用IO
    esp_rom_gpio_pad_select_gpio(LED_GPIO_PROT);

    gpio_init_struct.intr_type = GPIO_INTR_DISABLE;             //不使用中断
    gpio_init_struct.mode = GPIO_MODE_OUTPUT;                   //输出模式
    gpio_init_struct.pull_up_en = GPIO_PULLUP_ENABLE;           //使能上拉模式
    gpio_init_struct.pull_down_en = GPIO_PULLDOWN_DISABLE;      //失能下拉模式
    gpio_init_struct.pin_bit_mask = (1ULL << LED_GPIO_PROT);;        //使用GPIO15输出寄存器
    //将以上参数配置到引脚
    gpio_config( &gpio_init_struct);

    //设置引脚输出高电平,默认不让LED亮
    gpio_set_level(LED_GPIO_PROT, 0);
}

void app_main(void)
{
    gpio_init();
    gpio_set_level(LED_GPIO_PROT,1);
    printf("hello world!");
}

好,回到vscode,我们找到底下的栏目,看看有什么东西。这里的星星要选择UART,这样我们的ESP32系统板插上数据线就可以下载程序和在终端进行串口打印数据了。然后往右依次是选择数据线所连端口和芯片,然后就是那个扳手是用来编译程序的,我们按下它,第一次编译会特别慢。

在这里插入图片描述

编译好后终端将是这样。

在这里插入图片描述

然后点击底部栏目的闪电进行下载(看到终端如下提示connecting…要马上按住ESP32的BOOT按键和RST按键,然后过大概2秒再松开RST才可以下载进去,没有这个步骤请忽略)。就可以通过串口下载代码到ESP32上。

在这里插入图片描述

然后下载好了我们就可以看到GPIO15通过杜邦线连接的LED亮起了,终端打印hello world!

在这里插入图片描述

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐