Conectar a estação Meteorológica com a Orion

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
}

Deixe uma resposta