作为一个电子DIY爱好者,最近突然想整点儿没用但好玩的小东西——用ESP32-C3开发板实现自动+手动获取毒鸡汤文案,全程不需要自己写一行代码,全靠AI手把手搞定,主打一个“偷懒但高效”。
先交代下主角:ESP32-C3-DevKitM-1开发板。

别看它个头小,连接WiFi、发起HTTP GET请求、解析JSON样样能扛,堪称性价比天花板。
需求很简单,主打一个“摆烂”
我的核心诉求就3个:
- 让开发板连上家里的WiFi(手机开的热点),注意一定要是2.4G频段的,5G的这小家伙还不支持。
- 能定时(3秒一次)从网上获取毒鸡汤,也能通过按键来主动触发,主打鸡汤想喝就喝;
- 把获取的毒鸡汤通过串口打印出来,主打一个“精神暴击”。
全程躺平,AI是主力
现在写代码哪儿还用自己吭哧吭哧抠?第一步,先搜索“毒鸡汤API接口”。

随手找到一个能用的免费接口:https://v2.xxapi.cn/api/dujitang。

通过浏览器的开发者工具(F12)查看请求细节,可以看到这是一个简单的GET请求,返回的JSON格式也很规整。

第二步,直接把需求甩给AI:“帮我用ESP32-C3-DevKitM-1实现WiFi连接、API请求、JSON解析,还要按键触发+3秒定时,串口输出毒鸡汤”。
一开始AI生成的代码有坑,比如GPIO引脚不对、手动触发卡死等。但经过两轮“调教”之后,AI不仅把ESP32-C3的GPIO9(BOOT键)特性考虑到了,还顺手修复了HTTPS超时、中断防抖这些细节,甚至连JSON解析的字段都精准匹配了API返回格式:
{"code":200,"msg":"数据请求成功","data":"毒鸡汤内容","request_id":"xxx"}
整个过程直接省去了查文档、调试BUG的时间,充分体验了AI辅助编程的效率。

效果超预期,主打一个“精准投喂”
在Arduino IDE中新建工程,如果提示报错,可能是没添加对应的开发板支持,或者缺少必要的库,按提示安装即可。
接下来就是CV工程师的看家本领:复制、粘贴、编译、上传。代码上传后,开发板秒连WiFi,串口监视器里每隔3秒就蹦出一碗新鲜的毒鸡汤:
"春节你要小心了,毕竟过年,都是要杀猪的。"
"今天的你,依然是个没有感情的打工机器。"
"世上什么事逼急了,都能做出来,除了数学题。"
"你以为向生活低头就好了?生活是想让你跪下。"
"为什么在学校,一上课就想睡觉?因为学校是梦开始的地方。"
"有钱人可以选择低调,而你,却只能低调。"
短按板载的BOOT键还能手动触发刷新,想“emo”随时加更,主打一个情绪自由。

总结:懒人DIY的正确打开方式
以前搞个小项目,光查ESP32的WiFi库、HTTPClient的用法就得半天。现在,只要你能清晰描述需求,AI就能把完整代码、详细注释甚至避坑指南都给你,开发者只需要确认硬件型号、替换WiFi密码,剩下的就是享受成果。
可以说,借助AI工具,物联网开发和一些趣味项目的门槛正在变低。你负责构思,AI辅助实现,硬件负责运行,整个过程充满了“躺平式开发”的快乐。
附个小彩蛋:如果你的ESP32-C3按键触发出现卡死,大概率是GPIO9的BOOT键特性问题,让AI帮忙调整一下中断触发方式和防抖逻辑,分分钟就能搞定。

项目完整代码
以下是经过AI调试优化后的最终代码,涵盖了WiFi连接、定时/手动触发、API请求和JSON解析等核心计算机基础功能:
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
// ====================== 配置参数(已更新WiFi和按键) ======================
// WiFi配置(已替换为你的信息)
const char* WIFI_SSID = "iPhone14"; // 你的WiFi名称
const char* WIFI_PWD = "WeChat:mcu149"; // 你的WiFi密码
// API配置
const char* API_URL = "https://v2.xxapi.cn/api/dujitang";
// 按键配置(改为GPIO9,禁用中断防抖的delay)
const int KEY_PIN = 9;
// 定时配置
const unsigned long AUTO_REFRESH_INTERVAL = 3000; // 3秒自动刷新
const unsigned long HTTP_TIMEOUT = 5000; // HTTP请求超时5秒
// ====================== 全局变量 ======================
unsigned long lastRefreshTime = 0;
bool needRefresh = false;
unsigned long lastKeyPressTime = 0; // 按键防抖时间戳(替代中断里的delay)
// ====================== 核心函数:WiFi连接 ======================
void connectWifi() {
Serial.print("正在连接WiFi: ");
Serial.println(WIFI_SSID);
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PWD);
// 等待连接(超时10秒)
int retryCount = 0;
while (WiFi.status() != WL_CONNECTED && retryCount < 10) {
delay(1000);
Serial.print(".");
retryCount++;
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\nWiFi连接成功!");
Serial.print("IP地址: ");
Serial.println(WiFi.localIP());
} else {
Serial.println("\nWiFi连接失败,请检查SSID和密码!");
}
}
// ====================== 核心函数:请求API并解析JSON(修复HTTPS卡死) ======================
void requestAndParseDujitang() {
// 检查WiFi是否已连接
if (WiFi.status() != WL_CONNECTED) {
Serial.println("❌ WiFi未连接,跳过请求");
connectWifi();
return;
}
HTTPClient http;
Serial.print("🔍 发起API请求: ");
Serial.println(API_URL);
// 关键修复:HTTPS添加超时+关闭证书校验(解决卡死)
http.begin(API_URL);
http.setTimeout(HTTP_TIMEOUT); // 设置请求超时
http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
#ifdef ESP32
http.getStream().setTimeout(HTTP_TIMEOUT); // 数据流超时
#endif
int httpCode = http.GET();
// 处理响应
if (httpCode == HTTP_CODE_OK) {
String response = http.getString();
Serial.println("✅ API请求成功,返回数据:");
Serial.println(response);
// 解析JSON(匹配你的格式)
DynamicJsonDocument doc(1024);
DeserializationError error = deserializeJson(doc, response);
if (error) {
Serial.print("❌ JSON解析失败: ");
Serial.println(error.c_str());
} else {
int code = doc["code"];
String msg = doc["msg"];
String dujitangContent = doc["data"];
String requestId = doc["request_id"];
Serial.println("\n📝 解析结果:");
Serial.print("状态码: "); Serial.println(code);
Serial.print("提示信息: "); Serial.println(msg);
Serial.print("毒鸡汤内容: "); Serial.println(dujitangContent);
Serial.print("请求ID: "); Serial.println(requestId);
}
} else {
Serial.print("❌ API请求失败,状态码: ");
Serial.println(httpCode);
}
// 必须释放资源
http.end();
Serial.println("------------------------");
}
// ====================== 按键中断处理函数(修复防抖,移除delay) ======================
void keyInterruptHandler() {
unsigned long currentTime = millis();
// 防抖:仅当两次按键间隔>200ms才触发
if (currentTime - lastKeyPressTime > 200) {
needRefresh = true;
lastKeyPressTime = currentTime;
Serial.println("\n🔘 检测到按键触发,立即刷新!");
}
}
// ====================== 初始化函数 ======================
void setup() {
Serial.begin(115200);
while (!Serial);
// 初始化GPIO9按键(上拉输入,适配BOOT键)
pinMode(KEY_PIN, INPUT_PULLUP);
// 关键:GPIO9用RISING触发(适配BOOT键电平特性,避免误触发)
attachInterrupt(digitalPinToInterrupt(KEY_PIN), keyInterruptHandler, RISING);
// 连接WiFi
connectWifi();
lastRefreshTime = millis();
Serial.println("\n✅ 初始化完成,开始定时/手动刷新(3秒间隔)");
Serial.println("------------------------");
}
// ====================== 主循环函数 ======================
void loop() {
unsigned long currentTime = millis();
// 1. 定时刷新
if (currentTime - lastRefreshTime >= AUTO_REFRESH_INTERVAL) {
requestAndParseDujitang();
lastRefreshTime = currentTime;
needRefresh = false;
}
// 2. 手动按键触发
if (needRefresh) {
requestAndParseDujitang();
lastRefreshTime = currentTime;
needRefresh = false;
}
delay(10); // 降低CPU占用
}
这个项目展示了如何将现成的API、开源的硬件平台与智能的AI工具结合起来,快速实现一个有趣的小应用。如果你有更多类似的IoT奇思妙想,欢迎到云栈社区的开发者广场一起交流探讨。