From 32c3dc69bc14266855f41c67804235d9abfd1ce8 Mon Sep 17 00:00:00 2001 From: Rdzleo Date: Tue, 24 Mar 2026 18:22:53 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=BB=91=E5=8A=A8=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E6=97=B6=E8=87=AA=E5=8A=A8=E8=B7=B3=E8=BF=87?= =?UTF-8?q?=E8=A7=A3=E7=A0=81=E5=A4=B1=E8=B4=A5=E7=9A=84=E6=97=A0=E6=95=88?= =?UTF-8?q?=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1、update_ui_ImgBle 返回类型 void → bool,解码成功返回 true,失败返回 false; 2、左滑/右滑手势回调添加 for 循环,解码失败自动跳到下一张(最多尝试 10 张防死循环); 3、更新最新设备运行日志; Co-Authored-By: Claude Opus 4.6 --- 05-最新日志.txt | 685 +++++---------------------------- main/dzbj/pages.c | 20 +- main/dzbj/pages.h | 2 +- main/ui/screens/ui_ScreenImg.c | 20 +- main/ui/screens/ui_ScreenImg.h | 2 +- 5 files changed, 120 insertions(+), 609 deletions(-) diff --git a/05-最新日志.txt b/05-最新日志.txt index b980647..a6aa9e1 100644 --- a/05-最新日志.txt +++ b/05-最新日志.txt @@ -1,592 +1,93 @@ -I (47) WeatherApi: 初始化天气API配置 - 默认城市: 北京 -I (48) WeatherApi: WiFi位置缓存限制已设置为: 5 条 -I (48) coexist: coex firmware version: 7b9a184 -I (49) coexist: coexist rom version e7ae62f -I (49) main_task: Started on CPU0 -I (59) main_task: Calling app_main() -I (79) BackgroundTask: background_task started -I (79) BluetoothProvisioning: 蓝牙配网对象创建完成 -I (79) WifiBoard: force_ap is set to 1, will clear in StartNetwork() -I (79) button: IoT Button Version: 3.5.0 -I (79) gpio: GPIO[0]| InputEn: 1| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 -I (79) button: IoT Button Version: 3.5.0 -I (79) gpio: GPIO[4]| InputEn: 1| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 -I (79) Airhub1: Initializing I2C master bus for audio codec... -I (79) Airhub1: Scanning I2C bus for devices... -I (79) Airhub1: I2C设备在线: 0x18 -E (79) i2c.master: I2C transaction unexpected nack detected -E (79) i2c.master: s_i2c_synchronous_transaction(945): I2C transaction failed -E (79) i2c.master: i2c_master_receive(1261): I2C transaction failed -E (79) i2c.master: I2C transaction unexpected nack detected -E (79) i2c.master: s_i2c_synchronous_transaction(945): I2C transaction failed -E (79) i2c.master: i2c_master_receive(1261): I2C transaction failed -I (79) Airhub1: I2C设备在线: 0x40 -I (79) Airhub1: I2C scan completed. Found 2 devices -I (79) DZBJ: 开始初始化显示硬件... -I (79) gpio: GPIO[7]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 -I (79) st77916: LCD panel create success, version: 1.0.1 -W (219) st77916: The 3Ah command has been used and will be overwritten by external initialization sequence -I (339) LCD: LCD GRAM cleared (black filled) -I (339) DZBJ: LCD 硬件初始化完成 -I (339) gpio: GPIO[5]| InputEn: 1| OutputEn: 0| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:2 -I (339) gpio: GPIO[6]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 -I (739) CST816S: IC id: 182 -I (739) LCD: Touch controller initialized successfully -I (739) LVGL: Starting LVGL task -I (739) LCD: LVGL buffer: 14400 bytes (W:360, Lines:20, DMA, single) -I (739) LCD: Touch controller added to LVGL -I (739) DZBJ: LVGL 初始化完成 -I (849) Airhub1: 🤖 AI对话模式启动 -I (849) Airhub1: 初始化按钮... -I (849) Airhub1: Boot button initialized on GPIO0 -I (849) Airhub1: Volume up button initialized on GPIO-1 -I (849) Airhub1: Volume down button initialized on GPIO-1 -I (849) Airhub1: 故事按键已初始化,GPIO引脚 =4 -I (849) Airhub1: 所有按键已成功初始化! -I (849) Airhub1: IMU传感器未初始化,跳过IoT注册 -I (849) Airhub1: 配网模式:跳过电池检测、IMU传感器、低功耗管理 -I (849) Airhub1: 电容触摸板按钮已禁用 (ENABLE_TOUCH_PAD_BUTTONS=0) -I (849) Application: 打印设置设备状态日志: starting -I (849) Application: 正常启动流程,将执行开机播报和网络连接播报 -I (849) Airhub1: Initializing audio codec (output only)... -I (849) Airhub1: Creating BoxAudioCodec (ES8311, without reference) ... -I (849) BoxAudioCodec: TX-only channel created (provisioning mode) -I (849) ES8311: Work in Slave mode -I (859) gpio: GPIO[48]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 -I (859) BoxAudioCodec: BoxAudioDevice initialized (output only) -I (859) Airhub1: Audio codec initialized successfully -I (859) Application: 配网模式:跳过 Opus 编码器、输入重采样器、麦克风输入 -I (859) I2S_IF: channel mode 0 bits:16/16 channel:2 mask:1 -I (859) I2S_IF: STD Mode 1 bits:16/16 channel:2 sample_rate:16000 mask:1 -I (869) Adev_Codec: Open codec device OK -I (879) AudioCodec: Set output enable to true -I (879) AudioCodec: Audio codec started (output only, provisioning mode) -I (879) AudioCodec: 将运行时输出音量设置为:75 -I (879) Application: 设备启动完成,播放开机播报语音 -I (889) WifiBoard: force_ap cleared to 0 -I (889) WifiBoard: 🔵 进入配网模式 - BLE蓝牙配网 -I (889) WifiBoard: 🔵 进入配网模式 - 使用BLE蓝牙配网 -I (889) WifiBoard: 🔵 正在启动BLE蓝牙配网服务... -I (889) Application: 🎵 测试模式:音频开始播放,等待播放完成 -I (889) Application: ✅ 测试模式:音频播放完成 -I (889) BluetoothProvisioning: 🔄 配网状态变化: IDLE -> INITIALIZING -I (889) BluetoothProvisioning: 初始化WiFi... -I (889) pp: pp rom version: e7ae62f -I (889) net80211: net80211 rom version: e7ae62f -I (899) wifi:wifi driver task: 3fcd91c4, prio:23, stack:6656, core=0 -I (899) wifi:wifi firmware version: bea31f3 -I (899) wifi:wifi certification version: v7.0 -I (899) wifi:config NVS flash: enabled -I (899) wifi:config nano formatting: disabled -I (899) wifi:Init data frame dynamic rx buffer num: 32 -I (899) wifi:Init dynamic rx mgmt buffer num: 5 -I (899) wifi:Init management short buffer num: 32 -I (899) wifi:Init static tx buffer num: 8 -I (899) wifi:Init tx cache buffer num: 32 -I (899) wifi:Init static tx FG buffer num: 2 -I (899) wifi:Init static rx buffer size: 1600 -I (899) wifi:Init static rx buffer num: 10 -I (899) wifi:Init dynamic rx buffer num: 32 -I (909) wifi_init: rx ba win: 16 -I (909) wifi_init: accept mbox: 6 -I (909) wifi_init: tcpip mbox: 32 -I (909) wifi_init: udp mbox: 6 -I (909) wifi_init: tcp mbox: 6 -I (909) wifi_init: tcp tx win: 5760 -I (909) wifi_init: tcp rx win: 5760 -I (909) wifi_init: tcp mss: 1440 -I (909) wifi_init: WiFi/LWIP prefer SPIRAM -I (909) phy_init: phy_version 701,f4f1da3a,Mar 3 2025,15:50:10 -I (949) wifi:mode : sta (d0:cf:13:03:bb:f0) -I (949) wifi:enable tsf -I (949) BluetoothProvisioning: WiFi初始化完成 -I (949) BluetoothProvisioning: 初始化蓝牙控制器... -I (949) BLE_INIT: BT controller compile version [6cfabcd] -I (949) BLE_INIT: Feature Config, ADV:1, BLE_50:1, DTM:1, SCAN:1, CCA:0, SMP:1, CONNECT:1 -I (949) BLE_INIT: Bluetooth MAC: d0:cf:13:03:bb:f2 -I (949) BluetoothProvisioning: 初始化Bluedroid协议栈... -I (969) BluetoothProvisioning: 注册 BLE GAP/GATTS 回调... -I (969) BluetoothProvisioning: ✅ GATTS App 注册成功, gatts_if=3 -I (969) BluetoothProvisioning: Service 创建成功, handle=40 -I (969) BluetoothProvisioning: WRITE 特征添加成功, handle=42 -I (969) BluetoothProvisioning: NOTIFY 特征添加成功, handle=44 -I (969) BluetoothProvisioning: CCCD 添加成功, handle=45 -I (969) BluetoothProvisioning: ✅ GATT Service 启动成功 -I (969) BluetoothProvisioning: 注册WiFi事件处理器... -I (969) BluetoothProvisioning: 🔄 配网状态变化: INITIALIZING -> IDLE -I (969) BluetoothProvisioning: 蓝牙配网初始化完成 (GATT Server 模式) -I (969) BluetoothProvisioning: 蓝牙MAC地址: d0:cf:13:03:bb:f2 -I (969) WifiBoard: 🔍 BLE Initialize返回结果: true -I (969) BluetoothProvisioning: 🔵 开始启动蓝牙配网服务 (GATT Server)... -I (969) BluetoothProvisioning: 🔍 检查初始化状态: initialized_ = true -I (969) BluetoothProvisioning: MAC地址发送状态已重置 -I (969) BluetoothProvisioning: 🔄 MAC地址发送状态已重置 -I (969) BluetoothProvisioning: 🧹 清除之前的WiFi凭据... -I (969) BluetoothProvisioning: ✅ WiFi凭据清除完成,准备接收新的配网信息 -I (969) BluetoothProvisioning: 📡 蓝牙设备名称: Airhub_d0:cf:13:03:bb:f2 -I (969) BluetoothProvisioning: 📡 广播数据构建完成,长度: 29 字节 -I (969) BluetoothProvisioning: 📡 扫描响应数据构建完成,长度: 7 字节 -I (969) BluetoothProvisioning: 📡 广播数据设置完成,配置扫描响应数据 -I (969) BluetoothProvisioning: 📡 扫描响应数据设置完成,启动广播 -I (969) BluetoothProvisioning: ✅ 广播启动成功 -I (969) BluetoothProvisioning: 🔄 配网状态变化: IDLE -> ADVERTISING -I (969) BluetoothProvisioning: 蓝牙配网广播已启动,等待客户端连接... -I (969) WifiBoard: ✅ BLE蓝牙配网启动成功 -I (979) WifiBoard: 📱 请使用支持BLE的手机APP连接设备进行配网 -W (979) Application: Alert BLE配网模式: 请使用手机APP搜索Airhub_开头的蓝牙设备 [happy] -I (989) AI_CHAT_UI: GIF表情切换: happy -I (989) WifiBoard: Starting BLE provisioning monitor... -I (989) WifiBoard: 🔍 BLE配网启动结果: 成功 -I (989) WifiBoard: ✅ BLE配网启动成功,等待手机连接 -I (989) Application: 配网模式:跳过协议初始化、位置检测等网络业务 -I (989) Application: 打印设置设备状态日志: idle -I (999) Application: 开始播放下行音频: 样本=960 采样率=16000 -I (1009) AI_CHAT_UI: GIF表情切换: neutral -I (1009) main_task: Returned from app_main() -I (5339) BluetoothProvisioning: 📱 客户端已连接, conn_id=0, addr=73:8f:af:0d:36:7a -I (5339) BluetoothProvisioning: 🔍 [DEBUG] 设置client_connected_为true -I (5339) BluetoothProvisioning: MAC地址发送状态已重置 -I (5339) BluetoothProvisioning: 🔄 MAC地址发送状态已重置 -I (5339) BluetoothProvisioning: 🔄 配网状态变化: ADVERTISING -> CONNECTED -I (5339) WifiBoard: BLE client connected -I (5339) BluetoothProvisioning: 🔍 [DEBUG] BLE连接处理完成,client_connected_=true -I (5339) BluetoothProvisioning: 广播已停止 -I (5749) BluetoothProvisioning: 连接参数更新: status=0, conn_int=24, latency=0, timeout=400 -I (6079) BluetoothProvisioning: 连接参数更新: status=0, conn_int=6, latency=0, timeout=500 -I (6149) BluetoothProvisioning: MTU 更新: 512 -I (6229) BluetoothProvisioning: 连接参数更新: status=0, conn_int=24, latency=0, timeout=400 -I (6649) BluetoothProvisioning: NOTIFY 已启用 -I (6829) BluetoothProvisioning: 📱 手机请求获取WiFi列表,开始扫描 -W (6829) wifi:Error! Should use default active scan time parameter for WiFi scan when Bluetooth is enabled!!!!!! - -I (6829) BluetoothProvisioning: 🔍 WiFi扫描已启动 -I (13489) AudioCodec: Set output enable to false -I (15599) BluetoothProvisioning: 📡 WiFi扫描完成,准备发送WiFi列表 -I (15599) BluetoothProvisioning: 📊 扫描到 41 个WiFi热点 -I (15599) BluetoothProvisioning: ✅ 成功获取WiFi扫描结果 -I (15609) BluetoothProvisioning: 📊 过滤后剩余 26 个2.4GHz热点 (原始: 41) -I (15609) BluetoothProvisioning: 向客户端发送WiFi列表,共26个AP -I (16129) BluetoothProvisioning: 📤 WiFi列表已发送给客户端,包含 26 个热点 -I (16129) BluetoothProvisioning: 📤 WiFi列表已发送,包含 26 个热点 -I (25099) BluetoothProvisioning: 📶 收到WiFi SSID: airhub -I (25249) BluetoothProvisioning: 🔐 收到WiFi密码 (长度: 9) -W (25249) wifi:Password length matches WPA2 standards, authmode threshold changes from OPEN to WPA2 -I (25299) BluetoothProvisioning: 📡 已发起WiFi连接请求,启动超时监控 -I (25299) WifiBoard: WiFi credentials received via BLE -I (25399) wifi:new:<1,0>, old:<1,0>, ap:<255,255>, sta:<1,0>, prof:1, snd_ch_cfg:0x0 -I (25399) wifi:state: init -> auth (0xb0) -I (25429) wifi:state: auth -> assoc (0x0) -I (25439) wifi:state: assoc -> run (0x10) -I (25499) wifi:connected with airhub, aid = 4, channel 1, BW20, bssid = 70:2a:d7:85:bc:eb -I (25499) wifi:security: WPA2-PSK, phy: bgn, rssi: -32 -I (25509) wifi:pm start, type: 1 - -I (25509) wifi:dp: 1, bi: 102400, li: 3, scale listen interval from 307200 us to 307200 us -I (25509) wifi:set rx beacon pti, rx_bcn_pti: 14, bcn_timeout: 25000, mt_pti: 14, mt_time: 10000 -I (25509) BluetoothProvisioning: ✅ WiFi连接成功,SSID: airhub,等待获取IP地址 -I (25529) wifi:AP's beacon interval = 102400 us, DTIM period = 1 -I (25529) wifi:idx:0 (ifx:0, 70:2a:d7:85:bc:eb), tid:0, ssn:0, winSize:64 -I (27229) esp_netif_handlers: sta ip: 192.168.124.22, mask: 255.255.255.0, gw: 192.168.124.1 -I (27229) BluetoothProvisioning: ✅ WiFi获取IP地址成功: 192.168.124.22 -I (27229) BluetoothProvisioning: 💾 启用WiFi配置自动保存到NVS存储... -I (27229) BluetoothProvisioning: ✅ WiFi配置将自动保存到NVS存储 -I (27229) BluetoothProvisioning: 📋 获取当前WiFi配置成功,SSID: airhub -I (27229) SsidManager: compare [airhub:6] [airhub:6] -W (27229) SsidManager: SSID airhub already exists, overwrite it -I (27229) BluetoothProvisioning: ✅ WiFi凭据已保存到NVS列表 -I (27229) BluetoothProvisioning: BluetoothProvisioning WIFI_CONNECTED skip_session=0 -I (27229) BluetoothProvisioning: 🔍 准备设置状态为SUCCESS并触发回调 -I (27229) BluetoothProvisioning: 🔄 配网状态变化: CONNECTED -> SUCCESS -I (27229) WifiBoard: 设备配网成功,已连接到WiFi网络! -I (27229) BluetoothProvisioning: 🔍 [DEBUG] ReportWiFiStatus调用: success=true, client_connected_=true -I (27229) BluetoothProvisioning: 向客户端报告设备连接WiFi成功! -I (27229) BluetoothProvisioning: 📋 配网流程完成,状态: SUCCESS, client_connected_: true -I (27229) BluetoothProvisioning: ⏰ 延迟2000ms后重启设备以确保配置生效... -I (27989) WifiBoard: BLE provisioning completed successfully -I (27989) BluetoothProvisioning: 停止蓝牙配网... -I (27989) BluetoothProvisioning: 广播已停止 -W (27989) BT_HCI: hci cmd send: disconnect: hdl 0x1, rsn:0x13 -I (27989) BluetoothProvisioning: 📱 客户端已断开连接, reason=0x16, 当前状态: SUCCESS -I (27989) BluetoothProvisioning: 🔍 [DEBUG] 设置client_connected_为false -I (27989) BluetoothProvisioning: 🔄 配网状态变化: SUCCESS -> ADVERTISING -I (27989) WifiBoard: BLE client disconnected -I (27989) BluetoothProvisioning: 📡 广播数据设置完成,配置扫描响应数据 -I (27989) BluetoothProvisioning: 📡 扫描响应数据设置完成,启动广播 -I (27989) BluetoothProvisioning: 🔄 配网状态变化: ADVERTISING -> IDLE -I (27989) BluetoothProvisioning: 蓝牙配网已停止 -E (27989) esp_netif_lwip: esp_netif_new_api: Failed to configure netif with config=0x3fcb5960 (config or if_key is NULL or duplicate key) - -assert failed: esp_netif_create_default_wifi_sta wifi_default.c:422 (netif) - - -Backtrace: 0x40379d89:0x3fcb5800 0x40386cfd:0x3fcb5820 0x4038e465:0x3fcb5840 0x4215e6d7:0x3fcb5960 0x421083c9:0x3fcb5990 0x420262d2:0x3fcb5a70 0x420263c1:0x3fcb5aa0 ---- 0x40379d89: panic_abort at /Users/rdzleo/esp/esp-idf/v5.4.2/esp-idf/components/esp_system/panic.c:469 ---- 0x40386cfd: esp_system_abort at /Users/rdzleo/esp/esp-idf/v5.4.2/esp-idf/components/esp_system/port/esp_system_chip.c:87 ---- 0x4038e465: __assert_func at /Users/rdzleo/esp/esp-idf/v5.4.2/esp-idf/components/newlib/assert.c:80 ---- 0x4215e6d7: esp_netif_create_default_wifi_sta at /Users/rdzleo/esp/esp-idf/v5.4.2/esp-idf/components/esp_wifi/src/wifi_default.c:422 ---- 0x421083c9: WifiStation::Start() at /Users/rdzleo/Desktop/Baji_Rtc_Toy/managed_components/78__esp-wifi-connect/wifi_station.cc:101 ---- 0x420262d2: WifiBoard::MonitorBleProvisioning() at /Users/rdzleo/Desktop/Baji_Rtc_Toy/main/boards/common/wifi_board.cc:504 ---- 0x420263c1: WifiBoard::StartBleProvisioning()::{lambda(void*)#1}::_FUN(void*) at /Users/rdzleo/Desktop/Baji_Rtc_Toy/main/boards/common/wifi_board.cc:426 ---- (inlined by) _FUN at /Users/rdzleo/Desktop/Baji_Rtc_Toy/main/boards/common/wifi_board.cc:428 - - - - -ELF file SHA256: bbf9adf60 - -Rebooting... -ESP-ROM:esp32s3-20210327 -Build:Mar 27 2021 -rst:0xc (RTC_SW_CPU_RST),boot:0x2b (SPI_FAST_FLASH_BOOT) -Saved PC:0x42065eba ---- 0x42065eba: rw_schedule at ??:? -SPIWP:0xee -mode:DIO, clock div:1 -load:0x3fce2820,len:0x56c -load:0x403c8700,len:0x4 -load:0x403c8704,len:0xb88 -load:0x403cb700,len:0x2df4 -entry 0x403c88f4 -I (47) WeatherApi: 初始化天气API配置 - 默认城市: 北京 -I (48) WeatherApi: WiFi位置缓存限制已设置为: 5 条 -I (48) coexist: coex firmware version: 7b9a184 -I (49) coexist: coexist rom version e7ae62f -I (49) main_task: Started on CPU0 -I (59) main_task: Calling app_main() -I (79) BackgroundTask: background_task started -I (79) BluetoothProvisioning: 蓝牙配网对象创建完成 -I (79) button: IoT Button Version: 3.5.0 -I (79) gpio: GPIO[0]| InputEn: 1| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 -I (79) button: IoT Button Version: 3.5.0 -I (79) gpio: GPIO[4]| InputEn: 1| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 -I (79) Airhub1: Initializing I2C master bus for audio codec... -I (79) Airhub1: Scanning I2C bus for devices... -I (79) Airhub1: I2C设备在线: 0x18 -E (79) i2c.master: I2C transaction unexpected nack detected -E (79) i2c.master: s_i2c_synchronous_transaction(945): I2C transaction failed -E (79) i2c.master: i2c_master_receive(1261): I2C transaction failed -E (79) i2c.master: I2C transaction unexpected nack detected -E (79) i2c.master: s_i2c_synchronous_transaction(945): I2C transaction failed -E (79) i2c.master: i2c_master_receive(1261): I2C transaction failed -I (79) Airhub1: I2C设备在线: 0x40 -I (79) Airhub1: I2C scan completed. Found 2 devices -I (79) DZBJ: 开始初始化显示硬件... -I (79) gpio: GPIO[7]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 -I (79) st77916: LCD panel create success, version: 1.0.1 -W (209) st77916: The 3Ah command has been used and will be overwritten by external initialization sequence -I (329) LCD: LCD GRAM cleared (black filled) -I (329) DZBJ: LCD 硬件初始化完成 -I (329) gpio: GPIO[5]| InputEn: 1| OutputEn: 0| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:2 -I (329) gpio: GPIO[6]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 -I (729) CST816S: IC id: 182 -I (729) LCD: Touch controller initialized successfully -I (729) LVGL: Starting LVGL task -I (729) LCD: LVGL buffer: 14400 bytes (W:360, Lines:20, DMA, single) -I (729) LCD: Touch controller added to LVGL -I (729) DZBJ: LVGL 初始化完成 -I (839) Airhub1: 🤖 AI对话模式启动 -I (839) Airhub1: 初始化按钮... -I (839) Airhub1: Boot button initialized on GPIO0 -I (839) Airhub1: Volume up button initialized on GPIO-1 -I (839) Airhub1: Volume down button initialized on GPIO-1 -I (839) Airhub1: 故事按键已初始化,GPIO引脚 =4 -I (839) Airhub1: 所有按键已成功初始化! -I (839) Airhub1: IMU传感器未初始化,跳过IoT注册 -I (839) Airhub1: Initializing battery monitor... -I (839) Airhub1: ADC calibration initialized -I (839) Airhub1: 电池状态监控已初始化,GPIO:3 -I (839) Airhub1: 非生产测试模式且不在对话状态,姿态传感器业务已禁用以节约资源 -I (839) PowerSaveTimer: Power save timer enabled -I (839) Airhub1: 🔋 PowerSaveTimer已启用,20秒无活动将进入低功耗模式 -I (839) Airhub1: 电容触摸板按钮已禁用 (ENABLE_TOUCH_PAD_BUTTONS=0) -I (839) Application: 打印设置设备状态日志: starting -I (839) Application: 正常启动流程,将执行开机播报和网络连接播报 -I (839) Airhub1: Initializing audio codec (duplex)... -I (839) Airhub1: Creating BoxAudioCodec (ES8311+ES7210, without reference) ... -I (839) BoxAudioCodec: Duplex channels created -I (849) ES8311: Work in Slave mode -I (849) gpio: GPIO[48]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 -I (849) ES7210: Work in Slave mode -I (859) ES7210: Enable ES7210_INPUT_MIC1 -I (859) ES7210: Enable ES7210_INPUT_MIC2 -I (869) BoxAudioCodec: BoxAudioDevice initialized (duplex) -I (869) Airhub1: Audio codec initialized successfully -I (869) Application: 检测到WiFi板卡,将opus编码器复杂度设置为3 -I (869) OpusResampler: Resampler configured with input sample rate 16000, output sample rate 8000, and channels 1 -I (869) I2S_IF: channel mode 2 bits:16/16 channel:2 mask:1 -I (869) I2S_IF: TDM Mode 0 bits:16/16 channel:2 sample_rate:16000 mask:1 -I (869) I2S_IF: channel mode 0 bits:16/16 channel:2 mask:1 -I (869) I2S_IF: STD Mode 1 bits:16/16 channel:2 sample_rate:16000 mask:1 -I (869) ES7210: Bits 16 -I (879) ES7210: Enable ES7210_INPUT_MIC1 -I (879) ES7210: Enable ES7210_INPUT_MIC2 -I (889) ES7210: Unmuted -I (889) Adev_Codec: Open codec device OK -I (889) BoxAudioCodec: Input opened: sr=16000 ch=1 mask=0x1 ref=0 -I (889) AudioCodec: Set input enable to true -I (889) I2S_IF: channel mode 0 bits:16/16 channel:2 mask:1 -I (889) I2S_IF: STD Mode 1 bits:16/16 channel:2 sample_rate:16000 mask:1 -I (909) Adev_Codec: Open codec device OK -I (909) AudioCodec: Set output enable to true -I (909) AudioCodec: Audio codec started -I (1009) Airhub1: ADC: 2379, 原始电压: 2.38V, 计算电池电压: 10.32V, 电量: 100%, 满电电压: 4.20V -I (1009) BluetoothMAC: Bluetooth MAC Address: d0:cf:13:03:bb:f2 -I (1109) Airhub1: ADC: 2377, 原始电压: 2.38V, 计算电池电压: 10.32V, 电量: 100%, 满电电压: 4.20V -I (1109) BluetoothMAC: Bluetooth MAC Address: d0:cf:13:03:bb:f2 -I (1209) Airhub1: ADC: 2377, 原始电压: 2.38V, 计算电池电压: 10.32V, 电量: 100%, 满电电压: 4.20V -I (1209) BluetoothMAC: Bluetooth MAC Address: d0:cf:13:03:bb:f2 -I (1329) Airhub1: ADC: 2376, 原始电压: 2.38V, 计算电池电压: 10.31V, 电量: 100%, 满电电压: 4.20V -I (1329) BluetoothMAC: Bluetooth MAC Address: d0:cf:13:03:bb:f2 -I (1429) Airhub1: ADC: 2374, 原始电压: 2.37V, 计算电池电压: 10.30V, 电量: 100%, 满电电压: 4.20V -I (1429) BluetoothMAC: Bluetooth MAC Address: d0:cf:13:03:bb:f2 -I (1529) Airhub1: ADC: 2374, 原始电压: 2.37V, 计算电池电压: 10.30V, 电量: 100%, 满电电压: 4.20V -I (1529) BluetoothMAC: Bluetooth MAC Address: d0:cf:13:03:bb:f2 -I (1649) Airhub1: ADC: 2374, 原始电压: 2.37V, 计算电池电压: 10.30V, 电量: 100%, 满电电压: 4.20V -I (1649) BluetoothMAC: Bluetooth MAC Address: d0:cf:13:03:bb:f2 -I (1749) Airhub1: ADC: 2374, 原始电压: 2.37V, 计算电池电压: 10.30V, 电量: 100%, 满电电压: 4.20V -I (1749) BluetoothMAC: Bluetooth MAC Address: d0:cf:13:03:bb:f2 -I (1869) Airhub1: ADC: 2374, 原始电压: 2.37V, 计算电池电压: 10.30V, 电量: 100%, 满电电压: 4.20V -I (1869) BluetoothMAC: Bluetooth MAC Address: d0:cf:13:03:bb:f2 -I (1939) Airhub1: ADC: 2374, 原始电压: 2.37V, 计算电池电压: 10.30V, 电量: 100%, 满电电压: 4.20V -I (1939) BluetoothMAC: Bluetooth MAC Address: d0:cf:13:03:bb:f2 -I (1969) Airhub1: ADC: 2374, 原始电压: 2.37V, 计算电池电压: 10.30V, 电量: 100%, 满电电压: 4.20V -I (1969) BluetoothMAC: Bluetooth MAC Address: d0:cf:13:03:bb:f2 -I (2069) Airhub1: ADC: 2374, 原始电压: 2.37V, 计算电池电压: 10.30V, 电量: 100%, 满电电压: 4.20V -I (2069) BluetoothMAC: Bluetooth MAC Address: d0:cf:13:03:bb:f2 -I (2169) Airhub1: ADC: 2374, 原始电压: 2.37V, 计算电池电压: 10.30V, 电量: 100%, 满电电压: 4.20V -I (2169) BluetoothMAC: Bluetooth MAC Address: d0:cf:13:03:bb:f2 -I (2269) Airhub1: ADC: 2374, 原始电压: 2.37V, 计算电池电压: 10.30V, 电量: 100%, 满电电压: 4.20V -I (2269) BluetoothMAC: Bluetooth MAC Address: d0:cf:13:03:bb:f2 -I (2369) Airhub1: ADC: 2374, 原始电压: 2.37V, 计算电池电压: 10.30V, 电量: 100%, 满电电压: 4.20V -I (2369) BluetoothMAC: Bluetooth MAC Address: d0:cf:13:03:bb:f2 -I (2469) Airhub1: ADC: 2374, 原始电压: 2.37V, 计算电池电压: 10.30V, 电量: 100%, 满电电压: 4.20V -I (2469) BluetoothMAC: Bluetooth MAC Address: d0:cf:13:03:bb:f2 -I (2569) Airhub1: ADC: 2375, 原始电压: 2.38V, 计算电池电压: 10.31V, 电量: 100%, 满电电压: 4.20V -I (2569) BluetoothMAC: Bluetooth MAC Address: d0:cf:13:03:bb:f2 -I (2669) Airhub1: ADC: 2375, 原始电压: 2.38V, 计算电池电压: 10.31V, 电量: 100%, 满电电压: 4.20V -I (2669) BluetoothMAC: Bluetooth MAC Address: d0:cf:13:03:bb:f2 -I (2769) Airhub1: ADC: 2375, 原始电压: 2.38V, 计算电池电压: 10.31V, 电量: 100%, 满电电压: 4.20V -I (2769) BluetoothMAC: Bluetooth MAC Address: d0:cf:13:03:bb:f2 -I (2939) Airhub1: ADC: 2374, 原始电压: 2.37V, 计算电池电压: 10.30V, 电量: 100%, 满电电压: 4.20V -I (2939) BluetoothMAC: Bluetooth MAC Address: d0:cf:13:03:bb:f2 -I (2959) Airhub1: ADC: 2374, 原始电压: 2.37V, 计算电池电压: 10.30V, 电量: 100%, 满电电压: 4.20V -I (2959) BluetoothMAC: Bluetooth MAC Address: d0:cf:13:03:bb:f2 -I (3059) Airhub1: ADC: 2374, 原始电压: 2.37V, 计算电池电压: 10.30V, 电量: 100%, 满电电压: 4.20V -I (3059) BluetoothMAC: Bluetooth MAC Address: d0:cf:13:03:bb:f2 -I (3059) AudioCodec: 将运行时输出音量设置为:75 -I (3059) Application: 设备启动完成,播放开机播报语音 -I (3059) pp: pp rom version: e7ae62f -I (3059) net80211: net80211 rom version: e7ae62f -I (3069) wifi:wifi driver task: 3fcdc36c, prio:23, stack:6656, core=0 -I (3069) wifi:wifi firmware version: bea31f3 -I (3069) wifi:wifi certification version: v7.0 -I (3069) wifi:config NVS flash: disabled -I (3069) wifi:config nano formatting: disabled -I (3069) wifi:Init data frame dynamic rx buffer num: 32 -I (3069) wifi:Init dynamic rx mgmt buffer num: 5 -I (3069) wifi:Init management short buffer num: 32 -I (3069) wifi:Init static tx buffer num: 8 -I (3069) wifi:Init tx cache buffer num: 32 -I (3069) wifi:Init static tx FG buffer num: 2 -I (3069) wifi:Init static rx buffer size: 1600 -I (3069) wifi:Init static rx buffer num: 10 -I (3069) wifi:Init dynamic rx buffer num: 32 -I (3069) wifi_init: rx ba win: 16 -I (3069) wifi_init: accept mbox: 6 -I (3069) wifi_init: tcpip mbox: 32 -I (3069) wifi_init: udp mbox: 6 -I (3069) wifi_init: tcp mbox: 6 -I (3069) wifi_init: tcp tx win: 5760 -I (3069) wifi_init: tcp rx win: 5760 -I (3069) wifi_init: tcp mss: 1440 -I (3069) wifi_init: WiFi/LWIP prefer SPIRAM -I (3069) phy_init: phy_version 701,f4f1da3a,Mar 3 2025,15:50:10 -I (3109) phy_init: Saving new calibration data due to checksum failure or outdated calibration data, mode(0) -I (3109) Application: 开始播放下行音频: 样本=960 采样率=16000 -I (3119) wifi:mode : sta (d0:cf:13:03:bb:f0) -I (3129) wifi:enable tsf -I (5539) wifi: 发现可连接 AP: airhub, BSSID: 70:2a:d7:85:bc:eb, RSSI: -31, Channel: 1, Authmode: 3 -I (5539) WifiBoard: Starting WiFi connection, playing network connection sound -W (5539) wifi:Password length matches WPA2 standards, authmode threshold changes from OPEN to WPA2 -I (5639) wifi:new:<1,0>, old:<1,0>, ap:<255,255>, sta:<1,0>, prof:1, snd_ch_cfg:0x0 -I (5639) wifi:state: init -> auth (0xb0) -I (5659) wifi:state: auth -> assoc (0x0) -I (5679) wifi:state: assoc -> run (0x10) -I (5709) wifi:connected with airhub, aid = 4, channel 1, BW20, bssid = 70:2a:d7:85:bc:eb -I (5709) wifi:security: WPA2-PSK, phy: bgn, rssi: -30 -I (5709) wifi:pm start, type: 1 - -I (5709) wifi:dp: 1, bi: 102400, li: 3, scale listen interval from 307200 us to 307200 us -I (5709) wifi:set rx beacon pti, rx_bcn_pti: 14, bcn_timeout: 25000, mt_pti: 14, mt_time: 10000 -I (5719) wifi:AP's beacon interval = 102400 us, DTIM period = 1 -I (5749) wifi:idx:0 (ifx:0, 70:2a:d7:85:bc:eb), tid:0, ssn:0, winSize:64 -I (6839) Airhub1: 📤 设备状态上报已启用,每30秒上报一次 -I (9749) wifi: Got IP: 192.168.124.22 -I (9749) esp_netif_handlers: sta ip: 192.168.124.22, mask: 255.255.255.0, gw: 192.168.124.1 -I (10339) VolcRtcProtocol: 设置Agent配置参数: {"Config":{"WebSearchAgentConfig":{"ParamsString":"{\"bot_id\":\"7585449675889608233\",\"stream\":true,\"location_info\":{\"city\":\"广州市\"}}"}}} -I (10339) VolcRtcProtocol: VolcRtcProtocol 开始启动... -I (10339) VolcRtcProtocol: 使用配置文件中的设备名称: d0_cf_13_03_bb_f0 -I (10339) VolcRtcProtocol: NVS凭证已加载:secret=1 appid=1 device_name=d0_cf_13_03_bb_f0, free_heap=8230100 -[INF|volc_rtc.c:597]volc_rtc_create: set param[0]: {"debug":{"log_to_console":1}} -[INF|volc_rtc.c:597]volc_rtc_create: set param[1]: {"audio":{"codec":{"internal":{"enable":1}}}} -[INF|volc_rtc.c:597]volc_rtc_create: set param[2]: {"rtc":{"access":{"concurrent_requests":1}}} -[INF|volc_rtc.c:597]volc_rtc_create: set param[3]: {"rtc":{"ice":{"concurrent_agents":1}}} -2026-03-24 16:18:55.587 [I] VolcEngineRTCLite.c:153 ****************** HELLO BOOKA (68f0bc7617b8520178bef12c)(1.57.207.001)(HASH-5c3aa20fe851886d21cede0115044e17c3ec8a67) ******************** -2026-03-24 16:18:55.588 [I] VolcEngineRTCLite.c:158 Platform esp32s3 -2026-03-24 16:18:55.588 [I] VolcEngineRTCLite.c:161 OsVersion FreeRTOS/unknown -2026-03-24 16:18:55.588 [I] VolcEngineRTCLite.c:164 CompilerInfo GCC/14.2.0 -2026-03-24 16:18:55.589 [I] VolcEngineRTCLite.c:100 BOOKA_DEVICE_LOW_RESOURCE : ON -2026-03-24 16:18:55.589 [I] VolcEngineRTCLite.c:104 BOOKA_ENABLE_EVENT_REPORT : ON -2026-03-24 16:18:55.589 [I] VolcEngineRTCLite.c:108 ENABLE_G722_CODEC : ON -2026-03-24 16:18:55.590 [I] GlobalParams.c:232 pGlobalParams->configParams.rtc.access.concurrent_requests from 2 to 1 -2026-03-24 16:18:55.590 [I] GlobalParams.c:233 pGlobalParams->configParams.rtc.ice.concurrent_agents from 2 to 1 -2026-03-24 16:18:55.590 [I] GlobalParams.c:239 pGlobalParams->configParams.audio.codec.internal.enable from 0 to 1 -2026-03-24 16:18:55.591 [I] GlobalParams.c:244 pGlobalParams->configParams.debug.log_to_console from 0 to 1 -2026-03-24 16:18:55.591 [I] GlobalParams.c:247 pGlobalParams->configParams.rtc.root_path to . -2026-03-24 16:18:55.593 [E] Cache.c:273 operation returned status code: 0x00000009 -2026-03-24 16:18:55.598 [E] SocketConnection-Lite.c:191 bind local ip failed -2026-03-24 16:18:55.601 [I] LiteResolver.c:213 start resolve rtc-log-service.volcvideo.com by sep thread -2026-03-24 16:18:55.604 [I] API byte_rtc_set_audio_codec engine 0x3c5340e0 audio_codec_type 4 -2026-03-24 16:18:55.605 [I] Common.c:82 rtcAudioCodec2SdkAudioCodec codec 5 -2026-03-24 16:18:55.606 [I] API byte_rtc_set_video_codec engine 0x3c5340e0 video_codec_type 0 -I (10359) VolcRtcProtocol: RTC实例已准备就绪;房间加入将在监听状态后执行 -I (10359) Application: 🌐 开始初始化WebSocket协议... -I (10359) Application: 🔧 创建WebsocketProtocol实例 -I (10359) Application: 🚀 启动WebSocket协议 -I (10359) Application: ✅ WebSocket协议初始化完成 -I (10359) VolcRtcProtocol: VolcRtcProtocol初始化任务已创建 -I (10359) EspHttp: Opening HTTP connection to https://xiaozhi-dev-web.goods.fun/xiaozhi/ota/ -I (10369) Application: 打印设置设备状态日志: idle -I (10379) AI_CHAT_UI: GIF表情切换: neutral -I (10379) Application: Entering idle state, playing standby sound -I (10389) WeatherApi: [AutoDetectAndSetLocation] 调用全局函数自动检测位置 -I (10389) WeatherApi: [AutoDetectLocation] ===== 开始自动检测位置 ===== -I (10389) WeatherApi: [AutoDetectLocation] 从NVS命中位置: '广州市',已更新默认城市 -I (10389) WeatherApi: [AutoDetectLocation] ===== 位置检测完成 ===== -I (10389) main_task: Returned from app_main() -2026-03-24 16:18:55.656 [I] LiteResolver.c:213 start resolve rtc-log-info.volcvideo.com by sep thread -2026-03-24 16:18:55.658 [I] LiteResolver.c:213 start resolve access.rtc.volcvideo.com by sep thread -I (10489) wifi:idx:1 (ifx:0, 70:2a:d7:85:bc:eb), tid:3, ssn:0, winSize:64 -I (10699) esp-x509-crt-bundle: Certificate validated -I (11259) Ota: HTTP response status code: 0 -I (11259) Ota: Server role: , Device role: RTC_Test -W (11259) Ota: Role mismatch (Device:RTC_Test vs Server:), upgrade denied -W (11259) Ota: ✗ Upgrade conditions not met - Role: ✗, Version check: skipped -I (11259) Ota: Running partition: ota_0 -2026-03-25 00:18:56.724 [E] Cache.c:311 operation returned status code: 0x00000009 -2026-03-25 00:18:56.942 [I] IceAgent.c:2533 cur nominatedCandidatePair local 192.168.124.22:0 remote 59.38.99.250:443 state ICE_CANDIDATE_PAIR_STATE_SUCCEEDED -I (12939) Airhub1: ADC: 2374, 原始电压: 2.37V, 计算电池电压: 10.30V, 电量: 100%, 满电电压: 4.20V -I (12939) BluetoothMAC: Bluetooth MAC Address: d0:cf:13:03:bb:f2 -I (17189) Airhub1: BOOT长按3秒:切换设备模式 -I (17189) Airhub1: AI模式 → 吧唧模式 -I (17199) DeviceMode: 模式切换为 吧唧,即将重启... -I (17699) wifi:state: run -> init (0x0) -I (17699) wifi:pm stop, total sleep time: 7184443 us / 11986157 us - -I (17699) wifi:idx:0, tid:0 -I (17699) wifi:idx:1, tid:3 -I (17699) wifi:new:<1,0>, old:<1,0>, ap:<255,255>, sta:<1,0>, prof:1, snd_ch_cfg:0x0 -I (17699) wifi: Reconnecting airhub (attempt 1 / 5) -I (17739) wifi:flush txq -I (17739) wifi:stop sw txq -I (17739) wifi:lmac stop hw txq -ESP-ROM:esp32s3-20210327 -Build:Mar 27 2021 -rst:0xc (RTC_SW_CPU_RST),boot:0x2b (SPI_FAST_FLASH_BOOT) -Saved PC:0x40379ccd ---- 0x40379ccd: esp_restart_noos at /Users/rdzleo/esp/esp-idf/v5.4.2/esp-idf/components/esp_system/port/soc/esp32s3/system_internal.c:162 -SPIWP:0xee -mode:DIO, clock div:1 -load:0x3fce2820,len:0x56c -load:0x403c8700,len:0x4 -load:0x403c8704,len:0xb88 -load:0x403cb700,len:0x2df4 -entry 0x403c88f4 -I (47) WeatherApi: 初始化天气API配置 - 默认城市: 北京 -I (48) WeatherApi: WiFi位置缓存限制已设置为: 5 条 -I (48) coexist: coex firmware version: 7b9a184 -I (48) coexist: coexist rom version e7ae62f -I (49) main_task: Started on CPU0 -I (59) main_task: Calling app_main() -I (79) Application: 🎴 吧唧模式:跳过 WiFi/协议/音频初始化 -I (79) Application: 打印设置设备状态日志: idle -I (79) BluetoothProvisioning: 蓝牙配网对象创建完成 -I (79) button: IoT Button Version: 3.5.0 -I (79) gpio: GPIO[0]| InputEn: 1| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 -I (79) button: IoT Button Version: 3.5.0 -I (79) gpio: GPIO[4]| InputEn: 1| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 -I (79) Airhub1: Initializing I2C master bus for audio codec... -I (79) Airhub1: Scanning I2C bus for devices... -I (79) Airhub1: I2C设备在线: 0x18 -E (79) i2c.master: I2C transaction unexpected nack detected -E (79) i2c.master: s_i2c_synchronous_transaction(945): I2C transaction failed -E (79) i2c.master: i2c_master_receive(1261): I2C transaction failed -E (79) i2c.master: I2C transaction unexpected nack detected -E (79) i2c.master: s_i2c_synchronous_transaction(945): I2C transaction failed -E (79) i2c.master: i2c_master_receive(1261): I2C transaction failed -I (79) Airhub1: I2C设备在线: 0x40 -I (79) Airhub1: I2C scan completed. Found 2 devices -I (79) DZBJ: 开始初始化显示硬件... -I (79) gpio: GPIO[7]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 -I (79) st77916: LCD panel create success, version: 1.0.1 -W (209) st77916: The 3Ah command has been used and will be overwritten by external initialization sequence -I (329) LCD: LCD GRAM cleared (black filled) -I (329) DZBJ: LCD 硬件初始化完成 -I (329) gpio: GPIO[5]| InputEn: 1| OutputEn: 0| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:2 -I (329) gpio: GPIO[6]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 -I (729) CST816S: IC id: 182 -I (729) LCD: Touch controller initialized successfully -I (729) LVGL: Starting LVGL task -I (729) LCD: LVGL buffer: 14400 bytes (W:360, Lines:20, DMA, single) -I (729) LCD: Touch controller added to LVGL -I (729) DZBJ: LVGL 初始化完成 -I (729) DZBJ: UI 初始化完成 -I (829) DZBJ: 背光已点亮,dzbj 显示模块初始化完成 -I (829) Airhub1: 🎴 电子吧唧模式启动 -I (829) Airhub1: 初始化吧唧模式按钮... -I (829) Airhub1: Boot button initialized on GPIO0 -I (829) Airhub1: 吧唧模式按钮初始化完成 -I (829) Airhub1: 初始化电子吧唧模式外设... -I (939) FATFS: SPIFFS: Total size: 2763761, Used: 78061 -I (989) IMG_LIST: 开始扫描SPIFFS中的图片文件 -I (989) IMG_LIST: 发现图片文件: 03.jpg -I (989) IMG_LIST: 发现图片文件: 02.jpg -I (989) IMG_LIST: 发现图片文件: default.jpg -I (1039) IMG_LIST: 图片列表初始化完成,共发现 3 张图片 -I (1039) IMG_LIST: 设置默认图片索引: 2 -I (1039) gpio: GPIO[4]| InputEn: 1| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:2 -I (1039) DZBJ_BTN: 按键初始化完成 (KEY2=GPIO4,BOOT由iot_button处理) -I (1039) DZBJ_BAT: ADC校准初始化成功 -I (1039) DZBJ_BAT: 电池ADC初始化完成 (GPIO3, ADC1_CH2, 分压比=2) -I (1039) DZBJ_BAT: ADC原始值=2838, ADC电压=2372mV, 电池电压=4744mV, 电量=100% -I (1039) DZBJ_BAT: 电池监控任务已启动,更新间隔5000ms -I (1039) BLE_INIT: BT controller compile version [6cfabcd] -I (1039) BLE_INIT: Feature Config, ADV:1, BLE_50:1, DTM:1, SCAN:1, CCA:0, SMP:1, CONNECT:1 -I (1049) BLE_INIT: Bluetooth MAC: d0:cf:13:03:bb:f2 -I (1049) phy_init: phy_version 701,f4f1da3a,Mar 3 2025,15:50:10 -I (1079) phy_init: Saving new calibration data due to checksum failure or outdated calibration data, mode(0) -I (1149) DZBJ_BLE: GATT server register, status 0, app_id 0 -I (1149) DZBJ_BLE: 图片传输服务创建成功,句柄: 28 -I (1149) DZBJ_BLE: 图片写入特征创建成功,句柄: 42 -I (1149) DZBJ_BLE: 图片编辑特征创建成功,句柄: 44 -I (1149) DZBJ_BLE: BLE MAC: d0:cf:13:03:bb:f2 -I (1149) DZBJ_BLE: 蓝牙设备名称: Airhub_d0:cf:13:03:bb:f2 -I (1149) DZBJ_BLE: Advertising data set, status 0 -I (1149) DZBJ_BLE: Scan response data set, status 0 -I (1149) DZBJ_BLE: Advertising start successfully -I (1149) SLEEP: 休眠管理器初始化完成(超时=10s) -I (1149) Airhub1: 电子吧唧模式初始化完成 -I (1149) main_task: Returned from app_main() -I (6039) DZBJ_BAT: ADC原始值=2841, ADC电压=2375mV, 电池电压=4750mV, 电量=100% -I (11039) DZBJ_BAT: ADC原始值=2841, ADC电压=2375mV, 电池电压=4750mV, 电量=100% -I (14509) DZBJ_BLE: Connected, conn_id 0, remote 73:8f:af:0d:36:7a -I (14539) DZBJ_BLE: PHY update, status 0, tx_phy 1, rx_phy 1 -I (14879) DZBJ_BLE: Connection params update, status 0, conn_int 12, latency 0, timeout 400 -I (15039) DZBJ_BLE: Connection params update, status 0, conn_int 6, latency 0, timeout 500 -I (15179) DZBJ_BLE: Connection params update, status 0, conn_int 12, latency 0, timeout 400 -I (16039) DZBJ_BAT: ADC原始值=2839, ADC电压=2372mV, 电池电压=4744mV, 电量=100% -I (16329) DZBJ_BLE: PHY update, status 0, tx_phy 2, rx_phy 2 -W (17429) BT_HCI: hcif disc complete: hdl 0x1, rsn 0x13 dev_find 1 -I (17429) DZBJ_BLE: Disconnected, remote 73:8f:af:0d:36:7a, reason 0x13 -I (17429) DZBJ_BLE: Advertising start successfully -I (21039) DZBJ_BAT: ADC原始值=2842, ADC电压=2376mV, 电池电压=4752mV, 电量=100% \ No newline at end of file +I (881719) DZBJ_BLE: Disconnected, remote 9c:76:0e:47:1b:de, reason 0x13 +I (881719) IMG_UI: 准备显示图片: face_1774344833.jpg, 路径: /spiflash/face_1774344833.jpg +I (881719) IMG_UI: 文件大小: 38679 字节 +I (881719) DZBJ_BLE: Advertising start successfully +I (881939) IMG_UI: 图片解码成功,宽度: 360, 高度: 360 +I (881939) IMG_UI: JPEG图片更新成功: face_1774344833.jpg +I (881939) IMG_LIST: BLE导航到ScreenImg显示: face_1774344833.jpg +I (886089) DZBJ_BAT: ADC原始值=2772, ADC电压=2320mV, 电池电压=4640mV, 电量=100% +I (891089) DZBJ_BAT: ADC原始值=2777, ADC电压=2324mV, 电池电压=4648mV, 电量=100% +I (893029) LVGL: Touch detected: x=251, y=223, count=1 +I (893059) LVGL: Touch detected: x=250, y=223, count=1 +I (893089) LVGL: Touch detected: x=236, y=222, count=1 +I (893119) LVGL: Touch detected: x=210, y=219, count=1 +I (893149) LVGL: Touch detected: x=170, y=213, count=1 +I (893149) IMG_LIST: 切换到下一张图片,索引: 1/8 +I (893149) IMG_UI: 准备显示图片: 03.jpg, 路径: /spiflash/03.jpg +I (893169) IMG_UI: 文件大小: 8805 字节 +I (893169) IMG_UI: 释放之前的图片数据 +I (893269) IMG_UI: 图片解码成功,宽度: 360, 高度: 360 +I (893269) IMG_UI: JPEG图片更新成功: 03.jpg +I (893919) LVGL: Touch detected: x=251, y=187, count=1 +I (893949) LVGL: Touch detected: x=250, y=187, count=1 +I (893979) LVGL: Touch detected: x=241, y=187, count=1 +I (894009) LVGL: Touch detected: x=216, y=187, count=1 +I (894039) LVGL: Touch detected: x=151, y=190, count=1 +I (894039) IMG_LIST: 切换到下一张图片,索引: 2/8 +I (894039) IMG_UI: 准备显示图片: 02.jpg, 路径: /spiflash/02.jpg +I (894039) IMG_UI: 文件大小: 20498 字节 +I (894039) IMG_UI: 释放之前的图片数据 +I (894159) IMG_UI: 图片解码成功,宽度: 360, 高度: 360 +I (894159) IMG_UI: JPEG图片更新成功: 02.jpg +I (894569) LVGL: Touch detected: x=262, y=196, count=1 +I (894599) LVGL: Touch detected: x=248, y=196, count=1 +I (894629) LVGL: Touch detected: x=216, y=196, count=1 +I (894659) LVGL: Touch detected: x=169, y=194, count=1 +I (894659) IMG_LIST: 切换到下一张图片,索引: 3/8 +I (894659) IMG_UI: 准备显示图片: default.jpg, 路径: /spiflash/default.jpg +I (894659) IMG_UI: 文件大小: 47430 字节 +I (894659) IMG_UI: 释放之前的图片数据 +I (894829) IMG_UI: 图片解码成功,宽度: 360, 高度: 360 +I (894829) IMG_UI: JPEG图片更新成功: default.jpg +I (895209) LVGL: Touch detected: x=256, y=200, count=1 +I (895239) LVGL: Touch detected: x=253, y=200, count=1 +I (895269) LVGL: Touch detected: x=238, y=200, count=1 +I (895299) LVGL: Touch detected: x=205, y=198, count=1 +I (895299) IMG_LIST: 切换到下一张图片,索引: 4/8 +I (895299) IMG_UI: 准备显示图片: face_1772002032846.jpg, 路径: /spiflash/face_1772002032846.jpg +I (895319) IMG_UI: 文件大小: 987342 字节 +I (895319) IMG_UI: 释放之前的图片数据 +E (895719) FATFS: 不是有效JPEG文件: /spiflash/face_1772002032846.jpg +E (895719) IMG_UI: 图片解码失败,错误码: -1 +I (896089) DZBJ_BAT: ADC原始值=2773, ADC电压=2321mV, 电池电压=4642mV, 电量=100% +I (899189) LVGL: Touch detected: x=311, y=196, count=1 +I (899219) LVGL: Touch detected: x=307, y=196, count=1 +I (899249) LVGL: Touch detected: x=291, y=196, count=1 +I (899279) LVGL: Touch detected: x=255, y=196, count=1 +I (899279) IMG_LIST: 切换到下一张图片,索引: 5/8 +I (899279) IMG_UI: 准备显示图片: face_1774340638342.jpg, 路径: /spiflash/face_1774340638342.jpg +I (899279) IMG_UI: 文件大小: 70339 字节 +I (899539) IMG_UI: 图片解码成功,宽度: 360, 高度: 360 +I (899539) IMG_UI: JPEG图片更新成功: face_1774340638342.jpg +I (900279) LVGL: Touch detected: x=286, y=204, count=1 +I (900309) LVGL: Touch detected: x=285, y=204, count=1 +I (900339) LVGL: Touch detected: x=275, y=204, count=1 +I (900369) LVGL: Touch detected: x=220, y=203, count=1 +I (900369) IMG_LIST: 切换到下一张图片,索引: 6/8 +I (900369) IMG_UI: 准备显示图片: face_1774340678141.jpg, 路径: /spiflash/face_1774340678141.jpg +I (900369) IMG_UI: 文件大小: 71774 字节 +I (900369) IMG_UI: 释放之前的图片数据 +I (900639) IMG_UI: 图片解码成功,宽度: 360, 高度: 360 +I (900639) IMG_UI: JPEG图片更新成功: face_1774340678141.jpg +I (901089) DZBJ_BAT: ADC原始值=2754, ADC电压=2306mV, 电池电压=4612mV, 电量=100% +I (901109) LVGL: Touch detected: x=292, y=212, count=1 +I (901139) LVGL: Touch detected: x=288, y=212, count=1 +I (901169) LVGL: Touch detected: x=272, y=211, count=1 +I (901199) LVGL: Touch detected: x=236, y=209, count=1 +I (901199) IMG_LIST: 切换到下一张图片,索引: 7/8 +I (901199) IMG_UI: 准备显示图片: face_1774344117.jpg, 路径: /spiflash/face_1774344117.jpg +I (901199) IMG_UI: 文件大小: 94251 字节 +I (901199) IMG_UI: 释放之前的图片数据 +E (901279) FATFS: 不是有效JPEG文件: /spiflash/face_1774344117.jpg +E (901279) IMG_UI: 图片解码失败,错误码: -1 +I (902049) LVGL: Touch detected: x=333, y=214, count=1 +I (902079) LVGL: Touch detected: x=331, y=214, count=1 +I (902109) LVGL: Touch detected: x=318, y=214, count=1 +I (902139) LVGL: Touch detected: x=288, y=214, count=1 +I (902169) LVGL: Touch detected: x=210, y=214, count=1 +I (902169) IMG_LIST: 切换到下一张图片,索引: 8/8 +I (902169) IMG_UI: 准备显示图片: face_1774344833.jpg, 路径: /spiflash/face_1774344833.jpg +I (902169) IMG_UI: 文件大小: 38679 字节 +I (902389) IMG_UI: 图片解码成功,宽度: 360, 高度: 360 +I (902389) IMG_UI: JPEG图片更新成功: face_1774344833.jpg +I (906089) DZBJ_BAT: ADC原始值=2763, ADC电压=2312mV, 电池电压=4624mV, 电量=100% \ No newline at end of file diff --git a/main/dzbj/pages.c b/main/dzbj/pages.c index 92d239e..a83cdff 100644 --- a/main/dzbj/pages.c +++ b/main/dzbj/pages.c @@ -915,15 +915,15 @@ void pages_cleanup_gif(void) { #endif // LV_USE_GIF // 更新ui_ImgBle控件的图片(支持 JPEG) -void update_ui_ImgBle(const char *img_name) { +bool update_ui_ImgBle(const char *img_name) { if(!img_name) { ESP_LOGE("IMG_UI", "图片名为空"); - return; + return false; } if(!ui_ImgBle) { ESP_LOGE("IMG_UI", "ui_ImgBle控件不存在"); - return; + return false; } static uint8_t *ui_img_data = NULL; @@ -937,7 +937,7 @@ void update_ui_ImgBle(const char *img_name) { struct stat file_stat; if(stat(img_path, &file_stat) != 0) { ESP_LOGE("IMG_UI", "文件不存在: %s", img_path); - return; + return false; } ESP_LOGI("IMG_UI", "文件大小: %ld 字节", file_stat.st_size); @@ -961,13 +961,13 @@ void update_ui_ImgBle(const char *img_name) { FILE *gif_file = fopen(img_path, "rb"); if (!gif_file) { ESP_LOGE("IMG_UI", "GIF文件打开失败: %s", img_path); - return; + return false; } gif_psram_buf = heap_caps_malloc(file_stat.st_size, MALLOC_CAP_SPIRAM); if (!gif_psram_buf) { ESP_LOGE("IMG_UI", "PSRAM分配失败: %ld 字节", file_stat.st_size); fclose(gif_file); - return; + return false; } fread(gif_psram_buf, 1, file_stat.st_size, gif_file); fclose(gif_file); @@ -978,13 +978,14 @@ void update_ui_ImgBle(const char *img_name) { ESP_LOGE("IMG_UI", "gifdec 打开失败: %s", img_name); free(gif_psram_buf); gif_psram_buf = NULL; - return; + return false; } // 启动自定义 GIF 播放器(Palette LUT + 双缓冲流水线) gif_player_start(); ESP_LOGI("IMG_UI", "GIF显示启动(优化): %s", img_name); + return true; } else #endif // LV_USE_GIF { @@ -1017,7 +1018,7 @@ void update_ui_ImgBle(const char *img_name) { if(ui_img_data == NULL) { ESP_LOGE("IMG_UI", "解码数据为空"); - return; + return false; } // 配置图片数据 @@ -1034,9 +1035,12 @@ void update_ui_ImgBle(const char *img_name) { lvgl_port_unlock(); ESP_LOGI("IMG_UI", "JPEG图片更新成功: %s", img_name); + return true; } else { ESP_LOGE("IMG_UI", "图片解码失败,错误码: %d", ret); ui_img_data = NULL; + return false; } } + return false; } diff --git a/main/dzbj/pages.h b/main/dzbj/pages.h index 2979664..939ad27 100644 --- a/main/dzbj/pages.h +++ b/main/dzbj/pages.h @@ -24,7 +24,7 @@ void free_spiffs_image_list(void); // 重置图片列表 bool set_image_index_by_name(const char *name); // 根据文件名设置当前图片索引 const char* get_next_image(void); // 获取下一张图片 const char* get_prev_image(void); // 获取上一张图片 -void update_ui_ImgBle(const char *img_name); // 更新ui_ImgBle控件的图片 +bool update_ui_ImgBle(const char *img_name); // 更新ui_ImgBle控件的图片,成功返回true void ble_image_navigate(const char *filename); // BLE接收后导航到ScreenImg显示 void ble_image_navigate_with_data(const char *filename, uint8_t *data, size_t data_size); // BLE接收后直通显示(跳过SPIFFS重读) diff --git a/main/ui/screens/ui_ScreenImg.c b/main/ui/screens/ui_ScreenImg.c index bf0b872..6b953b8 100644 --- a/main/ui/screens/ui_ScreenImg.c +++ b/main/ui/screens/ui_ScreenImg.c @@ -9,7 +9,7 @@ #include "esp_log.h" // 用于日志输出 extern void init_spiffs_image_list(void); -extern void update_ui_ImgBle(const char *img_name); +extern bool update_ui_ImgBle(const char *img_name); extern void free_spiffs_image_list(void); extern const char* get_next_image(void); extern const char* get_prev_image(void); @@ -124,16 +124,22 @@ lv_indev_wait_release(lv_indev_get_act()); } if ( event_code == LV_EVENT_GESTURE && lv_indev_get_gesture_dir(lv_indev_get_act()) == LV_DIR_LEFT ) { lv_indev_wait_release(lv_indev_get_act()); - const char *next_img = get_next_image(); - if(next_img) { - update_ui_ImgBle(next_img); + // 解码失败时自动跳过,最多尝试全部图片避免死循环 + for(int try = 0; try < 10; try++) { + const char *next_img = get_next_image(); + if(!next_img) break; + if(update_ui_ImgBle(next_img)) break; + ESP_LOGW("ScreenImg", "跳过无效图片,继续下一张"); } } if ( event_code == LV_EVENT_GESTURE && lv_indev_get_gesture_dir(lv_indev_get_act()) == LV_DIR_RIGHT ) { lv_indev_wait_release(lv_indev_get_act()); - const char *prev_img = get_prev_image(); - if(prev_img) { - update_ui_ImgBle(prev_img); + // 解码失败时自动跳过,最多尝试全部图片避免死循环 + for(int try = 0; try < 10; try++) { + const char *prev_img = get_prev_image(); + if(!prev_img) break; + if(update_ui_ImgBle(prev_img)) break; + ESP_LOGW("ScreenImg", "跳过无效图片,继续上一张"); } } } diff --git a/main/ui/screens/ui_ScreenImg.h b/main/ui/screens/ui_ScreenImg.h index f2383b4..7db5a07 100644 --- a/main/ui/screens/ui_ScreenImg.h +++ b/main/ui/screens/ui_ScreenImg.h @@ -21,7 +21,7 @@ extern lv_obj_t *ui_ImageDel; extern lv_obj_t *ui_ImageReturn; extern void init_spiffs_image_list(void); -extern void update_ui_ImgBle(const char *img_name); +extern bool update_ui_ImgBle(const char *img_name); extern void free_spiffs_image_list(void); extern const char* get_next_image(void); extern const char* get_prev_image(void);