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();
}
评论 (0)