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

news2024/11/24 14:42:59

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"}'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2096666.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言深入理解指针1

1. 内存和地址 1.1内存 内存空间如何高效管理?把内存划分一个个的内存单元&#xff0c;每个内存单元的大小取一个字节一个比特位可以存储一个2进制的位1或者0&#xff0c;那么一个内存单元可以放8个比特位&#xff0c;每个内存单元都有一个编号&#xff0c;有了内存单元的编…

Golang | Leetcode Golang题解之第389题找不同

题目&#xff1a; 题解&#xff1a; func findTheDifference(s, t string) (diff byte) {for i : range s {diff ^ s[i] ^ t[i]}return diff ^ t[len(t)-1] }

自然美景短视频素材哪里找?9个美景视频素材库网站分享

你是否曾被窗外的落日余晖震撼&#xff0c;或是被雄伟的山脉和蔚蓝的大海深深吸引&#xff1f;想要分享这世界的美好&#xff0c;却苦于没有合适的视频素材&#xff1f;今天&#xff0c;就让我带你探索那些充满自然韵味的素材宝库&#xff0c;帮你捕捉和分享自然的美丽&#xf…

Linux下安装MySQL8.0

一、安装 1.下载安装包 先创建一个mysql目录&#xff0c;在将压缩包下载到此 # 下载tar包 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz等待下载成功 2.解压mysql8.0安装包 tar xvJf mysql-8.0.20-linux-glibc2.12-x86…

sqli-labs第五、六关详解

第五关不同于前面四关&#xff0c;涉及到盲注 首先看看是字符型注入还是数字型注入 用单引号闭合后&#xff0c;and 12无回显&#xff0c;说明字符型注入&#xff0c;接下来就要靠猜了&#xff0c;首先猜数据库长度是多少 长度为8的时候&#xff0c;正常回显&#xff0c;所以数…

DFS解决floodfill算法

文章目录 1. 图像渲染2. 岛屿数量3. 岛屿的最大面积4. 被围绕的区域5. 太平洋大西洋水流问题6. 扫雷游戏7. 机器人的运动范围 1. 图像渲染 算法原理&#xff1a; 这题不需要创建visit数组去记录使用过的节点&#xff0c;因为我每次dfs都尝试修改image数组的值&#xff0c;当下…

电阻器件的选型

电阻选型需要的注意点&#xff1a; 老化系数:电阻器在额定功率长期负荷下&#xff0c;阻值相对变化的百分数&#xff0c;它是表示电阻器寿命长短的参数。 噪声:包括热噪声和电流噪声两部分&#xff0c;电阻是一个耗能的器件&#xff0c;电阻器是消耗能量的。 电阻的选型需要关注…

STM32 Debug卡死在BKPT 0xAB

今天在调试程序的时候遇到了这个问题&#xff0c;最后发现是因为没有初始化串口&#xff0c;就调用了printf函数导致的&#xff0c;如果不需要用串口调试数据&#xff0c;那么需要把它们注释掉&#xff0c;否则就会出现这个问题&#xff01;

Force Yc团队最新第五次创作引导页源码

Force Yc团队最新第五次创作引导页源码 此源码可以播放自己的音乐 无法播放视频背景&#xff01;~ 音乐修改:music 音乐名称:bgm.mp3 LOGO修改:images 图片名字:top-logo.mp4 文本修改:index.html Notepad编辑 Force Yc团队最新第五次创作引导页源码

window下使用msys2安装openssl

目录 参考官网解压用cmake直接安装msys2安装配置编译安装 用perl安装打开命令行工具安装编译 参考 openssl 安装 官网 https://www.openssl.org/source 解压 D:\c\openssl-3.0.1 D:\c\openssl-1.1.1u用cmake直接安装 参考官方教程https://github.com/libevent/libevent/b…

Python画笔案例-026 绘制三星连线

1、绘制三星连线 通过 python 的turtle 库绘制三星连线的图案&#xff0c;如下图&#xff1a; 2、实现代码 绘制一个三星连线的图案&#xff0c;以下为实现代码&#xff1a; """三星连线.py """ import turtleturtle.pensize(2)for _ in range(…

用EM算法估计GMM参数的实现

EM算法&#xff0c;即期望最大化算法&#xff08;Expectation Maximization Algorithm&#xff09;&#xff0c;是一种在统计学中用于估计概率模型参数的类似极大似然估计的迭代算法&#xff0c;特别适用于模型中包含隐变量或者数据由多个混合分布组成的情况。隐变量&#xff0…

模型 RULER情绪管理

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。识别情绪&#xff0c;智慧表达&#xff0c;和谐生活。 1 RULER情绪管理模型的应用 1.1 RULER情绪管理模型在小学教育中的实践 背景&#xff1a; 在一所注重学生全面发展的小学中&#xff0c;教师们发…

【kubernetes】Service 介绍和应用

一&#xff0c;Service介绍 四层代理是基于传输层&#xff08;第四层&#xff09;工作的代理&#xff0c;主要在传输层&#xff08;如TCP、UDP协议&#xff09;上转发和管理数据流 七层代理是基于应用层&#xff08;第七层&#xff09;工作的代理&#xff0c;能够对应用层协议…

nginx启动报错:worker_connections exceed open file resource limit: 1024

一、问题描述 某次&#xff0c;nginx重启报错&#xff1a; nginx: [warn] 4096 worker_connections exceed open file resource limit: 1024&#xff1b;如下所示&#xff1a; 二、处理 1&#xff09;原因&#xff1a;nginx默认最大的并发数为1024&#xff0c;如果你设置work…

IDEA提示:java: 常量字符串过长

大家好&#xff0c;我是瑶山&#xff0c;今天聊聊java执行字符串过长的问题 起因 main方法测试一个上传人脸的请求&#xff0c;人脸图片使用Base64格式字符串&#xff0c;执行失败&#xff0c;提示&#xff1a;java: 常量字符串过长 在Java中&#xff0c;当你在main方法中直接…

Java | Leetcode Java题解之第390题消除游戏

题目&#xff1a; 题解&#xff1a; class Solution {public int lastRemaining(int n) {int a1 1;int k 0, cnt n, step 1;while (cnt > 1) {if (k % 2 0) { // 正向a1 a1 step;} else { // 反向a1 (cnt % 2 0) ? a1 : a1 step;}k;cnt cnt >> 1;step s…

三大CSS特效与灵感宝藏网站:加速前端开发,提升网站视觉盛宴

在日常的Web开发旅程中&#xff0c;前端程序员扮演着至关重要的角色&#xff0c;他们不仅是页面结构的搭建者&#xff0c;更是用户体验的塑造者。随着技术的不断进步&#xff0c;用户对于网页的视觉效果和交互体验要求越来越高&#xff0c;这就要求前端开发者必须掌握更多高级技…

Session钝化与活化:深度解析

Session钝化与活化&#xff1a;深度解析 1、钝化&#xff08;Passivation&#xff09;2、活化&#xff08;Activation&#xff09;3、序列化要求4、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Web开发中&#xff0c;Session扮演着…

自搭靶机实现SSH爆破复现记录

编写脚本实现ssh爆破。可使用paramiko、pexpect、pxssh等Python模块进行编写。但在ssh服务端将配置加密方式为非常用加密方式3des-cbc&#xff0c;端口为9981端口。 创建 了一个新的Kali虚拟机作为靶机&#xff0c;使用原本的Kali作为攻击机。 设置一个用户为target1234&#…