0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

启明云端 2024-10-10 08:01 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

bace28c8-869a-11ef-bb4b-92fbcf53809c.jpg

源码解析


主函数部分___main/main.c


baf266f2-869a-11ef-bb4b-92fbcf53809c.png

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

bb1c01d8-869a-11ef-bb4b-92fbcf53809c.png

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

bb3b44ee-869a-11ef-bb4b-92fbcf53809c.png

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

bb5b2106-869a-11ef-bb4b-92fbcf53809c.png

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

bb635830-869a-11ef-bb4b-92fbcf53809c.png

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

bb744d8e-869a-11ef-bb4b-92fbcf53809c.png

UVC摄像头___main/app/app_uvc_camera.c

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

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

bb9cd6fa-869a-11ef-bb4b-92fbcf53809c.png

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

bbcb813a-869a-11ef-bb4b-92fbcf53809c.png

初始化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流媒体。

bbe18b74-869a-11ef-bb4b-92fbcf53809c.png

ESP_SR___main/app/app_sr.c

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


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

bc056e68-869a-11ef-bb4b-92fbcf53809c.png

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

bc17499e-869a-11ef-bb4b-92fbcf53809c.png

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

bc3fa0a6-869a-11ef-bb4b-92fbcf53809c.png

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

bc66f57a-869a-11ef-bb4b-92fbcf53809c.png

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

设置默认音量。

bc846d3a-869a-11ef-bb4b-92fbcf53809c.png

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

bca440e2-869a-11ef-bb4b-92fbcf53809c.png

Rainmaker___main/rmker/rmker.c

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

启动RainMaker任务


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

bcaef802-869a-11ef-bb4b-92fbcf53809c.png

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

bcb667ae-869a-11ef-bb4b-92fbcf53809c.png

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

bcd37984-869a-11ef-bb4b-92fbcf53809c.png

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

bceec022-869a-11ef-bb4b-92fbcf53809c.png

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

bcfbe5d6-869a-11ef-bb4b-92fbcf53809c.png

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

bd24bb46-869a-11ef-bb4b-92fbcf53809c.png

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

bd49497a-869a-11ef-bb4b-92fbcf53809c.png

bd740f5c-869a-11ef-bb4b-92fbcf53809c.png

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

bd9b34b0-869a-11ef-bb4b-92fbcf53809c.png

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

    关注

    0

    文章

    194

    浏览量

    36085
  • 源码
    +关注

    关注

    8

    文章

    682

    浏览量

    31082
  • 函数
    +关注

    关注

    3

    文章

    4406

    浏览量

    66813
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    factory demo编译报错的原因?

    sdkconfig \'F:/01_ESP_STM_PRJ/ESP32/ESP-BOX/esp-box-master/examples/factory_demo/sdkconfig
    发表于 06-27 06:43

    esp-box-0.5.0\\esp-box-0.5.0\\examples\\factory_demo编译出错是什么原因导致的?

    esp-box-0.5.0esp-box-0.5.0examplesfactory_demo时,报错,请问这是什么问题 又从Github上下载源码esp-box-master.zip, 里面的例程
    发表于 06-27 07:04

    ESP-BOX的Git上的PCB文档用AD打不开,说文件损坏怎么解决?

    ESP-BOX的Git上的PCB文档用AD打不开,说文件损坏,能否提供一下AD版本的layout供参考?非常感谢!!!
    发表于 06-27 06:33

    esp-skainet的example在ESP-BOX上报错的原因?怎么处理?

    esp-skainet的example选择 esp32s3,并在menuconfig中设置esp-box,编译并烧录,发现无法正常工作,报错如下: E (372) SPIFFS: spiffs partition could
    发表于 06-27 06:06

    ESP-BOX开发板烧录时报错的原因?

    ESP-BOX开发板已经正常使用几个星期,今天突然开始报错,不同固件均报错,具体如下: Executing action: flashSerial port
    发表于 06-27 06:58

    esp-box的slint例子为啥烧录后无法显示怎么解决?

    设备:esp-box-3b 开发环境:esp-idf + slint 按照官方的slint开发例子,运行和烧录都没问题,但是屏幕无法显示
    发表于 07-22 08:14

    基于STM32的智能药盒

    的今天,这些都不是问题,我们设计并开发了一款名为“健康卫士”的智能药盒,可以联网监测用户的服药情况,提示用户服药,并且根据用户设定自动提取所需药物。哎呀!!!!!!!忘记了我是来参赛的,说下这次大赛要求
    发表于 12-07 10:09

    如何通过ESP32S3的USB进行ESP-BOX固件升级呢?

    如果通过USB口,在不需要按IO0的情况下,进行升级。目前测试ESP-BOX的固件可以进行升级,通过VCS的IDF创建的测试用例,也可以自动完成升级,但是通过micropython的固件,确无法完成。请问哪个大神有解决方案。
    发表于 03-03 09:06

    求助,请问esp-box使用的LCD规格书哪里能查看?

    请问esp-box使用的LCD规格书哪里能查看?
    发表于 03-09 08:38

    ESP-BOX工程的master分支下,如何定位APP的入口地址?

    我在ESP-BOX工程的master分支下,IDF是release/v4.4 commit id: 2bdea81b2a,编译了范例(比如image-display);烧录开机后,出现 如下LOG后,再没有其它输出了。看样子是app_main部分引导不了?能否提示一下,如何定位APP的入口地址?
    发表于 03-09 08:29

    特别提醒蓝牙语音智能药盒的设计思路(一)

    一、前言随着人口老龄化和慢性病的不断增加,药品的使用量也在逐年增加。而药品的正确使用和按时服用对于病人的健康恢复至关重要。中国的智能药盒正在进入迅速发展阶段,目前已经有许多商业智能药盒
    发表于 03-24 11:17

    特别提醒蓝牙语音智能药盒的设计思路(二)TTS技术应用篇,附手机小程序界面【先收藏】

    引言上一篇我们谈了基于蓝牙、TTS技术的智能药盒设计思路,今天我们具体聊聊TTS技术是如何应用于智能药盒,实现语音提醒病人按时用药的。该设计思路是基于
    发表于 04-11 15:49

    智能药盒电路原理图

    药盒提醒~~智能药盒电路原理图,感兴趣的可以看看。
    发表于 08-30 18:11 14次下载

    拿来就能用 | ESP AI音箱方案介绍

    本案例使用ESP-BOX和OpenAIAPI开发一款语音控制的聊天机器人(chatbot)。ESP-BOXAI音箱方案介绍本案例将介绍如何使用ESP-BOX和OpenAIAPI开发一款语音控制的聊天
    的头像 发表于 03-21 08:03 1477次阅读
    拿来就能用 | <b class='flag-5'>ESP</b> AI音箱方案介绍

    乐鑫ESP32-S3-BOX3方案智能AI药盒应用,启明云端技术支持和定制化服务

    在快节奏的现代生活中,健康管理变得越来越重要。但繁忙的日常往往让我们难以时刻关注自己的健康状况,尤其是药物管理。今天,我们带您一起重现一款的新产品——ESP_BOX智能药盒,它不仅能够提醒您按时服药
    的头像 发表于 09-25 08:00 3578次阅读
    乐鑫<b class='flag-5'>ESP32-S3-BOX</b>3方案<b class='flag-5'>智能</b>AI<b class='flag-5'>药盒</b>应用,启明云端技术支持和定制化服务