划句顾 发表于 2021-8-13 12:31:31

ESP8266:通过网络服务将开发板引脚状态显示在网页中

本帖最后由 划句顾 于 2021-8-13 12:33 编辑

NodeMCU开发板上的FLASH按键可以控制D3引脚的电平。当我们没有按下改按键时,D3引脚将会保持高电平状态。当按下该按键后,D3引脚会变为低电平。

代码如下:
/**********************************
* Purpose: 使用NodeMCU建立基本服务器。该页面将会自动刷新并且显示NodeMCU
            的D3引脚状态。NodeMCU开发板上的FLASH按键可以控制D3引脚的电平。
            没有按下该按键时D3引脚将会保持高电平状态。当按下该按键后,
            D3引脚会变为低电平
* Author : LAOGU
* Time   : 2021/8/12
*/
#include<ESP8266WiFi.h>
#include<ESP8266WiFiMulti.h>
#include<ESP8266WebServer.h>

#define buttonPin D3//按钮引脚D3

ESP8266WiFiMulti wifiMulti; //建立ESP8266WiFiMulti对象,对象名称是“wifiMulti”

ESP8266WebServer esp8266_server(80);//建立网络服务对象,该对象用于响应http请求。监听端口(80)

bool pinState; //存储引脚状态用变量

void setup()
{
Serial.begin(9600); //启动串口通讯

pinMode(buttonPin,INPUT_PULLUP);//将按键引脚设置为输入上拉模式

//通过addAP函数存储 WiFi名称   WiFi密码
wifiMulti.addAP("八嘎","123456789");
wifiMulti.addAP("胶几人","11223344");

Serial.println("Connecting...");
int i = 0;
while(wifiMulti.run()!=WL_CONNECTED)
{
    delay(1000);
    Serial.print(i++);
    Serial.print(" ");
    }

   Serial.println('\n');
   Serial.print("Connected to ");
   Serial.println(WiFi.SSID());
   Serial.print("IP address:");
   Serial.println(WiFi.localIP());

   esp8266_server.begin(); //启动网站服务
   esp8266_server.on("/",handleRoot);
   esp8266_server.onNotFound(handleNotFound);

   Serial.println("HTTP esp8266_server started");//告知用户ESP8266网络服务功能已经启动

}

void loop()
{
esp8266_server.handleClient(); //处理http服务器访问
pinState = digitalRead(buttonPin); //获取引脚状态
}

void handleRoot()
{
String displayPinState;//存储按键状态的字符串变量

if(pinState == HIGH)
{
    displayPinState = "Button State : HIGH";
}
else
{
    displayPinState = "Button State : LOW";
    }

   esp8266_server.send(200,"text/plain",displayPinState);//向浏览器发送按键状态信息
}

void handleNotFound()
{
esp8266_server.send(404,"text/plain","404: Not Found");
}


static/image/hrline/5.gif


长按FLASH键并刷新页面,会发现引脚的状态变了




static/image/hrline/5.gif

以下代码将实现页面的自动刷新:
代码如下:
/**********************************
* Purpose: 使用NodeMCU建立基本服务器。该网页将显示引脚D3状态。同时状态会
            每隔5秒钟更新一次。
* Author : LAOGU
* Time   : 2021/8/13
*/
#include<ESP8266WiFi.h>
#include<ESP8266WiFiMulti.h>
#include<ESP8266WebServer.h>

#define buttonPin D3//按钮引脚D3

ESP8266WiFiMulti wifiMulti; //建立ESP8266WiFiMulti对象,对象名称是“wifiMulti”

ESP8266WebServer esp8266_server(80);//建立网络服务对象,该对象用于响应http请求。监听端口(80)

bool pinState; //存储引脚状态用变量

void setup()
{
Serial.begin(9600); //启动串口通讯

pinMode(buttonPin,INPUT_PULLUP);//将按键引脚设置为输入上拉模式

//通过addAP函数存储 WiFi名称   WiFi密码
wifiMulti.addAP("八嘎","123456789");
wifiMulti.addAP("胶几人","11223344");

Serial.println("Connecting...");
int i = 0;
while(wifiMulti.run()!=WL_CONNECTED)
{
    delay(1000);
    Serial.print(i++);
    Serial.print(" ");
    }

   Serial.println('\n');
   Serial.print("Connected to ");
   Serial.println(WiFi.SSID());
   Serial.print("IP address:");
   Serial.println(WiFi.localIP());

   esp8266_server.begin(); //启动网站服务
   esp8266_server.on("/",handleRoot);
   esp8266_server.onNotFound(handleNotFound);

   Serial.println("HTTP esp8266_server started");//告知用户ESP8266网络服务功能已经启动

}

void loop()
{
esp8266_server.handleClient(); //处理http服务器访问
pinState = digitalRead(buttonPin); //获取引脚状态
}

void handleRoot()
{
esp8266_server.send(200,"text/html",sendHTML(pinState));
}

String sendHTML(bool buttonState)
{
String htmlCode="<!DOCTYPE html><html>\n";
htmlCode += "<head><meta http-equiv='refresh' content = '5'/>\n";//每5秒刷新一下浏览器
htmlCode += "<title>ESP8266 Button State</title>\n";
htmlCode += "<style>html{font-family: Helvetica; display: inline-block; margin: 0px auto;text-align: center;}\n";
htmlCode += "body{margin-top: 50px;}h1{color: #444444; margin:50px auto 30px;}h3{color;#444444;margin-bottom:50px;}\n";
htmlCode += "</style>\n";
htmlCode += "</head>\n";
htmlCode += "<body>\n";
htmlCode += "<h1>ESP8266 BUTTON STATE</h1>\n";

if(buttonState)
{
    htmlCode += "<p>Button Status : HIGH</p>\n";
    }
   else
{
    htmlCode += "<p>Button Status : LOW</p>\n";
    }
    htmlCode += "</body>\n";
    htmlCode += "</html>\n";

    return htmlCode;
}

void handleNotFound()
{
esp8266_server.send(404,"text/plain","404: Not Found");
}

代码中的“+=”是叠加的意思。
static/image/hrline/5.gif

网页如下:


按下flash键,结果如下:
页: [1]
查看完整版本: ESP8266:通过网络服务将开发板引脚状态显示在网页中