ESP8266-01S WiFi 连接、串口控制和时间获取代码示例
ESP8266-01S WiFi 连接、串口控制和时间获取代码示例
本代码示例演示了如何在 ESP8266-01S 上实现 WiFi 连接、串口控制、HTTP 请求和时间获取功能。代码包含了连接 WiFi、处理串口输入、发送 HTTPS 请求以及获取当前时间的逻辑。
代码实现
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
const char* ssid = "7-4";
const char* password = "120712071207";
const char* server1 = "https://xizhi.qqoq.net/XZ0a21dc90b486050f1bd29ff3d00b926d.send?title=1%E5%8F%B7%E7%82%B9%E6%BC%8F%E6%B0%B4";
const char* server2 = "https://xizhi.qqoq.net/XZ0a21dc90b486050f1bd29ff3d00b926d.send?title=2%E5%8F%B7%E7%82%B9%E6%BC%8F%E6%B0%B4";
const char* timeServer = "http://tool.liumang.one/time/m.php";
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
}
void loop() {
if (WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi connection lost. Reconnecting...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
}
if (Serial.available()) {
String input = Serial.readStringUntil('\n');
if (input == "X2") {
sendRequest(server1);
}
else if (input == "X3") {
sendRequest(server2);
}
}
String currentTime = getTime();
int hour = currentTime.substring(11, 13).toInt();
if (hour == 23) {
static int outputCount = 0;
if (outputCount < 2) {
Serial.println("O");
outputCount++;
}
}
delay(1000);
}
void sendRequest(const char* server) {
WiFiClientSecure client;
if (client.connect(server, 443)) {
client.print(String("GET ") + server + " HTTP/1.1\r\n" +
"Host: " + server + "\r\n" +
"Connection: close\r\n\r\n");
while (client.connected()) {
if (client.available()) {
String line = client.readStringUntil('\n');
// Process response if needed
}
}
client.stop();
}
else {
Serial.println("Failed to connect to server");
}
}
String getTime() {
WiFiClient client;
if (client.connect(timeServer, 80)) {
client.print(String("GET ") + timeServer + " HTTP/1.1\r\n" +
"Host: " + timeServer + "\r\n" +
"Connection: close\r\n\r\n");
while (client.connected()) {
if (client.available()) {
String line = client.readStringUntil('\n');
if (line.startsWith("Date:")) {
return line.substring(6, 30);
}
}
}
client.stop();
}
else {
Serial.println("Failed to connect to time server");
}
return "";
}
代码功能说明
- WiFi 连接: 在
setup()函数中连接到 WiFi 网络,并在loop()函数中判断连接状态,如果断开则重新连接。 - 串口控制: 在
loop()函数中监听串口输入,如果收到"X2"或"X3"则分别向对应的服务器发送 GET 请求。 - 时间获取: 通过
getTime()函数循环访问时间服务器,获取当前时间并提取小时部分。 - 输出控制: 在
loop()函数中,如果当前小时为 23 点,则向串口输出两次 "O",且整个 23 点之间只输出两次。
注意点
- 代码中使用了
WiFiClientSecure类进行 HTTPS 请求,需要在 Arduino IDE 的库管理器中安装WiFiClientSecure库。 - 由于 ESP8266-01S 的内存有限,可能需要适当优化代码以避免内存不足的问题。
其他
本代码仅供参考,可以根据实际需求进行修改和扩展。
原文地址: https://www.cveoy.top/t/topic/pmrF 著作权归作者所有。请勿转载和采集!