当前位置: 首页 > news >正文

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通常使用端口9byte mac[6] = { 0x77, 0x77, 0x77, 0x77, 0x77, 0x77 }; // 你的计算机的MAC地址byte packet[102];memset(packet, 0xFF, 6); // 填充前6个字节为0xFFfor (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"); //服务端apiint 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_datadata = request.jsonif '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地址,端口4050app.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"}'

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C++学习, 指针的指针
  • 5G智慧工地项目汇报方案
  • 深入理解Java序列化:从入门到实践
  • C++中函数重载的原理
  • vscode go开发环境
  • 硬盘的照片不小心删除怎么恢复 移动硬盘删除图片怎么恢复 数据恢复软件哪个好用
  • Apache Druid日志实时分析
  • 封装_私有类字段和方法
  • OpenCV绘图函数(6)绘制椭圆函数ellipse()的使用
  • 【C++设计模式】(三)创建型模式:单例模式
  • 构建智能化Web应用防火墙与自动化攻击测试系统
  • 医院建筑的电气设计——保障医疗质量与安全的坚固基石
  • 点餐API接口对接的过程中需要注意哪些问题
  • 数据结构与算法---排序算法
  • 使用统计方法在AMD GPU上使用JAX Profiler可靠地比较大型生成AI模型中的算法性能
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【知识碎片】第三方登录弹窗效果
  • 2017前端实习生面试总结
  • 4. 路由到控制器 - Laravel从零开始教程
  • Android Studio:GIT提交项目到远程仓库
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • React 快速上手 - 07 前端路由 react-router
  • Redis中的lru算法实现
  • vuex 学习笔记 01
  • 如何使用 JavaScript 解析 URL
  • 无服务器化是企业 IT 架构的未来吗?
  • 小程序01:wepy框架整合iview webapp UI
  •  一套莫尔斯电报听写、翻译系统
  • 用jquery写贪吃蛇
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 转载:[译] 内容加速黑科技趣谈
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • (1)常见O(n^2)排序算法解析
  • (160)时序收敛--->(10)时序收敛十
  • (C语言)二分查找 超详细
  • (floyd+补集) poj 3275
  • (Git) gitignore基础使用
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (三)c52学习之旅-点亮LED灯
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .net 设置默认首页
  • .NET框架
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @JSONField或@JsonProperty注解使用
  • @RequestMapping用法详解
  • [ C++ ] STL_vector -- 迭代器失效问题
  • [20140403]查询是否产生日志
  • [Android] Binder 里的 Service 和 Interface 分别是什么
  • [BJDCTF2020]The mystery of ip1