简介:ESP8266三路继电器开关,支持局域网远程控制,可自行映射到公网。不依赖第三方平台

ESP8266三路继电器开关,支持局域网远程控制,可自行映射到公网。不依赖第三方平台

主控使用ESP12F,继电器使用松乐5v继电器,板载电源指示灯,三路继电器指示灯,RST按键和用户按键,两个用户LED灯

板载220V转5V变压模块,方便直接接入电源。

该工程已在立创EDA开源,同时上传演示视频到开源工程,开源链接:esp8266三路继电器 - 嘉立创EDA开源硬件平台

可直接修改打样

代码如下


/**********************************************************************
项目名称/Project          : 局域网开关神器
程序目的/Purpose          : 使用ESP8266建立基本服务器,用户可通过浏览器访问8266所建立的网页,并通过该页面控制继电器,打开、关闭开关。
***********************************************************************/#define KEY            14
#define CH1            4
#define CH2            5
#define CH3            16#include <ESP8266WiFi.h>        // 本程序使用 ESP8266WiFi库
#include <ESP8266WebServer.h>   //  ESP8266WebServer库
#include <FS.h>#include "Config.h"//其他配置信息
//=================配置网络信息=====================//const char* ssid     = "Xiaomi_4A45";      // 连接WiFi名需要连接的WiFi名填入引号中
const char* password = "12345789";   // 连接WiFi密码需要连接的WiFi密码填入引号中//===============为了方便访问,配置为固定IP,需要根据自己路由器调整===================//IPAddress local_IP(192,168,2,12);    // 设置IP
IPAddress gateway(192,168,2, 1);     // 设置网关
IPAddress subnet(255, 255, 255, 0);   // 设置子网掩码
IPAddress dns(192,168,2,1);            // 设置局域网DNSESP8266WebServer esp8266_server(80);// 建立网络服务器对象,该对象用于响应HTTP请求。监听端口(80)bool CH1_Status = 0;
bool CH2_Status = 0;
bool CH3_Status = 0;void setup(void)
{Serial.begin(115200);   // 启动串口通讯波特率115200InitPort();//初始化端口// 设置联网参数if (!WiFi.config(local_IP, gateway, subnet, dns)) {Serial.println("Failed to Config ESP8266 IP"); } WiFi.begin(ssid, password);                  // 启动网络连接Serial.print("Connecting to ");              // 串口监视器输出网络连接信息Serial.print(ssid); Serial.println(" ...");                      // 告知用户控制器正在尝试WiFi连接int i = 0;                                   // 这一段程序语句用于检查WiFi是否连接成功 while (WiFi.status() != WL_CONNECTED)        // WiFi.status()函数的返回值是由WiFi连接状态所决定的。 {delay(1000);                               // 如果WiFi连接成功则返回值为WL_CONNECTED                       Serial.print(i++); Serial.print(' ');                         // 此处通过While循环每秒检查一次WiFi.status()函数返回值}                                            // 同时通过串口监视器输出连接时长读秒。// 这个读秒是通过变量i每隔一秒自加1来实现的。// WiFi连接成功后将通过串口监视器输出连接成功信息 Serial.println('\n');Serial.print("Connected to ");Serial.println(WiFi.SSID());              // 通过串口监视器输出连接的WiFi名称Serial.print("IP address:\t");Serial.println(WiFi.localIP());           // 通过串口监视器输出控制板的IPif(SPIFFS.begin())                       // 启动闪存文件系统{Serial.println("SPIFFS Started");} else {Serial.println("SPIFFS Failed to Start");}     esp8266_server.on("/setCH1", HandleSwitch1);esp8266_server.on("/setCH2", HandleSwitch2);esp8266_server.on("/setCH3", HandleSwitch3);esp8266_server.onNotFound(HandleUserRequest); // 处理其它网络请求esp8266_server.begin();                       // 启动网站服务Serial.println("Server Started");
}// 设置处理404情况的函数'handleNotFound'
void handleNotFound()
{esp8266_server.send(404, "text/plain", "404: Not found"); // 发送"404: Not found"
}void loop(void)
{esp8266_server.handleClient();//监测网络请求
}void HandleSwitch1(void) //回调函数
{String CH1_State = esp8266_server.arg("CH1state"); //获取参数Serial.println(CH1_State);esp8266_server.send(200, "text/plain", "OK");if(CH1_State == "1"){CH1_Status = 1;digitalWrite(CH1,HIGH); //LED ON} else {CH1_Status = 0;digitalWrite(CH1,LOW); //LED ON}
}void HandleSwitch2(void) //回调函数
{String CH2_State = esp8266_server.arg("CH2state"); //获取参数Serial.println(CH2_State);esp8266_server.send(200, "text/plain", "OK");if(CH2_State == "1"){CH2_Status = 1;digitalWrite(CH2,HIGH); //LED ON} else {CH2_Status = 0;digitalWrite(CH2,LOW); //LED ON}
}void HandleSwitch3(void) //回调函数
{String CH3_State = esp8266_server.arg("CH3state"); //获取参数Serial.println(CH3_State);esp8266_server.send(200, "text/plain", "OK");if(CH3_State == "1"){CH3_Status = 1;digitalWrite(CH3,HIGH); //LED ON} else {CH3_Status = 0;digitalWrite(CH3,LOW); //LED ON}
}// 处理用户浏览器的HTTP访问
void HandleUserRequest(void)
{         String reqResource = esp8266_server.uri();  // 获取用户请求资源(Request Resource)Serial.print("reqResource: ");Serial.println(reqResource);bool fileReadOK = handleFileRead(reqResource);  // 通过handleFileRead函数处处理用户请求资源// 如果在SPIFFS无法找到用户访问的资源,则回复404 (Not Found)if(!fileReadOK){                                                 esp8266_server.send(404, "text/plain", "404 Not Found"); }
}bool handleFileRead(String resource)              //处理浏览器HTTP访问
{if(resource.endsWith("/"))                      // 如果访问地址以"/"为结尾{resource = "/index.html";                     // 则将访问地址修改为/index.html便于SPIFFS访问}
//  if (resource == "/index.html" && !CH1_Status){
//    resource = "/index2.html";
//  }if(resource == "/index.html"){if(CH1_Status && CH2_Status && CH3_Status) resource = "/index111.html";if(!CH1_Status && CH2_Status && CH3_Status) resource = "/index011.html";if(CH1_Status && !CH2_Status && CH3_Status) resource = "/index101.html";if(CH1_Status && CH2_Status && !CH3_Status) resource = "/index110.html";if(CH1_Status && !CH2_Status && !CH3_Status) resource = "/index100.html";if(!CH1_Status && CH2_Status && !CH3_Status) resource = "/index010.html";if(!CH1_Status && !CH2_Status && CH3_Status) resource = "/index001.html";if(!CH1_Status && !CH2_Status && !CH3_Status) resource = "/index000.html";}String contentType = getContentType(resource);  // 获取文件类型if (SPIFFS.exists(resource))                    // 如果访问的文件可以在SPIFFS中找到 {File file = SPIFFS.open(resource, "r");       // 则尝试打开该文件esp8266_server.streamFile(file, contentType); // 并且将该文件返回给浏览器file.close();                                 // 并且关闭文件return true;                                  // 返回true}return false;                                   // 如果文件未找到,则返回false
}// 获取文件类型
String getContentType(String filename){if(filename.endsWith(".htm")) return "text/html";else if(filename.endsWith(".html")) return "text/html";else if(filename.endsWith(".css")) return "text/css";else if(filename.endsWith(".js")) return "application/javascript";else if(filename.endsWith(".png")) return "image/png";else if(filename.endsWith(".gif")) return "image/gif";else if(filename.endsWith(".jpg")) return "image/jpeg";else if(filename.endsWith(".ico")) return "image/x-icon";else if(filename.endsWith(".xml")) return "text/xml";else if(filename.endsWith(".pdf")) return "application/x-pdf";else if(filename.endsWith(".zip")) return "application/x-zip";else if(filename.endsWith(".gz")) return "application/x-gzip";return "text/plain";
}/*************************************************** 函数名称:InitPort* 函数功能:初始化端口 * 参数说明:无
**************************************************/void InitPort(void)
{pinMode(LED_BUILTIN, OUTPUT);   // 初始化板载LED引脚为OUTPUTdigitalWrite(LED_BUILTIN, HIGH);// 初始化LED引脚状态pinMode(KEY, INPUT);   // 初始按键为INPUTpinMode(CH1, OUTPUT);   // 初始化继电器控制为outputdigitalWrite(CH1, LOW);// 初始化继电器引脚状态pinMode(CH2, OUTPUT);   // 初始化继电器控制为outputdigitalWrite(CH2, LOW);// 初始化继电器引脚状态pinMode(CH3, OUTPUT);   // 初始化继电器控制为outputdigitalWrite(CH3, LOW);// 初始化继电器引脚状态
}

立创开源|esp8266三路继电器相关推荐

  1. 立创开源 | 基于ESP-01的物联网继电器

    本工程全部内容已在立创开源平台完全开源,有感兴趣的可以去看看:开源链接 (一)前期准备 (1)手机端下载"点灯 blinker"APP,并按照附件中"Blinker手机端 ...

  2. 立创开源|USB示波器+信号发生器+USB存储 三合一

    分享一个在立创开源硬件平台上开源的仪器项目,包含了各种功能,做这东西花了不少时间. 项目作者:xiaowuzxc 项目地址:点此进入 开源协议: MIT 已打板验证! 简介 本工程集成了"老 ...

  3. 【立创开源】基于N32/STM32物联网终端设备

    1.项目功能介绍 STM32终端控制器,设计的初衷是做一款拥有蓝牙BLE与LORA传输功能的室内外传感控检测控制的产品. 该项目基于目前DIY爱好者经常使用的STM32F103C8T6型号,通过LOR ...

  4. 智能家居之ESP8266接继电器接线方式

    ESP8266接继电器接线方式 esp8266 电源 继电器 LED TX EN 3.3V RST 3.3V 3.3V GND GND GND IO2 信号端 IO0 RX NO(常闭触点) NC(常 ...

  5. SMT32同步采样ADC芯片ADS8329 | 立创开源

    ADS8329 是一款具有单极性输入的低功耗.16 位.1MSPS 模数转换器 (ADC),同时具有采样保持功能. 电路板文件和STM32程序文件在立创开源平台,开源地址:https://oshwhu ...

  6. 花 1 小时,开源设计 LoRa 继电器开关

    提示1:锐米所有 LoRa 产品严格遵循国际标准的 LoRaWAN 协议. 提示2:您可以免费复制,修改和商用本项目,请注明锐米原创. 提示3:如果您有其他 LoRa 需求或建议,欢迎联系锐米 sup ...

  7. 基于arduino用esp8266和继电器实现小爱同学开关灯

    用esp8266和继电器实现小爱同学开关灯 房间的灯离床太远了,于是想到用esp8266配合点灯科技app来实现用小爱同学开关灯.于是就用小led灯做了测试. 这些是我们需要的材料 在淘宝上都能找到 ...

  8. 立创开源丨基于CH340C的STC三口双电压自动冷启动自动下载器

    立创开源地址:基于CH340C的STC三口双电压自动冷启动自动下载器 - 嘉立创EDA开源硬件平台 (oshwhub.com) 一.      特点 1.  采用USB公头可直接插在电脑USBA口处. ...

  9. ESP8266 01S 继电器控制智能灯实现

    ESP8266 01S 继电器控制 智能灯实现(使用小度音响) 最近研究esp8266,发现可以通过wifi连接物联网云平台实现远程控制,同时也可以加入小度语音DIY简单的智能家居. 前言 本人也是刚 ...

  10. 立创开源|基于国产雅特力制作的多层全键自定义小键盘

    本项目已开源至立创开源硬件平台:点击传送 一.确定键盘布局 布局编辑网站: http://www.keyboard-layout-editor.com/ 定位板生成网站: http://builder ...

最新文章

  1. Android序列化与反序列化
  2. 强大的grep命令使用经验
  3. Linux is执行程序命令,linux命令执行过程详解
  4. 微服务架构下分布式事务解决方案 —— 阿里GTS
  5. C/C++函数调用的压栈模型
  6. 再论数据科学竞赛中的Data Leakage
  7. 中国自研数据库拿下世界第一,背后这十年都经历了什么?
  8. CCCC-GPLT L2-019. 悄悄关注 团体程序设计天梯赛
  9. C/C++ 实现模拟键盘鼠标
  10. 操作系统-io设备基本概念和分类
  11. 前端面试及答案:boder实现0.5像素的方法
  12. 福大软工1816 · 第四次作业 - 团队展示
  13. Keil C51对C语言的关键词扩展之八: far
  14. CSS透明opacity和IE各版本透明度滤镜filter的最准确用法
  15. 大数据中数据挖掘技术的挑战
  16. 数据库设计1-数据库设计简述
  17. 水羊转债,超达转债,晓鸣转债上市价格预测
  18. Windows2014使用NBU备份实现Oracle11g本地恢复和异地恢复
  19. 亚马逊运营自然订单减少了该怎么办?
  20. 微软亚洲研究院机器学习组的首席研究员刘铁岩谈AI

热门文章

  1. C调用Lua与解决Lua环境问题
  2. marlab中主成分得分怎么求_成考数学不可触碰的雷区和得分技巧(纯干货)
  3. MathType的使用技巧
  4. 最速下降法matlab全局最小值_最速下降法+Matlab代码
  5. rake matlab,移动通信系统RAKE接收机的研究,matlab ,rake接收机
  6. MATLAB聚类分析学习笔记
  7. windows系统怎么用注册表修改桌面文件路径
  8. 利用Wireshark分析UDP数据包
  9. java程序开头一般怎么写,附源代码
  10. Origin2017、Origin2018详细安装教程