一、实验目的
通过本实验,熟悉在计算机上使用NodeJS配置WebService的基本方法,掌握将传感器数据通过WIFI传递到WebService并发布的方法。
二、实验要求
1、使用NodeJS软件在计算机上创建WebService服务器。
2、使用导线正确连接ESP 8266电路板及温湿度传感器(实验四使用的传感器),实现温湿度数据的获取。
3、使用ESP 8266电路板连接WIFI,将获取到的温湿度数据传递到WebService服务器,并能通过手机等设备查看到这些数据。
三、实验过程
1、安装及配置NodeJS
(1)在NodeJS安装包中选择对应操作系统版本的安装文件,若是32位的Windows操作系统则选择“Windows Installer (32 bit)”,双击后根据提示默认安装即可。
(2)将实验源码中的NodeJS文件夹拷贝至系统C盘根目录。
(3)点击“开始”-“所有程序”-“Node.js”-“Node.js command prompt”,在弹出的命令行窗口中依次输入“cd c:\NodeJS”和“node index.js”,每条命令输入完成后按回车键,若窗口中出现“Listening on port 80”的提示,则表明本实验需要使用的WebService配置完成(完成后该窗口不要关闭),如图所示。
图8-1启动WebService服务
2、搭建实验电路及编写程序代码
(1)按照实验四的实验过程1搭建实验电路,如图所示。
图8-2实验电路连接图
(2)在新建的Arduino程序窗口中输入如下代码:
#include <dht11.h> //引入库,用于获取温湿度传感器的值
#include <ESP8266WiFi.h> //引入库,用于连接WIFI
#include <ESP8266HTTPClient.h> //引入库,用于编写HTTP命令
//填写WIFI信息
const char* ssid = "……";
const char* password = "……";
//指定WEB服务器地址,即安装NodeJS的计算机的IP地址
String webServiceIPAddress = "192.168.*.*";
dht11 DHT11;
#define DHT11PIN 14 //温湿度传感器的数据针脚连接在GPIO14接口
void setup(){
Serial.begin(115200);
Serial.println("DHT11 TEST PROGRAM ");
Serial.println();
//WIFI连接
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi Connected");
Serial.println("IP Address: ");
Serial.println(WiFi.localIP());
}
void loop(){
//定时更新显示WIFI信息
Serial.println("\n");
Serial.println("");
Serial.println("WiFi Connected");
Serial.println("IP Address: ");
Serial.println(WiFi.localIP());
//获取温湿度传感器的值
int chk = DHT11.read(DHT11PIN);
Serial.print("Read Sensor: ");
switch (chk){
case DHTLIB_OK:
Serial.println("OK");
break;
case DHTLIB_ERROR_CHECKSUM:
Serial.println("Checksum error");
break;
case DHTLIB_ERROR_TIMEOUT:
Serial.println("Time out error");
break;
default:
Serial.println("Unknown error");
break;
}
//输出显示获取到的温湿度数值
Serial.print("Humidity: ");
Serial.print(String(DHT11.humidity));
Serial.println("%");
Serial.print("Temperature: ");
Serial.print(String(DHT11.temperature));
Serial.println("C");
//通过http将获取到的温湿度传感器数据传递到WebService服务器
if(WiFi.status()== WL_CONNECTED){ //检查WIFI连接状态,若正常,执行下列代码
HTTPClient http;
http.begin("http://" + webServiceIPAddress + "/weather");
http.addHeader("Content-Type", "application/json"); //Specify content-type header
String body = "{ \"temp\":\"" + String(DHT11.temperature) + "\", \"humidity\":\"" + String(DHT11.humidity) + "\" }";
Serial.println(body);
int httpCode = http.POST(body);
String payload = http.getString();
Serial.println(httpCode);
Serial.println(payload);
http.end();
}
else {
Serial.println("Error in WiFi connection");
}
//每2秒更新一次数据
delay(2000);
}
(2)将USB线缆插入计算机,待程序上传成功后打开串口监视器,观察WIFI连接情况及温湿度数据获取情况,正确的实验结果如图所示,每2秒会出现新的数据。
图8-3串口监视器输出的实验结果
3、测试实验结果
(1)查看图12-1的命令行窗口,每2秒会出现新的数据,如图所示。
图8-4通过NodeJS的命令行窗口查看实验结果
(2)打开任意1台连入局域网的计算机的浏览器(可使用谷歌、傲游等浏览器,IE、360等浏览器可能无法正确显示),在地址栏输入WebService服务器IP地址,即安装NodeJS的计算机的IP地址,若上述配置均正确,则会出现如图所示的页面效果,页面数据每2秒会自动更新(可试图改变传感器附近温湿度数据来观察曲线变化)。
图8-5通过WebService网页查看实验结果
(3)使用连接了WIFI的手机打开浏览器,输入WebService服务器IP地址,可查看到与(2)中相同的结果。
(4)断开连接到计算机上的USB线缆,改由供电模块(9V电池)供电,此时传感器成为可移动的设备,通过计算机或手机仍然可以查看到实时的温湿度数据。