ESP8266实现智能家居

MoyiTech
2020-05-04 / 0 评论 / 195 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年02月18日,已超过1021天没有更新,若内容或图片失效,请留言反馈。

emmm…很早以前发过一个关于esp8266智能家居的视频,难得有时间整理一下。

环境配置
这里使用Arduino作为IDE,这里介绍两种使用方法。

使用原生Arduino配置(推荐)
如果你在国外可以使用 IDE进行安装
ps:由于某些原因,在国内下载慢(高速方法自行探索),但这种方法以后用起来还是比较稳定的。

直接下载Arduino版SDK(未测试)
下载打包好的esp8266安装包,直接运行并解压即可。
下载地址1:
https://pan.baidu.com/s/19yEQ4UDF-bQCzt3BsdV6Yw

下载地址2:
https://share.weiyun.com/5CGEKJO

如果安装过其他版本的esp8266sdk,请先删除,再使用本安装包

解压完成后,再打开Arduino IDE,即可在 菜单栏>工具>开发板 中找到你使用的esp8266开发板

ESP8266程序编写
SDk为我们提供了丰富的拓展库,本文主要用到了以下库

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

HTML页面建议新建一个文件进行编写,这里值得注意的是:当HTML代码复制到IDE里面时需要先对引号进行转码成",所有汉字也要进行转码,然后用一些在线小工具进行HTML压缩,最后先赋值到变量就行了。

String html="<!DOCTYPE html><html lang=\"en\"><head><meta charset=\"UTF-8\"><title>this is title</title></head><body><a href=\"./pin?light=1on\"><input type=\"button\" value=\"&#x5F00;1&#x706F;\"style=\"width: 300px; height: 200px;\"</a><a href=\"./pin?light=1off\"><input type=\"button\" value=\"&#x5173;1&#x706F;\"style=\"width: 300px; height: 200px;\"</a><a href=\"./pin?light=2on\"><input type=\"button\" value=\"&#x5F00;2&#x706F;\"style=\"width: 300px; height: 200px;\"</a><a href=\"./pin?light=2off\"><input type=\"button\" value=\"&#x5173;2&#x706F;\"style=\"width: 300px; height: 200px;\"</a><a href=\"./pin?light=3on\"><input type=\"button\" value=\"&#x5F00;&#x70ED;&#x6C34;&#x5668;\"style=\"width: 300px; height: 200px;\"</a><a href=\"./pin?light=3off\"><input type=\"button\" value=\"&#x5173;&#x70ED;&#x6C34;&#x5668;\"style=\"width: 300px; height: 200px;\"</a></body></html>";

剩下的代码就不一一赘述了,附在下面了,大家自行参考叭

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
const char* ssid = "SSID";
const char* password = "password";

ESP8266WebServer server(80);

String html="<!DOCTYPE html><html lang=\"en\"><head><meta charset=\"UTF-8\"><title>this is title</title></head><body><a href=\"./pin?light=1on\"><input type=\"button\" value=\"&#x5F00;1&#x706F;\"style=\"width: 300px; height: 200px;\"</a><a href=\"./pin?light=1off\"><input type=\"button\" value=\"&#x5173;1&#x706F;\"style=\"width: 300px; height: 200px;\"</a><a href=\"./pin?light=2on\"><input type=\"button\" value=\"&#x5F00;2&#x706F;\"style=\"width: 300px; height: 200px;\"</a><a href=\"./pin?light=2off\"><input type=\"button\" value=\"&#x5173;2&#x706F;\"style=\"width: 300px; height: 200px;\"</a><a href=\"./pin?light=3on\"><input type=\"button\" value=\"&#x5F00;&#x70ED;&#x6C34;&#x5668;\"style=\"width: 300px; height: 200px;\"</a><a href=\"./pin?light=3off\"><input type=\"button\" value=\"&#x5173;&#x70ED;&#x6C34;&#x5668;\"style=\"width: 300px; height: 200px;\"</a></body></html>";

const int led = 13;

void pin(){
if(server.arg("light")=="1on"){
    digitalWrite(D1, HIGH);
    server.send(200, "text/html",html);
  }else if(server.arg("light")=="1off"){
    digitalWrite(D1, LOW);
    server.send(200, "text/html",html);
  }else if(server.arg("light")=="2on"){
    digitalWrite(D2, HIGH);
    server.send(200, "text/html",html);
  }else if(server.arg("light")=="2off"){
    digitalWrite(D2, LOW);
    server.send(200, "text/html",html);
  }else if(server.arg("light")=="3on"){
    digitalWrite(D3, HIGH);
    server.send(200, "text/html",html);
  }else if(server.arg("light")=="3off"){
    digitalWrite(D3, LOW);
    server.send(200, "text/html",html);
  }
  
}



void handleRoot() {
  digitalWrite(led, 1);
  server.send(200, "text/html", html);
  digitalWrite(led, 0);
}


void handleNotFound(){
  digitalWrite(led, 1);
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET)?"GET":"POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i=0; i<server.args(); i++){
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
  server.send(404, "text/plain", message);
  digitalWrite(led, 0);
}

void setup(void){
  pinMode(D1, OUTPUT);
  pinMode(D2, OUTPUT);
  pinMode(D3, OUTPUT);
  pinMode(D4, OUTPUT);
  digitalWrite(led, 0);
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  if (MDNS.begin("esp8266")) {
    Serial.println("MDNS responder started");
  }

  server.on("/", handleRoot);
  server.on("/pin", HTTP_GET, pin);
  server.on("/inline", [](){
    server.send(200, "text/plain", "this works as well");
  });

  server.onNotFound(handleNotFound);

  server.begin();
  Serial.println("HTTP server started");
}

void loop(void){
  server.handleClient();
}
1

评论 (0)

取消