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=\"开1灯\"style=\"width: 300px; height: 200px;\"</a><a href=\"./pin?light=1off\"><input type=\"button\" value=\"关1灯\"style=\"width: 300px; height: 200px;\"</a><a href=\"./pin?light=2on\"><input type=\"button\" value=\"开2灯\"style=\"width: 300px; height: 200px;\"</a><a href=\"./pin?light=2off\"><input type=\"button\" value=\"关2灯\"style=\"width: 300px; height: 200px;\"</a><a href=\"./pin?light=3on\"><input type=\"button\" value=\"开热水器\"style=\"width: 300px; height: 200px;\"</a><a href=\"./pin?light=3off\"><input type=\"button\" value=\"关热水器\"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=\"开1灯\"style=\"width: 300px; height: 200px;\"</a><a href=\"./pin?light=1off\"><input type=\"button\" value=\"关1灯\"style=\"width: 300px; height: 200px;\"</a><a href=\"./pin?light=2on\"><input type=\"button\" value=\"开2灯\"style=\"width: 300px; height: 200px;\"</a><a href=\"./pin?light=2off\"><input type=\"button\" value=\"关2灯\"style=\"width: 300px; height: 200px;\"</a><a href=\"./pin?light=3on\"><input type=\"button\" value=\"开热水器\"style=\"width: 300px; height: 200px;\"</a><a href=\"./pin?light=3off\"><input type=\"button\" value=\"关热水器\"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(); }
转载请注明出处!
发表评论