ESP32学习——CMakeLists的简单使用

文章介绍了如何在ESP-IDF环境中利用CMake配置文件管理组件,包括自动识别components目录,通过file(GLOB_RECURSE)收集源文件,以及跨文件夹调用函数。在test1中调用test2的函数,并在main函数中调用test1,最后编译并下载程序以验证效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从ESP-IDF插件上导出一个hello_world例程

 在这个目录下的CMake文件里

include($ENV{IDF_PATH}/tools/cmake/project.cmake)

這行代碼对本工程下的 components 文件夹包含,自动识别components目录下的二级目录里的CMakeLists文件

这里打开components中,test1文件夹中的CMakeLine文件

第一行file(GLOB_RECURSE SOURCES        ./*.c)可以识别本文件夹(test)里的所有.c文件

REQUIRES 后面增加test2,就可以调用test2里的头文件

 如果在test文件夹下再添加一个文件夹(test1_1),只需要在后面加上对应的文件名称即可

file(GLOB_RECURSE SOURCES 	./*.c 
							./test1_1/*.c)

接下来,在test1中调用test2函数,并在main函数里调用test1函数

 编译下载,看一下效果

### ESP32与MPU6050集成开发概述 ESP32是一款功能强大的微控制器,支持Wi-Fi和蓝牙连接,而MPU6050是一种集成了三轴加速度计和三轴陀螺仪的惯性测量单元(IMU)。两者可以通过I²C协议进行通信。为了实现这一目标,开发者需要配置ESP32的硬件接口,并编写相应的固件来处理来自MPU6050的数据。 #### 硬件准备 在开始之前,需准备好以下材料: - **ESP32模块** - **MPU6050传感器模块** - 杜邦线若干用于连接两者的电源、地以及SDA/SCL信号线。 具体接法如下表所示: | ESP32 Pin | MPU6050 Pin | |-----------|-------------| | GND | GND | | 3V3 (or VCC) | VCC | | GPIO21 | SDA | | GPIO22 | SCL | 注意:部分版本的MPU6050可能工作于不同的电压等级,请查阅其规格书确认供电需求[^2]。 #### 软件环境搭建 推荐使用官方提供的工具链——ESP-IDF框架来进行程序编译部署。安装完成后,在项目目录下创建一个新的工程文件夹,并设置好Makefile或者CMakeLists.txt以便管理依赖项。 对于驱动层面而言,可以直接利用Arduino生态系统中的现成库简化操作流程;如果偏好纯裸机方式,则可以从头定义寄存器访问逻辑。 以下是基于Arduino平台的一个简单示例代码片段展示如何初始化设备并获取原始传感数值: ```cpp #include <Wire.h> #define MPU_ADDR 0x68 // 默认地址当AD0拉低时有效 void setup() { Serial.begin(115200); Wire.begin(); // 初始化TWI/I2C总线 // 尝试唤醒MPU6050 Wire.beginTransmission(MPU_ADDR); Wire.write(0x6B); // PWR_MGMT_1 寄存器位置 Wire.write(0); // 清零以启动传感器 Wire.endTransmission(true); } float acc_x,acc_y,acc_z; int16_t gyro_x,gyro_y,gyro_z; void loop(){ readAccelGyro(); delay(100); } // 函数用来读取加速计和角速度计数据 void readAccelGyro(){ uint8_t rawData[14]; // 存储AX AY AZ GX GY GZ 的高字节和低位共七个双字节数组 Wire.beginTransmission(MPU_ADDR); Wire.write(0x3B); // 开始读取从ACCEL_XOUT_H寄存器连续存储区域内的全部内容 Wire.endTransmission(false); Wire.requestFrom((uint8_t)MPU_ADDR,(uint8_t)14,true); int i=0; while(Wire.available()){ rawData[i++]=Wire.read(); } acc_x=((int16_t)(rawData[0]<<8)|rawData[1]); acc_y=((int16_t)(rawData[2]<<8)|rawData[3]); acc_z=((int16_t)(rawData[4]<<8)|rawData[5]); gyro_x=((int16_t)(rawData[8]<<8)|rawData[9]); gyro_y=((int16_t)(rawData[10]<<8)|rawData[11]); gyro_z=((int16_t)(rawData[12]<<8)|rawData[13]); Serial.print("Acceleration X: ");Serial.println(acc_x); Serial.print("Acceleration Y: ");Serial.println(acc_y); Serial.print("Acceleration Z: ");Serial.println(acc_z); Serial.print("Gyroscope X: ");Serial.println(gyro_x); Serial.print("Gyroscope Y: ");Serial.println(gyro_y); Serial.print("Gyroscope Z: ");Serial.println(gyro_z); } ``` 上述代码展示了基本的功能实现过程,包括但不限于开启串口调试通道、设定IIC通讯参数、激活目标芯片等功能点。 另外值得注意的是关于校准补偿算法的应用场景讨论也很重要,因为未经修正过的原始输出往往存在偏差现象,这会影响最终精度表现效果[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值