ESP32-S3新建工程-命令行

本文简介
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。


完成 ESP-IDF 工具安装向导时运行 Run ESP-IDF PowerShell Environment

ESP-IDF PowerShell

完成 ESP-IDF 工具安装向导时运行 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 esp32s3

 

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 命令,监视 “esp32s3-display” 工程的运行情况。注意,不要忘记将 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)
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_42216720/article/details/132417543

posted @ 2024-04-03 13:54  苍月代表我  阅读(227)  评论(0)    收藏  举报