微控制器的内部存储器很小,不足以长时间保存传感器生成的数据,或者您必须使用一些外部存储设备,或者可以使用Internet将数据保存在某些云上。而且,有时在将传感器部署在人类无法到达或难以频繁访问的极端条件下时,很难进行管理。为了纠正此类问题,我们始终研究如何从任何地方实时监视传感器数据而在该位置没有任何物理存在的方式。
该实时数据库在这种情况下被使用,我们只需要一些接口控制器,可以连接到互联网,并且可以能够与云服务器交换数据。服务器数据可用于监视实时系统行为,数据库分析,统计分析和处理以及对未来用例的解释。有许多IoT硬件平台和云平台可用于实现此目的。如果您在找到适合您的物联网应用程序的平台时遇到困难,请点击链接。
以前,我们已经介绍了ThingSpeak,Adafruit IO和许多其他物联网软件。今天,我们将建立一个类似的项目,在该项目中,我们将使用温度和湿度传感器DHT11和NodeMCU ESP8266模块在Google的Firebase数据库服务器上实时记录温度和湿度。
我们将项目分为两个部分。首先,我们将开始组装硬件组件并将固件上传到其中。其次,我们将使用Firebase与NodeMCU进行设置以交换实时数据。如果您是ESP8266或Firebase的新手,请按照之前的教程使用Firebase控制LED。
所需组件
- NodeMCU ESP8266模块
- DHT11温湿度传感器
电路原理图
DHT11温湿度传感器
DHT11模块具有湿度和温度综合特性,并带有经过校准的数字信号输出,这意味着DHT11传感器模块是用于感测湿度和温度的组合模块,可提供经过校准的数字输出信号。DHT11为我们提供了非常精确的湿度和温度值,并确保了高可靠性和长期稳定性。该传感器具有电阻型湿度测量组件和NTC型温度测量组件,并内置了8位微控制器,具有快速响应和经济高效的特点,并提供4引脚单行封装。
我们以前使用ESP12E来更新Web服务器上的DHT11读数,但您可以检查所有基于DHT11的项目,在这些项目中我们已经使用DHT11与许多其他微控制器(例如Arduino,PIC,Raspberry和使用它们的气象站)进行了交互。
编程NodeMCU ESP8266实时温度和湿度监控
最后给出了完整的程序以及可运行的视频。在这里,我们解释了代码的几个重要部分。
首先包括使用ESP8266和firebase的库。
#包括
通过以下链接下载并安装库:
github.com/FirebaseExtended/firebase-arduino/blob/master/src/Firebase.h
github.com/bblanchon/ArduinoJson
编译时,如果出现未安装ArduinoJson.h库的错误,请使用上面给出的链接进行安装。
我们将对NodeMCU进行编程,以每隔5秒间隔从DHT11传感器获取读数并将其推入Firebase。我们将设置一条推送数据的路径。现在,两个参数即。湿度和温度在同一父路径和不同子路径中发送。
这两个参数对于与Firebase通信非常重要。设置这些参数将启用ESP8266与firebase之间的数据交换。要为您的项目找到这些参数,请遵循我们以前关于Firebase安装程序的教程。
#define FIREBASE_HOST“ your-project.firebaseio.com” //来自 Firebase ID的项目名称地址#define FIREBASE_AUTH“ Uejx9ROxxxxxxxxxxxxxxxxxxxxxxxxfQDDkhN” //从Firebase生成的密钥
成功找到凭据后,只需替换以上代码即可。
输入您的Wi-Fi SSID和密码以连接网络。
#define WIFI_SSID“ network_name” //输入您的家庭或公共wifi名称 #define WIFI_PASSWORD“ password” // wifi ssid的密码
在NodeMCU中定义DHT数据引脚。您可以在NodeMCU中使用任何数字GPIO引脚。
#定义DHTPIN D4
DHT库适用于所有DHT变体,并带有您要用于哪个DHT传感器的选项,例如DHT11或DHT22。只需选择正确的DHT传感器并继续。
#define DHTTYPE DHT11 //选择dht类型为DHT 11或DHT22 DHT dht(DHTPIN,DHTTYPE);
连接到选定的Wi-Fi网络,并连接到Firebase数据库服务器。
WiFi.begin(WIFI_SSID,WIFI_PASSWORD); Firebase.begin(FIREBASE_HOST,FIREBASE_AUTH);
从NodeMCU的引脚D4开始读取。
dht.begin();
从DHT传感器获取湿度和温度读数,并保存为浮点值。
float h = dht.readHumidity(); //读取温度或湿度大约需要250毫秒! 浮点数t = dht.readTemperature(); //读取温度为摄氏温度(默认值)
只需检查DHT传感器的接线是否正确或是否未损坏以及控制器是否可以从中读取读数即可。如果未显示读数,则可能是传感器已损坏,只需显示一条错误消息并返回检查即可,而无需继续进行。
if(isnan(h)-isnan(t)){//检查是否读取失败并提早退出(重试)。 Serial.println(F(“无法从DHT传感器读取!”)); 返回; }
在串行监视器中打印传感器数据以进行调试,并以字符串形式保存温度和湿度值,以将其发送到Firebase。另请注意,从DHT11传感器读取两次读数之间所需的最小延迟为2秒,因此请始终使用大于2秒的延迟。要了解有关DHT11的更多信息,请查看官方数据表。
Serial.print(“ Humidity:”); Serial.print(h); 字符串fireHumid =字符串(h)+字符串(“%”); //将整数湿度转换为字符串湿度 Serial.print(“%Temperature:”); Serial.print(t); Serial.println(“°C”); 字符串fireTemp =字符串(t)+字符串(“°C”); 延迟(4000);
最后,将温度和湿度数据通过路径“ your-project.firebaseio.com/DHT11/Humidity/”发送到firebase。
Firebase.pushString(“ / DHT11 / Humidity”,fireHumid); //设置路径并发送读数 Firebase.pushString(“ / DHT11 / Temperature”,fireTemp); //设置路径并发送读数
您可以在Firebase帐户中查看所有数据。只需转到Firebase中“ 我的控制台 ”中“ 项目 ”中的“ 数据库 ”部分。
要设置Firebase来发送和监视数据,您可以参考我们之前的教程。
下面给出了此基于IoT的温度和湿度监控的完整代码和视频。