esp8266根据httpserver状态,调用网络唤醒,实现一键开机

esp8266根据httpserver状态,调用网络唤醒,实现一键开机


在这里插入图片描述

一.开发板程序
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiUdp.h>
#include <ArduinoJson.h>

// 替换为你的WiFi信息
const char* ssid = "wifiname";
const char* password = "password";

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print("WiFi not connected");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  //ticker.attach(10, checkFlag);
  // ticker.attach(10, test);
}
void loop() {
  checkFlag();
  delay(10000); //每10秒调用一次
}

void test() {
  Serial.println("fx call successd");
}

void wakeUpComputer() {
    WiFiUDP udp;
    udp.begin(9); // WOL通常使用端口9
    byte mac[6] = { 0x77, 0x77, 0x77, 0x77, 0x77, 0x77 }; // 你的计算机的MAC地址
    byte packet[102];
    memset(packet, 0xFF, 6); // 填充前6个字节为0xFF
    for (int i = 6; i < 102; i += 6) {
        memcpy(packet + i, mac, 6); // 复制MAC地址到packet
    }
    udp.beginPacket("255.255.255.255", 9); // 广播地址和端口号
    udp.write(packet, 102);
    udp.endPacket();
    Serial.println("Magic Packet Sent!");
}

void checkFlag() {
  Serial.println("start checkflag");
  if (WiFi.status() == WL_CONNECTED) {
    HTTPClient http;
    WiFiClient client;
    http.begin(client, "http://192.168.1.1:4050/api/endpoint"); //服务端api
    int httpCode = http.GET();
    Serial.println(httpCode);
    if (httpCode > 0) {
      Serial.println("HTTP GET OK");
      String payload = http.getString();
      DynamicJsonDocument doc(1024);
      deserializeJson(doc, payload);
      String flag = doc["flag"];
      String additionalInfo = doc["additional_info"];
      if (flag == "wake") {
        Serial.println("start wakeup");
        wakeUpComputer();
      } else {
        Serial.println("HTTP GET not wakeup");
      }
    } else {
      Serial.println("HTTP GET failed");
    }
  http.end();
  }
}

二. 服务端
#!/usr/bin/python
from flask import Flask, jsonify, request
app = Flask(__name__)
# 默认flag值
flag_data = {
    "flag": "idle",
    "additional_info": ""
}
@app.route('/api/endpoint', methods=['GET'])
def get_flag():
    """返回当前flag值和附加信息"""
    return jsonify(flag_data)
@app.route('/api/update_flag', methods=['POST'])
def update_flag():
    """更新flag值和附加信息"""
    global flag_data
    data = request.json
    if 'flag' in data:
        flag_data['flag'] = data['flag']
    if 'additional_info' in data:
        flag_data['additional_info'] = data['additional_info']
    return jsonify(flag_data), 200
if __name__ == '__main__':
    # 运行Flask应用,绑定到所有IP地址,端口4050
    app.run(host='0.0.0.0', port=4050)
三.服务端状态变更
curl http://192.168.1.1:4050/api/endpoint
curl -X POST http://192.168.1.1:4050/api/update_flag -H "Content-Type: application/json" -d '{"flag": "wake", "additional_info": "some info"}'
curl -X POST http://192.168.1.1:4050/api/update_flag -H "Content-Type: application/json" -d '{"flag": "idle", "additional_info": "some info"}'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ESP8266是一款功能强大的Wi-Fi芯片,它可以作为HTTP服务器来处理客户端请求。下面是实现ESP8266 HTTP服务器的步骤: 1. 配置ESP8266连接到Wi-Fi网络。 2. 开启ESP8266的HTTP服务器,设置端口号和请求处理函数。 3. 在请求处理函数中,解析HTTP请求,处理客户端请求并发送响应数据。 4. 循环监听客户端请求,不断处理请求并发送响应数据。 以下是一个基本的ESP8266 HTTP服务器示例代码: ```C++ #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> //定义Wi-Fi网络名称和密码 const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; ESP8266WebServer server(80); //创建一个HTTP服务器对象 void handleRoot() { //请求处理函数 server.send(200, "text/html", "<h1>Hello from ESP8266!</h1>"); } void setup() { Serial.begin(115200); WiFi.begin(ssid, password); //连接Wi-Fi网络 while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); server.on("/", handleRoot); //设置请求处理函数 server.begin(); //开启HTTP服务器 Serial.println("HTTP server started"); } void loop() { server.handleClient(); //监听客户端请求 } ``` 在这个示例中,我们使用了ESP8266WebServer库来创建HTTP服务器对象并设置请求处理函数。在handleRoot()函数中,我们发送了一个简单的HTML响应,表示服务器已经启动。在setup()函数中,我们连接到Wi-Fi网络并开启HTTP服务器。在loop()函数中,我们循环监听客户端请求并处理。 需要注意的是,ESP8266的HTTP服务器并不支持HTTPS协议,因此在实际应用中应该避免在不安全的网络中使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值