物联网-wemos D1 Mini (esp8266)实验四 -- 实验二中的丢失寻找器改进为手机控制水泵
材料:
D1 Mini 1只 11.5元
2N2222 TO-92 1只 2.89元/包(50只/包)
静音潜水微型水泵 3v-5v 100-200mA 1.7元
按压式接线端子 1只 8.8元/包(100只/包)
杜邦线若干
合计: 约13.5元
接线图
操作:
1 连接硬件电路
2 烧写代码
3 手机连接D1 Mini的WiFi (本例中WiFi名为“AA”,无密码,你可以根据自己的喜好在下图位置进行更改)
完整源代码
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
//HTML主页mainPage
static const char mainPage[] PROGMEM = u8R"(
<!DOCTYPE html>
<html>
<head>
<title>ESP8266</title>
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<a href='call?buzzer=ON'>打开水泵</a>
<br><br>
<a href='call?buzzer=OFF'>关闭水泵</a>
<p>水泵控制测试测试</p>
</body>
</html>
)";
//错误路径HTML
static const char errorPage[] PROGMEM= u8R"(
)";
//设置路径HTML
static const char settingPage[] PROGMEM= u8R"(
)";
String buzzerState = u8"OFF";//蜂鸣器状态
ESP8266WebServer _esp8266WebServer(80);//定义esp82666WebServer实例
void handleRoot() {//网页根目录处理函数
_esp8266WebServer.send(200, "text/html", mainPage);//"text/html":以html的格式输出
}
void handleNotFound() {//网络路径不存在处理函数
_esp8266WebServer.send(404, "text/html", errorPage);//"text/plain":原样无格式输出
}
void handleSetting() {//网页设置处理函数
_esp8266WebServer.send(200, "text/html", settingPage);
}
void buzzerStateHandel() {
if (_esp8266WebServer.hasArg(u8"buzzer")) {
buzzerState = _esp8266WebServer.arg(u8"buzzer");
if (buzzerState == u8"ON") {
pinMode(D1, OUTPUT);
digitalWrite(D1, HIGH);
} else if (buzzerState == u8"OFF") {
pinMode(D1, OUTPUT);
digitalWrite(D1, LOW);
}
_esp8266WebServer.send(200, u8"text/plain", String(u8"OK"));
}
}
// setup() 启动时执行一次
void setup() {
//服务器设置
while (!WiFi.softAP(u8"AA", u8"", 1,false));//ap账号(AA)、密码(无)设置。
_esp8266WebServer.on("/call", buzzerStateHandel);//含有buzzer这个变量的处理函数
_esp8266WebServer.on("/", handleRoot);
_esp8266WebServer.onNotFound(handleNotFound);
_esp8266WebServer.on("/setting", handleSetting);
_esp8266WebServer.begin();
//蜂鸣器设置为off状态
pinMode(D1, OUTPUT);
digitalWrite(D1, LOW);
}
// loop() 循环执行
void loop() {
_esp8266WebServer.handleClient();
}