登录阿里云
创建一个阿里访问的秘钥
```cpp
#include <WiFi.h> // 包含 WiFi 库
#include <HTTPClient.h> // 包含 HTTP 客户端库
#include <ArduinoJson.h> // 包含 ArduinoJson 库
/******************************************************** */
// 定义 Wi-Fi 名与密码
// WiFi 账号密码
const char* ssid = "CU_Dbhf";
const char* password = "3ssh7pgq";
//wifi初始化
void WIFI_init(){
// 断开之前的连接
WiFi.disconnect(true);
// 连接 Wi-Fi
WiFi.begin(ssid, password);
Serial.print("正在连接 Wi-Fi");
// 检测是否链接成功
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("连接成功");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
/******************************************* */
// 2. 替换为你的阿里云 DashScope API 密钥 测试代码不用动直接粘贴秘钥就行,全部程序只需要改这个地方就行,还有WiFi
const char* apiKey = "******************";
// 发送给阿里云 DashScope API 的请求
String inputText = "你好,写一个我不能反驳的笑话!"; // 输入文本
String apiUrl = "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation"; // API URL
String answer; // 用于存储答案
// 获取 GPT 回答的函数
String getGPTAnswer(String inputText) {
HTTPClient http; // 创建 HTTP 客户端实例
http.setTimeout(10000); // 设置超时时间为 10 秒
http.begin(apiUrl); // 初始化 HTTP 请求
http.addHeader("Content-Type", "application/json"); // 添加 Content-Type 请求头
http.addHeader("Authorization", String(apiKey)); // 添加 Authorization 请求头
// 构建 JSON 负载
String payload = "{\"model\":\"qwen-turbo\",\"input\":{\"messages\":[{\"role\": \"system\",\"content\": \"你是小白机器人生活助理,要求下面的回答严格控制在256字符以内。\"},{\"role\": \"user\",\"content\": \"" + inputText + "\"}]}}";
int httpResponseCode = http.POST(payload); // 发送 POST 请求
if (httpResponseCode == 200) { // 如果响应码为 200
String response = http.getString(); // 获取响应字符串
http.end(); // 结束 HTTP 连接
// Serial.println(response); // 打印响应
//Serial.printf("服务器回应\r\n");
/* 解析 JSON 响应
output {2}
finish_reason : stop
text : 我是星辰生活助手机器人,专门提供日常生活和学习的帮助与解答。
usage {3}
total_tokens : 52
output_tokens : 17
input_tokens : 35
request_id : d3555140-8a3e-9fde-a1f2-b42311e92695
*/
DynamicJsonDocument jsonDoc(1024); // 创建动态 JSON 文档
deserializeJson(jsonDoc, response); // 反序列化 JSON 字符串
String outputText = jsonDoc["output"]["text"]; // 提取输出文本
return outputText; // 返回文本
} else { // 如果响应码不是 200
http.end(); // 结束 HTTP 连接
Serial.printf("Error %i \n", httpResponseCode); // 打印错误信息
return "<error>"; // 返回错误标记
}
}
/******************************************************************************************************* */
void setup() {
// 初始化串行通信
Serial.begin(9600);
// 连接到 Wi-Fi 网络
WIFI_init();
// 获取并打印初始回答
answer = getGPTAnswer(inputText);
Serial.println("小白回应: " + answer);
Serial.println("请输入 :"); // 提示用户输入
}
void loop() {
// 主循环
if (Serial.available()) { // 如果串口有可用数据
inputText = Serial.readStringUntil('\n'); // 读取一行文本
// Serial.println("\n Input:" + inputText); // 打印输入
// 获取并打印回答
answer = getGPTAnswer(inputText);
Serial.println("小白回应: " + answer);
Serial.println("请输入 :"); // 提示用户再次输入
}
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/aded218a033247a0aab61f48a463346c.png)
我用其他串口助手调试会出现乱码,不知道是什么问题,用vsvode就没有问题, 请求大神指点一下
文章参考https://blog.csdn.net/vor234/article/details/135395143