ESP32开发:构建自己的工程

ESP32开发初学者,文章内容纯属个人经验,有错误在所难免,望见谅!

最小工程

ESP32通过Makefile和component.mk编译和组织工程文件。
下图是一个最小的可编译的工程框架

我们来看各个文件的内容

component.mk

#
# "main" pseudo-component makefile.
#
# (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.)

对的,你没看错,只有几行注释,但是这个文件却是必须有的,没有这个文件,Makefile在编译工程时就会找不到app_main这个启动函数。在这个文件中也可以写入main文件夹下的头文件和源文件路径

user_app_main.c

*================================================================
*   Copyright (C) 2020  Dalitek Co.LTD. All rights reserved.
*   
*   文件名称:user_app_main1.c
*   创 建 者:Dalitek·Leo
*   创建日期:2020年11月03日 星期二 18时58分14秒
*   描    述:
*
================================================================*/

#include <stdio.h>
#include <stdio.h>
#include <string.h>
#include "esp_system.h"
#include "esp_wifi.h"
#include "esp_event.h"
#include "esp_log.h"
#include "nvs_flash.h"

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"

#define  Debug(...) printf("[%s,%d]",__FUNCTION__,__LINE__);printf(__VA_ARGS__)


static const char* TAG = "APP_MAIN";

void app_main()
{
    UBaseType_t count = 0;
    ESP_LOGI(TAG,"=====this is a test project======");
    Debug("the system is running...\n");
    while(1)
    {   
        ESP_LOGI(TAG,"count:%d",count++);
        vTaskDelay(500);
    }   
}

一个比较简单的测试例程,每隔一段时间在终端打印一次count
Makefile

#
# This is a project Makefile. It is assumed the directory this Makefile resides in is a
# project subdirectory.
#

PROJECT_NAME := csdn_project_test

include $(IDF_PATH)/make/project.mk

每个ESP32工程都会有这样一个Makefile文件,用来配置整个项目。没有这个文件,就不能使用make命令来编译你的工程。
第一行PROJECT_NAME := csdn_project_test用来设置工程编译完成后的bin文件的名称;
第二行include $(IDF_PATH)/make/project.mk用来设置编译所需的组件库的路径,将你的工程文件和esp-idf这个组件库链接起来。
现在,我们在终端输入make来编译整个工程

扫描二维码关注公众号,回复: 13463250 查看本文章

我的串口是/dev/ttyUSB1

输入Y确认

编译完成会发现多了一个build文件夹和sdkconfig文件,build文件夹用来放编译过程中产生的输出文件,sdkconfig文件用来存放menuconfig的配置文件,就是上面那个菜单的有关配置。
编译完成后,会产生三个bin文件,其中一个就是我们刚才在Makefile中设置的my_project.bin

添加自己的组件

我们在工程主目录下,建立一个components文件夹用来放置我们自定义的组件

然后在components中创建如下目录

在component,mk中输入以下内容

#
# Component Makefile
#

COMPONENT_SRCDIRS := mqtt
COMPONENT_ADD_INCLUDEDIRS += mqtt/include

表示组件源文件所需的头文件都到component.mk所在目录的include文件夹下找,别的组件如果引用到本组件的所包含的头文件也会到这个include文件夹下找。

在Kconfig文件中输入如下代码

menu "ESP32_MY_MQTT"
config ESP32_MY_MQTT_ENABLE
bool "Enable ESP32_MY_MQTT"
default "y"
endmenu

这段代码的作用,是在menuconfig主菜单下添加一个我们自定义的组件ESP32_MY_MQTT,在这个组件中有一个宏ESP32_MY_MQTT_ENABLE,它的默认值为“y”(意思就是选中),通过这样的方式,我们就可以配置和裁剪我们的工程,这将非常有利于我们的开发工作,在ESP32自带的组件中,我们可以看到很多这样的文件。

我们可以在程序中通过这个宏来控制程序的条件编译,我们来看

mqtt_main.c

/*================================================================
*   Copyright (C) 2020  Dalitek Co.LTD. All rights reserved.
*   
*   文件名称:mqtt_main.c
*   创 建 者:Dalitek·Leo
*   创建日期:2020年11月04日 星期三 09时25分35秒
*   描    述:
*
================================================================*/

#include <stdio.h>
#include "mqtt_main.h"

void mqtt_client_task(void)
{
#if(CONFIG_ESP32_MY_MQTT_ENABLE == y)
	printf("[MQTT_TASK] Startup..");
#else
	printf("[MQtt_TASK] NOT CONFIG..");
#endif
}

标准格式的头文件……
mqtt_main.h

/*================================================================
*   Copyright (C) 2020  Dalitek Co.LTD. All rights reserved.
*   
*   文件名称:mqtt_main.h
*   创 建 者:Dalitek·Leo
*   创建日期:2020年11月04日 星期三 09时26分47秒
*   描    述:
*
================================================================*/


#pragma once

#ifndef _MQTT_MAIN_H_
#define _MQTT_MAIN_H_

void mqtt_client_task(void);

#endif // _MQTT_MAIN_H_

然后在app_main函数中执行测试函数,编译下载到开发板

在工程中Makefile同级目录下,make  flash  默认烧录到/dev/ttyUSB1因为我之前配置了默认串口

然后 make monitor 监视

我们直接来看运行结果

至此,我们就实现了一个ESP32开发的最基本框架。我们可以在此基础上,再添加其他组件,比如wifi、TouchPad和LED等等。

猜你喜欢

转载自blog.csdn.net/Linux_zhicheng/article/details/109485774