作者:admin,发布日期:2020-04-02
阅读:2537;评论:0
写在开头
本文使用Arduino ESP8266官方库ESP8266WebServer来开发web服务器,以实现简单的输出网页和控制继电器。
使用材料
ESP8266 NodeMCU * 1
2路继电器模块(高电平触发) * 1
杜邦线 * 若干
硬件接线
VCC - Vin
GND - GND
IN1 - GPIO15
IN2 - GPIO13
注:需要注意的是ESP8266其中的几个GPIO口是无法用来控制继电器的,接上那些口之后ESP8266会无法开机,这是因为这些GPIO口在启动时不能接低电平,继电器模块的IN通过推动三极管的PN结对地连接,虽然有阻抗,但是模块认为已经接了低电平,所以不开机。
所需库
ESP8266WebServer
ESP8266WiFi
在Arduino中安装完ESP8266开发板后,这些库默认可用,所以无需单独安装。
原理
利用ESP8266WiFi库,开机连接家中WIFI,然后在串口中输出WIFI地址。
接着设置Web服务器的路由,设置完成后启动Web服务器。
当用户请求时,请求会被loop中的handleClient捕获,处理后分发给匹配的路由,如果是指定路由,就控制继电器开关。
具体可参考GitHub的README:https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WebServer
效果预览

博主这里增加了一盏LED灯,用于判断WIFI连接状态。
实现代码
// WIFI
#include <ESP8266WiFi.h>
// wifi ssid
#define WIFI_SSID ""
// wifi ssid
#define WIFI_PASS ""
#include <ESP8266WebServer.h>
// create webserver,the port is 80
ESP8266WebServer server(80);
// relay
int pinA = 13;
int pinB = 15;
void setup() {
// put your setup code here, to run once:
// start serial
Serial.begin(115200);
Serial.println();
// set pin mode
pinMode(pinA, OUTPUT);
pinMode(pinB, OUTPUT);
// connect wifi
setup_wifi();
// set route
server.on("/", []() {
server.send(200, "text/plain", "this works as well");
});
server.on("/on1", []() {
server.send(200, "text/plain", "on");
digitalWrite(pinA, HIGH);
});
server.on("/off1", []() {
server.send(200, "text/plain", "off");
digitalWrite(pinA, LOW);
});
server.on("/on2", []() {
server.send(200, "text/plain", "on");
digitalWrite(pinB, HIGH);
});
server.on("/off2", []() {
server.send(200, "text/plain", "off");
digitalWrite(pinB, LOW);
});
server.onNotFound(handleNotFound);
// start web server
server.begin();
Serial.println("HTTP server started");
}
void setup_wifi() {
// connect WIFI
WiFi.begin(WIFI_SSID, WIFI_PASS);
WiFi.softAPdisconnect (true);
Serial.print("Connecting WIFI");
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Connected, IP address: ");
Serial.println(WiFi.localIP());
}
void handleNotFound() {
// run when no route is found
String message = "File Not Found\n\n";
message += "URI: ";
// get request uri
message += server.uri();
message += "\nMethod: ";
// get request method
message += (server.method() == HTTP_GET) ? "GET" : "POST";
message += "\nArguments: ";
// get request args
message += server.args();
message += "\n";
for (uint8_t i = 0; i < server.args(); i++) {
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
// send with 404 code
server.send(404, "text/plain", message);
}
void loop() {
// put your main code here, to run repeatedly:
// Processing request
server.handleClient();
}代码验证
将代码编译完烧写入ESP8266后,串口会输出WIFI连接信息,连接WIFI成功后会显示IP,我们用浏览器打开返回的IP,进行控制。
打开第一路继电器
打开第二路继电器
关闭第一路继电器
关闭第二路继电器
如果网页显示on或者off,且继电器有动作,即代表代码有效。