MQTT para Publish na Ubidots (Cloud)

Projetos de ESP32
aledaluz
Novato
Mensagens: 1
Registrado em: 27/Jul/2018, 01:46

MQTT para Publish na Ubidots (Cloud)

Mensagem por aledaluz » 10/Out/2018, 03:04

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.

GabrielMajaron
Experiente
Mensagens: 41
Registrado em: 05/Jun/2018, 15:52

Re: MQTT para Publish na Ubidots (Cloud)

Mensagem por GabrielMajaron » 10/Out/2018, 13:17

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.

Responder