Arduino mit ESP8266 und MQTT - Netzwerkfehler warum?

#6480574
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?
#6480606
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?
Gast #6480911
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.
#6480958
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren