INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Wo MQTT LogIn Daten einfügen?
26.12.2020, 19:37
Beitrag #1
Wo MQTT LogIn Daten einfügen?
Moin,

Vieleicht kann mir jemand mal auf die Sprünge helfen.
Mithilfe eines Tutorials https://randomnerdtutorials.com/esp32-mq...duino-ide/
versuche ich einen BME280 am ESP32 zum laufen zu bekommen:
WIFI Verbindung klappt, der Sensor wird gefunden, das Problem dabei ist die Verbindung zum MQTT Server. Das/Der/Die (?) Sketch stellt "nur" eine Verbindung zu einem Server ohne Usernamen / PWD her. Mein Mosquitto läuft aber mit Usernamen / PWD !

"Oben" in den Konstanten(?) habe ich zur MQTT IP Adresses noch
Code:
const char* mqttUser = "mein_geheimer_name";
const char* mqttPassword = "mein_geheimes_pwd";

aus einem anderen, laufenden Sketch hinzugefügt. Nur wo soll ich sie im "void setup()" eintragen?

Ergänze ich in Zeile 58 "client.setServer(mqtt_server, mqttPort );" zu " client.setServer(mqtt_server, mqttPort, mqttUser, mqttPassword );" Erhalte ich eine Fehlermeldung:
Code:
Mehrere Bibliotheken wurden für "WiFi.h" gefunden
Benutzt: C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\librar​ies\WiFi
Nicht benutzt: C:\Program Files (x86)\Arduino\libraries\WiFi
exit status 1
no matching function for call to 'PubSubClient::setServer(const char*&, const int&, const char*&, const char*&)'

Allerdings muss ich sagen das in meinem funtkionierenden "MQTT Sketch" der Usernamen / PWD Eintrag etwas anders aussieht, nur haben meine "Einfügeversuche" zu nichts geführt Huh :
Code:
if (client.connect("ESP32Client", mqttUser, mqttPassword )) {
Serial.println("connected");

Ich sehe wirklich noch nicht durch in der Programmstruktur,z.B. warum in Zeile 58 die MQTT Sachen stehen aber erst in Zeile 72 die WIFI Einträge... Aber das nur nebenbei, erst mal will ich die Verbindung zum MQTT Server herstellen...

Ich hänge mal alles mit ran und hoffe es ist nicht zu unübersichtlich.

Danke und einen schönen Abend noch...

Code:
/*********
  Rui Santos
  Complete project details at https://randomnerdtutorials.com  
*********/

#include <WiFi.h>
#include <PubSubClient.h>
#include <Wire.h>
#include <Adafruit_BME280.h>
#include <Adafruit_Sensor.h>

// Replace the next variables with your SSID/Password combination
const char* ssid = "der_router";
const char* password = "das_router_pwd";

// Add your MQTT Broker IP address, example:
const char* mqtt_server = "192.168.xxx.xx";
const int mqttPort = 1883;
const char* mqttUser = "mein_geheimer_name";
const char* mqttPassword = "mein_geheimes_pwd";

WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;

//uncomment the following lines if you're using SPI
/*#include <SPI.h>
#define BME_SCK 18
#define BME_MISO 19
#define BME_MOSI 23
#define BME_CS 5*/

Adafruit_BME280 bme; // I2C
//Adafruit_BME280 bme(BME_CS); // hardware SPI
//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI
float temperature = 0;
float humidity = 0;

// LED Pin
const int ledPin = 4;

void setup() {
  Serial.begin(115200);
  // default settings
  // (you can also pass in a Wire library object like &Wire2)
  //status = bme.begin();  
  if (!bme.begin(0x76)) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
  }
  setup_wifi();
  client.setServer(mqtt_server, mqttPort);
  client.setCallback(callback);


  pinMode(ledPin, OUTPUT);
}

void setup_wifi() {
  delay(10);
  // We start by connecting to a WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void callback(char* topic, byte* message, unsigned int length) {
  Serial.print("Message arrived on topic: ");
  Serial.print(topic);
  Serial.print(". Message: ");
  String messageTemp;
  
  for (int i = 0; i < length; i++) {
    Serial.print((char)message[i]);
    messageTemp += (char)message[i];
  }
  Serial.println();

  // Feel free to add more if statements to control more GPIOs with MQTT

  // If a message is received on the topic esp32/output, you check if the message is either "on" or "off".
  // Changes the output state according to the message
  if (String(topic) == "esp32/output") {
    Serial.print("Changing output to ");
    if(messageTemp == "on"){
      Serial.println("on");
      digitalWrite(ledPin, HIGH);
    }
    else if(messageTemp == "off"){
      Serial.println("off");
      digitalWrite(ledPin, LOW);
    }
  }
}

void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Attempt to connect
    if (client.connect("ESP8266Client")) {
      Serial.println("connected");
      // Subscribe
      client.subscribe("esp32/output");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}
void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();

  long now = millis();
  if (now - lastMsg > 5000) {
    lastMsg = now;
    
    // Temperature in Celsius
    temperature = bme.readTemperature();  
    // Uncomment the next line to set temperature in Fahrenheit
    // (and comment the previous temperature line)
    //temperature = 1.8 * bme.readTemperature() + 32; // Temperature in Fahrenheit
    
    // Convert the value to a char array
    char tempString[8];
    dtostrf(temperature, 1, 2, tempString);
    Serial.print("Temperature: ");
    Serial.println(tempString);
    client.publish("esp32/temperature", tempString);

    humidity = bme.readHumidity();
    
    // Convert the value to a char array
    char humString[8];
    dtostrf(humidity, 1, 2, humString);
    Serial.print("Humidity: ");
    Serial.println(humString);
    client.publish("esp32/humidity", humString);
  }
}

bis dann,
Steinspiel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.12.2020, 23:05
Beitrag #2
RE: Wo MQTT LogIn Daten einfügen?
Moin Steinspiel,
Du hast versucht, die Zugangsdaten bei client.setServer anzugeben, da gehört jedoch nur die IP-Adresse und der Port des Brokers rein.
Die Zugangsdaten müsstest Du bei client.connect angeben (also in dieser Zeile : if (client.connect("ESP8266Client")), steht im void reconnect)
Grüße Jan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.12.2020, 23:50
Beitrag #3
RE: Wo MQTT LogIn Daten einfügen?
Moin,
(26.12.2020 23:05)nbk83 schrieb:  Die Zugangsdaten müsstest Du bei client.connect angeben
[...]

Ich habe es nicht gesehen!!!
Bilde mir ein das ich Zeile für Zeile abgegangen bin ...Sad

Aber Recht hast Du! Zum einen ist es in meinem funktionierenden MQTT Sketch genau so, zum anderen liefert MQTT.fx gerade im Moment...Smile

Den Satz "...wer lesen kann, ist..." liest man hier im Forum ja öfter mal Wink
Und es Stimmt!

Danke!

bis dann,
Steinspiel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.12.2020, 00:07 (Dieser Beitrag wurde zuletzt bearbeitet: 27.12.2020 00:07 von nbk83.)
Beitrag #4
RE: Wo MQTT LogIn Daten einfügen?
Moin,
schön, dass es jetzt läuft.
"wer lesen kann..." ist eine Sache, eine völlig menschliche Betriebsblindheit, wenn man seit geraumer Zeit krampfhaft versucht einen Fehler zu finden, ist eine andere Sache, und beides zusammen eine gefährliche Kombination Wink
Dein Hinweis, wie Du es in dem anderen Sketch gemacht hast, und ein Blick in die Library (Zeile 134 und 146) haben mich auf die Lösung gebracht.
Grüße Jan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.12.2020, 15:39
Beitrag #5
RE: Wo MQTT LogIn Daten einfügen?
Moin,

(27.12.2020 00:07)nbk83 schrieb:  Dein Hinweis, wie Du es in dem anderen Sketch gemacht hast, und ein Blick in die Library (Zeile 134 und 146) haben mich auf die Lösung gebracht.

Das hast Du daraus gelesen?! Das hätte ich sicher davon nicht abgeleitet.

Das Sketch (wie heißt das eigentlich wirklich?) läuft nur zu 2/3, es liefert Temperatur und Feuchtigkeit, Druck ist außen vor. Ich will mir jetzt ein paar andere Beispiele ansehen und dann versuchen "den Druck" ein zu fügen.
Ich bin da noch ganz zuversichtlich... Wink

Wenn das dann läuft kommt die Node-Red Anbindung. Habe ja noch ein paar freie Tage...

bis dann,
Steinspiel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.12.2020, 17:23 (Dieser Beitrag wurde zuletzt bearbeitet: 27.12.2020 17:25 von nbk83.)
Beitrag #6
RE: Wo MQTT LogIn Daten einfügen?
Moin auch,
bei solchen Fehlermeldungen, wie du sie gepostet hast, hab ich irgendwann mal festgestellt, dass man in der Library ganz gut nachgucken kann, ob da irgendwas falsch übergeben wurde. Hat bei mir aber auch etwas gedauert.

Was den Luftdruck betrifft, wo genau besteht da das Problem? Ich hab hier (Beitrag #8) mal den MQTT-Teil meiner Wetterstation gepostet, vielleicht hilft Dir das ja weiter (das Abfrageintervall von 2 Sekunden ist allerdings viel zu kurz für die Luftdaten, 5-15 Minuten reichen da völlig).
Grüße
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.12.2020, 00:26
Beitrag #7
RE: Wo MQTT LogIn Daten einfügen?
Moin,
(27.12.2020 17:23)nbk83 schrieb:  Was den Luftdruck betrifft, wo genau besteht da das Problem?

Also die Abfrage des Luftdruckes überhaupt in den Sketch einzubinden.

Ich habe dazu den BME280 an den Arduino gehängt (bei mir soll alles auf einen ESP32) weil ich dafür schneller ein "einfaches" und funktionierendes Sketch gefunden habe um zu sehen wie das überhaupt aussieht.

Dann habe ich auf den ESP32 die Zeilen für die Feuchtigkeit

Code:
humidity = bme.readHumidity();    
   // Convert the value to a char array
   char humString[8];
   dtostrf(humidity, 1, 2, humString);
   Serial.print("Humidity: ");
   Serial.println(humString);
   client.publish("kueche/bme280/humidity", humString);

zum Vorbild genommen und an den Druck angepasst

Zitat: pressure = bme.readPressure ()/ 100.0;
// Convert the value to a char array
char presString[8];
dtostrf(pressure, 1, 2, presString);
Serial.print("Pressure: ");
Serial.println(presString);
client.publish("kueche/bme280/pressure", presString);

Und nur Abbrüche im Serielen Monitor bekommen. Huh

Nach endlosen Suchen fand ich dann was übers konvertieren von Gleitkommazahlen, "dtostrf()" usw.Konvertieren von Dingen
Habe zwar fast nichts verstanden ;-) aber immerhin heraus gefunden das "char presString" intern aus fünf Zeichen + NULL , also sechs Zeichen besteht, deshalb habe ich aus "char presString[8];" "char presString[6];" gemacht und siehe da... Big Grin

Zitat:Ich hab hier (Beitrag #8) mal den MQTT-Teil meiner Wetterstation gepostet,

Wenn ich mir Deine Codes, oder auch die von einigen anderen so ansehe, die sehen immer so "Ordentlich und Übersichtlich" aus! Bei meinen zusammengestoppelten Kram trau ich mich kaum was um zu stellen weil ich nicht weiß was passiert...! Da muss ich wohl noch ein bischen üben...

Zitat:2 Sekunden ist allerdings viel zu kurz für die Luftdaten, 5-15 Minuten reichen da völlig

Da geht es schon wieder los ;-( wie ich das in meinem Kuddelmuddel Sketch einstellen soll erschließt sich für mich auf den ersten Blick gar nicht so recht...!

Aber Du hast Recht, und weil wir gerade dabei sind: der MQTT Server und Node-Red selbst laufen hier auf ner SD-Card im Raspberry, diese "ständigen" MQTT Posts sind ja auch Schreibzugriffe und der Lebensdauer der SD-Card sicher nicht zuträglich denke ich. Wie läuft das bei Dir?

bis dann,
Steinspiel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.12.2020, 10:17
Beitrag #8
RE: Wo MQTT LogIn Daten einfügen?
Wenn Du Dir ein paar einfache Grundkenntnisse angeeignet hättest, wüßtest Du, dass print/println Gleitkommazahlen auch direkt ausgeben kann und dass die ESP auch float mit sprintf beherrschen.

Nur kopieren, ohne es zu verstehen, gerät irgendwann an die Grenzen.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  MQTT Topic abbonieren? Steinspiel 32 1.031 21.01.2021 22:50
Letzter Beitrag: Tommy56
  Erfahrungen mit ESP32 und WLAN/MQTT oder was ich beobachtet habe... Arduino4Fun 13 986 10.01.2021 14:18
Letzter Beitrag: nbk83
  433MHz-WiFi-MQTT-Sender nbk83 25 1.160 04.01.2021 16:35
Letzter Beitrag: nbk83
  Sensorausgabe mit MQTT publishen ? Steinspiel 14 931 16.12.2020 13:06
Letzter Beitrag: biologist
  Daten auf webserver printen Andreas-ESP32-Beginner 4 429 13.12.2020 17:21
Letzter Beitrag: miq19
  serieller Monitor verschluckt Daten wonk 20 1.608 02.12.2020 21:22
Letzter Beitrag: Tommy56
  Hilfe bei async-mqtt-client für ESP32 amshh 7 577 12.11.2020 09:19
Letzter Beitrag: amithlon
  DHT11 Daten via MQTT an Raspi senden Hanibal_Smith 5 507 10.11.2020 16:24
Letzter Beitrag: biologist
  wert an client schicken während Deepsleep mqtt & ibroker stevensen 13 1.015 06.11.2020 21:07
Letzter Beitrag: nbk83
  MQTT Connect schleife looped crazysky 1 411 29.10.2020 15:21
Letzter Beitrag: crazysky

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste