这个项目可以帮助你看看你的温室。它由传感器组成:
- 接下来的几个步骤将解释如何制作系统。
- 所需的库是:
Google Firebase用于存储在NodeMCU上收集的数据。这些数据可以进一步用于网站、移动应用程序以及他们可以访问互联网的任何地方。使用您的 Google 帐户登录并按照以下步骤操作。
登录后执行以下步骤:
现在,我们已经连接了NodeMCU和Google Firebase。
#include
#include
#include
#include
#define FIREBASE_HOST "firebase_link"
#define FIREBASE_AUTH "firebase_secretcode"
#define WIFI_SSID "wifi_name"
#define WIFI_PASSWORD "wifi_password"
void setup() {
Serial.begin(9600);
WiFi.begin (WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println ("");
Serial.println ("WiFi Connected!");
Serial.println(WiFi.localIP());
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
}
void loop() {
}
- 使用以下命令连接dhtnew.h库和传感器数据引脚所连接的引脚:
int dhtPin = 0;
DHTNEW dhtsensor(dhtPin);
- 使用以下命令读取温度和湿度:
dhtsensor.read();
float t = dhtsensor.temperature;
float h = dhtsensor.humidity;
- 最后使用以下命令向Google Firebase发送数据:
Firebase.setFloat("t", t);
Firebase.setFloat("h", h);
- 使用以下命令完成用于读取土壤水分数据值的引脚的初始化:
int soilPin = 1;
使用以下命令读取数据并发送到 Google Firebase:
int soilData = digitalRead(soilPin);
Firebase.setInt("soilData", soilData);
- 使用以下命令完成用于读取空气质量数据值的引脚的初始化:
int airPin = A0;
- 使用以下命令读取数据并发送到 Google Firebase:
int airData = analogRead(airPin);
Firebase.setInt("airData", airData);
dref = FirebaseDatabase.getInstance().getReference();
dref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
temp = dataSnapshot.child("t").getValue().toString();
text_temperature.setText(temp + "°C");
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
dref = FirebaseDatabase.getInstance().getReference();
dref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
hum = dataSnapshot.child("h").getValue().toString();
text_humidity.setText(hum + "%");
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
dref = FirebaseDatabase.getInstance().getReference();
dref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
air = dataSnapshot.child("airData").getValue().toString();
text_airquality.setText(air);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
- 对于土壤水分(if-else 用于决定是否需要浇水):
dref = FirebaseDatabase.getInstance().getReference();
dref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
soilmoisture = dataSnapshot.child("soilData").getValue().toString();
int soilData = Integer.parseInt(soilmoisture);
if (soilData == 0) {
text_soilmoisture.setText("No watering required.");
text_soilmoisture.setTextColor(col2);
}
else {
text_soilmoisture.setText("Watering required!");
text_soilmoisture.setTextColor(col1);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
- 用于链接在activity_main.xml(显示在应用程序中)和 Google Firebase 中的文本的部分代码位于名为MainActivity.java的附件中。xml文件也在附件中。
我的系统的电源是移动电源。移动电源+连接到NodeMCU上的VIN ,-连接到NodeMCU上的GND 。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !