Forum: Compiler & IDEs Arduino mit ESP8266 und MQTT - Netzwerkfehler warum?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Rainer U. (r-u)


Lesenswert?

Liebe alle,

ich habe gerade einen ESP8266 D1 mini zum Basteln hier, und auf einem 
Laptop habe ich mosquitto installiert. Mosquitto selbst funktioniert auf 
dem Laptop und benötigt keine Authentifizierung, also ich kann in einem 
Fenster
1
mosquitto_pub -h localhost -t test -m "bin allhier"
schreiben, und in einem anderen Fenster, wo ich das topic subscribed 
habe mit
1
mosquitto_sub -h localhost -t test
Kommt dieser Text auch an.

Nun möchte ich mich gerne vom ESP8266 im gleichen Netzwerk aus an diesem 
Mosquitto verbinden, aber das gelingt nicht (Fehler -2). Warum nicht / 
hat jemand Ideen? Firewall ist aus, die WiFi-Verbindung funktioniert 
sofort.. wenn ich mosquitto -v auf dem Laptop laufen lasse, kommt nichts 
an.  Testprogramm:
1
#include <ESP8266WiFi.h>
2
#include <PubSubClient.h>
3
 
4
const char* ssid = "meine_ssid"; // Enter your WiFi name
5
const char* password =  "mein_passwort"; // Enter WiFi password
6
const char* mqttServer = "192.168.178.114";
7
const int mqttPort = 1883;
8
const char* mqttUser = "";
9
const char* mqttPassword = "";
10
 
11
WiFiClient espClient;
12
PubSubClient client(espClient);
13
 
14
void setup() {
15
 
16
  Serial.begin(115200);
17
 
18
  WiFi.begin(ssid, password);
19
  while (WiFi.status() != WL_CONNECTED) {
20
    delay(500);
21
    Serial.println("Connecting to WiFi..");
22
  }
23
  Serial.println("Connected to the WiFi network");
24
  Serial.println('\n');
25
  Serial.print("IP address:\t");
26
  Serial.println(WiFi.localIP()); 
27
 
28
  client.setServer(mqttServer, mqttPort);
29
  client.setCallback(callback);
30
 
31
  while (!client.connected()) {
32
    Serial.println("Connecting to MQTT...");
33
 
34
    if (client.connect("ESP8266Client", mqttUser, mqttPassword )) {
35
 
36
      Serial.println("connected");  
37
 
38
    } else {
39
 
40
      Serial.print("failed with state ");
41
      Serial.print(client.state());
42
      delay(2000);
43
 
44
    }
45
  }
46
...

Hab ich das mit dem Mosquitto client und -Broker falsch verstanden?

von kast (Gast)


Lesenswert?

if (client.connect("ESP8266Client")

von Rainer U. (r-u)


Lesenswert?

kast schrieb:
> if (client.connect("ESP8266Client")

Hatte ich auch schon probiert, hilft nicht, gleiches Ergebnis:
1
Connecting to WiFi..
2
Connected to the WiFi network
3
4
5
IP address:  192.168.178.49
6
Connecting to MQTT...
7
failed with state -2Connecting to MQTT...
8
failed with state -2Connecting to MQTT...
9
failed with state -2Connecting to MQTT...
10
failed with state -2Connecting to MQTT...

Kann das jemand nachvollziehen?

von Klaus (Gast)


Lesenswert?

Rainer U. schrieb:
> mosquitto_sub -h localhost

Ich vermute es liegt an localhost.
Gib mal am Notebook die IP des Servers an.

von Rainer U. (r-u)


Lesenswert?

Klaus schrieb:
> Gib mal am Notebook die IP des Servers an.

Auf dem Laptop funktioniert es ja.. Welchen Server meinst Du?

von Klaus (Gast)


Lesenswert?

Localhost lässt nur Verbindungen innerhalb des Computers zu.
Daher können 2 Prozesse auf deinem Notebook miteinander kommunizieren.
Localhost ist normalerweise so konfiguriert dass die IP4 Adresse 
127.0.0.1 genutzt wird.
Die ist nur intern in deinem Computer sichtbar.

Du must beim Mosquitto Aufruf eine von außen zugreifbare IP Adresse 
angeben.

von Klaus (Gast)


Lesenswert?

Prüf mal in der mosquitto.conf die Parameter
* bind_address address
* bind_interface device

von Rainer U. (r-u)


Lesenswert?

Klaus schrieb:
> Du must beim Mosquitto Aufruf eine von außen zugreifbare IP Adresse
> angeben

Ah ok, jetzt habe ich verstanden, was Du meinst. Das werde ich 
probieren.

von Joachim S. (oyo)


Lesenswert?

Probier doch mal, ob der Fehler mglw. damit zusammen hängt:
https://github.com/knolleary/pubsubclient/issues/138#issuecomment-326113915
(Kurz zusammengefasst: Vor "WiFi.begin()" noch ein 
"WiFi.mode(WIFI_STA);" einfügen.)

Wenn Du eh Arduino verwendest, würde ich an Deiner Stelle übrigens erst 
einmal kurz einen der PubSubClient-Beispiel-Sketche verwenden, und 
lediglich die entsprechenden Parameter (WiFi-Passwort, IP-Adresse des 
Brokers etc.) ändern. Bei diesen mitgelieferten Sketchen weisst Du, dass 
sie funktionieren sollten, und kannst so schnell eingrenzen, ob das 
Problem nun an Deinem Code oder am MQTT-Broker liegt.

von Klaus (Gast)


Lesenswert?

Alternativ nutz mal testweise einen anderen Client:
anderer PC oder Smartphone mit MQTT Client App.
Dann kannst Du den Fehler besser einkreisen.

von Rainer U. (r-u)


Lesenswert?

Klaus schrieb:
> bind_address address

Treffer!

bind_address <die_IP_vom_Laptop>

hat ausgereicht. Ist etwas seltsam, weil in der Muster- mosquitto.conf 
drinsteht, dass er ohne diesen Eintrag auf alle interfaces hört, naja.

Aber jetzt geht alles. Danke!

von Klaus (Gast)


Lesenswert?

Freut mich.

Der Kommentar hat mich auch gewundert. Vielleicht wurde das Verhalten 
aus Security gründen geändert und die Doku nicht nachgezogen...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.