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 = "";
}
}