O software Orion não funciona sem uma estação meteorológica que forneça os dados via serial ou via Firebase. Neste post serão retratados esses dois métodos e ambos não deveram ser considerado como forma única, os valores randômicos são apenas demonstrativos e deveram ser substituídos pela variável respectivas de cada sensor da sua estação.
Conexão via Comunicação Serial
A comunicação serial para conectar a estação meteorológica a Orion pode parecer uma método ruim caso seja via à cabo e de fato é, mas para locais aonde não tem acesso a internet pode ser implementado um transmissor na estação meteorológica e um receptor que tenha comunicação serial. Não tem muito segredo, é só seguir o código abaixo ou baixar via GitHub:
/*-------------------------------------------------------------------------------
* Projeto: Integrar estação meteorológica a Orion via comunicação serial
* Saiba mais: https://elcereza.com/conectar-a-estacao-meteorologica-com-a-orion/
* Disponibilizado por: https://elcereza.com
* Autor: Gustavo Cereza
---------------------------------------------------------------------------------*/
void setup() {
Serial.begin(115200); // Escolha o baudrate de 115200 ou 9600
}
void loop() {
/*
Os valores acima podem ser tanto como valores do tipo inteiro quanto do tipo flutuante
a Orion trabalha com valores de ponto flutuante mas é exibido valores inteiros quando
está > 10 e > -10.
*/
Serial.print("tmp:"); Serial.println(random(-150, 150)); // Temperatura Ambiente
Serial.print("hum:"); Serial.println(random(0, 100)); // Umidade Relativa
Serial.print("wid:"); Serial.println(random(0, 300)); // Velocidade do Vento
Serial.print("wdc:"); Serial.println(random(0, 16)); // Direção do Vento
Serial.print("bar:"); Serial.println(random(300, 1100)); // Pressão Atmosférica
Serial.print("plv:"); Serial.println(random(0, 2000)); // Índice Pluviométrico
Serial.print("ruv:"); Serial.println(random(0, 11)); // Índice Ultra Violeta
/*
Todas as variaveis acima por mais que você não tenha, devaram ser enviados com valor
ZERO e desativados nas configurações do software Orion.
Saiba mais em: https://elcereza.com/settings-sorion/
*/
delay(1000); // Esse atraso é fundamental e não deve passar dos 1s
}
Conexão via Firebase
Este método de conexão com a Orion é uma ótima opção para quem precisa de comunicação a longas distâncias ou até mesmo múltiplos “usuários” de uma mesma estação meteorológica para fins didáticos por exemplo, mas deve entender os planos do Firebase para usar o Realtime Database.
Para trabalhar com o Firebase precisa que o hardware tenha acesso a internet, neste exemplo foi utilizado o ESP32 mas nada impede o uso de outras placas. Antes de copiar o código e colar na IDE do Arduino ou baixar via GitHub é necessário ter as bibliotecas de conexão com a internet do teu hardware e a “FirebaseESP32.h” instaladas.
A conexão com o Firebase só vai funcionar se você tiver criado um projeto com o Realtime Database, depois de criado precisa ter a path e auth. Caso não saiba como obter, clique aqui.
/*-------------------------------------------------------------------------------
* Projeto: Integrar estação meteorológica a Orion via Firebase
* Saiba mais: https://elcereza.com/conectar-a-estacao-meteorologica-com-a-orion/
* Disponibilizado por: https://elcereza.com
* Autor: Gustavo Cereza
---------------------------------------------------------------------------------*/
#include <WiFi.h>
#include "FirebaseESP32.h"
#define FIREBASE_HOST "https://(seu-projeto).firebaseio.com/" // Link do teu projeto Realtime Database no Firebase
#define FIREBASE_AUTH "sua autentificação" // Autentificação do teu projeto no Firebase
/*
Caso tenha alguma duvida de como obter o link (path) e a autentificação (auth)
do firebase, acesse: https://elcereza.com/obtendo-a-path-e-auth-do-firebase/
*/
#define WIFI_SSID "SSID" // Nome da tua rede WiFi
#define WIFI_PASSWORD "Senha" // Senha da tua rede WiFi
FirebaseData firebaseData;
String path = "orion/rx/"; // A string path deve permanecer do jeito que está ou haverá erros na Orion.
void getNode(String &key);
void setup() {
Serial.begin(115200);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("conectando");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println();
Serial.print("conectado: ");
Serial.println(WiFi.localIP());
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());
}
}
void loop() {
/*
Esta serie de variáveis que são armazenados valores randomicos são apenas para
simulação e não devem ser considerados a não ser para testes.
*/
int temp = random(-150, 150); // Temperatura Ambiente
int hum = random(0, 100); // Umidade Relativa
int wind = random(0, 300); // Velocidade do Vento
int wd = random(0, 16); // Direção do Vento
int bar = random(300, 1100); // Pressão Atmosférica
int pluv = random(0, 2000); // Índice Pluviométrico
int uv = random(0, 11); // Índice Ultra Violeta
/*
Os valores acima podem ser tanto como valores do tipo inteiro quanto do tipo flutuante
a Orion trabalha com valores de ponto flutuante mas é exibido valores inteiros quando
está > 10 e > -10.
*/
Firebase.setInt(firebaseData, path + "temp_out", temp); // Atribui o valor de temp a temp
Firebase.setInt(firebaseData, path + "hum_out", hum);
Firebase.setInt(firebaseData, path + "wind", wind);
Firebase.setInt(firebaseData, path + "wd", wd);
Firebase.setInt(firebaseData, path + "bar", bar);
Firebase.setInt(firebaseData, path + "pluv", pluv);
Firebase.setInt(firebaseData, path + "uv", uv);
/*
Todas as variaveis acima por mais que você não tenha, devaram ser enviados com valor
ZERO e desativados nas configurações do software Orion.
Saiba mais em: https://elcereza.com/settings-sorion/
*/
delay(1000); // Esse atraso é fundamental e não deve passar dos 1s
}