目录
本文简介
实验平台
正文
一、安装开发环境
1、安装内容
2、启动 ESP-IDF 环境
二、开始创建工程
三、配置工程
四、编译工程
五、烧录到设备
六、监视输出
七、在工程中创建自己的文件夹
本文简介
idf.py
命令行工具提供了一个前端,可以帮助您轻松管理项目的构建过程,它管理了以下工具:
-
CMake,配置待构建的项目
-
Ninja,用于构建项目
-
esptool.py,烧录目标硬件设备
可通过 idf.py
配置构建系统,具体可参考 相关文档。
实验平台
①ESP-IDF 版本:release/v5.1
③硬件平台:esp32-s3
版权声明
①作者:coLin
②声明:问题总结,有误解,请联系纠正。
正文
一、安装开发环境
快速入门 - ESP32-S3 - — ESP-IDF 编程指南 v5.1 文档
1、安装内容
安装程序会安装以下组件:
-
内置的 Python
-
交叉编译器
-
OpenOCD
-
CMake 和 Ninja 编译工具
-
ESP-IDF
安装程序允许将程序下载到现有的 ESP-IDF 目录。推荐将 ESP-IDF 下载到 %userprofile%\Desktop\esp-idf
目录下,其中 %userprofile%
代表家目录。
2、启动 ESP-IDF 环境
安装结束时,如果勾选了 Run ESP-IDF PowerShell Environment
或 Run ESP-IDF Command Prompt (cmd.exe)
,安装程序会在选定的提示符窗口启动 ESP-IDF。
二、开始创建工程
1 、 进入到ESP-IDF目录下,如下图所示
2、打开ESP-IDF 5.1 PowerShell,默认打开目录为ESP-IDF安装目录
3、创建自己的工程目录
mkdir myPro
此时目录中的文件为下图所示
4、进入到myPro文件中
cd myPro
5、创建一个工程,文件夹名字是 esp32s3-display
idf.py create-project esp32s3-display
三、配置工程
1、进入 esp32s3-display 目录
2、设置 ESP32-S3 为目标芯片
注意,此操作将清除并初始化项目之前的编译和配置(如有)。您也可以直接将“目标”配置为环境变量(此时可跳过该步骤)。
idf.py set-target esp32-s3
3、然后运行工程配置工具 menuconfig
idf.py menuconfig
正确操作上述步骤后,系统将显示以下菜单:
您可以通过此菜单设置项目的具体变量,包括 Wi-Fi 网络名称、密码和处理器速度等。示例项目会以默认配置运行,因此在这一项目中,可以跳过使用 menuconfig
进行项目配置这一步骤。
四、编译工程
idf.py build
如果一切正常,编译完成后将生成 .bin 文件。
五、烧录到设备
idf.py -p PORT flash
请将 PORT 替换为 ESP32-S3 开发板的串口名称(COMx)。如果 PORT
未经定义,idf.py 将尝试使用可用的串口自动连接。
如果一切顺利,烧录完成后,开发板将会复位,应用程序 开始运行。
六、监视输出
您可以使用 idf.py -p PORT monitor
命令,监视 “hello_world” 工程的运行情况。注意,不要忘记将 PORT 替换为您的串口名称。
运行该命令后,IDF 监视器 应用程序将启动。
此时,您就可以在启动日志和诊断日志。
您可使用快捷键 Ctrl+]
,退出 IDF 监视器。
七、在工程中创建自己的文件夹
1、在工程目录下创建components目录并且在components目录下创建led目录,执行以下命令
idf.py -C components create-component led
所以,目前整个文件夹是这样的
| ------esp32s3-display
| ------------ components
| ------ led
| ------ include| ------ led.h
| ------ CMakeLists.txt
| ------ led.c
| ------------ esp32s3-display.c
| ------------ CMakeLists.txt
2、在led.c和led.h中加入我们的代码:
led.c
#include <stdio.h>
#include "led.h"
#include "driver/gpio.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
static void led_task(void *parm);
#define GPIO_LED_R GPIO_NUM_16
#define GPIO_LED_G GPIO_NUM_17
#define GPIO_LED_B GPIO_NUM_18
static unsigned char i=0,j=0;
void kl_drv_led_init(void)
{
gpio_reset_pin(GPIO_LED_R);
gpio_set_direction(GPIO_LED_R, GPIO_MODE_OUTPUT);
gpio_reset_pin(GPIO_LED_G);
gpio_set_direction(GPIO_LED_G, GPIO_MODE_OUTPUT);
gpio_reset_pin(GPIO_LED_B);
gpio_set_direction(GPIO_LED_B, GPIO_MODE_OUTPUT);
xTaskCreate(led_task, "led_task", 4096, NULL, 3, NULL);
printf("LED INIT SUCCESS\r\n");
}
static void led_task(void * parm)
{
while (1) {
i++;
if(i==1){
gpio_set_level(GPIO_LED_R, 1);//把这个GPIO输出高电平
gpio_set_level(GPIO_LED_G, 0);//把这个GPIO输出低电平
gpio_set_level(GPIO_LED_B, 0);//把这个GPIO输出低电平
}else if(i==2){
gpio_set_level(GPIO_LED_R, 0);//把这个GPIO输出低电平
gpio_set_level(GPIO_LED_G, 1);//把这个GPIO输出高电平
gpio_set_level(GPIO_LED_B, 0);//把这个GPIO输出低电平
} else if(i==3){
gpio_set_level(GPIO_LED_R, 0);//把这个GPIO输出低电平
gpio_set_level(GPIO_LED_G, 0);//把这个GPIO输出低电平
gpio_set_level(GPIO_LED_B, 1);//把这个GPIO输出高电平
i = 0;
}
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
led.h
#ifndef LED_H
#define LED_H
#ifdef __cplusplus
extern "C" {
#endif
void kl_drv_led_init(void);
#endif
esp32-s3-display.c
#include <stdio.h>
#include "led.h"
void app_main(void)
{
kl_drv_led_init();
}
注意:直接编译这里会报错
我们需要在led/CMakeLists.txt中添加REQUIRES driver,如下所示:
#加入源文件
#加入头文件
#REQUIRES driver 表明该组件依赖driver系统组件
idf_component_register(SRCS "led.c"
INCLUDE_DIRS "include"
REQUIRES driver)