1
微控制器的内部存储器很小,不足以长时间保存传感器生成的数据,要么您必须使用一些外部存储设备,要么可以使用互联网将数据保存在某些云上。此外,当传感器部署在人无法到达或难以频繁访问的极端条件站点时,有时会变得难以管理。为了纠正这类问题,我们总是研究我们希望从任何地方实时监控传感器数据的方式,而无需任何物理存在。
实时数据库可以用在这种情况下,我们只需要连接一些可以连接到互联网并能够与云服务器交换数据的控制器。服务器数据可用于监控实时系统行为、数据库分析、统计分析和处理以及未来用例的解释。有许多物联网硬件平台和云平台可用于实现此目的。
我们将使用温度和湿度传感器 DHT11和NodeMCU ESP8266 模块在 Google 的 Firebase 数据库服务器上实时记录温度和湿度。
我们将项目分为两个部分。首先,我们将从组装硬件组件并将固件上传到其中开始。其次,我们将使用 Firebase 与 NodeMCU 进行设置以交换实时数据。如果您是 ESP8266 或 Firebase 的新手,请按照我们之前使用 Firebase 控制 LED 的教程进行操作。
所需组件
NodeMCU ESP8266 模块
DHT11温湿度传感器
电路原理图
DHT11温湿度传感器
DHT11 模块具有带校准数字信号输出的湿度和温度复合体,这意味着 DHT11 传感器模块是用于感测湿度和温度的组合模块,可提供校准的数字输出信号。DHT11 为我们提供了非常精确的湿度和温度值,并确保了高可靠性和长期稳定性。该传感器具有电阻型湿度测量元件和 NTC 型温度测量元件,内置 8 位微控制器,具有快速响应和成本效益,采用 4 针单排封装。
我们之前使用ESP12E 更新网络服务器上的 DHT11 读数,除此之外,您可以检查所有基于 DHT11 的项目,我们使用 DHT11 与许多其他微控制器(如 Arduino、PIC、Raspberry 和使用它们构建的气象站)进行接口。
编程 NodeMCU ESP8266 实时温度和湿度监测
最后给出了带有工作视频的完整程序。在这里,我们将解释代码的几个重要部分。
首先包括使用 ESP8266 和 firebase 的库。
#include
按照以下链接下载并安装库:
https://github.com/FirebaseExtended/firebase-arduino/blob/master/src/Firebase.h
https://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 "Uejx9ROxxxxxxxxxxxxxxxxxxxxxxxxxxxfQDDkhN" // 从 firebase 生成的密钥
成功找到凭据后,只需在上面的代码中替换即可。
输入您的 Wi-Fi SSID 和密码以连接您的网络。
#define WIFI_SSID "network_name" // 输入你的家庭或公共wifi名称 #define WIFI_PASSWORD "password" //wifi ssid的密码
在 NodeMCU 中定义 DHT 数据引脚。您可以在 NodeMCU 中使用任何数字 GPIO 引脚。
#define DHTPIN D4
DHT 库适用于所有 DHT 变体,并带有您想要用于 DHT11 或 DHT22 的 DHT 传感器的选项。只需选择正确的 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 传感器获取湿度和温度读数并保存为浮点值。
浮动 h = dht.readHumidity(); // 读取温度或湿度大约需要 250 毫秒! 浮动 t = dht.readTemperature(); // 将温度读取为摄氏度(默认值)
只需检查 DHT 传感器是否正确接线或未损坏,控制器可以从中读取读数。如果读数未显示,则可能传感器已损坏,只需显示错误消息并返回再次检查,而不继续进行。
if (isnan(h) || isnan(t)) { // 检查是否有任何读取失败并提前退出(重试)。 Serial.println(F("读取 DHT 传感器失败!")); 返回; }
在串行监视器中打印传感器数据以进行调试,并以字符串形式保存温度和湿度值以将其发送到 Firebase。另请注意,来自 DHT11 传感器的两次读数之间所需的最小延迟为 2 秒,因此请始终使用大于 2 秒的延迟。要了解有关 DHT11 的更多信息,您可以查看官方数据表。
Serial.print("湿度:"); 序列号.print(h); String fireHumid = String(h) + String("%"); //将整数湿度转换为字符串湿度 Serial.print("% Temperature: "); 序列号.print(t); Serial.println("°C"); String fireTemp = String(t) + String("°C"); 延迟(4000);
最后,将温度和湿度数据发送到路径“your-project.firebaseio.com/DHT11/Humidity/”的firebase。
Firebase.pushString("/DHT11/Humidity", fireHumid); //设置路径并发送读数Firebase.pushString("/DHT11/Temperature", fireTemp); //设置路径并发送读数
您可以查看您的 Firebase 帐户中的所有数据。只需转到Firebase中“我的控制台”中“您的项目”中的“数据库”部分。
/* 将传感器数据发送到 Firebase 数据库 */
#include// esp8266 库
#include// firebase 库
#include// dht11 温湿度传感器库
#define FIREBASE_HOST "your-project.firebaseio.com" // 来自 firebase id 的项目名称地址
#define FIREBASE_AUTH "Uejx9ROxxxxxxxxxxxxxxxxxxxxxxxxxxxfQDDkhN" // 从 firebase 生成的密钥
#define WIFI_SSID "network_name" // 输入您的家庭或公共 wifi 名称
#define WIFI_PASSWORD "password" //wifi ssid 的密码
#define DHTPIN D4 // 我们连接的数字引脚
#define DHTTYPE DHT11 // 选择 dht 类型作为 DHT 11 或 DHT22
DHT dht(DHTPIN, DHTTYPE);
无效设置(){
序列.开始(9600);
延迟(1000);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD); //尝试连接wifi
Serial.print("Connecting to ");
Serial.print(WIFI_SSID);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
延迟(500);
}
Serial.println();
Serial.print("连接到");
Serial.println(WIFI_SSID);
Serial.print("IP 地址为:");
Serial.println(WiFi.localIP()); //打印本地IP地址
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH); // 连接到火力基地
dht.begin(); //开始读取dht传感器
}
无效循环(){
浮动h = dht.readHumidity();// 读取温度或湿度大约需要 250 毫秒!
浮动 t = dht.readTemperature(); // 将温度读取为摄氏度(默认值)
if (isnan(h) || isnan(t)) { // 检查是否有任何读取失败并提前退出(重试)。
Serial.println(F("读取 DHT 传感器失败!"));
返回;
}
Serial.print("湿度:"); 序列号.print(h);
String fireHumid = String(h) + String("%"); //将整数湿度转换为字符串湿度
Serial.print("% 温度:"); 序列号.print(t); Serial.println("°C");
String fireTemp = String(t) + String("°C"); //将整数温度转换为字符串温度
延迟(4000);
Firebase.pushString("/DHT11/Humidity", fireHumid); //设置路径并发送读数
Firebase.pushString("/DHT11/Temperature", fireTemp); //设置路径并发送读数
}
全部0条评论
快来发表一下你的评论吧 !