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

esp12f-实现远程控制

一、项目概述

本方案基于ESP8266(ESP-12F模块)实现了一个可通过Web界面远程控制的智能继电器系统。项目通过WiFi接入局域网,用户可通过任意设备的浏览器进行继电器状态控制和实时状态查看,典型应用场景包括智能家居设备控制、工业设备远程操作等。

二、开发环境准备

  1. 所需硬件
    ESP-12F开发板
    5V继电器模块(光耦隔离型)
    杜邦线若干
    220V负载设备(灯泡/插座等)
  2. 软件依赖
    ​​必装库文件​​:
    ​​ESP8266WiFi​​ (内置)
    ​​ESP8266WebServer​​ (内置)
    3 引脚图
    在这里插入图片描述

​​开发工具​​:

Arduino IDE 2.3+
ESP8266开发板支持包(3.1.2+)安装步骤:
Arduino IDE → 文件 → 首选项
附加开发板管理器URL添加:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
工具 → 开发板 → 开发板管理器 → 搜索安装esp8266

三、测试步骤

1 在Arduino IDE中上传代码到开发板
2 打开串口监视器(波特率115200)查看连接信息(获取开发板获得的ip地址)
3 在PC端浏览器或手机端浏览器访问第二步得到的ip地址即可看见控制网页
4 测试
界面如下

四、项目源代码

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>const char* ssid = "WiFi名称"; // 替换成你的WiFi名称
const char* password = "WiFi密码"; // 替换成你的WiFi密码#define RELAY_PIN 5 // GPIO5 控制继电器
ESP8266WebServer server(80); // Web服务器端口80// 网页HTML代码
const char* htmlPage = R"=====(
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>设备控制</title><style>body {font-family: Arial, sans-serif;text-align: center;margin: 20px;}.status-box {padding: 15px;margin: 20px auto;width: 80%;border-radius: 8px;font-size: 1.2em;}.status-on {background: #4CAF50;color: white;}.status-off {background: #f44336;color: white;}.btn-group {margin: 30px 0;}button {padding: 15px 32px;font-size: 18px;margin: 10px;border: none;border-radius: 4px;cursor: pointer;min-width: 120px;}.btn-on {background: #45a049;color: white;}.btn-off {background: #d32f2f;color: white;}</style>
</head>
<body><h1>设备状态控制</h1><div id="status" class="status-box status-off">状态:未连接</div><div class="btn-group"><button class="btn-on" onclick="controlDevice('on')">启 动</button><button class="btn-off" onclick="controlDevice('off')">关 闭</button></div><script>// 获取设备状态function updateStatus() {fetch('/status').then(response => response.json()).then(data => {const statusDiv = document.getElementById('status');statusDiv.className = `status-box ${data.status === 'on' ? 'status-on' : 'status-off'}`;statusDiv.textContent = `当前状态:${data.status === 'on' ? '运行中' : '已关闭'}`;});}// 控制设备function controlDevice(action) {fetch(`/relay/${action}`).then(() => {updateStatus(); // 操作后立即更新状态}).catch(err => {console.error('控制失败:', err);});}// 每2秒更新状态setInterval(updateStatus, 2000);updateStatus(); // 初始加载</script>
</body>
</html>
)=====";void setup() {Serial.begin(115200);pinMode(RELAY_PIN, OUTPUT);digitalWrite(RELAY_PIN, LOW);WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");}Serial.println("\nWiFi已连接");Serial.print("IP地址: ");Serial.println(WiFi.localIP());// 新增状态查询接口server.on("/status", []() {String state = (digitalRead(RELAY_PIN) == HIGH) ? "on" : "off";server.send(200, "application/json", "{\"status\":\"" + state + "\"}");});server.on("/", handleRoot);server.on("/relay/on", handleOn);server.on("/relay/off", handleOff);server.begin();
}void loop() {server.handleClient(); // 处理客户端请求
}// 处理主页请求
void handleRoot() {server.send(200, "text/html", htmlPage);
}// 打开继电器
void handleOn() {digitalWrite(RELAY_PIN, HIGH);server.send(200, "text/plain", "Relay ON");
}// 关闭继电器
void handleOff() {digitalWrite(RELAY_PIN, LOW);server.send(200, "text/plain", "Relay OFF");
}
http://www.xdnf.cn/news/7616.html

相关文章:

  • FPGA:基于Vivado的仿真流程与波形调试实践
  • 快速搭建DeepSeek本地RAG应用 - 超详细指南
  • AI无法解决的Bug系列(一)跨时区日期过滤问题
  • 【Code】Foundations 2017- Catalogue, List of Tables, List of Figures
  • 【Tools】neovim操作指南
  • 【nRF9160 常用prj.conf配置与AT指令介绍】
  • 建筑设备分散管理痛点如何解?楼宇自控系统给出破局之道
  • 编程日志5.13
  • 2025.05.20【Treemap】树图数据可视化技巧
  • 专题六:记忆化搜索(递归优化的秘密武器)
  • 深入理解Redis Cluster:架构、原理与实践
  • Oracle资源管理器
  • Oracle ASM Rebalance Power 了解
  • Linux线程互斥与同步(上)(29)
  • 2025年PMP 学习二十三 16章 高级项目管理
  • Python的sys模块:系统交互的关键纽带
  • MySQL性能调优:从查询优化到分库分表
  • ubuntu14.04/16.06 安装vscode(实测可以用)
  • 在 Azure OpenAI 上使用 Elastic 优化支出和内容审核
  • 【Go-2】基本语法与数据类型
  • 基于C#的Modbus通信协议全面解析与实现指南
  • 文件操作和IO-2 使用Java操作文件
  • 迪菲-赫尔曼密钥交换算法深度解析
  • Java并发进阶系列:深度讨论官方关于jdk1.8ConcurrentHashMap的computeIfAbsent源代码修复逻辑
  • OpenCV 第6课 图像处理之几何变换(重映射)
  • javascript个人笔记 闭包/this/解构赋值/模板字符串/模块化
  • JavaScript计时器详解:setTimeout与setInterval的使用与注意事项
  • DNS:互联网的“通讯录”——计算机网络应用层中的域名系统详解
  • Android Framework学习七:Handler、Looper、Message
  • 力扣-快乐数