ESP32连接Google Gemini API进行对话

本教程将详细介绍如何使用ESP32连接到互联网,并通过Google的Gemini API发送问题并获取回答。我们将使用以下库:WiFi库、HTTPClient库和ArduinoJson库。

注意:你的网络需要支持科学上网,才能正常访问接口,如果不支持,那就不行哈。不管支不支持,回复一下支持一下作者呗,谢谢!!

ESP32连接Google Gemini API进行对话

一、准备工作

  1. 硬件:
    • 一块支持WiFi的Arduino开发板(如ESP32或ESP8266)
    • USB数据线
    • 电脑(用于编写和上传代码)
  2. 软件:
    • Arduino IDE
    • Arduino库:WiFi、HTTPClient、ArduinoJson

二、设置Arduino IDE

  1. 打开Arduino IDE,确保已安装所需的库。如果没有安装,可以通过“库管理器”进行安装:
    • WiFi库:对于ESP32和ESP8266,这些库已经内置。
    • HTTPClient库:可以在“库管理器”中搜索并安装。
    • ArduinoJson库:可以在“库管理器”中搜索并安装。
  2. 打开Arduino IDE,选择您的开发板和端口。对于ESP32,选择“工具” -> “开发板” -> “ESP32 Dev Module”,然后选择正确的端口。

三、编写代码

在Arduino IDE中,创建一个新的草稿,并复制以下代码:

#include <Arduino.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
const char* ssid = "SSID";  // 替换为您的WiFi SSID
const char* password = "PASS";  // 替换为您的WiFi密码
const char* Gemini_Token = "GEMINI_API_KEY";  // 替换为您的Gemini API密钥
const char* Gemini_Max_Tokens = "100";  // 最大返回Token数
String res = "";  // 用于存储输入的问题
void setup() {
  Serial.begin(115200);  // 初始化串口通讯
  WiFi.mode(WIFI_STA);  // 设置WiFi为客户端模式
  WiFi.disconnect();  // 断开所有WiFi连接
  // 等待串口连接
  while (!Serial);
  // 连接到WiFi
  WiFi.begin(ssid, password);
  Serial.print("Connecting to ");
  Serial.println(ssid);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  Serial.println("connected");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());  // 打印设备的IP地址
}
void loop() 
{
  Serial.println("");
  Serial.println("Ask your Question : ");
  while (!Serial.available());  // 等待用户输入
  while (Serial.available()) {
    char add = Serial.read();
    res = res + add;
    delay(1);
  }
  int len = res.length();
  res = res.substring(0, (len - 1));
  res = """ + res + """;
  Serial.println("");
  Serial.print("Asking Your Question : ");
  Serial.println(res);
  HTTPClient https;
  if (https.begin("https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=" + (String)Gemini_Token)) {
    https.addHeader("Content-Type", "application/json");
    String payload = String("{"contents": [{"parts":[{"text":" + res + "}]}],"generationConfig": {"maxOutputTokens": " + (String)Gemini_Max_Tokens + "");
    int httpCode = https.POST(payload);
    if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
      String payload = https.getString();
      DynamicJsonDocument doc(1024);
      deserializeJson(doc, payload);
      String Answer = doc["candidates"][0]["content"]["parts"][0]["text"];
      // 过滤特殊字符、空白字符和换行符
      Answer.trim();
      String filteredAnswer = "";
      for (size_t i = 0; i < Answer.length(); i++) {
        char c = Answer[i];
        if (isalnum(c) || isspace(c)) {
          filteredAnswer += c;
        } else {
          filteredAnswer += ' ';
        }
      }
      Answer = filteredAnswer;
      Serial.println("");
      Serial.println("Here is your Answer: ");
      Serial.println("");
      Serial.println(Answer);
    } else {
      Serial.printf("[HTTPS] GET... failed, error: %sn", https.errorToString(httpCode).c_str());
    }
    https.end();
  } else {
    Serial.printf("[HTTPS] Unable to connectn");
  }
  res = "";
}

四、修改代码

  1. const char* ssid = "SSID";替换为您的WiFi名称。
  2. const char* password = "PASS";替换为您的WiFi密码。
  3. const char* Gemini_Token = "GEMINI_API_KEY";替换为您的Gemini API密钥。(获取秘钥地址:https://ai.google.dev/gemini-api?hl=zh-cn)

五、上传代码

  1. 将Arduino板通过USB线连接到电脑。
  2. 在Arduino IDE中,点击“上传”按钮,将代码上传到开发板。

六、测试程序

  1. 打开Arduino IDE的“串口监视器”。
  2. 设置波特率为115200。
  3. 在串口监视器中,您将看到连接WiFi的过程,成功连接后会显示设备的IP地址。
  4. 在串口监视器中输入您的问题并按下回车键。
  5. 程序将会向Gemini API发送问题并返回答案,答案将显示在串口监视器中。

七、详细步骤与示例

1. 连接到WiFi

上传代码后,打开串口监视器。您将看到类似如下的信息:

Connecting to Your_SSID
....
connected
IP address: 192.168.1.2

这表示设备已成功连接到指定的WiFi网络,并显示了设备的IP地址。

2. 输入问题

在串口监视器中输入您的问题并按下回车键:

Ask your Question : 
What is the capital of China?

此时,程序会读取您的输入,并将问题发送到Google Gemini API。

3. API响应

程序会处理API的响应,并在串口监视器中显示答案:

Here is your Answer: 
The capital of China is Beijing.

这表示API成功返回了问题的答案。

八、常见问题与解决方法

  1. 无法连接WiFi:
    • 确保SSID和密码正确无误。
    • 确认WiFi网络正常工作。
    • 检查Arduino板是否支持WiFi功能。
  2. API请求失败:
    • 确认API密钥正确无误。
    • 检查网络连接是否正常。
    • 确认API服务可用。
  3. 串口监视器无输出:
    • 确认波特率设置为115200。
    • 确认已选择正确的端口和开发板。

通过以上步骤,您已经成功编写并运行了一个可以通过Google Gemini API获取回答的Arduino程序。如果在过程中遇到任何问题,请检查您的网络连接和API密钥是否正确配置,并参考常见问题与解决方法进行排查。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
ESP-32

如何使用ESP32从网页控制伺服电机

2025-4-16 17:54:39

ESP-32

AI产品的全面解决方案:探索人工智能的无限可能

2025-4-18 15:46:55

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索