ESP32(Espressif-IDE)添加外部(.c .h)文件 (error:undefined reference to)

0x00:前言

笔记文件

用习惯了keil和iar之类的开发软件,一下子转换到ESP32是特别的不习惯,这里使用的开发环境是乐鑫官方推出的Espressif-IDE,也是刚学折腾ESP32,刚开始就遇到难题了,按照以往的习惯,一般开发大一点的项目工程都是需要将不同的功能分开不同的文件写,一般都不会全写在main文件里。

这里主要就是记录一下Espressif-IDE添加外部文件的过程

可能这个过程中也是有错误的地方。具体我也是网上找了很久的方法,最后自己总结一下。主要自己做为笔记记录,具体原理呢,我也是一知半解,我也没有具体去学习CMake,我也是照葫芦画瓢,能用!

这里通过一个案例来说明整个操作流程,

设计一个程序,分别包含myGPIO和myLED两个文件夹,的程序

myGPIO文件夹包含:myGPIO.c     myGPIO.h      用于初始化 IO

myLED文件夹包含:  myLED.c       myLED.h        用于闪烁LED程序

0x01:向工程添加文件

这里以官方给出的  hello_world  工程为模板添加自己写的文件,

1、新建myDrives

2、myDrives 文件夹下添加 myGPIO文件夹和 myLED文件夹

 

 

 3、myGPIO

myGPIO.c文件

#include "myGPIO.h"
#include "myLED.h"

void myGPIO_Init(void )
{
	gpio_set_direction(GPIO_NUM_1,GPIO_MODE_OUTPUT);
}

myGPIO.文件

#ifndef MYDRIVES_MYGPIO_MYGPIO_H_
#define MYDRIVES_MYGPIO_MYGPIO_H_

void myGPIO_Init(void );

#endif /* MYDRIVES_MYGPIO_MYGPIO_H_ */

 4、myGPIO

myLED.c

#include "myLED.h"
#include "myGPIO.h"

void myLED_Init(void )
{
	myGPIO_Init();
}
void myLED_Function(void )
{
	myLED_H;
	printf("myLED_H\n");
	vTaskDelay(500);
	myLED_L;
	printf("myLED_L\n");
	vTaskDelay(500);
}

 myLED.h

#ifndef MYDRIVES_MYLED_MYLED_H_
#define MYDRIVES_MYLED_MYLED_H_

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"

#define myLED_H gpio_set_level(GPIO_NUM_1,1)
#define myLED_L gpio_set_level(GPIO_NUM_1,0)

void myLED_Init(void );
void myLED_Function(void );

#endif /* MYDRIVES_MYLED_MYLED_H_ */

 4、main 主函数修改

#include <stdio.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"
#include "myGPIO.h"
#include "myLED.h"

void app_main(void)
{
    printf("Hello world!\n");
    myLED_Init();

    while(1)
    {
    	myLED_Function();

    }
}

 0x02:修改CMakeLists.txt文件

这里只修改 main 文件夹下的CMakeLists.txt文件

 

 

set(src
"hello_world_main.c"
../myDrives/myGPIO/myGPIO.c 
../myDrives/myLED/myLED.c 

)

set(inc
"."
../myDrives/myGPIO 
../myDrives/myLED
)


idf_component_register(
SRCS ${src}
INCLUDE_DIRS ${inc})

  0x03:编译运行

 

 

 

 

 

 

 

  • 11
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: ESP32 的点灯程序是指在 ESP32 开发板上控制 LED 灯的点亮或熄灭的代码程序。下面是一个简单的点灯程序: ``` #include <Arduino.h> const int ledPin = 2; // LED 连接的引脚 void setup() { pinMode(ledPin, OUTPUT); // 将 LED 引脚设为输出模式 } void loop() { digitalWrite(ledPin, HIGH); // 将 LED 引脚设为高电平,点亮 LED delay(1000); // 等待 1 秒 digitalWrite(ledPin, LOW); // 将 LED 引脚设为低电平,熄灭 LED delay(1000); // 等待 1 秒 } ``` 这个程序在 ESP32 开发板上控制一个 LED,每隔 1 秒就点亮或熄灭一次。 ### 回答2: ESP32是一款高性能的Wi-Fi和蓝牙微控制器,由于其多功能特性和易于编程的特点,广泛用于物联网和嵌入式系统开发。 ESP32的点灯程序主要涉及到GPIO控制。首先,我们需要连接一颗LED灯到ESP32开发板的任意一个GPIO引脚上。可以选择通过一个电阻连接LED正极到某个GPIO引脚,将LED负极连接到地线。 接下来,我们需要编写程序使用ESP32的GPIO库来控制LED灯的亮灭。以下是一个简单的ESP32点灯程序示例: ```c #include <Arduino.h> // 定义LED引脚 const int ledPin = 2; void setup() { // 初始化GPIO引脚 pinMode(ledPin, OUTPUT); } void loop() { // 使LED灯亮 digitalWrite(ledPin, HIGH); delay(1000); // 延迟1秒 // 使LED灯灭 digitalWrite(ledPin, LOW); delay(1000); // 延迟1秒 } ``` 在以上示例中,我们首先声明了一个常量`ledPin`,并设置为2(可以根据具体引脚连接情况进行调整)。在`setup`函数中,我们将`ledPin`设置为输出模式,这样我们才能够向其发送控制信号。在`loop`函数中,我们通过`digitalWrite`函数来控制LED灯的亮灭,并使用`delay`函数来控制间隔时间。 通过将以上代码上传到ESP32开发板并运行,我们就可以看到连接到指定引脚的LED灯开始循环闪烁。这个点灯程序只是ESP32开发的一个简单示例,实际上ESP32可以实现更复杂的功能,例如通过增加按钮进行交互控制、通过Wi-Fi或蓝牙与其他设备进行通信等。 ### 回答3: ESP32是一款非常强大的开发板,支持Wi-Fi和蓝牙功能。点灯程序是一个简单的示例程序,用于展示如何使用ESP32的GPIO口控制LED灯的亮灭。 首先,我们需要准备一个ESP32开发板和一颗LED灯,然后将LED的一端连接到ESP32的GPIO口,例如GPIO2。然后,我们可以开始编写点灯程序。 在Arduino IDE中,我们首先需要引用ESP32的库文件。代码开头应该包含如下代码: #include <Arduino.h> 然后,在setup()函数中,我们需要设置GPIO2为输出模式。可以使用如下代码完成设置: pinMode(2, OUTPUT); 接下来,在loop()函数中,我们可以使用digitalWrite()函数来控制LED的亮灭。我们可以使用HIGH来点亮LED并使用LOW来熄灭LED。可以使用如下代码完成控制: digitalWrite(2, HIGH); // 点亮LED delay(1000); // 延迟1秒 digitalWrite(2, LOW); // 熄灭LED delay(1000); // 延迟1秒 以上代码将会使LED灯每隔1秒钟亮和熄灭一次。 最后,我们需要上传程序到ESP32开发板中。将开发板连接到电脑上,选择正确的开发板和端口,然后点击上传按钮。上传完成后,打开串口监视器,你将看到LED灯按照代码中定义的方式亮和熄灭。 这就是一个简单的ESP32点灯程序的实现。通过这个程序,我们可以学习如何使用ESP32的GPIO口控制外部设备,比如LED灯。希望这个回答对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值