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

server/2024/10/15 6:38:16/

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

http://www.ppmy.cn/server/110366.html

相关文章

Linux 用户缓冲区

1. 文件描述符的分配规则 我们知道Linux进程默认情况下会有3个缺省打开的文件描述符&#xff0c;分别是标准输入stdin--0&#xff0c; 标准输出stdout--1&#xff0c; 标准错误stderr--2。0,1,2对应的物理设备一般是&#xff1a;键盘&#xff0c;显示器&#xff0c;显示器.接下…

2024年世界机器人大会精彩回顾-人形机器人的天下

8 月 25 日&#xff0c; 2024 世界机器人大会在北京北人亦创国际会展中心闭幕。本次大会以“共育新质生产力 共享智能新未来”为主题&#xff0c;同期举办论坛、博览会、大赛及配套活动&#xff0c;机器人创新新品、应用新场景纷纷亮相。 2024 世界机器人大会分为论坛、博览会、…

【Spring Boot 3】【Web】全局异常处理

【Spring Boot 3】【Web】全局异常处理 背景介绍开发环境开发步骤及源码工程目录结构总结背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总是要花费…

Windows连接虚拟机中的mysql5失败

Windows连接虚拟机中的mysql5失败 虚拟机版本为centos6.8&#xff0c;数据库版本为mysql5.6&#xff0c;系统版本为window11。在虚拟机上安装好mysql&#xff0c;并且配置好权限&#xff0c;虚拟机登录正常之后。在windows11上使用工具dbeaver连接mysql失败&#xff0c;报错 Co…

Notepad++回车不自动补全

问题 使用Notepad时&#xff0c;按回车经常自动补全&#xff0c;但我们希望回车进行换行&#xff0c;而不是自动补全&#xff0c;而且自动补全使用Tab进行补全足够了。下文介绍设置方法。 设置方法 打开Notepad&#xff0c;进入设置 - 首选项 - 自动完成&#xff0c;在插入选…

Spring Boot集成Stripe快速入门demo

1.什么是Stripe&#xff1f; 一体化全球支付平台&#xff0c;开启收入增长引擎&#xff0c;针对不同规模业务打造的支付解决方案&#xff0c;满足从初创公司到跨国企业的多维度需求&#xff0c;助力全球范围内线上线下付款。 转化更多客户: 通过内置的优化功能、100 多种支付…

【计算机组成原理】七、输入/输出系统:1.I/O基本概念、I/O设备(外部设备)

七、输入/输出系统 文章目录 七、输入/输出系统1.基本概念4. I/O设备&#xff08;外部设备&#xff09;4.1输出设备4.1.1键盘4.1.2鼠标 4.2输出设备4.2.1显示器4.2.2打印机 4.3外存设备 1.基本概念 “I/O”就是“输入/输出”( Input/Output)。 I/O系统由I/O软件和I/O硬件两部分…

Oracle发邮件时SMTP服务器配置方法与步骤?

Oracle发邮件功能如何配置&#xff1f;如何优化Oracle发信性能&#xff1f; 为了实现自动化报告和通知&#xff0c;Oracle发邮件功能变得尤为重要。通过配置SMTP服务器&#xff0c;Oracle可以轻松地发送电子邮件。AokSend将详细介绍如何配置Oracle发邮件时的SMTP服务器&#x…