ESP32-新建工程

news2024/12/25 22:12:42

目录

本文简介

实验平台

正文

一、安装开发环境

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。

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

 

ESP-IDF PowerShell
ESP-IDF PowerShell

 

完成 ESP-IDF 工具安装向导时运行 Run ESP-IDF Command Prompt (cmd.exe)
完成 ESP-IDF 工具安装向导时运行 Run ESP-IDF Command Prompt (cmd.exe)

 

ESP-IDF 命令提示符窗口
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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/909841.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在Windows下安装PIP+Phantomjs+Selenium

最近准备深入学习Python相关的爬虫知识了&#xff0c;如果说在使用Python爬取相对正规的网页使用"urllib2 BeautifulSoup 正则表达式"就能搞定的话&#xff1b;那么动态生成的信息页面&#xff0c;如Ajax、JavaScript等就需要通过"Phantomjs CasperJS Selen…

DP读书:鲲鹏处理器 架构与编程(八)3.1鲲鹏处理器片上系统与Taishan处理器内核架构

鲲鹏处理器片上系统架构 一、鲲鹏处理器片上系统与Taishan处理器内核架构1. 鲲鹏处理器片上系统概况a. 鲲鹏处理器片上系统与鲲鹏芯片家族b. 鲲鹏920处理器片上系统的组成部件c. 鲲鹏920处理器片上系统的特征d. 鲲鹏920处理器片上系统的逻辑结构 2. Taishan V110 处理器内核微架…

greenplum gpfdist外部表(只读)的实现---理论

经过项目的验证测试以及初步商用化&#xff0c;本篇将进一步讲解greenplum外部表的实现原理&#xff0c;包括设计原则、交互协议与实现流程。gpfdist工具的简介与使用见回顾greenplum gpfdist工具。 1 设计原则 greenplum作为分布式分析型数据库&#xff0c;其每个节点都是独立…

使用ChatGPT-4优化编程效率:高效查询代码示例和解决方案

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

python中(限小白,大佬勿入)python开发中的trick:常量

开场白 我是小白&#xff0c;今天被前端骂了一顿&#xff1a;我们交接不是说好了就给你四个变量&#xff1a;A&#xff0c;B。C。D。你这命名的这么具体&#xff0c;我这边给你传值不是很方便啊&#xff08;因为不同模块有复用的图片路径&#xff09;&#xff0c;我说“那我改&…

Laravel 模型的作用域 模型的访问器和修改器 ⑨

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; THINK PHP &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f44…

LC-路径总和

LC-路径总和 链接&#xff1a;https://leetcode.cn/problems/path-sum/description/ 描述&#xff1a;给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。…

SQL有关表的左连接,右连接,以及内连接

首先我们需要想一下&#xff0c;我们为什么需要将表连接在一起呢&#xff1f;换种说法&#xff0c;即我们需要查询的数据不在同一张表里面&#xff0c;而是在A表中查出一部分&#xff0c;然后再去B表中查出一部分&#xff0c;然后两者结合在一起&#xff0c;才是我们需要的部分…

java面试基础 -- 深克隆 浅克隆

引例 说到java的克隆你还记得多少? 一说到克隆你可能就会想起来那个接口, 没错, 他就是Cloneable Cloneable是java里面内置的很常用的接口, 我们说 Object类中也有一个clone方法: 但是要想合法调用 clone 方法, 必须要先实现 Clonable 接口, 否则就会抛出 CloneNotSupportedEx…

二、8.系统调用、可变参数和堆内存管理

系统调用&#xff1a;让用户进程申请操作系统的帮助 一个系统功能调用分为两部分&#xff0c; 一部分是暴露给用户进程的接口函数&#xff0c;它属于用户空间&#xff0c;此部分只是用户进程使用系统调用的途径&#xff0c;只负责发需求。另一部分是与之对应的内核具体实现&am…

记一次oracle数据库迁移至mysql数据库(表同步)

目录 一、利用Navicat将oracle迁移至mysql数据库 1、建立数据传输 2、选择需要迁移的数据库跟目标库 3、数据传输选项 4、选择需要迁移表信息 二、迁移之后遇到的一些问题 1、大小写问题 2、数据库函数问题 3、sql语句是否使用空格隔开问题 4、关于子查询别命名问题 …

SpringMVC-2-Spring MVC拦截器详解:从入门到精通

SpringMVC-2-Spring MVC拦截器详解&#xff1a;从入门到精通 今日目标 能够编写拦截器并配置拦截器 1.拦截器【理解】 1 拦截器介绍 1.1 拦截器概念和作用 拦截器&#xff08;Interceptor&#xff09;是一种动态拦截方法调用的机制&#xff0c;在SpringMVC中动态拦截控制器方…

SOFARPC(笔记)

文章目录 一、快速开始1.1 SOFARPC1.2 基于SOFABoot 二、注册中心三、通讯协议2.1 Bolt基本发布调用方式超时控制协议泛化调用序列化协议自定义线程池 2.2 RESTful基本使用 2.3 其他协议四、架构 附录 官方样例下载地址-sofa-boot-guides 可查看 SOFARPC 方式快速入门 一、快…

Elasticsearch(十二)搜索---搜索匹配功能③--布尔查询及filter查询原理

一、前言 本节主要学习ES匹配查询中的布尔查询以及布尔查询中比较特殊的filter查询及其原理。 复合搜索&#xff0c;顾名思义是一种在一个搜索语句中包含一种或多种搜索子句的搜索。 布尔查询是常用的复合查询&#xff0c;它把多个子查询组合成一个布尔表达式&#xff0c;这些…

docker安装clickhouse

安装 docker安装 创建clickhouse目录 mkdir -P /data/clickhouse/datamkdir -P /data/clickhouse/confmkdir -P /data/clickhouse/log 拉取镜像 这里直接拉取最新镜像, 如果需要某个特定版本, 则再拉取的时候指定版本号即可. docker pull clickhouse/clickhouse-server 启动临…

最新AI系统ChatGPT网站程序源码/搭建教程/支持GPT4.0/Dall-E2绘画/支持MJ以图生图/H5端/自定义训练知识库

一、正文 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。 那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&#xff01…

Redis系列(四):哨兵机制详解

首发博客地址 https://blog.zysicyj.top/ 前面我们说过&#xff0c;redis采用了读写分离的方式实现高可靠。后面我们说了&#xff0c;为了防止主节点压力过大&#xff0c;优化成了主-从-从模式 思考一个问题&#xff0c;主节点此时挂了怎么办 这里主从模式下涉及到的几个问题&a…

华为OD-整数对最小和

题目描述 给定两个整数数组array1、array2&#xff0c;数组元素按升序排列。假设从array1、array2中分别取出一个元素可构成一对元素&#xff0c;现在需要取出k对元素&#xff0c;并对取出的所有元素求和&#xff0c;计算和的最小值 代码实现 # coding:utf-8 class Solution:…

ISVE2023展商 | 皮克智能:零售及互联网领域数字化变革开拓者

ISVE2023展商 | 皮克智能&#xff1a;零售及互联网领域数字化变革开拓者 01 公司介绍 Exhibitor Profile 皮克智能是优质的智能硬件产品及系统解决方案提供商&#xff0c;具备自主研发创新、软硬件方案集成及全产业链资源整合的能力。 公司总部位于中国深圳&#xff0c;主要服…