Estação meteorológica de solo automática é um equipamento extremamente importante para analisar o microclima mas seu valor pode ser bastante elevado mas com o app Orion, ESP32 e alguns sensores que são bem fáceis de encontrar, é possível montar uma estação com um custo bastante reduzido.
Estação Meteorológica para Que serve?
A estação meteorológica é um conjunto de sensores que são capaz de medir variações climáticas e registrar em um datalogger de forma automática ou manual.
Existem diversos tipos de estações meteorológicas e cada uma delas são complementares umas as outras, as mais comuns são as de solo, balão e satélite. No entanto, a que será retratada neste post são as de solo, pois são especificadas para fazer análise de microclima e por isso são indicadas para medições locais.

Diagrama
A conexões abaixo já foram abordadas de formas independentes aqui no site respectivamente pelos seguintes links:
- HTU21D;
- BMP180;
- ML8511;
- Display OLED 0.98″.

Código
Todo o código abaixo trata-se da junção dos conteúdos já abordados em outro post, apenas e a única diferença é que o diretório e os tipos de variáveis usadas no Firebase foram modificadas diretório para o aplicativo Orion.
#include <SPI.h>
#include <Wire.h>
#include <ML8511.h>
#include <Adafruit_GFX.h>
#include "FirebaseESP32.h"
#include <Adafruit_BMP085.h>
#include <Adafruit_SSD1306.h>
#include "Adafruit_HTU21DF.h"
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define FIREBASE_HOST "PATH"
#define FIREBASE_AUTH "AUTH"
#define WIFI_SSID "SSID"
#define WIFI_PASSWORD "SENHA"
FirebaseData firebaseData;
String path = "/orion/rx/";
#define ANALOGPIN A6
ML8511 ruv(ANALOGPIN);
Adafruit_BMP085 bmp;
Adafruit_HTU21DF htu = Adafruit_HTU21DF();
double Hummidity(void){
return htu.readHumidity() + (-0.15*(25 - htu.readTemperature()));
}
double Temperature(void){
return (htu.readTemperature() + bmp.readTemperature()) / 2;
}
void setup() {
Serial.begin(9600);
ruv.enable();
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println(WiFi.localIP());
Serial.println("HTU21D-F test");
if (!htu.begin()) {
Serial.println("Couldn't find sensor!");
while (1);
}
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
while (1);
}
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
Firebase.reconnectWiFi(true);
Firebase.setReadTimeout(firebaseData, 1000 * 60);
Firebase.setwriteSizeLimit(firebaseData, "tiny");
if(Firebase.getShallowData(firebaseData, "/")){
Serial.println(firebaseData.payload());
}
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.display();
delay(2000);
display.clearDisplay();
}
void loop() {
double UV = ruv.getUV();
float DUV = ruv.estimateDUVindex(UV)/100;
Serial.print(UV, 4);
Serial.print("\t");
Serial.print(DUV, 1);
Serial.println();
display.clearDisplay();
display.setTextSize(1.5);
display.setTextColor(WHITE);
display.setCursor(10, 10);
display.print(F("T: "));
display.println(Temperature());
display.setCursor(10, 20);
display.print(F("H: "));
display.println(Hummidity());
display.setCursor(10, 30);
display.print(F("B: "));
display.println(bmp.readPressure());
display.setCursor(10, 40);
display.print(F("U: "));
display.println(DUV);
display.display();
String tp = String(Temperature()),
hm = String(Hummidity()),
br = String(bmp.readPressure() / 100),
uv = String(DUV);
tp.replace(".", ",");
hm.replace(".", ",");
br.replace(".", ",");
uv.replace(".", ",");
Firebase.setString(firebaseData, path + "temp_out", tp);
Firebase.setString(firebaseData, path + "hum_out", hm); // E
Firebase.setString(firebaseData, path + "bar", br);
Firebase.setString(firebaseData, path + "uv", uv); // E
}
Funcionamento
O vídeo abaixo mostra o circuito eletrônico a direita lendo os dados de uv, temperatura, pressão atmosférica e umidade relativa do ar. Os valores são exibidos no app Orion via Firebase. Os testes realizados são apenas demonstrativos e que podem ser aplicados em ambiente externo com acesso a internet ou através de um transceptor como o LoRa, que se conecta ao computador e realiza a comunicação.
Para fazer a integração do Firebase com a Orion é bastante simples, é só ir em configurações por o path, auth e desativar a comunicação serial. Em casos de dúvidas, clique aqui para acessar o tutorial das configurações.
Você precisa fazer log in para comentar.