作者:admin,发布日期:2020-04-02
阅读:2080;评论: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,且继电器有动作,即代表代码有效。