256dpi / arduino-mqtt

MQTT library for Arduino
MIT License
1.03k stars 237 forks source link

Nothing ever received #330

Open rwb196884 opened 3 months ago

rwb196884 commented 3 months ago

I'm using an Arduino nano with an ESP8266 for wifi which I have working for other WiFi projects and I'm trying to subscribe to my mqtt broker on Debian 12 and receive messages.

I never receive anything.

#include <SoftwareSerial.h>
#include <WiFiEsp.h>
#include <MQTT.h> // MQTT by Joel Gaehwiler

// ESP8266 wifi board things.
#define RX 6 // blue
#define TX 7 // black
SoftwareSerial Esp8266(RX, TX);
const char AP[] = "ap";
const char PASS[] = "secret";
WiFiEspClient wifi_client;

// mqtt things.
MQTTClient  mqtt_client;

void setup() {
   pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(9600);
  Esp8266.begin(9600);
  WiFi.init(&Esp8266);

  // Check for the presence of the shield.
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    while (true);
  }

  mqtt_client.begin("192.168.0.113", wifi_client);
  mqtt_client.onMessage(messageReceived);
  reconnect();
}

void loop() {
  if( !mqtt_client.connected()) { reconnect(); }
  mqtt_client.loop();
}

void reconnect() {
  while ( WiFi.status() != WL_CONNECTED) {
    Serial.print("Attempting to connect to WPA SSID: ");
    Serial.println(AP);
    WiFi.begin(AP, PASS);
  }
  Serial.println("WIFI connected.");

  while (!mqtt_client.connect("arduino")) {
    Serial.print(".");
    delay(1000);
  }
  Serial.println("MQTT connected.");

  mqtt_client.subscribe("zigbee2mqtt/Home/BoilerFlow");
}

void messageReceived(String &topic, String &payload) {
  Serial.println("mqtt_client.messageReceived: " + topic + " - " + payload);
}

Any ideas?

(PubSubClient doesn't work either and is dead and ArduinoMqttClient won't even connect to the broker; this is my third attempt.)

256dpi commented 3 months ago

From a quick glance I can only imagine that the data is published to "/zigbe2mqtt..." and the subscription is on "zigbee2mqtt..." (note the missing slash at the beginning)? In MQTT the slash at the beginning matters on most brokers.

rwb196884 commented 1 month ago

Leading slash makes no difference. Same problem on ESP32: nothing ever received.

ForrestErickson commented 1 month ago

When experimenting with MQTT I like to have a Processing program also working with MQTT. Here is a link to something I wrote to do so for a bunch of ESP32 assemblies.

https://github.com/nk25719/PMD___aka-KiCad-esp32-6leds-2switches-1pj-circuit-/tree/main/FactoryTest/FT_MQTT/FT_processingPMD_MQTT

You will have to code in your topic to publish and subscribe.

You look in the console window of the IDE for messsages. image Make the Processing draw window selected and then press digits to send a simple MQTT message. image

Hope this helps.