基于ESP-IDF环境的ESP32-C3开发之工程分析

为搞清ESP32的代码框架,从观看入门工程"hello world"来分析源码,然后自建工程,并逐步添加自己的组件,达到便于移植和快速开发的目的。
以下为自建的文件夹及文件描述

项目构成

结构说明
demo
|---main
|   |---main.c                      //主函数
|   |---CMakeLists
|   |---component.mk
|---CMakeLists
|---components
|   |---button                      //boot按键引脚扫描例程
|   |   |---bsp_button.c
|   |   |---CMakeLists
|   |   |---include
|   |   |   |---bsp_button.h
|   |---confWIFI                    //smartconfig,手机APP配网例程,需要用到乐鑫的ESP_TOUCH.app
|   |   |---bsp_Fi.c
|   |   |---CMakeLists
|   |   |---include
|   |   |    |---bsp_Fi.h
|   |---led                        //板载LED驱动例程
|   |   |---bsp_led.c
|   |   |---CMakeLists
|   |   |---include
|   |   |    |---bsp_led.h
|   |---wifi                       //SoftAP配网例程
|   |   |---bsp_wifi.c
|   |   |---CMakeLists
|   |   |---include
|   |   |    |---bsp_wifi.h
|   |---blu_fi                    //蓝牙配网例程,需要用到乐鑫的EspBluFi.app
|   |   |---bsp_blu_fi.c
|   |   |---CMakeLists
|   |   |---include
|   |   |    |---bsp_blu_fi.h

demo工程里面包含了几类,分别为:

main文件夹

main文件夹下面包含了main.c,CMakelists.txt,componet.mk,如果有必要,也可在文件夹下面添加include文件夹
main.c为一些基础类的函数调用,在这里就不多说了。

#include <stdio.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"#include "esp_wifi.h"#include "bsp_led.h"
#include "bsp_button.h"
#include "bsp_wifi.h"
#include "bsp_fi.h"#include "driver/gpio.h"
// #include "esp_bt.h"static const char *TAG = "smartconfig";
void app_main(void)
{bsp_led_init();led5_off();bsp_btn_init();// connect_wifi_test();smartconfig_test();while (1){led4_on();vTaskDelay(1000 / portTICK_PERIOD_MS);led4_off();vTaskDelay(1000 / portTICK_PERIOD_MS);if ((btn_sta()) == 0){led5_on();ESP_LOGI(TAG, "clear wifi config data");esp_wifi_restore();esp_restart();vTaskDelay(1000 / portTICK_PERIOD_MS);}else{led5_off();}}
}

CMakelists.txt为描述main文件夹下面所用到的.c以及.h
项目中main文件夹下面就一个main.c,因此CMakelists.txt内容如下

idf_component_register(SRCS "main.c"INCLUDE_DIRS "")

component.mk笔者也不知道干啥的,里面的内容也是全屏蔽的状态,就不在此多说了。

顶层CMakelists.txt

顶层CMakelists.txt描述了cmake的版本,componets路径以及包含cmake的文件
内容如下

# The following lines of boilerplate have to be in your project's
# CMakeLists in this exact order for cmake to work correctly
#cmake版本
cmake_minimum_required(VERSION 3.5)
#指定需要用到componets的路径
set(EXTRA_COMPONENT_DIRS ${CMAKE_CURRENT_LIST_DIR}./components/led${CMAKE_CURRENT_LIST_DIR}./components/button${CMAKE_CURRENT_LIST_DIR}./components/wifi${CMAKE_CURRENT_LIST_DIR}./components/confFiFi${CMAKE_CURRENT_LIST_DIR}./components/blu_fi)
#包含cmake文件
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(demo)

components

该文件夹下面的内容均为用户组件,为了规范用户组件,达到便于移植的目的,均采用以下结构,以button为例

|   |---button                      //button文件夹
|   |   |---bsp_button.c                //button.c
|   |   |---CMakeLists                  //CMakelists
|   |   |---include                     //include文件夹
|   |   |   |---bsp_button.h                //button.h

这里着重描述一下CMakelistst文件,该文件指定了组件的构成,以及所用到的用户组件和系统组件,内容如下

idf_component_register(SRCS "bsp_blu_fi.c" INCLUDE_DIRS "include"REQUIRES nvs_flash esp_event esp_wifi wpa_supplicant bt)#       PRIV_REQUIRES   该参数指定对其他自定义组件的依赖,即私有依赖项
#       REQUIRES        该参数指定对系统组件的依赖,即公共依赖项
#
#       假设 esp_wpa2.h 在components/wpa_supplicant/esp_supplicant/include下,则
#                       REQUIRES里面只需要添加 wpa_supplicant即可

PRIV_REQUIRES参数指定了用户组件的依赖路径,假设button.c里面使用到了用户自建的组件adc.h
则需要在该参数里面指定adc.h的路径
REQUIRES参数制定了系统组件的路径,假设button.c使用了系统组件esp_wifi.h,则需要指定eso_wifi.h所在的路径,否则编译的时候会提示"No such file or directory",导致项目编译失败。

基于ESP-IDF环境的ESP32-C3开发相关推荐

  1. ESP32C3基于Arduino框架下的 ESP32 RainMaker开发示例教程

    ESP32C3基于Arduino框架下的 ESP32 RainMaker开发示例教程 ESP RainMaker ESP RainMaker 是乐鑫推出的一个端到端平台.基于该平台,用户无需管理基础设 ...

  2. ESP32 ESP-IDF开发环境搭建,Windows下基于ESP-IDF | Cmake | VScode插件的 ESP32 开发环境搭建

      之前的一篇博客 Windows上基于ESP-IDF搭建ESP32开发环境 发布后,深受好评.几个月过去了,乐鑫的esp-idf-tools安装工具发生了较大的变化,VsCode插件的功能也愈加完善 ...

  3. 使用乐鑫官方资源搭建基于Arduino的ESP32的开发环境

    目录 一.配置IDE管理器 二.自动安装板支持包 三.手动安装板支持包 四.网盘的ESP32全系列基本库的板支持包 使用乐鑫官方库搭建Arduino开发环境. 乐鑫官方Github:GitHub - ...

  4. 在Win10的Linux子系统下搭建ESP32的开发环境

    在Win10的Linux子系统下搭建ESP32的开发环境 一.介绍 1.Windows的Linux子系统  win10进行了内置工作于命令行的Linux子系统功能,WIN10用户只需要开启Linux子 ...

  5. Esp32 C3 Arduino 串口开发(1)

    网上合宙的esp32 C3 的测试版 9.9元,简洁小巧,用于学习测试非常方便.原来是装的Luatos,可以直接用Arduino开发.Arduino安装的为最新版 V2.00RC8,有点类似 vSco ...

  6. 【WiFi模组】乐鑫ESP32 基于ESP-IDF的原生SDK二次开发

    一. 开发环境 1.系统环境:Windos10 2.源码框架:官方ESP-IDF 4.4.1 3.编辑代码:VScode 3.开发语言:C语言 4.操作系统:FreeRTOS 二.开发流程 1.下载离 ...

  7. ESP32 Ubuntu开发环境搭建

    在Ubuntu下搭建ESP32开发环境 文章目录 在Ubuntu下搭建ESP32开发环境 说明 开发环境 硬件准备 ESP32(NodeMCU-32S) NodeMCU-32S 引脚图 搭建步骤 安装 ...

  8. ESP32-C3学习笔记(3):ESP32 C3 IIC总线驱动光照强度传感器(基于ESP-IDF Eclipse)

    一.硬件简介 光照强度传感器使用的是物联网俱乐部的智慧路灯案例扩展板E53_SC1,购买连接 https://item.taobao.com/item.htm?spm=2013.1.w4004-222 ...

  9. Arduino IDE + ESP32系列开发环境配置

    前言 ESP32系列开发环境配置教程 ESP32包 链接:https://pan.baidu.com/s/1O3ndDlpH-zL2OcFiLECmVA?pwd=kbcx 提取码:kbcx 已经配置好 ...

  10. 认识Web前端、Web后端、桌面app和移动app新开发模式 - 基于Node.js环境和VS Code工具...

    认识Web.桌面和移动app新开发模式 - 基于Node.js环境和VS Code工具 一.开发环境的搭建(基于win10) 1.安装node.js和npm 到node.js官网下载安装包(包含npm ...

最新文章

  1. Splay ---- 文艺平衡树区间翻转的建树模式
  2. 方法总比困难多_只是为了生活
  3. 【Qt】Visual Studio中无法打开Qt中UI文件
  4. 超级简便的容器化部署工具(使用 ASP.NET Core 演示)
  5. PHP怎么检查登录和退出,如何检查用户是否以PHP登录?
  6. 计算机组成原理(一)计算机系统概述
  7. Linux 64位进程地址空间分布概况
  8. 浙大 PAT b1009
  9. centos7下cups + samba共打印服务的教程
  10. Tableau上面地图与条形图结合_Tableau 全新地图实战演示,更快、更高、更强
  11. Application page and Site page
  12. 弯管机编程软件电脑版_聚编程电脑版
  13. 【英雄联盟】关于我是如何打上超凡大师的,ADC键位设置
  14. 计算机表格填充,Excel表格中数据填充功能的使用方法
  15. 计算机excel实验结果分析,使用Excel2013分析管理表格数据实训演练——想象力电脑应用...
  16. 九宫格摆法_九张照片墙怎么摆放图,1的九宫格效果图
  17. Linux rm/rmdir 命令使用介绍
  18. pygame--图片随键盘移动
  19. obs多推流地址_腾讯推流直播教程OBS下载、安装、使用
  20. Power BI-同比、环比、累计值

热门文章

  1. 【GitHub Desktop】(GitHub Windows桌面版) 中文汉化,(GitHub客户端汉化,非网页端插件)
  2. java 贝叶斯抠图_毕业论文(设计)基于贝叶斯算法的自动抠图程序设计与实现.doc...
  3. 计算二叉树叶子结点数目
  4. 储量级别122b_储量级别代码是什么
  5. 浅谈SQL注入防御手段
  6. 开源LitCAD:一个使用C#编写的非常简易的CAD小程序。
  7. 【毕业设计】深度学习指纹识别算法研究与实现 - python opencv
  8. 微信小程序中引入 UI 组件库(Vant Weapp)
  9. 医学计算机ppt模板,计算机与医学.ppt
  10. 比较热门的物联网服务器的使用