文章目录
前言
点亮LED是各类MCU开发入门的第一步。本文将通过【ESP32点亮LED】灯这个小实验来入门使用ESP-IDE+VScode开发环境对ESP32的开发,并熟悉ESP32开发过程中使用到的相关CLI命令,了解GPIO配置、操作的相关函数。
目标
- 熟悉ESP-IDF+VScode开发环境
- 了解ESP-IDF工程文件结构
- 学习使用常用的
idf.py
命令 - 创建一个LED的工程,并编译实现LED的点亮
一、ESP-IDF+VScode开发环境介绍
针对ESP32的开发环境有很多中选择,包括但不限于:Arduino IDE、ESP-IDF IDE、VScode+ESP-IDF插件,本系列笔记所使用开发环境的均为VScode+ESP-IDF插件,因此本文详细介绍此开发环境。
总体界面介绍
整个开发环境主要分为四大部分:文件管理区、代码编辑区、ESP-IDF终端区、ESP-IDF插件工具区,对于熟悉VScode的开发者来说,这几个分区应该都很熟悉,但需要特别注意ESP-IDF终端区和ESP-IDF插件工具区,尤其是ESP-IDF终端区,每次进行开发之前,应首先确保所打开的终端是
ESP-IDF Terminal
从终端进入当前工程文件夹,否则
idf.py
相关命令可能会无法运行,
ESP-IDF Terminal
可以从ESP-IDF插件工具区打开。
ESP-IDF插件工具区介绍
这些工具都是一些
idf.py
命令的可视化UI形式,通过单击即可运行相关的
idf.py
命令,对于不熟悉ESP-IDF CLI指令的开发者来说比较友好,下面将从左往右依次介绍。
图标idf.py命令作用ESP-IDF Select port to use
idf.py -p PORT
设置ESP连接端口,只需设置一次即可全局设置,若换端口可再使用此命令更新端口。例:
idf.py -p COM5
ESP-IDF Set espressif device target
idf.py set-target
设置编译的目标芯片,后接芯片类型,例如:
idf.py set-target esp32
ESP-IDF Current project
cd PROJECT_PATH
选择工程文件目录,可使用Linux
cd
命令ESP-IDF SDK Configuration Edit
idf.py menuconfig
打开项目配置窗口,进行一些项目配置ESP-IDF Full clean
idf.py fullclean
清除所有编译文件ESP-IDF Build project
idf.py build
编译烧录工程ESP-IDF Select flash method
——————
选择烧录方法:JTAG/UART/DFUESP-IDF Flash device
idf.py flash
烧录程序ESP-IDF Monitor device
idf.py monitor
打开IDF监视器,用于收发目标设备串口的串行数据,同时兼具IDF的其他特性。(
Ctrl + ]
可退出IDF监视器)ESP-IDF Build, Flash and Monitor
idf.py -p PORT flash monitor
组合命令,编译、烧录并打开IDF监视器ESP-IDF Open ESP-IDF Terminal
——————
打开ESP-IDF终端ESP-IDF Execute custom task
Ctrl + C
退出当前任务
二、ESP-IDF工程文件结构
1.官方通用结构
一个通用工程目录结构树如下:
- myProject/- CMakeLists.txt
- sdkconfig
- components/- component1/- CMakeLists.txt
- Kconfig
- src1.c
- component2/- CMakeLists.txt
- Kconfig
- src1.c
- include/- component2.h
- main/- CMakeLists.txt
- src1.c
- src2.c
- build/
2.模块化组件结构
简单的LED工程目录结构如下:
- LED/- CMakeLists.txt # 顶层项目 CMakeLists.txt 文件,这是 CMake 用于学习如何构建项目的主要文件,可以在这个文件中设置项目全局的 CMake 变量。
- sdkconfig # 项目配置文件,执行 idf.py menuconfig 时会创建或更新此文件,文件中保存了项目中所有组件(包括 ESP-IDF 本身)的配置信息。
- README.md
- components/ # 自定义组件总目录
- led/ # 自定义组件目录,其命名通常为某个驱动硬件名
- CMakeLists.txt # 自定义组件的 CMakeLists.txt 文件,用来添加本组件所用的头文件路径等。
- led.c # 自定义组件源文件,用来编写相关硬件的初始化函数、驱动函数等。
- include/ # 自定义组件头文件目录,用来存放自定义组件源文件的头文件。
- led.h # 自定义组件头文件。
- main/ # 项目主函数目录
- CMakeLists.txt # 主函数目录 CMakeLists.txt 文件。
- main.c # 项目主函数。
- build/ # 编译文件存放目录,若没有创建此目录,执行 idf.py build 命令时会自动生成此文件夹。
小编有STM32开发经验,熟悉STM32的开发模式,习惯模块化编程,将所有的硬件外设都单独编写组件,然后将所有组件存放于自定义组件目录,这种方式方之后的便组件移植,无论在同平台还是不同平台,都给移植带来巨大的便利。此篇文章将会着重讲解自定义组件模块化的开发方式,并对比着官方的配置方式,给读者展现多种开发方式,供读者选择。
三、常用的
idf.py
命令
一般情况下,在使用终端开发时常用的命令主要有
idf.py set-target <target> 、idf.py build 、idf.py -p PORT 、idf.py flash 、idf.py monitor 、idf.py fullclean
1.
idf.py set-target <target>
@ 功能:编译前选择编译代码的目标芯片,可使用 idf.py --list-targets 命令列出所有可使用的芯片类型。
@ 示例:idf.py set-target esp32
2.
idf.py build
@ 功能:构建当前目录下的工程。
@ 示例:idf.py build
3.
idf.py -p PORT
@ 功能:设置ESP端口。
@ 示例:idf.py -p COM5
4.
idf.py flash
@ 功能:烧录工程,在编译前使用此命令可自动编译后自动烧录,也可配合 -p 命令,选择端口,然后执行编译和烧录。
@ 示例:idf.py flash 或者 idf.py flash -p COM5
5.
idf.py monitor
@ 功能:运行串口监视器
@ 示例:idf.py monitor
6.
idf.py fullclean
@ 功能:删除所有build子目录内容,包括CMake配置输出,请谨慎使用。
@ 示例:idf.py fullclean
重要提示: 多个
idf.py
命令可以在同一行命令中组合使用。例如:
idf.py -p COM5 clean flash monitor
可以清除源代码树、编译工程、并将其烧录到目标芯片,随后运行串行监视器。
在同一调用中,多个idf.py
命令的顺序并不重要,它们将自动以正确的程序执行,以使全部操作生效(例如先构建后烧录、先擦除后烧录)。
四、工程实战——点灯
1、新建空白工程
在VSCode中使用
Ctrl + Shift + P
命令调出命令面板,然后搜索
ESP-IDF:新建项目
如图:
然后设置项目名字、项目保存地址、开发板类型等,设置好后点击【choose template】选择模板,然后选择空模板,点击创建模板。
创建完成后如图:
再添加自定义组见,依然使用
Ctrl + Shift + P
命令调出命令面板,然后搜索
ESP-IDF:创建新的ESP-IDF组件
如图:
2、相关配置、代码
【配置CMakeLists】
首先配置自定义组见的CMake文件:
components->led->CMakeLists.txt
完整配置内容如下:
file(TO_CMAKE_PATH "$ENV{IDF_PATH}" IDF_PATH) # 将Windows下ESP-IDF的路径转化CMAKE路径
idf_component_register(SRCS "led.c"
INCLUDE_DIRS "include"
# 添加官方gpio组件
"${IDF_PATH}/components/driver/gpio/include")
【配置自定义组见头文件】
components->led->include->led.h
对于学过32单片机编程的,可按照自己的习惯编写,对于没有单片机开发经验的,再此提供一个简单的例子
#ifndef__LED_H#define__LED_H#include"driver/gpio.h"voidled_init(void);voidled_on(void);voidled_off(void);#endif
【编写自定义组见驱动】
components->led->led.c
和头文件类似,可根据习惯编写。
#include<stdio.h>#include"led.h"#defineLED_PIN2voidled_init(void){gpio_config_t led_pin_config;
led_pin_config.pin_bit_mask =1<<LED_PIN;
led_pin_config.mode = GPIO_MODE_OUTPUT;
led_pin_config.pull_up_en = GPIO_PULLUP_DISABLE;
led_pin_config.pull_down_en = GPIO_PULLDOWN_DISABLE;gpio_config(&led_pin_config);}voidled_on(void){gpio_set_level(LED_PIN,1);}voidled_off(void){gpio_set_level(LED_PIN,0);}
【编写主函数】
main->main.c
,这里注意头文件的包含。
#include<stdio.h>#include"led.h"#include"FreeRTOS/freertos.h"#include"FreeRTOS/task.h"voidapp_main(void){while(1){led_init();led_on();vTaskDelay(50);led_off();vTaskDelay(50);}}
3、烧录前准备和烧录
- 运行
idf.py menuconfig
命令,配置sdkconfig
,初学者可不用设置里边的具体内容,一切默认即可。 - 设置端口,运行
idf.py -p COM5
命令,不一定是COM5
,要根据自己的端口设置 - 对工程进行编译,运行
idf.py build
命令 - 烧录工程,运行
idf.py flash
命令 - 编译完成后会终端会提示烧录等相关信息
- 烧录日志
五、常见问题及解决方案
1、vscode识别头文件有问题并标出波浪线
【解决方案】:删除
.vscode
文件夹内的文件,然后运行
Ctrl + Shift + P
调出vscode命令框,搜索
ESP-IDF:添加vscode配置文件夹
即可解决此问题,当然,此方法还可以解决很多波浪线问题。
问题不止一个,若有其他问题会继续补充在这里。每个人都会遇到各种各样的问题,若无法解决,可在评论区讨论交流或者私信小编,小编尽可能帮忙解决。
总结
本文章是一个简单的入门教程,旨在帮住初学者上手ESP-IDF开发环境,后续还会按照学习流程,更新用ESP-IDF开发ESP32的每一步教程,如果有兴趣的话,就点赞收藏关注不迷路!!!
版权归原作者 乔乔同学 所有, 如有侵权,请联系我们删除。