472 lines
13 KiB
Markdown
472 lines
13 KiB
Markdown
|
|
# HTPA60x40传感器升级指南
|
|||
|
|
|
|||
|
|
## 📋 概述
|
|||
|
|
|
|||
|
|
本文档为后续接手项目的同事提供详细的传感器升级指导。当新的HTPA60x40dR1L0.9/0.8热成像传感器到货后,需要按照本指南进行代码修改和系统集成。
|
|||
|
|
|
|||
|
|
**重要提醒**:新传感器代码已经预先编写完成,位于 `firefly_esp32/main/Sensor/HTPA60x40dR1L0.9/` 目录中。
|
|||
|
|
|
|||
|
|
## 🎯 升级目标
|
|||
|
|
|
|||
|
|
- **从**:HTPAd32x32L1k7 (32x32分辨率,1024像素)
|
|||
|
|
- **到**:HTPA60x40dR1L0.9/0.8 (60x40分辨率,2400像素)
|
|||
|
|
- **提升**:分辨率提升134%,更精细的火灾检测能力
|
|||
|
|
|
|||
|
|
## 🔧 硬件准备
|
|||
|
|
|
|||
|
|
### 1. 硬件连接检查
|
|||
|
|
新传感器与旧传感器使用相同的I2C接口:
|
|||
|
|
- **SDA引脚**:GPIO14
|
|||
|
|
- **SCL引脚**:GPIO21
|
|||
|
|
- **电源**:3.3V
|
|||
|
|
- **I2C地址**:0x1A (传感器), 0x50 (EEPROM)
|
|||
|
|
|
|||
|
|
⚠️ **注意**:新传感器功耗约150mA,比32x32版本略高,确保电源供应充足。
|
|||
|
|
|
|||
|
|
### 2. 物理安装
|
|||
|
|
- 传感器尺寸可能略有不同,检查安装孔位
|
|||
|
|
- 确保传感器视野没有遮挡
|
|||
|
|
- 验证散热条件良好
|
|||
|
|
|
|||
|
|
## 📝 代码修改步骤
|
|||
|
|
|
|||
|
|
### 步骤1:主程序文件修改
|
|||
|
|
|
|||
|
|
#### 1.1 修改 `main.cpp` 或主控制文件
|
|||
|
|
|
|||
|
|
**位置**:`firefly_esp32/main/main.cpp` (或相应的主文件)
|
|||
|
|
|
|||
|
|
**修改内容**:
|
|||
|
|
```cpp
|
|||
|
|
// 原代码 (32x32传感器)
|
|||
|
|
#include "Sensor/HTPAd32x32L1k7/HTPA_Sensor32_2.h"
|
|||
|
|
HTPA32_2 thermal_sensor;
|
|||
|
|
|
|||
|
|
// 修改为 (60x40传感器)
|
|||
|
|
#include "Sensor/HTPA60x40dR1L0.9/HTPA_Sensor60x40.h"
|
|||
|
|
HTPA60x40 thermal_sensor;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**或者使用条件编译方式**:
|
|||
|
|
```cpp
|
|||
|
|
// 推荐方式:使用条件编译,便于切换测试
|
|||
|
|
#define USE_HTPA60x40 // 新增这一行
|
|||
|
|
|
|||
|
|
#ifdef USE_HTPA60x40
|
|||
|
|
#include "Sensor/HTPA60x40dR1L0.9/HTPA_Sensor60x40.h"
|
|||
|
|
HTPA60x40 thermal_sensor;
|
|||
|
|
#define THERMAL_PIXELS 2400
|
|||
|
|
#define THERMAL_COLS 60
|
|||
|
|
#define THERMAL_ROWS 40
|
|||
|
|
#else
|
|||
|
|
#include "Sensor/HTPAd32x32L1k7/HTPA_Sensor32_2.h"
|
|||
|
|
HTPA32_2 thermal_sensor;
|
|||
|
|
#define THERMAL_PIXELS 1024
|
|||
|
|
#define THERMAL_COLS 32
|
|||
|
|
#define THERMAL_ROWS 32
|
|||
|
|
#endif
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 1.2 修改数据处理逻辑
|
|||
|
|
|
|||
|
|
**查找并修改以下代码段**:
|
|||
|
|
|
|||
|
|
```cpp
|
|||
|
|
// 原代码:32x32数据处理
|
|||
|
|
uint16_t thermal_data[1024];
|
|||
|
|
if (thermal_sensor.getData(thermal_data, 1024)) {
|
|||
|
|
// 处理1024个像素
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 修改为:60x40数据处理
|
|||
|
|
uint16_t thermal_data[THERMAL_PIXELS];
|
|||
|
|
if (thermal_sensor.getData(thermal_data, THERMAL_PIXELS)) {
|
|||
|
|
// 处理2400个像素
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 或者使用新的API获取温度数据
|
|||
|
|
float thermal_temps[THERMAL_PIXELS];
|
|||
|
|
if (thermal_sensor.getThermalData60x40(thermal_temps)) {
|
|||
|
|
// 直接获取温度值,无需额外转换
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 步骤2:火灾检测算法调整
|
|||
|
|
|
|||
|
|
#### 2.1 修改火灾检测参数
|
|||
|
|
|
|||
|
|
**位置**:查找火灾检测相关的文件 (可能在 `FireDetection.cpp` 或类似文件中)
|
|||
|
|
|
|||
|
|
**需要调整的参数**:
|
|||
|
|
```cpp
|
|||
|
|
// 原参数 (32x32)
|
|||
|
|
#define FIRE_DETECTION_GRID_SIZE 32
|
|||
|
|
#define FIRE_DETECTION_PIXELS 1024
|
|||
|
|
#define HOT_SPOT_THRESHOLD_PIXELS 10 // 约1%的像素
|
|||
|
|
|
|||
|
|
// 新参数 (60x40)
|
|||
|
|
#define FIRE_DETECTION_GRID_SIZE_X 60
|
|||
|
|
#define FIRE_DETECTION_GRID_SIZE_Y 40
|
|||
|
|
#define FIRE_DETECTION_PIXELS 2400
|
|||
|
|
#define HOT_SPOT_THRESHOLD_PIXELS 24 // 约1%的像素
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 2.2 优化检测算法
|
|||
|
|
|
|||
|
|
**建议使用降采样方式保持性能**:
|
|||
|
|
```cpp
|
|||
|
|
// 方案1:使用8x5网格 (40个数据点,与32x32接近)
|
|||
|
|
float grid_data[40];
|
|||
|
|
if (thermal_sensor.getThermalGrid8x5(grid_data)) {
|
|||
|
|
// 使用现有的火灾检测算法,数据量相近
|
|||
|
|
fire_detection_algorithm(grid_data, 8, 5);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 方案2:使用12x8网格 (96个数据点,更精细)
|
|||
|
|
float grid_data[96];
|
|||
|
|
if (thermal_sensor.getThermalGrid12x8(grid_data)) {
|
|||
|
|
// 需要调整算法以适应12x8网格
|
|||
|
|
fire_detection_algorithm_enhanced(grid_data, 12, 8);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 方案3:使用区域检测 (推荐用于火灾检测)
|
|||
|
|
float center_temp, edge_temp;
|
|||
|
|
thermal_sensor.getRegionTemperature(20, 15, 20, 10, ¢er_temp); // 中心区域
|
|||
|
|
thermal_sensor.getRegionTemperature(0, 0, 60, 5, &edge_temp); // 边缘区域
|
|||
|
|
|
|||
|
|
if (center_temp - edge_temp > FIRE_THRESHOLD_DIFF) {
|
|||
|
|
// 检测到可能的火源
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 步骤3:网络传输调整
|
|||
|
|
|
|||
|
|
#### 3.1 修改数据传输格式
|
|||
|
|
|
|||
|
|
**位置**:查找网络传输相关代码 (可能在 `WiFiManager.cpp` 或 `DataTransmission.cpp` 中)
|
|||
|
|
|
|||
|
|
**原代码示例**:
|
|||
|
|
```cpp
|
|||
|
|
// 32x32数据传输 (2KB)
|
|||
|
|
uint8_t data_buffer[2048];
|
|||
|
|
// 打包1024个像素数据
|
|||
|
|
|
|||
|
|
// 发送到Android应用
|
|||
|
|
send_thermal_data(data_buffer, 2048);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**修改为**:
|
|||
|
|
```cpp
|
|||
|
|
// 60x40数据传输 (4.8KB) - 可能需要分包或压缩
|
|||
|
|
uint8_t data_buffer[4800];
|
|||
|
|
// 打包2400个像素数据
|
|||
|
|
|
|||
|
|
// 方案1:分包传输
|
|||
|
|
send_thermal_data_chunked(data_buffer, 4800, 1200); // 分4包发送
|
|||
|
|
|
|||
|
|
// 方案2:发送降采样数据 (推荐)
|
|||
|
|
float grid_data[96]; // 12x8网格
|
|||
|
|
if (thermal_sensor.getThermalGrid12x8(grid_data)) {
|
|||
|
|
send_thermal_grid(grid_data, 12, 8); // 只发送384字节
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 方案3:只在检测到异常时发送完整数据
|
|||
|
|
if (fire_detected) {
|
|||
|
|
send_full_thermal_data(data_buffer, 4800);
|
|||
|
|
} else {
|
|||
|
|
send_thermal_summary(grid_data, 96);
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 步骤4:Android应用适配
|
|||
|
|
|
|||
|
|
#### 4.1 修改Android端接收代码
|
|||
|
|
|
|||
|
|
**位置**:`Smarthome_android/app/src/main/java/com/archesens/android/`
|
|||
|
|
|
|||
|
|
**查找并修改**:
|
|||
|
|
```java
|
|||
|
|
// 原代码
|
|||
|
|
private static final int THERMAL_PIXELS = 1024;
|
|||
|
|
private static final int THERMAL_COLS = 32;
|
|||
|
|
private static final int THERMAL_ROWS = 32;
|
|||
|
|
|
|||
|
|
// 修改为
|
|||
|
|
private static final int THERMAL_PIXELS = 2400;
|
|||
|
|
private static final int THERMAL_COLS = 60;
|
|||
|
|
private static final int THERMAL_ROWS = 40;
|
|||
|
|
|
|||
|
|
// 或者支持动态切换
|
|||
|
|
private int thermalPixels = 1024; // 默认值
|
|||
|
|
private int thermalCols = 32;
|
|||
|
|
private int thermalRows = 32;
|
|||
|
|
|
|||
|
|
// 在接收到传感器信息时更新
|
|||
|
|
public void updateSensorInfo(int pixels, int cols, int rows) {
|
|||
|
|
this.thermalPixels = pixels;
|
|||
|
|
this.thermalCols = cols;
|
|||
|
|
this.thermalRows = rows;
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 4.2 修改显示界面
|
|||
|
|
|
|||
|
|
**查找热成像显示相关的Activity或Fragment**:
|
|||
|
|
```java
|
|||
|
|
// 原代码:32x32网格显示
|
|||
|
|
GridView thermalGrid = findViewById(R.id.thermal_grid);
|
|||
|
|
ThermalAdapter adapter = new ThermalAdapter(this, 32, 32);
|
|||
|
|
|
|||
|
|
// 修改为:60x40网格显示
|
|||
|
|
GridView thermalGrid = findViewById(R.id.thermal_grid);
|
|||
|
|
ThermalAdapter adapter = new ThermalAdapter(this, 60, 40);
|
|||
|
|
|
|||
|
|
// 或者使用降采样显示
|
|||
|
|
ThermalAdapter adapter = new ThermalAdapter(this, 12, 8); // 显示12x8网格
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 步骤5:内存配置调整
|
|||
|
|
|
|||
|
|
#### 5.1 修改ESP32内存配置
|
|||
|
|
|
|||
|
|
**位置**:`firefly_esp32/sdkconfig` 或通过 `idf.py menuconfig`
|
|||
|
|
|
|||
|
|
**需要调整的配置**:
|
|||
|
|
```
|
|||
|
|
# 增加主任务堆栈大小
|
|||
|
|
CONFIG_ESP_MAIN_TASK_STACK_SIZE=8192
|
|||
|
|
|
|||
|
|
# 增加最小堆大小
|
|||
|
|
CONFIG_FREERTOS_HEAP_SIZE_MIN=32768
|
|||
|
|
|
|||
|
|
# 如果使用PSRAM,启用PSRAM支持
|
|||
|
|
CONFIG_ESP32_SPIRAM_SUPPORT=y
|
|||
|
|
CONFIG_SPIRAM_USE_MALLOC=y
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 5.2 修改CMakeLists.txt
|
|||
|
|
|
|||
|
|
**位置**:`firefly_esp32/main/CMakeLists.txt`
|
|||
|
|
|
|||
|
|
**添加新传感器库**:
|
|||
|
|
```cmake
|
|||
|
|
# 原代码
|
|||
|
|
set(COMPONENT_SRCS
|
|||
|
|
"main.cpp"
|
|||
|
|
"Sensor/HTPAd32x32L1k7/HTPA_Sensor32_2.cpp"
|
|||
|
|
# ... 其他文件
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# 修改为 (或添加)
|
|||
|
|
set(COMPONENT_SRCS
|
|||
|
|
"main.cpp"
|
|||
|
|
"Sensor/HTPA60x40dR1L0.9/HTPA_Sensor60x40.cpp"
|
|||
|
|
"Sensor/HTPA60x40dR1L0.9/htpa60x40_lookuptable.cpp"
|
|||
|
|
# ... 其他文件
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# 添加包含目录
|
|||
|
|
set(COMPONENT_ADD_INCLUDEDIRS
|
|||
|
|
"."
|
|||
|
|
"Sensor/HTPA60x40dR1L0.9"
|
|||
|
|
# ... 其他目录
|
|||
|
|
)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🧪 测试验证步骤
|
|||
|
|
|
|||
|
|
### 第1步:硬件连接测试
|
|||
|
|
```cpp
|
|||
|
|
// 在main.cpp中添加测试代码
|
|||
|
|
void test_sensor_connection() {
|
|||
|
|
ESP_LOGI("TEST", "Testing HTPA60x40 sensor connection...");
|
|||
|
|
|
|||
|
|
esp_err_t ret = thermal_sensor.init();
|
|||
|
|
if (ret == ESP_OK) {
|
|||
|
|
ESP_LOGI("TEST", "✅ Sensor initialized successfully");
|
|||
|
|
ESP_LOGI("TEST", "Pixels: %d, Cols: %d, Rows: %d",
|
|||
|
|
thermal_sensor.getPixelCount(),
|
|||
|
|
thermal_sensor.getColumnCount(),
|
|||
|
|
thermal_sensor.getRowCount());
|
|||
|
|
} else {
|
|||
|
|
ESP_LOGE("TEST", "❌ Sensor initialization failed: %s", esp_err_to_name(ret));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 第2步:数据读取测试
|
|||
|
|
```cpp
|
|||
|
|
void test_data_reading() {
|
|||
|
|
ESP_LOGI("TEST", "Testing data reading...");
|
|||
|
|
|
|||
|
|
if (thermal_sensor.process()) {
|
|||
|
|
// 测试完整数据读取
|
|||
|
|
float thermal_data[2400];
|
|||
|
|
if (thermal_sensor.getThermalData60x40(thermal_data)) {
|
|||
|
|
ESP_LOGI("TEST", "✅ Full data reading successful");
|
|||
|
|
ESP_LOGI("TEST", "Sample temperatures: %.2f, %.2f, %.2f",
|
|||
|
|
thermal_data[0], thermal_data[1200], thermal_data[2399]);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 测试网格数据读取
|
|||
|
|
float grid_data[40];
|
|||
|
|
if (thermal_sensor.getThermalGrid8x5(grid_data)) {
|
|||
|
|
ESP_LOGI("TEST", "✅ Grid data reading successful");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 测试最热点检测
|
|||
|
|
float hot_temp, cold_temp;
|
|||
|
|
uint8_t hot_x, hot_y, cold_x, cold_y;
|
|||
|
|
if (thermal_sensor.getHotColdSpots(&hot_temp, &hot_x, &hot_y,
|
|||
|
|
&cold_temp, &cold_x, &cold_y)) {
|
|||
|
|
ESP_LOGI("TEST", "✅ Hot spot: %.2f°C at (%d,%d)", hot_temp, hot_x, hot_y);
|
|||
|
|
ESP_LOGI("TEST", "✅ Cold spot: %.2f°C at (%d,%d)", cold_temp, cold_x, cold_y);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 第3步:性能测试
|
|||
|
|
```cpp
|
|||
|
|
void test_performance() {
|
|||
|
|
ESP_LOGI("TEST", "Testing performance...");
|
|||
|
|
|
|||
|
|
uint32_t start_time = esp_timer_get_time();
|
|||
|
|
|
|||
|
|
for (int i = 0; i < 10; i++) {
|
|||
|
|
if (thermal_sensor.process()) {
|
|||
|
|
float grid_data[40];
|
|||
|
|
thermal_sensor.getThermalGrid8x5(grid_data);
|
|||
|
|
}
|
|||
|
|
vTaskDelay(pdMS_TO_TICKS(250));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
uint32_t end_time = esp_timer_get_time();
|
|||
|
|
uint32_t avg_time = (end_time - start_time) / 10;
|
|||
|
|
|
|||
|
|
ESP_LOGI("TEST", "Average processing time: %d ms", avg_time / 1000);
|
|||
|
|
ESP_LOGI("TEST", "Free heap: %d bytes", esp_get_free_heap_size());
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🚨 常见问题解决
|
|||
|
|
|
|||
|
|
### 问题1:内存不足
|
|||
|
|
**现象**:
|
|||
|
|
```
|
|||
|
|
E (xxx) HTPA60x40: Memory allocation failed for 2400 pixels
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**解决方案**:
|
|||
|
|
1. 检查 `sdkconfig` 中的内存配置
|
|||
|
|
2. 使用 `esp_get_free_heap_size()` 监控内存使用
|
|||
|
|
3. 考虑使用PSRAM或优化其他内存使用
|
|||
|
|
|
|||
|
|
### 问题2:I2C通信失败
|
|||
|
|
**现象**:
|
|||
|
|
```
|
|||
|
|
E (xxx) HTPA60x40: Sensor initialization failed, check connections
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**解决方案**:
|
|||
|
|
1. 检查硬件连接(SDA、SCL、电源、地线)
|
|||
|
|
2. 使用万用表测试I2C信号
|
|||
|
|
3. 检查I2C地址是否正确 (0x1A)
|
|||
|
|
|
|||
|
|
### 问题3:数据处理缓慢
|
|||
|
|
**现象**:系统响应变慢,帧率下降
|
|||
|
|
|
|||
|
|
**解决方案**:
|
|||
|
|
1. 使用降采样方法减少数据量
|
|||
|
|
2. 优化算法,避免不必要的计算
|
|||
|
|
3. 考虑使用FreeRTOS任务分离数据处理
|
|||
|
|
|
|||
|
|
### 问题4:温度读数异常
|
|||
|
|
**现象**:温度值明显不正确
|
|||
|
|
|
|||
|
|
**解决方案**:
|
|||
|
|
1. 检查查找表是否正确加载
|
|||
|
|
2. 验证EEPROM校准数据读取
|
|||
|
|
3. 对比已知温度源进行校准
|
|||
|
|
|
|||
|
|
## 📋 检查清单
|
|||
|
|
|
|||
|
|
### 硬件检查 ✓
|
|||
|
|
- [ ] 传感器正确安装
|
|||
|
|
- [ ] I2C连接正确 (GPIO14/21)
|
|||
|
|
- [ ] 电源供应充足 (3.3V, >150mA)
|
|||
|
|
- [ ] 传感器视野无遮挡
|
|||
|
|
|
|||
|
|
### 代码修改 ✓
|
|||
|
|
- [ ] 主程序包含文件已更新
|
|||
|
|
- [ ] 传感器对象声明已修改
|
|||
|
|
- [ ] 数据处理逻辑已适配
|
|||
|
|
- [ ] 火灾检测算法已调整
|
|||
|
|
- [ ] 网络传输已优化
|
|||
|
|
- [ ] Android应用已适配
|
|||
|
|
|
|||
|
|
### 配置调整 ✓
|
|||
|
|
- [ ] ESP32内存配置已增加
|
|||
|
|
- [ ] CMakeLists.txt已更新
|
|||
|
|
- [ ] 编译配置正确
|
|||
|
|
|
|||
|
|
### 测试验证 ✓
|
|||
|
|
- [ ] 硬件连接测试通过
|
|||
|
|
- [ ] 数据读取测试通过
|
|||
|
|
- [ ] 性能测试满足要求
|
|||
|
|
- [ ] 火灾检测功能正常
|
|||
|
|
- [ ] Android应用显示正常
|
|||
|
|
|
|||
|
|
## 📞 技术支持
|
|||
|
|
|
|||
|
|
### 文档参考
|
|||
|
|
- **传感器技术文档**:`firefly_esp32/main/Sensor/HTPA60x40dR1L0.9/README.md`
|
|||
|
|
- **API参考**:查看头文件 `HTPA_Sensor60x40.h`
|
|||
|
|
- **原32x32实现**:`firefly_esp32/main/Sensor/HTPAd32x32L1k7/`
|
|||
|
|
|
|||
|
|
### 调试技巧
|
|||
|
|
```cpp
|
|||
|
|
// 启用详细日志
|
|||
|
|
esp_log_level_set("HTPA60x40", ESP_LOG_DEBUG);
|
|||
|
|
|
|||
|
|
// 监控系统状态
|
|||
|
|
ESP_LOGI("DEBUG", "Free heap: %d, Min free: %d",
|
|||
|
|
esp_get_free_heap_size(), esp_get_minimum_free_heap_size());
|
|||
|
|
|
|||
|
|
// 性能监控
|
|||
|
|
uint32_t start = esp_timer_get_time();
|
|||
|
|
// ... 执行代码 ...
|
|||
|
|
uint32_t duration = esp_timer_get_time() - start;
|
|||
|
|
ESP_LOGI("PERF", "Operation took %d ms", duration / 1000);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 联系信息
|
|||
|
|
- **原开发者**:fw <kingfun2000@qq.com>
|
|||
|
|
- **项目仓库**:查看项目根目录的README文件
|
|||
|
|
- **Heimann技术支持**:参考传感器官方文档
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 总结
|
|||
|
|
|
|||
|
|
新传感器升级主要涉及:
|
|||
|
|
1. **硬件连接**:相同接口,注意功耗
|
|||
|
|
2. **代码修改**:主要是数据量和分辨率的调整
|
|||
|
|
3. **性能优化**:使用降采样保持响应速度
|
|||
|
|
4. **充分测试**:确保所有功能正常工作
|
|||
|
|
|
|||
|
|
**关键提醒**:
|
|||
|
|
- 新传感器代码已预先准备好,主要是集成工作
|
|||
|
|
- 建议使用条件编译,便于问题时回退到32x32版本
|
|||
|
|
- 重点关注内存使用和处理性能
|
|||
|
|
- 火灾检测算法可能需要重新调优参数
|
|||
|
|
|
|||
|
|
**预计工作量**:1-2天完成代码修改,1周完成测试验证
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**文档版本**:v1.0
|
|||
|
|
**创建时间**:2026年2月26日
|
|||
|
|
**适用版本**:ESP32固件v2.1.0+, Android应用v1.0.0+
|
|||
|
|
**作者**:fw (离职前准备文档)
|