这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » [开发版试用]ESP32-S3-BOX-3+过程贴(三)WIFI连接和LVGLU

共3条 1/1 1 跳转至

[开发版试用]ESP32-S3-BOX-3+过程贴(三)WIFI连接和LVGLUI显示

助工
2025-03-24 07:40:54     打赏

简介

在上一个文章中的代码, 我已经实现了语音的录制和播放, 但是屏幕并没有被驱动起来而且没有连接wifi, 那么在这一次的更新中我新增了WIFI和LVGL UI的支持(使用SquareLine_Studio 来制作UI界面然后在工程中渲染.). 并且已经成功的通过测试.


首先是LVGL的UI支持, 我使用SquareLine_Studio 创建了一个基于乐鑫esp32-s3box的项目,并且在屏幕上加了一个键盘的组件, 如下所示.

image.png

在项目的设置中指定了当前的工程路径和导出的UI文件路径

image.png

这样的话每一次的UI导出就正好导出到了我的工程文件夹中. 项目文件夹如下所示.

image.png

需要注意的是还需要在main下的CmakeList 配置头文件和C文件的查找. 如下所示

idf_build_get_property(project_dir PROJECT_DIR)

file(GLOB MAIN_SRCS "src/*.c" "ui/*.c" "ui/screens/*.c")

# 注册主组件
idf_component_register(
    SRCS 
        "main.c"
        ${MAIN_SRCS}
    INCLUDE_DIRS 
        "."
        "inc"
        "ui"
)

这样的话 main.c 文件就可以找到导出的ui.h文件了. 然后我们在主程序中引入 ui.h 并且调用初始化函数初始化UI

/*
 * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: CC0-1.0
 */
#include "esp_log.h"
#include "bsp/esp-bsp.h"
#include "audio_play.h"
#include "esp_system.h"
#include "network.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "ui.h"
#define REC_FILENAME "/spiffs/recording.wav"

void app_main(void)
{   /* 初始化并挂载 SPIFFS */
    bsp_spiffs_mount();
    /* 初始化 I2C(用于触摸和音频) */
    bsp_i2c_init();

    /* 初始化显示和 LVGL */
    bsp_display_start();

    /* 设置默认显示亮度 */
    bsp_display_brightness_set(100);

    /* 添加并显示 LVGL 组件 */
    ui_init();
    /* 初始化音频 */
    app_audio_init();
}


需要注意的一点是,现在SquareLine_Studio中的lvgl版本是8.3.6或者好似8.3.11 但是 ESP-IDF工程中的LVGL版本是9.0+. 有些旧版本的API在新版本已经被舍弃了. 因此需要把旧版本的API换成新版本的(我个人觉得LVGL官方这一点做的非常不好, 就算版本需要进行更新,除了恶性的bug. 旧版本的API不应该被直接删除或者改名或者禁用. 可以修改成如果使用的话打印警告即可).


然后将程序烧录到开发板上, 效果如下所示.

image.png

此时LVGL的测试通过, 和SquareLine_Studio的显示一致. 对于聊天的显示界面之后再进行制作. 我个人的想法是只需要一个按钮来触发录制的声音的事件即可.


WIFI的连接

wifi的连接我是使用的我之前的ESP-IDF系列文章中的wifi初始化方法. 首先来初始化NVS

#include "nvs_init.h"
#include "esp_log.h"
#include "nvs_flash.h"

static const char *TAG = "nvs_init";

void init_nvs()
{
    esp_err_t err = nvs_flash_init();
    if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND)
    {
        ESP_ERROR_CHECK(nvs_flash_erase());
        err = nvs_flash_init();
    }
    ESP_ERROR_CHECK(err);
}


然后在网络初始化前先初始化NVS

#include "network.h"
#include "esp_log.h"
#include "esp_wifi.h"
#include "protocol_examples_common.h"
#include "nvs_init.h"
static const char *TAG = "network";

void init_network()
{
    init_nvs();
    ESP_ERROR_CHECK(esp_netif_init());
    ESP_ERROR_CHECK(esp_event_loop_create_default());
    ESP_ERROR_CHECK(example_connect());

#if CONFIG_EXAMPLE_CONNECT_WIFI
    esp_wifi_set_ps(WIFI_PS_NONE);
#endif // CONFIG_EXAMPLE_CONNECT_WIFI
}

此时即可完成WIFI的连接. 由于这里并没有保存WIFI的连接信息. 因此我自定义了一个Kconfig.projbuild 用于生成menuconfig内的wifi初始化信息. 如下所示

image.png


由于这里使用的wifi连接方法为example connect, 所以要想使用这个方法的话, 还需要在idf_component.yml 中进行配置(如下所示)

dependencies:
  protocol_examples_common:
      path: ${IDF_PATH}/examples/common_components/protocol_examples_common
  esp_jpeg: "*"
  esp-box-3:
    version: "*"
    override_path: "../../../bsp/esp-box-3"



wifi 连接效果如下

image.png


总结

截止到目前,所有的准备工作已经做好了. 音频的录制、播放、 屏幕的显示和网络的连接. 那么在下一篇文章中我将准备把音频数据通过HTTP/HTTPS发送给ASR服务,然后再将数据发送给大模型实现消息的应答功能. 然后再调用TTS服务将文字转换成语音,最终在ESP32-S3-box上进行播放.


院士
2025-03-24 10:37:20     打赏
2楼

又是一篇大作。

详细,真棒!赞一下


专家
2025-03-24 20:20:36     打赏
3楼

感谢分享


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]