Files
Bionic_sphere/项目开发日志.md
T
Misaki 48f208b2e6 1. 完成了语音识别的C++业务层封装,测试通过
2. 试着测试了一下LVGL_GIF渲染+音乐播放+语音识别的组合简单优化后,
          发现lvgl渲染略显卡顿,语音识别有缓冲区空警告,不过无伤大雅,还需要进一步深度优化。
2025-09-23 03:17:23 +08:00

249 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 项目开发日志
#### 此文件用于记录本项目开发过程中所一步步完成的事情,以及遇到的一些问题及其对应的解决方案
#### 2025.8.22 ~ 8.24 官方驱动测试
#### Day1 2025.8.22
##### 主要目标:测试开发板官方提供的例程中的驱动能否使用
实际完成任务:
- [x] 1. 实现了Linux下的esp idf的一键编译,烧录,与监视,并且监视具有交互能力
- [x] 2. 测试了QMI8658的驱动,正常读出x,y,z轴数据,得到的pitch, roll, yaw正常
#### Day2 2025.8.23
##### 主要目标:测试开发板官方提供的例程中的驱动能否使用
实际完成任务:
- [x] 1. 测试了电池adc的驱动,正常读出数据,且电压与万用表示一致,测试通过
- [x] 2. 测试了wifi的驱动,连带着蓝牙一同测试,带着蓝牙则测试不通过,需要重写蓝牙驱动代码
#### Day3 2025.8.24
##### 主要目标:测试开发板官方提供的例程中的驱动能否使用
实际完成任务:
- [x] 1. 修改wifi的驱动代码,并且进行了测试,测试通过
```shell
Found 5 WiFi APs:
1: SSID: Misaki-2.4G, BSSID: 14:EA:A1:1C:32:FA, RSSI: -38, Auth: 4
2: SSID: FAST_3711, BSSID: D4:83:04:6C:37:11, RSSI: -81, Auth: 0
3: SSID: Tenda_E25070, BSSID: 08:40:F3:E2:50:74, RSSI: -82, Auth: 3
4: SSID: zhangyanyan, BSSID: 76:54:27:19:5B:D3, RSSI: -90, Auth: 4
5: SSID: zhangyanyan, BSSID: 74:54:27:39:5B:D3, RSSI: -91, Auth: 4
```
- [x] 2. 蓝牙,wifi测试成功
```shell
Found 8 WiFi APs:
1: SSID: sakimi, BSSID: 16:29:EF:3D:0E:9E, RSSI: -26, Auth: 3
2: SSID: Misaki-2.4G, BSSID: 14:EA:A1:1C:32:FA, RSSI: -38, Auth: 4
3: SSID: Tenda_E25070, BSSID: 08:40:F3:E2:50:74, RSSI: -76, Auth: 3
4: SSID: TP-LINK_FCBF, BSSID: 94:D9:B3:1F:FC:BF, RSSI: -87, Auth: 4
5: SSID: FAST_3711, BSSID: D4:83:04:6C:37:11, RSSI: -88, Auth: 0
6: SSID: zhangyanyan, BSSID: 76:54:27:19:5B:D3, RSSI: -91, Auth: 4
7: SSID: MERCURY_2.4G_8192, BSSID: 00:5C:C2:E2:81:92, RSSI: -92, Auth: 4
8: SSID: zhangyanyan, BSSID: 74:54:27:39:5B:D3, RSSI: -93, Auth: 4
Found 3 BLE devices:
1: Name: Unknown, Address: 4C:1F:A1:B9:79:21, RSSI: -59
2: Name: Unknown, Address: 4C:D5:B2:FF:9C:21, RSSI: -65
3: Name: Unknown, Address: 5C:DF:7A:44:9E:95, RSSI: -94
```
- [x] 3. 新增分区表,为板载16M的flash作分区规划,预留ota
```text
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, , 0x6000,
otadata, data, ota, , 0x2000,
phy_init, data, phy, , 0x1000,
ota_0, app, ota_0, , 6M,
ota_1, app, ota_1, , 6M,
storage, data, spiffs, , 3M,
coredump, data, coredump,, 64K,
```
- [x] 4. 测试了SD卡的驱动,正常读出数据,测试通过
```shell
Name: SD32G
Type: SDHC/SDXC
Speed: 20.00 MHz (limit: 20.00 MHz)
Size: 30436MB
CSD: ver=2, sector_size=512, capacity=62333952 read_bl_len=9
SSR: bus_width=1
SD卡初始化成功,容量: 30436 MB
2. 获取Flash大小...
Flash size: 16 MB
Flash大小: 16 MB
3. 测试文件写入...
I (461) SD: Opening file /sdcard/test.txt
I (481) SD: File written
文件写入成功: /sdcard/test.txt
4. 测试文件读取...
I (481) SD: Reading file /sdcard/test.txt
I (491) SD: Read from file: '这是一段测试数据,用于验证SD卡写入功能。'
5. 测试文件打开功能...
I (501) SD: Attempting to open file: /sdcard/test.txt
File /sdcard/test.txt was successfully opened.
文件打开成功
6. 测试文件夹检索功能...
File found: /sdcard/test.txt
I (521) SD: Retrieved 1 files with extension '.txt'
找到 1 个txt文件:
1. test.txt
=== SD卡模块测试完成 ===
```
- [x] 5. 新增了CMake配置,just_monitor(monitor_only.sh),只监视,无编译,无烧录
```cmake
# 只监视,而不做编译与烧录
add_custom_target(just_monitor
COMMAND ${CMAKE_COMMAND} -E env
"IDF_PATH=$ENV{IDF_PATH}"
${CMAKE_SOURCE_DIR}/monitor_only.sh
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
USES_TERMINAL
COMMENT "Launch Konsole with idf.py monitor (no build/flash)"
)
```
- [x] 6. 测试了外部高精度RTC(PCF85063)的驱动,时钟功能正常,测试通过
```text
驱动位置位于:Lib/PCF85063
```
- [x] 7. 测试了IO拓展芯片TCA9554PWR,测试结果正常,测试通过
```shell
I (356) TCA9554PWR_TEST: ====== TCA9554PWR 综合测试开始 ======
I (366) I2C: I2C initialized successfully
I (366) TCA9554PWR_TEST: >> 测试1:输出寄存器读写测试
I (386) TCA9554PWR_TEST: 写入 0xAA,读回 0xAA
I (386) TCA9554PWR_TEST: 测试1 通过
I (386) TCA9554PWR_TEST: >> 测试2:配置寄存器读写测试
I (396) TCA9554PWR_TEST: 写入 0xFF(全输入),读回 0xFF
I (406) TCA9554PWR_TEST: 写入 0x00(全输出),读回 0x00
I (406) TCA9554PWR_TEST: 测试2 通过
I (406) TCA9554PWR_TEST: >> 测试3:单管脚输出翻转测试
I (426) TCA9554PWR_TEST: IO1 置高,请观察电平
I (926) TCA9554PWR_TEST: IO1 置低,请观察电平
I (1426) TCA9554PWR_TEST: IO1 Toggle 1
I (1926) TCA9554PWR_TEST: IO1 Toggle 2
I (2426) TCA9554PWR_TEST: 测试3 完成(请确认 LED/万用表现象)
I (2426) TCA9554PWR_TEST: >> 测试48位整体输出测试
I (2436) TCA9554PWR_TEST: 输出 0x55 (二进制:
01010101)
I (3436) TCA9554PWR_TEST: 输出 0xAA (二进制:
10101010)
I (4436) TCA9554PWR_TEST: 输出 0xFF (二进制:
11111111)
I (5436) TCA9554PWR_TEST: 输出 0x00 (二进制:
00000000)
```
- [x] 8. 添加了esp-idf的几个组件,基于main/idf_component.yml的配置,用于应用层快速开发
```yaml
dependencies:
idf: ">=4.4"
lvgl/lvgl: "~8.3.0"
chmorgan/esp-audio-player: "==1.0.7"
chmorgan/esp-libhelix-mp3: "==1.0.3"
espressif/esp-sr: "~1.9.4"
```
- [x] 9. 测试了音频播放功能,测试通过
#### Day4 2025.8.25
##### 主要目标:测试开发板官方提供的例程中的驱动能否使用
实际完成任务:
- [x] 1. 测试了屏幕驱动,lvgl,触摸,驱动文件在Lib/Display当中。全部通过(修改了sdkconfig,以适配lvgl)
- [x] 2. 新增了优雅的C语言错误处理
- [x] 3. 完成了gif的显示测试(使用lvgl当中的gif解码器),测试通过
#### Day5 2025.8.26
##### 主要目标:测试开发板官方提供的例程中的驱动能否使用
实际完成任务:
- [x] 1. 优化了项目结构
#### Day6 2025.8.27
##### 主要目标:测试开发板官方提供的例程中的驱动能否使用
实际完成任务:
- [x] 1. 完成了SDMMC的超频,从20MHz提升到40MHz,测试通过
#### Day7 2025.8.27
##### 主要目标:测试开发板官方提供的例程中的驱动能否使用
实际完成任务:
- [x] 1. 完成了PWR按键相关的测试,测试通过
#### Day8 2025.9.1
##### 主要目标:测试开发板官方提供的例程中的驱动能否使用
实际完成任务:
- [x] 1. 完成了语言识别测试,测试基本通过,后续需要修改从sd卡导入模型以配合ota
#### Day9 2025.9.2
##### 主要目标:完成具体业务开发&各种优化
实际完成任务:
- [x] 1. 进一步拓展了语音识别,目前可以从sd卡导入模型,避免了model文件占用flash分区大小
- [x] 2. 进一步修改了语音识别,关闭了关键词唤醒功能,只保留了指令识别功能
#### Day10 2025.9.3
##### 主要目标:完成具体业务开发&各种优化
实际完成任务:
- [x] 1. 构建了业务层的基本框架(增加了底层驱动对于的C++兼容),业务代码采用C++编写,启用了RTTI(运行时类型识别)
#### Day11 2025.9.4
##### 主要目标:完成具体业务开发&各种优化
实际完成任务:
- [x] 1. 完成了ota功能的基本测试,测试通过
- [x] 2. 封装了一个模板线程类,支持创建来自单例类的成员函数线程,普通类的线程,普通函数线程
- [x] 3. 封装了一个Wifi模块类,支持Wifi的各种基本配置
#### Day12 2025.9.9(前三天在打数学建模国赛)
##### 主要目标:完成具体业务开发&各种优化
实际完成任务:
- [x] 1. 完整封装并拓展了SD卡文件管理类,支持基本文件管理功能
- [x] 2. 简单封装了LVGL渲染类,已经封装好了gif渲染功能
- [x] 3. 修复了硬件厂商提供的驱动的Bug
- [x] 4. 初步定义了宠物基类的抽象信息
#### Day13 2025.9.12(前两天在忙考研复习)
##### 主要目标:完成具体业务开发&各种优化
实际完成任务:
- [x] 1. 完成了对音频播放类的完整C++封装,测试通过
- [x] 2. 修复了LVGL渲染类当中的一些小bug
- [x] 3. 增加了一些CPU资源占用的日志打印函数,运行在主线程当中
- [x] 4. 完善了底层通信类的封装,基于websocket,尚未测试
#### Day14 2025.9.15
##### 主要目标:完成具体业务开发&各种优化
实际完成任务:
- [x] 1. 历时两天,完整且完美的设计了宠物类,使用到了多种设计模式,完成了低耦合,高内聚的完美代码,测试也完美通过。
- [x] 2. 顺便完善了底层通信类的封装,基于websocket,基准测试通过,但存在一点很小的线程bug,似乎是来自于esp32 idf底层的问题,待解决
#### Day15 2025.9.16
##### 主要目标:完成具体业务开发&各种优化
实际完成任务:
- [x] 1. 完成了语音识别的C++业务层封装,测试通过
- [x] 2. 试着测试了一下LVGL_GIF渲染+音乐播放+语音识别的组合简单优化后,
发现lvgl渲染略显卡顿,语音识别有缓冲区空警告,不过无伤大雅,还需要进一步深度优化。
#### Day15 2025.9.19(前两天在忙考研复习)
##### 主要目标:完成具体业务开发&各种优化
实际完成任务:
- [x] 1. 在优化几个主要的任务的CPU占有中,不断的调整任务优先级,效果并不明显,但突然注意到测试的音频为CD级别品质,
这种音频一般的MP3解码都非常吃力,而且产品也用不到这种级别的音频,因此只是简单的降低音频品质,
从44100Hz降低到16KHz,测试结果表明,音频播放任务CPU占有从30%降低到5%,在测试中,其余几个任务都及时地上CPU运行了
#### Day16 2025.9.23(前两天在忙考研复习)
##### 主要目标:完成具体业务开发&各种优化
实际完成任务:
- [x] 1. 基于cJSON进行了上层现代C++封装,作为脚手架使用
- [x] 2. 在esp32s3剩余的flash当中开辟了一个文件系统,用于保存设备重要配置信息