使用ESP32和Gemini REST API语音输入调用带有自定义参数的函数

news/2025/3/26 7:20:42/文章来源:https://www.cnblogs.com/linkstu/p/18787586

我们在建造什么?

在之前的教程中,我介绍了如何通过REST将ESP32连接到谷歌Gemini API以发送音频文件并对其进行转录。在本教程中,我将扩展到实际使用录制的音频而不是转录它-在这种情况下,打开和关闭LED环,加上根据语音命令改变LED的颜色。虽然我只是在操纵一个LED环,但你可以用这里使用的技术(称为函数调用)做任何事情,从控制电机到对在线服务提出额外请求。

在之前的教程中,我使用这些连接设置了一个设备:

现在唯一的区别是,我从Adafruit添加了一个24新像素的环,电源线在相同的3.3v轨道上,GND到GND,数据线在ESP32引脚D15上。

为了简单起见,这也是上一篇教程结束时使用的代码,您可以将其作为本演练的起点。

什么是函数调用?

很好,在我们深入了解新内容之前,让我们先谈谈函数调用。本质上,这是一种告诉Gemini API你在程序中有一些自定义函数定义的方法然后Gemini可以根据用户的输入/请求决定调用其中的任何一个。您可以通过向POST到API的JSON中添加新属性来实现这一点。这是这个灯的例子中JSON的样子。

您可以在这里看到,您需要发送将要调用的函数的名称、函数的描述,以便Gemini API知道何时适合调用它,还可以选择发送一个属性列表,这些属性可以传递给函数,以便自定义它的工作方式。您还可以要求在调用函数时发送这些属性。

新代码

好了,现在我们已经有了基本的概念,让我们更新音频录制代码来处理函数调用!让我们首先将Adafruit NeoPixel库添加到类的顶部,以及定义LED环使用的引脚,该环上有多少NeoPixels,以及LED使用的红/绿/蓝颜色的一些默认值。我们还需要定义neoppixel控制器对象。

进入setup()函数,我们只需要初始化pixels对象并将led设置为默认的关闭状态。

我们还将添加一个名为toggleLights(bool on)的新函数,用于在Gemini API触发时切换灯的打开或关闭。

现在我们可以进入函数调用的核心代码。进入createAudioJsonRequest()函数并将其替换为以下代码:

虽然看起来这里有很多事情要做,但它主要只是从SD卡读取音频数据,然后构建您可以在教程前面看到的JSON结构。

最后,我将transcribeAudio()函数重命名为sendAudio()。现在我们可以检查functionCall参数是否存在于响应中,而不是打印返回的音频文本,找出正在调用的函数,然后提取该函数的参数以对它们进行处理。在本例中,我正在检查toggleLights,它将包含一个布尔值,用于指示灯是否应该打开,并且我将该值传递给toggleLights()函数。除此之外,我正在监听Gemini API将“changeColor”作为一个functionCall值发回。如果成功了,我就从参数中提取红色、绿色和蓝色值并保存它们,然后用这些保存的值打开灯。你可以在这里看到整个函数:

此外,Gemini API可以理解多种语言的音频记录,而无需事先定义这些语言。例如,我用这段代码用西班牙语打开LED环,把颜色变成绿色(注意,我实际上不会说西班牙语,所以我用谷歌Translate和文本到语音的功能,但它工作得很好!)。

结论

这就是添加到音频记录示例中的内容,能够使用完整的句子来控制你的设备,对语音进行复杂的操作。我很想看到你们使用这些信息制作的非常酷的项目,所以请留下评论和它们的链接,我们将在以后的教程中再见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/904102.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20244211 实验一《Python程序设计》实验报告

20244211 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2442 姓名: 朱睿颖 学号:20244211 实验教师:王志强老师 实验日期:2025年3月18日 必修/选修: 专业选修课 1.实验内容熟悉Python开发环境; 练习Python运行、调试技能; 编写程序,练习…

JTS 介绍

JTS 是一个用于创建和操作向量几何的Java库;本文主要介绍其基本概念及使用,文中所使用到的软件版本:Java 1.8.0_341、JTS 1.20.0。 1、简介 LocationTech JTS 拓扑套件™(JTS)是一个开源的 Java 软件库,提供了平面几何的对象模型以及一套基础的几何函数。JTS 遵循开放 GI…

【笔记】力扣 134. 加油站——贪心

134. 加油站 中等 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 给定两个整数数组 gas 和 cost ,如果你可以按顺…

2025.3.23 鲜花

[省选联考 2025] 追忆 题解[省选联考 2025] 追忆 题解hello (bpm) 2025恭喜获得 最速被击破奖🏆不会 bitset,赛时想不到分块也是没救了。 首先必然要坚定 bitset 信念,因为其严格难于导出子图。 维护后继直接 bitset 就是 \(\frac{nm}w\) 的。 考虑到第二个限制 \(l, r\) 如…

给wordpress文章提供在线翻译和朗读的功能

之前有一个用wordpress搭的英文站点,我想给文章每个段落下面加两个“朗读”和“翻译”的按钮,方便英语不好的浏览者快速的了解中文意思和读法。 下面给出实现思路,全部是deepseek给出的代码实现的。 1、在(functions.php)文件末尾加上如下代码function enqueue_custom_scrip…

第五章 影响估算的因素

对软件项目产生影响的因素,可以有多种分类方式。了解这些影响因素有助于提高估算的准确度,并改善对软件项目动态特性的整体理解。 影响到项目工作量、成本和进度的最具决定性的因素毫无疑问是项目的规模。其次是正在开发的软件的类型,紧随其后的是人员因素。开发中使用的编程…

2025.3.25(周二)

4、航空服务查询问题:根据航线,仓位,飞行时间查询航空服务。 假设一个中国的航空公司规定:① 中国去欧美的航线所有座位都有食物供应,每个座位都可以播放电影。② 中国去非欧美的国外航线都有食物供应,只有商务仓可以播放电影。③ 中国国内的航班的商务仓有食物供应,但是…

2025.3.19(周三)

2、找零钱最佳组合假设商店货品价格(R) 都不大于100元(且为整数),若顾客付款(P)在100元内,现有一个程序能在每位顾客付款后给出找零钱的最佳组合(找给顾客货币张数最少)。假定此商店的货币面值只包括:50元(N50)、10元(N10)、 5元(N5)、1元(N1) 四种。请结合等价类划分法…

如何使用microSD卡模块与Arduino

MicroSD卡模块 ESP32有不同的microSD卡模块兼容。我们使用microSD卡模块,它使用SPI通信协议进行通信。您可以使用带有SPI接口的任何其他microSD卡模块。这个microSD卡模块也与Arduino板等其他微控制器兼容。学习如何使用microSD卡模块与Arduino。您可以使用默认SPI引脚将其连接…

VMware ESXi 8.0U3d macOS Unlocker OEM BIOS 集成 Marvell AQC 网卡驱动定制版 (集成驱动版)

VMware ESXi 8.0U3d macOS Unlocker & OEM BIOS 集成 Marvell AQC 网卡驱动定制版 (集成驱动版)VMware ESXi 8.0U3d macOS Unlocker & OEM BIOS 集成 Marvell AQC 网卡驱动定制版 (集成驱动版) VMware ESXi 8.0U3d macOS Unlocker & OEM BIOS 集成网卡驱动和 NVMe …

2025.3.10(周一)

实验二:UI设计 实验目的 本次实验的目的是让大家熟悉Android开发中的UI设计,包括了解和熟悉常用控件的使用、界面布局和事件处理等内容。 实验要求熟悉和掌握界面控件设计 了解Android界面布局 掌握控件的事件处理实验内容 一、 常用控件 1、 常用控件介绍 (1)基本控…