Files
Bionic_sphere/项目开发日志.md
T
Misaki ba5e47bc77 这是一次长久的提交:
1. 应用界面增加了返回主页的按钮
2. 修复了gif渲染内存泄漏的严重bug
3. 将PetDao当中的cJSON API替换为cpp_json,完美通过测试
4. 整合已经实现的各种上层建筑,实现了一个宠物对话基本业务应用,用于样品测试展示用
5. 重构了音频播放类,使其更modern,更加便于移植和拓展
2025-10-16 11:36:45 +08:00

12 KiB
Raw Blame History

项目开发日志

此文件用于记录本项目开发过程中所一步步完成的事情,以及遇到的一些问题及其对应的解决方案

2025.8.22 ~ 8.24 官方驱动测试

Day1 2025.8.22

主要目标:测试开发板官方提供的例程中的驱动能否使用

实际完成任务:

  • 1. 实现了Linux下的esp idf的一键编译,烧录,与监视,并且监视具有交互能力
  • 2. 测试了QMI8658的驱动,正常读出x,y,z轴数据,得到的pitch, roll, yaw正常

Day2 2025.8.23

主要目标:测试开发板官方提供的例程中的驱动能否使用

实际完成任务:

  • 1. 测试了电池adc的驱动,正常读出数据,且电压与万用表示一致,测试通过
  • 2. 测试了wifi的驱动,连带着蓝牙一同测试,带着蓝牙则测试不通过,需要重写蓝牙驱动代码

Day3 2025.8.24

主要目标:测试开发板官方提供的例程中的驱动能否使用

实际完成任务:

  • 1. 修改wifi的驱动代码,并且进行了测试,测试通过

    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
    
  • 2. 蓝牙,wifi测试成功

    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
    
  • 3. 新增分区表,为板载16M的flash作分区规划,预留ota

    # 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,
    
  • 4. 测试了SD卡的驱动,正常读出数据,测试通过

    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卡模块测试完成 ===
    
  • 5. 新增了CMake配置,just_monitor(monitor_only.sh),只监视,无编译,无烧录

    # 只监视,而不做编译与烧录
    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)"
    )
    
  • 6. 测试了外部高精度RTC(PCF85063)的驱动,时钟功能正常,测试通过

    驱动位置位于:Lib/PCF85063
    
  • 7. 测试了IO拓展芯片TCA9554PWR,测试结果正常,测试通过

    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)
    
  • 8. 添加了esp-idf的几个组件,基于main/idf_component.yml的配置,用于应用层快速开发

    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"
    
  • 9. 测试了音频播放功能,测试通过

Day4 2025.8.25

主要目标:测试开发板官方提供的例程中的驱动能否使用

实际完成任务:

  • 1. 测试了屏幕驱动,lvgl,触摸,驱动文件在Lib/Display当中。全部通过(修改了sdkconfig,以适配lvgl)

  • 2. 新增了优雅的C语言错误处理

  • 3. 完成了gif的显示测试(使用lvgl当中的gif解码器),测试通过

Day5 2025.8.26

主要目标:测试开发板官方提供的例程中的驱动能否使用

实际完成任务:

  • 1. 优化了项目结构

Day6 2025.8.27

主要目标:测试开发板官方提供的例程中的驱动能否使用

实际完成任务:

  • 1. 完成了SDMMC的超频,从20MHz提升到40MHz,测试通过

Day7 2025.8.27

主要目标:测试开发板官方提供的例程中的驱动能否使用

实际完成任务:

  • 1. 完成了PWR按键相关的测试,测试通过

Day8 2025.9.1

主要目标:测试开发板官方提供的例程中的驱动能否使用

实际完成任务:

  • 1. 完成了语言识别测试,测试基本通过,后续需要修改从sd卡导入模型以配合ota

Day9 2025.9.2

主要目标:完成具体业务开发&各种优化

实际完成任务:

  • 1. 进一步拓展了语音识别,目前可以从sd卡导入模型,避免了model文件占用flash分区大小

  • 2. 进一步修改了语音识别,关闭了关键词唤醒功能,只保留了指令识别功能

Day10 2025.9.3

主要目标:完成具体业务开发&各种优化

实际完成任务:

  • 1. 构建了业务层的基本框架(增加了底层驱动对于的C++兼容),业务代码采用C++编写,启用了RTTI(运行时类型识别)

Day11 2025.9.4

主要目标:完成具体业务开发&各种优化

实际完成任务:

  • 1. 完成了ota功能的基本测试,测试通过

  • 2. 封装了一个模板线程类,支持创建来自单例类的成员函数线程,普通类的线程,普通函数线程

  • 3. 封装了一个Wifi模块类,支持Wifi的各种基本配置

Day12 2025.9.9(前三天在打数学建模国赛)

主要目标:完成具体业务开发&各种优化

实际完成任务:

  • 1. 完整封装并拓展了SD卡文件管理类,支持基本文件管理功能

  • 2. 简单封装了LVGL渲染类,已经封装好了gif渲染功能

  • 3. 修复了硬件厂商提供的驱动的Bug

  • 4. 初步定义了宠物基类的抽象信息

Day13 2025.9.12(前两天在忙考研复习)

主要目标:完成具体业务开发&各种优化

实际完成任务:

  • 1. 完成了对音频播放类的完整C++封装,测试通过

  • 2. 修复了LVGL渲染类当中的一些小bug

  • 3. 增加了一些CPU资源占用的日志打印函数,运行在主线程当中

  • 4. 完善了底层通信类的封装,基于websocket,尚未测试

Day14 2025.9.15

主要目标:完成具体业务开发&各种优化

实际完成任务:

  • 1. 历时两天,完整且完美的设计了宠物类,使用到了多种设计模式,完成了低耦合,高内聚的完美代码,测试也完美通过。

  • 2. 顺便完善了底层通信类的封装,基于websocket,基准测试通过,但存在一点很小的线程bug,似乎是来自于esp32 idf底层的问题,待解决

Day15 2025.9.16

主要目标:完成具体业务开发&各种优化

实际完成任务:

  • 1. 完成了语音识别的C++业务层封装,测试通过

  • 2. 试着测试了一下LVGL_GIF渲染+音乐播放+语音识别的组合简单优化后, 发现lvgl渲染略显卡顿,语音识别有缓冲区空警告,不过无伤大雅,还需要进一步深度优化。

Day15 2025.9.19(前两天在忙考研复习)

主要目标:完成具体业务开发&各种优化

实际完成任务:

  • 1. 在优化几个主要的任务的CPU占有中,不断的调整任务优先级,效果并不明显,但突然注意到测试的音频为CD级别品质, 这种音频一般的MP3解码都非常吃力,而且产品也用不到这种级别的音频,因此只是简单的降低音频品质, 从44100Hz降低到16KHz,测试结果表明,音频播放任务CPU占有从30%降低到5%,在测试中,其余几个任务都及时地上CPU运行了

Day16 2025.9.23(前两天在忙考研复习)

主要目标:完成具体业务开发&各种优化

实际完成任务:

  • 1. 基于cJSON进行了上层现代C++封装(cpp_json),作为脚手架使用

  • 2. 在esp32s3剩余的flash当中开辟了一个文件系统,用于保存设备重要配置信息

Day17 2025.9.24

主要目标:完成具体业务开发&各种优化

实际完成任务:

  • 1. 优化了cpp_json的内容,使其更modern

  • 2. 稍微优化了一下系统配置类

  • 3. 增加了系统版本号,便于区分系统版本,方便OTA

  • 4. 重写OTA的逻辑,完成了Cpp的OTA封装,测试通过

Day18 2025.9.27

主要目标:完成具体业务开发&各种优化

实际完成任务:

  • 1. 花了几天时间基于lvgl8.3封装了lvgl_cpp,写了一些基本需要的控件,支持链式调用 还存在一点点bug,不难fix

  • 2. 增加了中文字库,支持中文显示

  • 3. 修复和优化了一些地方

Day19 2025.9.29

主要目标:完成具体业务开发&各种优化

实际完成任务:

  • 1. 完成了客户端服务端语音相关的交互,涉及内容较多,看代码改动即可

Day20 2025.10.9(考研复习)

主要目标:完成具体业务开发&各种优化

实际完成任务:

  • 1. 应用界面增加了返回主页的按钮

Day20 2025.10.12(考研复习)

主要目标:完成具体业务开发&各种优化

实际完成任务:

  • 1. 修复了gif渲染内存泄漏的严重bug

Day20 2025.10.13(考研复习)

主要目标:完成具体业务开发&各种优化

实际完成任务:

  • 1. 将PetDao当中的cJSON API替换为cpp_json,完美通过测试

Day20 2025.10.14(考研复习)

主要目标:完成具体业务开发&各种优化

实际完成任务:

  • 1. 整合已经实现的各种上层建筑,实现了一个宠物对话基本业务应用,用于样品测试展示用

  • 2. 重构了音频播放类,使其更modern,更加便于移植和拓展