Página 1 de 1

Erro ao conectar no Firebase com ESP8266 - ESP01

Enviado: 23/Dez/2020, 15:19
por marcelouff
Galera, boa tarde!

Segui o tutorial do video "IOT mais barata do mundo com ESP8266": https://www.youtube.com/watch?v=3hxUN69iyL8

Compilei de boa, e fiz o upload pro esp8266. Mas ao rodar, apresenta o erro "streaming error", e fica travado nisso.

Eu conferi e os dados de conecao e autenticacao no firebase estao certinhos, tanto é que eu rodei o exemplo de coneccao da propria lib que o Fernando indicou, e eu consegui conectar e alterar o status la no firebase!
https://github.com/FirebaseExtended/fir ... mo_ESP8266

No video, o Fernando comentou que iria disponibilizar a versão portable com tudo configurado, mas nao achei o link...

Estou seguindo todas as orientacoes do video, com as bibliotecas informadas que devo usar, mas nada.. To travado.

Se alguem conseguir me ajudar, agradeço!!!

Segue o fonte, com minimas alteracoes:

Código: Selecionar todos


// Biblioteca com as funções de WiFi
#include <ESP8266WiFi.h>
// Biblioteca do Firebase
#include <FirebaseArduino.h> // IMPORTANTE: Utilize a versão disponível para download, outras versões não funcionarão.

// Dados da rede WiFi
#define WIFI_SSID "HOME" // Nome da rede
#define WIFI_PASSWORD "12345" // Senha da rede
// adm: wruphe6a

#define FIREBASE_HOST "blablabla123.firebaseio.com" // FAKE
#define FIREBASE_AUTH "wxFg2npWsGQ3OXCvRuRNeWzhNiAjweYMTXyjSk6C" // FAKE

// Local do firebase onde executaremos os comandos
const String PATH_COMMANDS = "/Commands";

const int rele1 = 0;

// Função que conecta o WiFi utilizando os dados de ssid e senha informados anteriormente
void wifiConnect()
{
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);

  Serial.print("Conectando WiFi");

  while (WiFi.status() != WL_CONNECTED)
  {
    Serial.print(".");
    delay(1000);
  }
  Serial.println('\nConectado');
}

void setup()
{
  // Iniciamos a serial com velocidade de 115200 bps (baud)
  Serial.begin(115200);

  // Configuramos os pinos dos relés como saída
  pinMode(rele1, OUTPUT);


  // Iniciamos com os relés desligados
  digitalWrite(rele1, HIGH);


  // Conectamos na rede WiFi
  wifiConnect();

  // Iniciamos o Firebase
  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);

  // Iniciamos o stream (monitoramento de eventos do Firebase)
  Firebase.stream(PATH_COMMANDS);

  // Se ocorrou um erro exibimos na serial
  if (Firebase.failed())
  {
    Serial.println("streaming error");
    Serial.println(Firebase.error());
  }
  else // Se obteve sucesso exibimos "OK"
    Serial.println("OK");
}

// Função que executa comandos (ativar ou desativar relé)
// cmd: /Rele1, /Rele2 ou /Rele3
// valor: ON ou OFF
void executeCommand(String cmd, String valor)
{
  // Debug...
  Serial.println("[executeCommand] path: " + cmd);
  Serial.println("[executeCommand] valor: " + valor);

  // Ativamos ou desativamos o respectivo relé com seu respectivo valor
  // Relé 1
  if (cmd.equalsIgnoreCase("/RELE1"))
    valor.equalsIgnoreCase("ON") ? digitalWrite(rele1, LOW) : digitalWrite(rele1, HIGH);
}

// Função que sincroniza os relés com os dados atuais do Firebase
// Ou seja, ativa ou desativa os relés de acordo com os valores "ON/OFF" que estão no Firebase
void syncFirebase(JsonObject& valores)
{
  // Debug...
  Serial.println("[syncFirebase]");
  Serial.println(valores["Rele1"].asString());

  // Ativamos ou desativamos o respectivo relé com seu respectivo valor
  // Relé 1
  String(valores["Rele1"].asString()).equalsIgnoreCase("ON") ? digitalWrite(rele1, LOW) : digitalWrite(rele1, HIGH);
}


void loop()
{
  // Se o WiFi se desconectou, tentamos reconectar
  if (!WiFi.isConnected())
  {
    Serial.println("Desconectado, reconectando...");
    WiFi.reconnect();
  }

  // Se ocorrou algum erro no streaming
  if (Firebase.failed())
  {
    // Exibimos o erro
    Serial.println("Streaming error");
    Serial.println(Firebase.error());
    // Não executamos nada abaixo até que o streaming volte a funcionar
    return;
  }

  // Se existem dados disponíveis no stream
  if (Firebase.available())
  {
    String type, event;

    // Efetuamos a leitura do evento
    if (!Firebase.readEvent2(&type, &event))
    {
      // Se aconteceu algum erro abortamos os próximos passos
      Serial.println("Erro ao ler evento");
      return;
    }

    // Debug...
    Serial.println("Event->" + event);
    Serial.println("Type->" + type);

    // Se for um evento "keep-alive" ignoramos os próximos passos
    // Esta mensagem é enviada pelo Firebase de tempo em tempo automaticamente
    if (event.equalsIgnoreCase("keep-alive") || type == NULL)
    {
      Serial.println("Evento keep-alive [ignorado]");
      return;
    }

    // Se for um evento "put" (envio)
    if (event.equalsIgnoreCase("put"))
    {
      // path: / ou /Commands -> Local onde o evento ocorreu
      // value: /Rele1, /Rele2... -> Variável que foi atualizada
      String path, value;

      // Criamos um buffer com 256 bytes
      StaticJsonBuffer<256> jsonBuffer;
      // Efetuamos um parser no json "type" construindo um objeto json
      JsonObject& obj = jsonBuffer.parseObject(type.c_str());

      // Atribuímos o valor de "path" na nossa variável
      path = obj["path"].asString();

      // Se o path for a raiz significa que é o primeiro envio de mensagem efetuado pelo Firebase após o ESP iniciar
      // Para motivos de sincronização
      if (path == "/")
      {
        // Enviamos os dados para nossa função de sincronização
        syncFirebase(obj["data"]);
      }
      else // Se o path não for a raiz
      {
        // Obtemos o valor e atribuímos para nossa variável
        value = obj["data"].asString();
        // Enviamos o path (caminho) e a variável para a função que executará os respectivos comandos
        executeCommand(path, value);
      }
    }
    // Limpamos os buffers
    type = event = "";
  }
}