手把手教你烧录 ESP-SPARKBOT:基础固件与精简操作全解析

一、效果演示

EPS-SPARKBOT 对话效果演示

二、配置ASR/TTS/LLM

注册并登录 百度智能云-登录 ,必须进行实名认证,才能领取免费使用额度。

1、ASR/TTS

搜索语音技术,获取 API Key 与 Secret Key,调用 API 获取 ACCESS_TOKEN, 直达链接 百度智能云控制台

点击同意协议,然后创建应用,

应用名称和描述可以随便填,服务接口必须勾选语音识别与语音合成,

创建完成之后,页面会显示 API Key 和 Secret Key,此时复制保持下来,

创建好的应用可以在应用列表查询到,

最后我们参考 https://ai.baidu.com/ai-doc/REFERENCE/Lkru0zoz4#%E6%A6%82%E8%BF%B0 获取 access token,Linux 下可以直接执行以下命令,记得替换对于的 Key。

curl -X POST 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=[API Key ]&client_secret=[Secret Key]'  -H 'Content-Type: application/json' 

2、LLM

直接搜索 千帆 ModelBuilder ,获取 API Key 与 Secret Key,调用 API 获取 ACCESS_TOKEN,

预置服务中有写可以免费使用的模型,我们使用的是 ERNIE-Lite-8K 模型,参考文档ERNIE-Lite-8K - ModelBuilder,同样的,我们需要创建应用,但是需要注意固件使用的是旧版本接口,

创建完之后,我们在该页面获取到 API Key 和 Secret Key,

接着调用以下指令获取 access token,记得替换对于的 Key 值,

curl -X POST 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=[API Key ]&client_secret=[Secret Key]'  -H 'Content-Type: application/json' 

三、获取天气 API TOKEN

登录 和风天气开发服务 ~ 强大、丰富的天气数据服务,创建一个免费的项目即可,

把创建好的API KEY 记录下来,等会配置时需要使用。

四、克隆固件源码

git clone https://gitee.com/esp-friends/esp_sparkbot.git

五、编译烧录固件

 这里我使用的 ESP-IDF 版本是 5.4.0,官方使用的版本是 5.2.3,参考官方文档 固件烧录指南

1、设置芯片

idf.py set-target esp32s3

2、配置 menuconfig

idf.py menuconfig

输入指令,回车,进入配置页面, 

按下 shift 旁边的 “/” 按键进入搜索,输入 bmi,

可以看到目前使用的是 BMI220 姿态传感器芯片,当前我使用的是 BMI270 芯片,所以这里需要按一下方向键↓,然后回车,

设置完毕,按 esc 回退到主菜单,接下来设置三个 token 和配网,选中 Example Configuration,回车进入配置页面,

第一个配置百度语音识别 token,第二个配置百度大模型 token,第三个配置天气 token,第四第五配置联网的 wifi 和密码,

  • BAIDU_AUDIO_ACCESS_TOKEN:百度音频服务的 ACCESS_TOKEN,通过百度控制台中的语音技术的 API Key 和 Secret Key 申请,详情参考:获取 access_token
  • BAIDU_LLM_ACCESS_TOKEN:大语言模型服务的 ACCESS_TOKEN,通过百度控制台中的大语言模型应用的 API Key 和 Secret Key 申请,详情参考:获取 access_token。 注意:大语言模型和语音服务使用的是两种不同的 access_token
  • QWEATHER_REQUEST_KEY:和风天气的 request key, 用于在桌面钟界面显示天气和温度信息
  • EXAMPLE_WIFI_SSID:连接 Wi-Fi 的 SSID
  • EXAMPLE_WIFI_PASSWORD:连接 Wi-Fi 的密码

可以通过 idf.py menuconfig 手动配置上方参数,也可以直接在 Kconfig.projbuild 中修改 default 值 注意:如果 sdkconfig 文件已经生成,则 Kconfig.projbuild 不再生效。可以删除 sdkconfig 或运行 idf.py menuconfig 指令修改。

输入真正的 token 之后回车保存,直到所有配置都配置完毕,一直按 esc 键返回,最后按 y 键确认配置,

注意:百度的 token 有效期是 30 天,过期后需要重新获取 token

3、编译

idf.py build

4、一键烧录

要先确认设备的串口号,可以用这个命令,

ls /dev/tty*

此时,未给设备上电,因此还没串口号,接下来按住 boot 键再接电源,

刷出串口号 /dev/ttyACM0 就是设备的串口号,为了避免权限问题,先赋权,

sudo chmod 777 /dev/ttyACM0

最后输入烧录指令,

idf.py -p /dev/ttyACM0 flash monitor 

从控制台日志中可以看到,烧录完成,并且网络和 api 调用都正常。如果编译完成后显示“waiting for download...” 则需要重启设备。至此,烧录完成,可以愉快玩耍了!

彩蛋:固件代码精简

1、去掉 BMI270 传感器

在 main/app_main.c 中注释以下代码,

app_imu_init();

2、去掉 FPC 触屏按钮

在 main/app_main.c 中注释以下代码,

    bsp_touch_button_create(button_handler);

    /* Create GPIO button */
    button_config_t gpio_btn_cfg = {
         .type = BUTTON_TYPE_GPIO,
         .long_press_time = CONFIG_BUTTON_LONG_PRESS_TIME_MS,
         .short_press_time = CONFIG_BUTTON_SHORT_PRESS_TIME_MS,
         .gpio_button_config = {
             .gpio_num = 0,
             .active_level = 0,
         },
     };
    button_handle_t gpio_btn = iot_button_create(&gpio_btn_cfg);

    if (NULL == gpio_btn) {
        ESP_LOGE(TAG, "Button create failed");
    }

    iot_button_register_cb(gpio_btn, BUTTON_LONG_PRESS_START, button_long_press_cb, NULL);

3、去掉摄像头

在 main/app_main.c 中注释以下代码,

    const camera_config_t camera_config = BSP_CAMERA_DEFAULT_CONFIG;
    err = esp_camera_init(&camera_config);
    if (err != ESP_OK) {
        ESP_LOGE(TAG, "Camera Init Failed");
        return;
    }
    sensor_t *s = esp_camera_sensor_get();
    s->set_vflip(s, BSP_CAMERA_VFLIP);
    s->set_hmirror(s, BSP_CAMERA_HMIRROR);
    ESP_LOGI(TAG, "Camera Init done");

4、减少 LGVL UI

修改 main/ui/ui.c 中的 ui_init 函数,全局变量 ui_pages 对应调整, .c 和 .h 文件都需要改,

补充:FPC 切屏原理

Step1、ui 中使用 xQueueCreate 创建队列,使用 xQueueSend 往队列中发送事件。

Step2、使用 lv_timer_create 创建定时器,绑定事件函数 ui_system_update ,函数中使用 xQueueReceive 从队列中读取事件,每读取到一个事件后,根据传参调用 lv_event_send 开始 lvgl 页面渲染。

Step3、main/app/app_audio_record.c 中捕获唤醒词进行切屏,ASR/TTS/LLM核心逻辑也在这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金汐脉动 | PulseTide

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值