Hola, la cosa es que quiero tener una placa esp8266 subscrita a dos tópicos en un servidor MQTT, esta de miedo esto, ya no logro que rule, lo de risa es que paralelamente tengo otra placa subscrita a 4 tópicos y todo como la seda, pero esta ni atrás ni adelante.
El error que me muestra es que a pesar de estar escuchando un tópico x, en pantalla me muestra alternadamente los payloads de todos los tópicos a los que esta subscritos.
Aquí les dejo el código de ejemplo:
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
WiFiClient espClient;
PubSubClient client(espClient);
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET 1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const char* wifi_ssid = "ssid";
const char* wifi_password = "password";
const char* mqtt_server = "x.x.x.x";
const int mqtt_port = 1883;
const char* mqtt_uid = "sw_cuarto_T1";
const char* mqtt_user = "user";
const char* mqtt_pass = "password";
char* temp_cuarto, temp_ext;
void setup_wifi() {//Conectar a la red wifi
delay(200);
WiFi.setPhyMode(WIFI_PHY_MODE_11G);
WiFi.mode(WIFI_STA);
WiFi.begin(wifi_ssid, wifi_password);
while (WiFi.status() != WL_CONNECTED)
{
delay(200);
}
}
void reconnect() {//Conectar al servidor mqtt
while (!client.connected()) {
if (client.connect(mqtt_uid, mqtt_user, mqtt_pass )) {
client.subscribe("casa/micuarto/temp");
client.subscribe("casa/exterior/temp");
} else {
delay(200);
}
}
}
void callback(char* topic, byte* payload, unsigned int length) {
payload[length] = '\0';
String strTopic = String((char*)topic);
if (strTopic == "casa/micuarto/temp") { /////Aquí está capturando solo un tópico
temp_cuarto = (char*)payload;
}
}
void setup() {
Wire.begin(0, 2);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
delay(100);
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
delay(1000);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 10);
display.print(temp_cuarto); //Aquí solo le pido que muestre el resultado de la captura del tópico
//pero no hay manera me muestra los dos valores temp_cuarto y
//temp_ext
display.display();
delay(1000);
}
pues nada ya tengo la vista agotada, estoy por cambiar la esp8266, por probar, lo jodido es que tengo otra rulando perfect subscrita a 4 tópicos.