ESP32上使用chatGPT做一些有意思的事情

简介: ESP32上使用chatGPT做一些有意思的事情

1、连接说明

将ChatGPT与ESP32进行结合,可以在物联网应用方面做出更有意思的事情,如聊天机器人、语音助手和自然语言界面。下面,我将在ESP32中使用ChatGPT API。

为了让ESP32从ChatGPT获得响应,我们需要进行以下步骤:

1、在OpenAI网站上注册,并在ESP32上安装必要的库。

2、在OpenAI API上创建一个新项目并生成一个API密钥。

3、使用API密钥来验证对OpenAI API的请求。

4、使用HTTP请求向OpenAI API发送文本输入,接收JSON格式的响应。

5、解析响应并使用它来控制ESP32微控制器

下面我将在ESP32上对以上步骤进行实现:

1、 首先,我们需要包括必要的库,以便ESP32通过Wi-Fi通信,提出HTTP请求,并解析JSON数据。

#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>

2、定义ESP32将要连接的Wi-Fi网络的网络凭证,以及OpenAI API的API密钥。

const char* ssid     = "your_SSID";
const char* password = "your_PASSWORD";
const char* apiKey = "your_API_KEY";

3、定义setup()函数是ESP32连接到Wi-Fi网络并向OpenAI API发送HTTP POST请求的地方。

void setup() {
    //
}

4、在setup()函数中,我们将首先初始化串行端口。

Serial.begin(9600);

5、接下来,我们将连接到WiFi网络。

// Connect to Wi-Fi network
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
  Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");

6、继续填写setup()函数,使用HTTPClient库,向OpenAI API端点发送HTTP Post请求,用于实现两者通信。

// Send request to OpenAI API
String inputText = "Hello, ChatGPT!";
String apiUrl = "https://api.openai.com/v1/completions";
String payload = "{\"prompt\":\"" + inputText + "\",\"max_tokens\":100, \"model\": \"text-davinci-003\"}";
HTTPClient http;
http.begin(apiUrl);
http.addHeader("Content-Type", "application/json");
http.addHeader("Authorization", "Bearer " + String(apiKey));

inputText字符串定义了API的提示,在这个例子中是 “Hello, ChatGPT!”。

apiUrl字符串指定api的地址。

payload字符串是一个JSON对象,包含提示和其他参数,如生成的最大数量的令牌和使用的模型。在我们的案例中,我们使用 "Text-Davinci-003 "模型,允许100个最大令牌。

然后,HTTPClient对象被初始化,begin()函数被用来指定API端点URL。

接下来,我们添加HTTP头,如Content-Type,其中我们指定我们将使用JSON数据和Authentication头进行通信,用API_KEY对ChatGPT API进行认证。

7、最后我们使用http.POST()函数向OpenAI API服务发送HTTP POST请求。

int httpResponseCode = http.POST(payload);
if (httpResponseCode == 200) {
  String response = http.getString();
  // Parse JSON response
  DynamicJsonDocument jsonDoc(1024);
  deserializeJson(jsonDoc, response);
  String outputText = jsonDoc["choices"][0]["text"];
  Serial.println(outputText);
} else {
  Serial.printf("Error %i \n", httpResponseCode);
}

http.POST()将返回响应的HTTP代码。如果是HTTP 200,我们将解析JSON并将其打印到串行端口。

如果返回的是200以外的HTTP代码,我们将打印 “Error: HTTP代码”,例如,如果你的API令牌是无效的,它将打印 “错误: 401”.

8、至此,已经成功连接chatGPT,之后可以在loop()函数中做一些有趣的事情

void loop() {
    //
}

2、完整代码

#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
// Replace with your network credentials
const char* ssid     = "your_SSID";
const char* password = "your_PASSWORD";
// Replace with your OpenAI API key
const char* apiKey = "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";
void setup() {
  // Initialize Serial
  Serial.begin(9600);
  // Connect to Wi-Fi network
  WiFi.mode(WIFI_STA);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("Connecting to WiFi ..");
  while (WiFi.status() != WL_CONNECTED) {
      Serial.print('.');
      delay(1000);
  }
  Serial.println(WiFi.localIP());
  // Send request to OpenAI API
  String inputText = "Hello, ChatGPT!";
  String apiUrl = "https://api.openai.com/v1/completions";
  String payload = "{\"prompt\":\"" + inputText + "\",\"max_tokens\":100, \"model\": \"text-davinci-003\"}";
  HTTPClient http;
  http.begin(apiUrl);
  http.addHeader("Content-Type", "application/json");
  http.addHeader("Authorization", "Bearer " + String(apiKey));
  int httpResponseCode = http.POST(payload);
  if (httpResponseCode == 200) {
    String response = http.getString();
    // Parse JSON response
    DynamicJsonDocument jsonDoc(1024);
    deserializeJson(jsonDoc, response);
    String outputText = jsonDoc["choices"][0]["text"];
    Serial.println(outputText);
  } else {
    Serial.printf("Error %i \n", httpResponseCode);
  }
}
void loop() {
  // do nothing
}


相关文章
|
C++ Python
VS Code按住ctrl不能跳转到定义/函数(Python)
VS Code按住ctrl不能跳转到定义/函数(Python)
3800 0
VS Code按住ctrl不能跳转到定义/函数(Python)
|
存储 边缘计算 人工智能
边缘计算(Link IoT Edge)介绍|学习笔记
快速学习边缘计算(Link IoT Edge)介绍
1160 0
边缘计算(Link IoT Edge)介绍|学习笔记
|
7月前
|
人工智能 自然语言处理 语音技术
Baichuan-Audio:端到端音频大模型,实时双语对话+语音生成
Baichuan-Audio 是百川智能推出的端到端音频大语言模型,支持无缝集成音频理解和生成功能,实现高质量、可控的实时中英双语对话。
856 3
|
弹性计算 运维 安全
阿里云服务器Windows和Linux操作系统区别对比
阿里云服务器Windows和Linux操作系统区别对比,性能有差异吗?有,同配置下Linux性能要优于Windows,但这与阿里云无关,仅仅是linux和windows之间的区别。另外,阿里云提供的windows和linux操作系统均为正版授权,用户不需要额外支付许可费用,如何选择?看用户自己的应用程序情况。
|
12月前
|
Serverless 数据安全/隐私保护 前端开发
大模型代码能力体验报告之贪吃蛇小游戏《一》:Claude.ai篇 - 生成、预览和快速部署的serverless一条龙
本文介绍了通过Claude.ai生成并优化Web版贪吃蛇游戏的过程,展示了其强大的代码生成功能及用户友好的界面设计。从初始版本的快速生成到根据用户反馈调整游戏速度,再到提供多种实用工具如文件管理、版本控制和一键部署,Claude.ai不仅是一个代码助手,更像是一个全面的serverless开发平台。文中还呼吁国内厂商关注此类技术的发展。
522 2
|
Shell
esp32入门笔记
这篇文章是关于ESP32 S3入门的笔记,包括了安装编译工具、下载ESP-IDF框架、设置工具和环境变量、以及烧录固件的步骤说明。
324 5
|
传感器 定位技术
Ardupilot — EKF3使用光流室内定位代码梳理
Ardupilot — EKF3使用光流室内定位代码梳理
545 0
|
JavaScript
Vue2与Vue3共存于一台电脑 保姆级教程
Vue2与Vue3共存于一台电脑 保姆级教程
1401 1
Vue2与Vue3共存于一台电脑 保姆级教程
|
内存技术
esp8266-01s烧录AT固件方法以及遇到的问题总结
esp8266-01s烧录AT固件方法以及遇到的问题总结
1191 0
|
安全 内存技术
[UDS] --- UDS服务应该支持的NRC
[UDS] --- UDS服务应该支持的NRC
1874 0