Forum: Haus & Smart Home Mqtt, IObroker und NodeMCU


von Henrx (Gast)


Lesenswert?

Hey liebe Community,

da nach langer Suche im Internet auf die Lösung volle Verzweiflung 
folgte habe ich mich entschieden bei euch mal nach zu fragen.



Ich wollte ganz gerne mal Testweise zum üben mit einem nodeMCU also 
ESP8266, Mqtt und IObroker als Broker/Server die Onboard LED des nodemcu 
über den Adapter Vis beschalten.



Ich habe auch in der Visualisierung dem Button die Variable vergeben. 
Und mit dem seriellen Monitor sehe ich ja auch das die payload true 
schreibt wenn ich den Button in der Visu drücke.

Die onboard led ist auch ok das habe ich extra getestet.


Könnt ihr mir sagen wo der Fehler ist?


Mit folgendem Beispielcode:
1
#include <ESP8266WiFi.h>
2
#include <PubSubClient.h>
3
4
// Update these with values suitable for your network.
5
6
const char* ssid = "ssid";
7
const char* password = "wlanpasswort";
8
const char* mqtt_server = "192.168.xxx.xxx";
9
10
WiFiClient espClient;
11
PubSubClient client(espClient);
12
long lastMsg = 0;
13
char msg[50];
14
int value = 0;
15
16
void setup_wifi() {
17
18
  delay(10);
19
  // We start by connecting to a WiFi network
20
  Serial.println();
21
  Serial.print("Connecting to ");
22
  Serial.println(ssid);
23
24
  WiFi.begin(ssid, password);
25
26
  while (WiFi.status() != WL_CONNECTED) {
27
    for(int i = 0; i<500; i++){
28
      delay(1);
29
    }
30
    Serial.print(".");
31
  }
32
33
  Serial.println("");
34
  Serial.println("WiFi connected");
35
  Serial.println("IP address: ");
36
  Serial.println(WiFi.localIP());
37
}
38
39
void callback(char* topic, byte* payload, unsigned int length) {
40
  Serial.print("Message arrived [");
41
  Serial.print(topic);
42
  Serial.print("] ");
43
  for (int i = 0; i < length; i++) {
44
    Serial.print((char)payload[i]);
45
  }
46
  Serial.println();
47
  // Switch on the LED if an 1 was received as first character
48
  if ((char)payload[0] == '1') {
49
    digitalWrite(BUILTIN_LED, LOW);   // Turn the LED on (Note that LOW is the voltage level
50
    // but actually the LED is on; this is because
51
    // it is acive low on the ESP-01)
52
  } else {
53
    digitalWrite(BUILTIN_LED, HIGH);  // Turn the LED off by making the voltage HIGH
54
   
55
  }
56
57
}
58
59
void reconnect() {
60
  // Loop until we're reconnected
61
  while (!client.connected()) {
62
    Serial.print("Attempting MQTT connection...");
63
    // Attempt to connect
64
    if (client.connect("ESP8266_Taster")) {
65
      Serial.println("connected");
66
      // Once connected, publish an announcement...
67
      client.publish("(outTopic)debug","ESP8266 subscriber connected.");
68
      // ... and resubscribe
69
      client.subscribe("(inTopic)Variable der Led");
70
    }
71
    else {
72
      Serial.print("failed, rc=");
73
      Serial.print(client.state());
74
      Serial.println(" versuche nochmal in 5 seconds");
75
      // Wait 5 seconds before retrying
76
      for(int i = 0; i<5000; i++){
77
        delay(1);
78
      }
79
    }
80
  }
81
}
82
83
84
void setup() {
85
  pinMode(BUILTIN_LED, OUTPUT);     // Initialize the BUILTIN_LED pin as an output
86
  Serial.begin(115200);
87
  setup_wifi();
88
  client.setServer(mqtt_server, 1883);
89
  client.setCallback(callback);
90
}
91
void loop() {
92
93
  if (!client.connected()) {
94
    reconnect();
95
  }
96
  client.loop();
97
long now = millis();
98
  if (now - lastMsg > 2000) {
99
    lastMsg = now;
100
    ++value;
101
    snprintf (msg, 75, "hello world#%ld", value);
102
    //Serial.print("Publish message: ");
103
   // Serial.println(msg);
104
    //client.publish("Led ist an", msg);
105
  }
106
107
  }

von Michael U. (amiga)


Lesenswert?

Hallo,

Deine Abfrage testet, ob das erste Zeichen des payload eine 1 als Text 
ist.

wenn Dein payload in der seriellen "true" meldet, schickst Du wohl den 
falschen Text.

Installier Dir mqtt.fx auf dem Rechner, connecte zu Deinem Broker und 
sende den Kram selbst, dann siehst Du ja, ob beim Senden einer "1" an 
den topic "(inTopic)Variable der Led" auch eine 1 ankommt.

Wenn Deine NodeMCU der einzige MQTT-Client in Deinem Netz ist, dann 
subscribe # im mqtt.fx, dann solltest Du beim Connect auch die Meldung 
von der NoedeMCU zu sehen bekommen. Sich schickt ja den topic
(outTopic)debug
mit Inhalt
ESP8266 subscriber connected.
an den Broker.

PS: wer kommt auf solche topic-Namen?

Gruß aus Berlin
Michael

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.