3-2-3 通过网络服务将开发板引脚状态显示在网页中

位置导航: 首页 / 物联网教程 / 第3章 – 用C/C++开发物联网 / 3-2 – ESP8266网络服务器 /本页

我们在项目制作中可能会需要实时掌握NodeMCU开发板的引脚状态。在本节课程中 ,我们来一起学习如何通过NodeMCU建立基本网站。该网站的页面会实时显示NodeMCU的引脚状态。

为了便于学习,本节课中我们将使用D3引脚作为演示。选择D3引脚是因为它已经与开发板上的FLASH按键开关连接好了。

NodeMCU开发板FLASH按键开关
NodeMCU开发板FLASH按键开关

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

esp8266-nodemcu-Flash-Button
我们可以通过NodeMCU开发板上的FLASH按键控制D3引脚的电平。

以下是本教程的第一段示例代码:

在以上程序的loop函数中,pinState = digitalRead(buttonPin); 语句将不断检查NodeMCU开发板D3引脚状态,也就是检查该引脚所连接的按键是否被按下。该状态将会存储与布尔变量pinState中。

变量pinState将会用于本程序的重点1,也就是handleRoot() 函数里。在handleRoot函数里,我们利用逻辑判断语句来对displayPinState 进行赋值。如果按键没有被按下,pinState为HIGH,这时候程序将会执行displayPinState = "Button State: HIGH";也就是为displayPinState的赋值为“Button State: HIGH”。这句话的意思是“按键引脚状态为高电平”。反之,当我们按下按键后,程序将会执行displayPinState = "Button State: LOW";也就是为displayPinState的赋值为“Button State: LOW”。

在handleRoot函数的结尾处,
esp8266_server.send(200, "text/plain", displayPinState);
这条语句将会把displayPinState所存储的信息发送给浏览器。于是我们在没有按下按键时,将会得到以下页面信息。

NodeMCU-ESP8266按键没有按下显示页面
NodeMCU-ESP8266按键没有按下显示页面

而当我们按下NodeMCU的Flash按键后,并且刷新页面后,会得到以下信息

NodeMCU-ESP8266按键按下显示页面
NodeMCU-ESP8266按键按下显示页面

以上示例中,我们需要刷新网页页面才能将按键的最新状态显示在网页中。为了实现页面的自动刷新,请您参考以下示例程序。

在以上示例程序中的handleRoot函数中,esp8266_server.send(200, "text/html", sendHTML(pinState))语句的的3个参数 sendHTML(pinState)调用了sendHTML函数。该函数的作用是建立一个可以定时刷新的HTML网页代码。通过定时刷新网页,开发板的引脚状态将会不断地在页面中进行更新。

此HTML网页代码是由sendHTML函数产生的。该函数建立了一个字符串变量,该字符串变量所存储的信息正是网页HTML代码。值得注意的是,该HTML代码会不断地检查变量pinState状态,并且根据pinState的状态改变HTML代码的信息,从而实现在网页上显示引脚状态。

此HTML代码中真正实现定时刷新网页功能的语句是代码中的第79行语句。这条语句是告诉网页需要定时刷新,刷新频率5秒钟,即每5秒钟刷新一次页面。您可以通过改变此行语句中的数值5来调整页面刷新频率。

每一次页面刷新,浏览器都会向NodeMCU发送HTTP请求。NodeMCU在收到浏览器请求后,将会把最新的HTML代码信息返回给浏览器。浏览器收到最新的HTML代码后将会在页面中显示引脚的状态。
以下是没有按下按键时的页面显示信息。

esp8266-nodemcu-button-state-auto-refresh-HIgh
esp8266-nodemcu-button-state-auto-refresh-HIgh

以下是按下按键时的页面显示信息。

esp8266-nodemcu-button-state-auto-refresh-Low
esp8266-nodemcu-button-state-auto-refresh-Low