Ol'a pessoal ,
Alguem tem o fonte com a bibioteca para publicar na plataforma Ubidots?
Tenho somente para o ESP8266 porem para o ESP32 , tem o erro de compilacao da Biblioteca 8266 para o ESP32.
Grato,
Alessandro.
MQTT para Publish na Ubidots (Cloud)
-
- Experiente
- Mensagens: 41
- Registrado em: 05/Jun/2018, 15:52
Re: MQTT para Publish na Ubidots (Cloud)
Olá aledaluz. Tente este exemplo aqui, compilei para o ESP32 e deu certo:
//INÍCIO DO CÓDIGO
// Exemplo de publish mqtt com ESP32 utilizando rede Wifi
#include <WiFi.h>
#include <PubSubClient.h>
const char* ssid = "SSID";
const char* password = "PASSWORD";
const char* mqtt_server = "mqtt://things.ubidots.com";
//ID do dispositivo, obtido pelo Ubidots
const String DEVICE_ID = "-";
//Token, obtido pelo Ubidots
const String TOKEN = "-";
const int TEMPO_RECONEXAO = 2000; //intervalo de tempo que a conexão é verificada e re-estabelecida (2 segundos)
int millisReferencia = 0; //variavel usada pela funcao timeout
bool contandoTempo = false; //variavel usada pela funcao timeout
#define mqtt_port 1883 //Porta padrão
#define MQTT_USER "username"
#define MQTT_PASSWORD ""
#define MQTT_PUBLISH_TOPIC " /v1.6/devices/{LABEL_OF_DEVICE}/{LABEL_OF_VARIABLE}" //topico aonde as publicações mqtt serão feitas
WiFiClient wifiClient;
PubSubClient client(wifiClient);
void setup_wifi()
{
delay(10);
// Conecta na rede wifi
Serial.println();
Serial.print("Conectando a ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
// Exibe o IP utilizado pelo ESP32
Serial.println("");
Serial.println("WiFi conectado");
Serial.println("IP: ");
Serial.println(WiFi.localIP());
}
void reconectar()
{
if(!client.connected())
{
Serial.print("Conectando MQTT... ");
if(client.connect(DEVICE_ID.c_str(), TOKEN.c_str(), MQTT_PASSWORD)) //importante: no ubidots o password (MQTT_PASSWORD) deve estar vazio, o que servirá de password é o TOKEN
Serial.println(" OK");
else
Serial.println(" Falhou");
}
}
void setup()
{
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
reconectar();
}
//Função que compara se o tempo foi atingido
bool timeoutVerificacaoCon(const int TEMPO, int *millisReferencia, bool *contandoTempo)
{
if(*contandoTempo)
{
*millisReferencia = millis();
*contandoTempo = false;
}
if((*millisReferencia + TEMPO) < millis())
{
*contandoTempo = true;
return true;
}
return false;
}
void loop()
{
String exemploJson = " {\"location\": {\"value\":1, \"context\":{\"lat\":-22.999999, \"lgn\": -51.999999}}}";
if(timeoutVerificacaoCon(TEMPO_RECONEXAO, &millisReferencia, &contandoTempo))
reconectar();
//publica mensagem a cada 3 segundos
client.publish(MQTT_PUBLISH_TOPIC, exemploJson.c_str());
delay(3000);
}
//FIM DO CÓDIGO
Utilizei esta biblioteca: https://github.com/knolleary/pubsubclient
E como referência: http://icircuit.net/arduino-esp32-home- ... -mqtt/2272
Também tive problemas de compilação ao utilizar os exemplos prontos desta lib do github acima, provavelmente é por causa dos include de Ethernet.h. Não sei se este é o mesmo problema que o seu.
//INÍCIO DO CÓDIGO
// Exemplo de publish mqtt com ESP32 utilizando rede Wifi
#include <WiFi.h>
#include <PubSubClient.h>
const char* ssid = "SSID";
const char* password = "PASSWORD";
const char* mqtt_server = "mqtt://things.ubidots.com";
//ID do dispositivo, obtido pelo Ubidots
const String DEVICE_ID = "-";
//Token, obtido pelo Ubidots
const String TOKEN = "-";
const int TEMPO_RECONEXAO = 2000; //intervalo de tempo que a conexão é verificada e re-estabelecida (2 segundos)
int millisReferencia = 0; //variavel usada pela funcao timeout
bool contandoTempo = false; //variavel usada pela funcao timeout
#define mqtt_port 1883 //Porta padrão
#define MQTT_USER "username"
#define MQTT_PASSWORD ""
#define MQTT_PUBLISH_TOPIC " /v1.6/devices/{LABEL_OF_DEVICE}/{LABEL_OF_VARIABLE}" //topico aonde as publicações mqtt serão feitas
WiFiClient wifiClient;
PubSubClient client(wifiClient);
void setup_wifi()
{
delay(10);
// Conecta na rede wifi
Serial.println();
Serial.print("Conectando a ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
// Exibe o IP utilizado pelo ESP32
Serial.println("");
Serial.println("WiFi conectado");
Serial.println("IP: ");
Serial.println(WiFi.localIP());
}
void reconectar()
{
if(!client.connected())
{
Serial.print("Conectando MQTT... ");
if(client.connect(DEVICE_ID.c_str(), TOKEN.c_str(), MQTT_PASSWORD)) //importante: no ubidots o password (MQTT_PASSWORD) deve estar vazio, o que servirá de password é o TOKEN
Serial.println(" OK");
else
Serial.println(" Falhou");
}
}
void setup()
{
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
reconectar();
}
//Função que compara se o tempo foi atingido
bool timeoutVerificacaoCon(const int TEMPO, int *millisReferencia, bool *contandoTempo)
{
if(*contandoTempo)
{
*millisReferencia = millis();
*contandoTempo = false;
}
if((*millisReferencia + TEMPO) < millis())
{
*contandoTempo = true;
return true;
}
return false;
}
void loop()
{
String exemploJson = " {\"location\": {\"value\":1, \"context\":{\"lat\":-22.999999, \"lgn\": -51.999999}}}";
if(timeoutVerificacaoCon(TEMPO_RECONEXAO, &millisReferencia, &contandoTempo))
reconectar();
//publica mensagem a cada 3 segundos
client.publish(MQTT_PUBLISH_TOPIC, exemploJson.c_str());
delay(3000);
}
//FIM DO CÓDIGO
Utilizei esta biblioteca: https://github.com/knolleary/pubsubclient
E como referência: http://icircuit.net/arduino-esp32-home- ... -mqtt/2272
Também tive problemas de compilação ao utilizar os exemplos prontos desta lib do github acima, provavelmente é por causa dos include de Ethernet.h. Não sei se este é o mesmo problema que o seu.