/**
@author bszydxh([email protected])
@brief 单片机开发演示程序-WiFi进阶 串口输出诗歌以及时间
@version 0.1
@date 2023-12-08
*/
// 单次编译时间较长约60s,请耐心等待
#include <Wire.h>
#include <SPI.h>
#include <WiFi.h>
#include <HTTPClient.h>
const char *ntpServer1 = "ntp.ntsc.ac.cn"; // 时间服务器1
const char *ntpServer2 = "cn.ntp.org.cn"; // 时间服务器2
const char *ntpServer3 = "ntp.aliyun.com"; // 时间服务器3
#define UTC_OFFSET 8 * 3600
#define UTC_OFFSET_DST 0
HTTPClient httpClient;
int try_times = 0;
void esp32_Http_hitokoto()
{
Serial.printf("esp32 -> hitokoto server\n"); // 打印信息到串口,指示ESP32正在与“一言”服务器通信
httpClient.begin("https://v1.hitokoto.cn/?encode=text&max_length=10&c=i"); // 使用HTTPClient库开始与“一言”服务器的通信,并指定请求的URL
httpClient.addHeader("charset", "utf-8"); // 添加HTTP头信息,指定字符集为UTF-8
int httpCode = httpClient.GET(); // 发送GET请求,并获取HTTP响应状态码
if (httpCode == 200)
{
const String &payload = httpClient.getString(); // 如果响应状态码为200,获取服务器返回的文本内容
Serial.printf("hitokoto server -> esp32:\n"); // 打印信息到串口,指示服务器的响应已成功接收
Serial.println(payload); // 打印服务器返回的文本内容到串口
}
else
{
Serial.printf("hitokoto server /> esp32:\n"); // 打印信息到串口,指示服务器的响应未成功接收
Serial.println(httpCode); // 打印HTTP错误码到串口
}
httpClient.end(); // 结束与服务器的通信,释放资源
}
void printLocalTime()
{
struct tm timeinfo;
if (!getLocalTime(&timeinfo))
{
Serial.println("get time error"); // 如果获取本地时间失败,打印错误信息到串口
return;
}
Serial.println(&timeinfo, "%H:%M:%S"); // 打印本地时间的时、分、秒到串口
Serial.println(&timeinfo, "%Y/%m/%d"); // 打印本地时间的年、月、日到串口
}
void setup()
{
Serial.begin(115200); // 初始化串口通信,波特率为115200
WiFi.begin("Wokwi-GUEST", ""); // 尝试连接到WiFi网络(SSID为"Wokwi-GUEST",密码为空)
while (WiFi.status() != WL_CONNECTED)
{
delay(250); // 等待WiFi连接成功
}
Serial.println("");
Serial.println("WiFi connected"); // 打印信息到串口,指示WiFi连接成功
Serial.print("IP address: ");
Serial.println(WiFi.localIP()); // 打印ESP32的本地IP地址到串口
configTime(UTC_OFFSET, UTC_OFFSET_DST, ntpServer1, ntpServer2, ntpServer3); // 配置本地时间,使用指定的NTP服务器
}
void loop()
{
try_times++;
printLocalTime(); // 打印本地时间信息到串口
delay(250); // 延时250毫秒
if (try_times == 5)
{
try_times = 0;
esp32_Http_hitokoto(); // 每5次循环调用一次与“一言”服务器通信的函数
}
}