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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录