药盒基本概述请参考上一篇文章

源码解析
主函数部分___main/main.c

●初始化 NVS:初始化非易失性存储(NVS),如果需要擦除和重新初始化 NVS,会进行相应处理。
●检查百度 API 密钥:调用 baidu_api_key_check函数检查是否配置了百度 API 密钥。
●初始化 I2C:初始化 I2C 总线,用于触摸和音频设备。
●启动显示和 LVGL:启动显示并设置默认亮度。
●显示用户界面:调用 app_lvgl_display函数显示用户界面。
●初始化 RainMaker:启动 RainMaker 服务,并等待其连接。
●初始化驱动和其他组件:初始化驱动、语音识别、文本到语音转换和 UVC 摄像头。
●输出剩余内存:输出启动后的剩余内存。
●主循环:进入一个无限循环,每秒延迟一次;等待用户操作。
主要功能模块
LVGL___main/ui/ui.c
从主函数的 app_lvgl_display()调用,ui.c 用于管理多个屏幕和控件的初始化和事件处理。

屏幕初始化函数,这个函数用于初始化所有屏幕,并设置默认的显示主题。最后,它将ui_Screen1作为初始屏幕加载。

屏幕和控件的初始化函数,这些函数用于初始化各个屏幕及其上的控件。

屏幕事件处理函数,这些函数用于处理用户在各个屏幕上的操作事件,如手势和按钮点击。

事件处理函数实现,这些函数根据事件类型和手势方向来切换屏幕或执行其他操作。

UVC摄像头___main/app/app_uvc_camera.c
从主函数的 app_uvc_camera_init()调用,使用了乐鑫的 USB 流媒体库,能够初始化摄像头、处理摄像头帧数据,并提供挂起和恢复流媒体的功能。
挂起和恢复UVC流媒体函数,app_uvc_suspend函数调用usb_streaming_control函数挂起流媒体,而app_uvc_resume函数恢复流媒体。

获取当前帧数据函数,返回当前帧数据的指针。

初始化UVC摄像头
初始化UVC摄像头函数,包括以下步骤:
1.分配内存:
○为USB传输缓冲区分配双缓冲区xfer_buffer_a和xfer_buffer_b。
○为帧缓冲区分配内存frame_buffer。
2.配置UVC功能:
○设置UVC配置,包括帧宽度、高度、帧间隔、传输缓冲区大小、帧缓冲区和回调函数。
3.配置UVC流媒体:
○调用uvc_streaming_config函数配置UVC流媒体,如果配置失败,记录错误日志。
4.启动USB流媒体:
○调用usb_streaming_start函数启动USB流媒体。

ESP_SR___main/app/app_sr.c
从主函数的 app_sr_start()调用,app_sr.c 是基于 FreeRtos的语音识别应用,能够检测唤醒词和语音命令,并将结果发送到队列进行处理。
应用启动函数,初始化语音识别系统,包括创建结果队列、加载模型、配置AFE和多网络接口,并创建音频馈送任务、音频检测任务和语音识别处理任务。

音频馈送任务,从麦克风读取音频数据,并将其馈送到AFE模块进行处理。

音频检测任务,检测唤醒词和语音命令,并将结果发送到队列进行处理。

重置命令列表函数,用于重置语音命令列表。

TTS___main/app/app_sr_tts.c
从主函数的 app_tts_init()调用,app_sr_tts.c 实现了一个文本到语音(TTS)转换的应用,能够初始化TTS系统并播放给定的文本。
TTS初始化
TTS初始化函数,初始化TTS系统,包括以下步骤:
1.查找语音数据分区:
○使用esp_partition_find_first函数查找名为"voice_data"的分区。
○如果找不到分区,记录错误日志并返回错误。
2.映射语音数据分区:
○使用esp_partition_mmap函数将分区映射到内存。
○如果映射失败,记录错误日志并返回错误。
3.初始化语音设置:
○使用esp_tts_voice_set_init函数初始化语音设置。
○创建TTS句柄,如果创建失败,记录错误日志并返回错误。
4.初始化扬声器编码器设备:
○使用bsp_audio_codec_speaker_init函数初始化扬声器编码器设备。
○设置默认音量。

TTS播放函数
1.打开扬声器设备:
○设置采样率、通道数和位深度。
○使用esp_codec_dev_open函数打开扬声器设备。
2.播放提示文本:
○记录要播放的文本。
○使用esp_tts_parse_chinese函数解析中文文本。
○使用esp_tts_stream_play函数获取PCM数据,并使用esp_codec_dev_write函数将数据写入扬声器设备。
○循环播放直到所有数据播放完毕。
3.关闭扬声器设备并重置TTS流:
○使用esp_codec_dev_close函数关闭扬声器设备。
○使用esp_tts_stream_reset函数重置TTS流。

Rainmaker___main/rmker/rmker.c
从主函数的 app_rmaker_start()调用,rmker.c 主要功能是通过 Wi-Fi 连接到 RainMaker 云平台,并管理药盒和心率检测设备。
启动RainMaker任务
启动 RainMaker 任务,创建并启动 RainMaker 任务。

获取和设置药盒状态参数,提供了获取和设置药盒状态参数的函数。

更新和报告药盒和心率数据,提供了更新和报告药盒和心率数据的函数。

重置 Wi-Fi,提供了重置 Wi-Fi 的函数。

处理来自 RainMaker 云的命令,处理来自 RainMaker 云的命令,根据命令执行相应的操作,如打开/关闭药盒、通知用户等。

事件处理函数,处理 RainMaker 事件,如连接和断开连接,并根据事件更新显示屏。

创建药盒和心率检测设备,创建药盒和心率检测设备,并添加相应的参数和回调函数。


RainMaker 主任务,初始化网络和 RainMaker 节点,创建设备,启用时区和调度服务,注册事件处理函数,启动 RainMaker 代理,并启动 Wi-Fi。

-
ESP
+关注
关注
0文章
194浏览量
36085 -
源码
+关注
关注
8文章
682浏览量
31082 -
函数
+关注
关注
3文章
4406浏览量
66813
发布评论请先 登录
factory demo编译报错的原因?
esp-box-0.5.0\\esp-box-0.5.0\\examples\\factory_demo编译出错是什么原因导致的?
ESP-BOX的Git上的PCB文档用AD打不开,说文件损坏怎么解决?
esp-skainet的example在ESP-BOX上报错的原因?怎么处理?
ESP-BOX开发板烧录时报错的原因?
esp-box的slint例子为啥烧录后无法显示怎么解决?
基于STM32的智能药盒
如何通过ESP32S3的USB进行ESP-BOX固件升级呢?
在ESP-BOX工程的master分支下,如何定位APP的入口地址?
特别提醒蓝牙语音智能药盒的设计思路(一)
特别提醒蓝牙语音智能药盒的设计思路(二)TTS技术应用篇,附手机小程序界面【先收藏】
拿来就能用 | ESP AI音箱方案介绍
乐鑫ESP32-S3-BOX3方案智能AI药盒应用,启明云端技术支持和定制化服务

ESP-BOX 智能药盒源码解析(续)
评论