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

描述

 

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

ESP

 

 

源码解析

 

 


 

主函数部分___main/main.c


 

ESP

● 初始化 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 用于管理多个屏幕和控件的初始化和事件处理。

ESP

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

ESP

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

ESP

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

ESP

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

ESP

UVC摄像头___main/app/app_uvc_camera.c

从主函数的 app_uvc_camera_init()调用,使用了乐鑫的 USB 流媒体库,能够初始化摄像头、处理摄像头帧数据,并提供挂起和恢复流媒体的功能。

挂起和恢复UVC流媒体函数app_uvc_suspend函数调用usb_streaming_control函数挂起流媒体,而app_uvc_resume函数恢复流媒体。

ESP

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

ESP

 

 

初始化UVC摄像头

 

 

 

初始化UVC摄像头函数,包括以下步骤:
 

 

1.分配内存:

○ 为USB传输缓冲区分配双缓冲区xfer_buffer_axfer_buffer_b

○ 为帧缓冲区分配内存frame_buffer

2.配置UVC功能:

○ 设置UVC配置,包括帧宽度、高度、帧间隔、传输缓冲区大小、帧缓冲区和回调函数。

3.配置UVC流媒体:

○ 调用uvc_streaming_config函数配置UVC流媒体,如果配置失败,记录错误日志。

4.启动USB流媒体:

○ 调用usb_streaming_start函数启动USB流媒体。

ESP

 

 

ESP_SR___main/app/app_sr.c

 

 

 

从主函数的 app_sr_start()调用,app_sr.c 是基于 FreeRtos的语音识别应用,能够检测唤醒词和语音命令,并将结果发送到队列进行处理。


 

应用启动函数,初始化语音识别系统,包括创建结果队列、加载模型、配置AFE和多网络接口,并创建音频馈送任务、音频检测任务和语音识别处理任务。

ESP

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

ESP

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

ESP

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

ESP

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函数初始化扬声器编码器设备。

○ 设置默认音量。

ESP

 

 

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流。

ESP

Rainmaker___main/rmker/rmker.c

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

 

 

启动RainMaker任务

 

 


 

启动 RainMaker 任务,创建并启动 RainMaker 任务。

 

ESP

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

ESP

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

ESP

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

ESP

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

ESP

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

ESP

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

ESP

ESP

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

ESP

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分