前言

  上篇介绍了如何用 ESP-IDF插件,去从SDK中创建例程。那么对于我们自己的项目需求,如何修改工程名称,并添加自定义.c.h模块组件,编译为自己的工程呢?

一 创建新工程,查看CMakeList.txt

  1. 将上节已经编译过的blink工程删除。
  2. 用ESP-IDF插件重新建立一个空的blink工程,空工程中只有这几个文件:

      其中有些文件是不必要的:
  3. 删除 example_test.pysdkconfig.defaults

      最后只剩下这些:

  因为当前ESP-IDF使用的编译工具为CMakeCMake允许用户编写CMakeLists.txt来定制整个编译流程,然后再根据用户平台生成Makefile工程文件。意思就是说编译过程完全依赖于CMakeLists.txt
  所以我们先看看例程的CMakeList.txt是怎么写的。
  main/CMakeLists.txt做了哪些事情?:

  只有简单的一句话,意思是注册并编译源文件blink.c和当前目录的所有.h头文件。
  再看根目录的CMakeLists.txt做了哪些?:

  • 指定运行此配置文件所需的 CMake 最低版本为3.5。
  • 指定ESP-IDF应用的CMake配置文件。
  • 指定当前工程的名称为blink。

  下面添加自定义.c.h驱动模块组件,并对CMakeLists.txt进行修改,来定制自己的工程。

二 修改工程名称,修改CMakeLists.txt

  由以上大概了解了例程的CMakeLists.txt做了什么,下面开始根据例程,来修改为自己的工程。

  1. 关闭文件夹,修改工程文件夹名称为ledBlink后再打开。

  2. blink.c文件重命名为ledBlink.c

  3. 修改main/CMakeLists.txt文件来包含ledBlink.c。但打开后发现已经被脚本自动修改了,不用再人为改动。

  4. 修改CMakeLists.txt文件,工程名称改为ledBlink

  5. 查看Makefile文件有无异常,将项目名称同样改为ledBlink

  6. 为了区别于原来的例程,改动main\ledBlink.c,将闪烁频率变快。

  7. 将以上更改全部保存,编译一遍,看能否成功。

    编译成功,烧录下载,发现LED闪烁频率较之前变快,现象正确。

  8. 如果编译后出现如下错误,提示 CONFIG_BLINK_GPIO 未定义。(7现象正确可直接跳过8)

    先确保 main/Kconfig.projbuild 文件确实存在,之后将build文件夹整个删除,重新编译。
    (因为只有Kconfig.projbuild存在,build编译后才会在生成的 build/config/sdkconfig.h 里定义CONFIG_BLINK_GPIO值为5。否则无此定义。)


    如不慎将 main/Kconfig.projbuild 文件删除,建议将 main\ledBlink.c 中的CONFIG_BLINK_GPIO 直接改为5,删除build文件夹后,重新编译。

三 添加.c.h驱动模块组件

  添加.c.h组件最简单的方法,是直接将.c.h添加到main文件夹,之后修改main\CMakeLists.txt。但此方法并没有将.c.h单独划分为模块,删减功能时会很麻烦,不利于大型工程的管理。
  第二种,将相似和相关联的方法/函数封装为.c.h模块组件,并以文件夹的方式加以区分管理。这样有利于系统对功能部件的删减,利于工程管理。

  于是将原先blink.c中的led控制代码抽离剥出,单独编写外设驱动文件 components/led/src/led.ccomponents/led/include/led.h,并将led-IO初始化、亮、灭这些外设的操作,封装为函数,包含在驱动文件中。

  工程结构样式可以参考SDK中的lcd例程。

  1. 创建led驱动组件文件夹
    创建components/led/src、components/led/include 这两个文件夹。复制CMakeLists.txt、component.mk到components/led下。工程目录结构如下:
  2. 创建文件components/led/src/led.c、components/led/include/led.h。编写led驱动代码。

led.c


#include "led.h"void led_init(void)
{/* Configure the IOMUX register for pad BLINK_GPIO (some pads aremuxed to GPIO on reset already, but some default to otherfunctions and need to be switched to GPIO. Consult theTechnical Reference for a list of pads and their defaultfunctions.)*/gpio_pad_select_gpio(BLINK_GPIO);/* Set the GPIO as a push/pull output */gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
}void led_on(void)
{gpio_set_level(BLINK_GPIO, 1);
}void led_off(void)
{gpio_set_level(BLINK_GPIO, 0);
}

led.h

#ifndef __LED_H
#define __LED_H#include "sdkconfig.h"
#include "driver/gpio.h"/* Can use project configuration menu (idf.py menuconfig) to choose the GPIO to blink,or you can edit the following line and set a number here.
*/
#define BLINK_GPIO CONFIG_BLINK_GPIOvoid led_init(void);
void led_on(void);
void led_off(void);#endif
  1. 修改components/CMakeLists.txt(脚本不会自动更改,需要人为改动)
set(led_srcs "src/led.c")idf_component_register(SRCS "${led_srcs}"INCLUDE_DIRS "include")
  1. 修改main\ledBlink.c

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "sdkconfig.h"
#include "led.h"void app_main(void)
{led_init();while(1) {/* Blink off (output low) */printf("Turning off the LED\n");led_off();vTaskDelay(200 / portTICK_PERIOD_MS);/* Blink on (output high) */printf("Turning on the LED\n");led_on();vTaskDelay(200 / portTICK_PERIOD_MS);}
}
  1. 删除build文件夹后,编译,下载
    现象与上述一致。添加.c.h驱动模块组件,修改CMakeLists,实现自定义工程成功。


本文源码

配合此教程的Easyio开源驱动库已更新,库与Demo同步放出,本文对应Demo中的02_ledBlink

Easyio源码仓库:Easyio驱动库-Github
Easyio使用教程:ESP32开源驱动库Easyio的使用,基于ESP-IDF开发框架,非Arduino


注意事项

  • main/Kconfig.projbuild 千万不要删除。会导致生成的 build/config/sdkconfig.h 缺失CONFIG_BLINK_GPIO 定义。
  • 如clean后build依旧有错误,建议删除build文件夹后重新编译。
  • 工程结构样式可以参考SDK中的lcd例程。

ESP32开发板开源计划


  现已开源一款ESP32物联网开发板,支持WIFI、蓝牙、以太网、RS485、CAN通信。板载6轴IMU、温湿度传感器、38K红外遥控收/发、独立RTC、TF卡座。USB和18650双电源供电,有2.0寸单点电容屏可用,配套各外设驱动和LVGL源码。Github、立创EDA、CSDN全云端同步更新。

  详情可见:

  • ESP32-IOT-KIT 开发板介绍
    ESP32开发板开源啦 ESP32-IOT-KIT全开源物联网开发板

  • PCB硬件
    立创EDA:ESP32开发板 IOT-KIT原理图、PCB、BOM

打样免费的时代,速去JLC白嫖PCB。

开源学习交流Q群:827686418

ESP32开发 2.添加.c.h并修改CMakeLists,来定制自己的工程相关推荐

  1. 织梦php开发tags功能开发,DedeCms织梦二次开发批量添加tag标签 批量修改TAG标签功能的方法...

    需求背景: 之前发布了不少文章,后来发现之前的这些文章当时发布时都没有添加tag标签,然而现在需要都添加上tag标签,然而这个在默认的织梦后台是没办法批量实现的,只能一篇篇文章去修改. 思考: 织梦原 ...

  2. Arduino IDE 如何添加 ESP32 开发板?

    Arduino IDE 如何添加 ESP32 开发板 arduino-esp32 使用引导 Installation instructions using Arduino IDE Boards Man ...

  3. ESP32开发 CMakeLists包含同级目录.h文件,error: gpioX.h: No such file or directory

    有一个工程的目录结构是这样的:同级驱动子模块,相互包含. 编译后出现错误,error: gpioX.h: No such file or directory 其中 "key.h" ...

  4. ESP32开发--使用NVS存储数据

    ESP32基础系列 ESP32初体验之环境搭建 ESP32外设学习之GPIO ESP32外设学习之UART ESP32开发之给模块连上网络 ESP32的一键配网与Airkiss配网 ESP32使用NV ...

  5. ESP32开发环境的搭建和 ESP-IDF支持以下调试方法

    ESP32开发环境的搭建 ESP-IDF 支持以下调试方法: 一. JTAG 二. GDB调试 三. 日志系统 四. Core Dump 五. esp32 heap 内存管理简析 ESP32开发环境的 ...

  6. ESP32开发学习 LVGL Littlevgl 创建显示二维码

    生成效果: LVGL除了一些常用UI控件外,还提供了很多第三组件可以集成,例如jpg,bmp,gif,png,二维码. LVGL提供的生成器使用的是 nayuki 的二维码生成器,本文我们就来移植LV ...

  7. Arduino CLI命令行ESP32开发环境搭建(Linux Ubuntu操作系统)

    陈拓2023/03/06-2023/03/11 简介 Arduino cli是一个命令行界面,您可以使用它创建草图(sketch)并将其上传到开发板中.它提供了ArduinoIDE的所有功能: 编写s ...

  8. ESP32开发 -- 试玩ESP32

    前文要测试网络调试助手,手头正好有个ESP32一直没有试过.这次正好拿来试玩一下. 一.ESP32官网查看 官网:ESP32官网 这款最小系统开发板搭载了乐鑫最新的系统级芯片 ESP32, 支持 Wi ...

  9. ubuntu vscode 配置字体_第五章 Ubuntu搭建ESP32开发环境(vscode)

    Vscode安装 ubuntu软件中自带vscode的安装包,一键完成,不废话,没有的想办法解决. 编译链操作 下载 官方最新地址 有系统区别,下载对应的压缩到到电脑 · for 64-bit Lin ...

最新文章

  1. linux内存管理和原理分析
  2. 白盒测试的3中主要方法(cont.)
  3. 通讯录javafx和mysql_用javafx实现通讯录
  4. Python标准库07 信号 (signal包,部分os包)
  5. 【Python基础】Python列表生成式
  6. Java Web——JavaBean简介
  7. 怎么拿img标签的data_PASCAL VOC数据集-分割标签索引颜色对照及程序
  8. 苹果mac 3D游戏动画开发软件:Unity Pro
  9. 战地一自定义服务器怎么搜索,战地1怎么快速加入服务器?多种加入方法一览...
  10. 网络监测用计算机安全管理制度,计算机信息网络安全管理制度
  11. yum 报错:Another app is currently holding the yum lock; waiting for it to exit......
  12. IntelliJ IDEA配置WEB浏览器
  13. 写代码的时候图片显示不出来怎么办?
  14. Android 天气APP(十九)更换新版API接口(更高、更快、更强)
  15. 【指导】如何在 excel 数据表中去重重复项计数?
  16. 电信近期有充值送红包的活动
  17. gorilla/mux实现http服务示例
  18. 大学生实习就业调研报告:8个共性问题与企业CTO/CEO/HR管理者探讨
  19. 2021paypal仿牌收款免费赠送
  20. C/C++编程学习 - 第5周 ⑧ 判断直角三角形

热门文章

  1. 数据库和缓存一致性分析
  2. crypto在web的使用
  3. [原创]java WEB学习笔记107:Spring学习---AOP切面的优先级,重用切点表达式
  4. 使用phpqrcode来生成二维码/thinkphp
  5. android listview 连续调用 getview问题分析及解决。
  6. python pymysql模块 链接mysql 遍历查询结果的方法 详解
  7. SELinux系列(一)——SELinux是什么
  8. [转][进阶]-Python3 异步编程详解
  9. php 8发布,PHP 8.0.0 正式版发布啦,一个崭新时代来临!
  10. vue3vite工程里面引入assets目录下的图片文件(一种方法)