Open Server

Para usar o servidor é necessario um cadastro, o servidor nao aceita conexao anonima.

1. Preencher um cadastro de usuario.

É preciso fazer um cadastro basico, escolher um usuario e senha. Sem ele, voce nao consegue publicar topicos e msg. Basta entrar em cadastro.vault54.link e preencher a ficha.

Usuario e senha, e de sua responsabilidade, nao da pra recuperar. Entao guarde com cuidado.

2. Conectar no servidor

A biblioteca disponivel ja vem toda configurada, basta colocar os dad , sem se preocupar com configuraçoes, basta colocar usuario e senha

Autenticação e conexão simples

  • MQTTX o app windows, simples e pratico, para testar a conexao. E entender como e a troca de mensagens.
  • Lua Você precisa ter o luarocks instalado,
  • Ecosistema Arduino a biblioteca pubsubclient da conta do recado.

A integração é simples, o serço se encarrega de tudo. De PIC a X86, a troca de menssagem é simples e transparente. Abaixo um codigo de exemplo.

A integração é simples, o serço se encarrega de tudo. De PIC a X86, a troca de menssagem é simples e transparente. Abaixo um codigo de exemplo.

//Bibliotecas

#include <WiFiManager.h>
#include <strings_en.h>
#include <wm_consts_en.h>
#include <wm_strings_en.h>
#include <wm_strings_es.h>
#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include <math.h>

//Configuraçoes
char open_server[40] = "vault54.freeddns.org";                  // Endereço do servidor 
char meu_usuario[40] = "Seu-Usuario";                                 // Usuário do servidor
char minha_senha[40] = "Sua-Senha";                         // Senha do servidor

/*Topicos de mensagem 1, criar um pra cada topico. Para criar subtopico, so colocar barra "/". 
Exemplo de uma casa, e na casa 1 quarto, e no quarto 1 lampada e uma TV;

char Casa[40] = "Casa/Quarto/lampada";
char Casa[40] = "Casa/Quarto/TV";
*/
char Topico1[40] = "Topico 1";                 // Topico de mensagem 1, criar um pra cada topico

/*Variaveis que podem ser publicadas, voce pode publicar qualquer coisa*/
float NumeroQuebrado;
int NumeroInteiro;
String Palavra = "Suapalavra";




// --- Objetos de Conexão, ja esta configurado---
WiFiClient espClient;
PubSubClient client(espClient);



// Função para publicar mensagens, é ela que  conecta e guarda o dado
void Publicar(const char* topico, const char* mensagem) {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();
  client.publish(topico, mensagem);
  Serial.print("Publicado no topico '");
  Serial.print(topico);
  Serial.print("': ");
  Serial.println(mensagem);
  delay(1000);
}


// Função para reconectar ao Open-Server
void reconnect() {
  while (!client.connected()) {
    Serial.print("Tentando conectar ao Open-Server...");
    if (client.connect("ESP32Client", meu_usuario, minha_senha)) {
      Serial.println("Conectado!");
      delay(2000);
    } else {
      Serial.print("Falha na conexao, rc=");
      Serial.print(client.state());
      Serial.println(" Nova tentativa em 5s");
      delay(5000);
    }
  }
}

// Converte o dado Float e enviar publicar
void EnviarNumeroQuebrado(const char* topico, const char* chave, float valor) {
  // Cria um documento JSON temporário
  StaticJsonDocument<50> doc;

  // Adiciona a chave e o valor
  doc[chave] = valor;

  // Cria um buffer para a string JSON
  char bufferJson[150];

  // Serializa o documento para o buffer, com a precisão de casas decimais
  serializeJson(doc, bufferJson);

  // Chama a sua função de publicação
  Publicar(topico, bufferJson);
}

void EnviarNumeroInteiro(const char* topico, const char* chave, int valor) {
  // Cria um documento JSON temporário
  StaticJsonDocument<50> doc;

  // Adiciona a chave e o valor
  doc[chave] = valor;

  // Cria um buffer para a string JSON
  char bufferJson[150];

  // Serializa o documento para o buffer, com a precisão de casas decimais
  serializeJson(doc, bufferJson);

  // Chama a sua função de publicação
  Publicar(topico, bufferJson);
}


float arredondar(float valor, int casasDecimais) {
  float multiplicador = pow(10.0, casasDecimais);
  return roundf(valor * multiplicador) / multiplicador;
}


void setup() {
  // WifiManager
  Serial.begin(115200);
  client.setServer(open_server, 1883);
  delay(3000);
  WiFiManager wm;
  bool res;
  // res = wm.autoConnect(); // auto generated AP name from chipid
  // res = wm.autoConnect("AutoConnectAP"); // anonymous ap
  res = wm.autoConnect("AutoConnectAP", "password");  // password protected ap
  if (!res) {
    Serial.println("Failed to connect");
    // ESP.restart();
  } else {
    Serial.println("connected...yeey :)");
  }
  Serial.println(WiFi.localIP());
  delay(5000);
}



void loop() {
/* Chama o serviço de publicar numero quebrado, ajustando os dados para serem armazenado.
Pega o Topico1, fala que é o numero quebrado que vai ser publicado, e "arredondar(NumeroQuebrado, 1)", 
ele pega o NumeroQuebrado e arredonda pra 1 casa depois da virgula, se colocar 2, duas casas, e assim por diante.
*/
  EnviarNumeroQuebrado(Topico1, "NumeroQuebrado", arredondar(NumeroQuebrado, 1)); 

  //O mesmo, mas para Numero Inteiro
  EnviarNumeroInteiro(Topico1, "NumeroInteiro",NumeroInteiro);

  //Para Palavras é o mesmo, mas so publicar direto
  Publicar(Topico1,Palavra);
  
  client.loop();
}

3. DashBoard

No dashboard, é possivel customizar toda telemetria dos dispositivos, verificar em tempo real. Customizar graficos, verificar qualidade dos dados, planejar açoes, etc

Wiki

Copyright © Your name