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
Sensorausgabe mit MQTT publishen ?
12.12.2020, 18:49
Beitrag #1
Sensorausgabe mit MQTT publishen ?
Hallo,

Ich bin neu hier, hatte bis jetzt noch nie mit Arduino und Co zu tun und besitze auch erst seit zwei Tagen ein ESP32 Dev Kit C + HCSR501 PIR-Sensor von AZ-Delivery. Beides läuft inzwischen: das Bewegungsmelder Sketch zeigt mir im Seriellen Monitor der Arduino IDE an ob eine Bewegung erkannt wurde oder nicht. Smile

Nun habe ich ein MQTT Sketch gefunden mit dem ich ein "Hello from ESP32" publishen und in "MQTT.fx" auch angezeigt bekomme. Das funktioniert auch soweit.Smile

Aus beiden Sketches habe ich versuchsweise mal eines gemacht um die Ausgaben des Bewegungsmelders ("Motion detected!" / "No motion!") per MQTT zu versenden, nur WIE?
Ich habe ein paar (für mich) komplizierte Beispiele gefunden aber letztendlich nur "Bahnhof" verstanden. Ich denke mir das man für die Ausgabe des Bewegungsmelders irgendwie eine Variable definieren muss um diese dann im Topic "esp/test" zu publishen, nur weiß ich wirklich nicht wie.

Kann mir jemand in "einfachen Worten" ;-) auf die Sprünge helfen wie ich eine Sensorausgabe, die im seriellen Monitor zu sehen ist, als Text per MQTT versende?

Mein Sketch:
Code:
#include <WiFi.h>
#include <PubSubClient.h>

#define SENSOR_PIN 12

const char* ssid = "xxx"; // WLAN-Name
const char* ssidkey = "xxx"; // WLAN-Schlüssel
const char* mqttServer = "192.168.x.x";
const int mqttPort = 1883;
const char* mqttUser = "";
const char* mqttPassword = "";

WiFiClient espClient;
PubSubClient client(espClient);

void setup() {

  Serial.begin(9600);
  WiFi.begin(ssid, ssidkey);

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

  Serial.println("Connected to the WiFi network");

  client.setServer(mqttServer, mqttPort);

  while (!client.connected()) {
    Serial.println("Connecting to MQTT...");

    if (client.connect("ESP32Client", mqttUser, mqttPassword )) {

      Serial.println("connected");

    } else {

      Serial.print("failed with state ");
      Serial.print(client.state());
      delay(2000);

    }
  }

  client.publish("esp/test", "Hello from ESP32");

}

void loop() {

//von MQTT Sketch

  client.loop();

//von Bewegungsmelder Sketch

   boolean state = digitalRead(SENSOR_PIN);
    delay(1000);
    if(state == HIGH) {
    Serial.println("Motion detected!");
    }
    else {
    Serial.println("No motion!");
    }

  
}

Danke, und einen schönen Samstag noch...

bis dann,
Steinspiel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.12.2020, 18:54
Beitrag #2
RE: Sensorausgabe mit MQTT publishen ?
Probier mal (ungetestet):
Code:
boolean state = digitalRead(SENSOR_PIN);
    if(state == HIGH) {
       Serial.println("Motion detected!");
       client.publish("esp/test", "Motion detected!");
    }
    else {
       Serial.println("No motion!");
       client.publish("esp/test", "No motion!");
    }
    delay(1000);

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
12.12.2020, 20:24
Beitrag #3
RE: Sensorausgabe mit MQTT publishen ?
Moin,
(12.12.2020 18:54)Tommy56 schrieb:  Probier mal (ungetestet):
[...]

Das war Super, so könnte ich jetzt sogar eine Lampe schalten! Danke. Smile

[Bild: IPv6r33.png]

Mein eigentliches Ziel ist es ja die Ergebnisse eines BT BLE Scanners per MQTT vom ESP32 zu bekommen. Ich habe gerade mal Deinen Vorschlag versucht an zu wenden (also die MQTT Ausgabe gleich unter die PrintIn Ausgabe im "void loop Bereich" zu setzen), aber in MQTT.fx empfange ich dann auch nur ein "foundDevices.getCount()" als Text und keine Ausgabe der MAC Adressen so wie im seriellen Monitor zu sehen.

Ich lass mal diesen ganzen MQTT + WIFI "Kram" weg. Hast Du auch ne Idee wie ich in diesem Sketch ne Ausgabe an MQTT bekomme? Denn nur die publish Zeile ein zu fügen hilft leider nicht: "client.publish("esp/test","foundDevices.getCount()");"

der BLE Sketch:

Code:
/*
   Based on Neil Kolban example for IDF: https://github.com/nkolban/esp32-snippets/blob/master/cpp_utils/tests/BLE%20Tests/SampleScan.cpp
   Ported to Arduino ESP32 by Evandro Copercini
*/

#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEScan.h>
#include <BLEAdvertisedDevice.h>

int scanTime = 5; //In seconds
BLEScan* pBLEScan;

class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks {
    void onResult(BLEAdvertisedDevice advertisedDevice) {
      Serial.printf("Advertised Device: %s \n", advertisedDevice.toString().c_str());
    }
};

void setup() {
  Serial.begin(115200);
  Serial.println("Scanning...");

  BLEDevice::init("");
  pBLEScan = BLEDevice::getScan(); //create new scan
  pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());
  pBLEScan->setActiveScan(true); //active scan uses more power, but get results faster
  pBLEScan->setInterval(100);
  pBLEScan->setWindow(99);  // less or equal setInterval value
}

void loop() {
  // put your main code here, to run repeatedly:
  BLEScanResults foundDevices = pBLEScan->start(scanTime, false);
  Serial.print("Devices found: ");
  Serial.println(foundDevices.getCount());
  Serial.println("Scan done!");
  pBLEScan->clearResults();   // delete results fromBLEScan buffer to release memory
  delay(2000);
}

Danke noch mal für die schnelle Hilfe und ich habe auf jeden Fall dazu gelernt!

Apropos "lernen", Kannst Du mir sagen wie ich herausbekomme welches Sketch gerade im ESP32 abgearbeitet wird? Bei meinen vielen Versuchen mit ähnlichen Sketches komme ich leicht durcheinander...Rolleyes

bis dann...

bis dann,
Steinspiel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.12.2020, 20:28
Beitrag #4
RE: Sensorausgabe mit MQTT publishen ?
Ich habe von MQTT eigentlich überhaupt keine Ahnung, das war nur aus Deinem Beispiel entwickelt.
Zu Sketchname usw. schau mal bei Fips. Da gibt es spezielle Compilerinfos.

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
12.12.2020, 21:01 (Dieser Beitrag wurde zuletzt bearbeitet: 12.12.2020 21:02 von nbk83.)
Beitrag #5
RE: Sensorausgabe mit MQTT publishen ?
Moin,
Versuch mal client.publish("esp/test",foundDevices.getCount());
Also ohne Anführungszeichen.
Gruß Jan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.12.2020, 21:32
Beitrag #6
RE: Sensorausgabe mit MQTT publishen ?
(12.12.2020 21:01)nbk83 schrieb:  Moin,
Versuch mal client.publish("esp/test",foundDevices.getCount());
[...]

Habe da ne Fehlermeldung bekommen, mit der ich natürlich nichts (!) anfangen kann!

Code:
Arduino: 1.8.13 (Windows 10), Board: "ESP32 Dev Module, Disabled, No OTA (2MB APP/2MB FATFS), 240MHz (WiFi/BT), QIO, 80MHz, 4MB (32Mb), 921600, None"

C:\Users\User\Documents\Arduino\BLE_scan_an_mqtt\BLE_scan_an_mqtt.ino: In function 'void loop()':

BLE_scan_an_mqtt:80:50: error: invalid conversion from 'int' to 'const char*' [-fpermissive]

   client.publish("esp/test",foundDevices.getCount());

                                                  ^

In file included from C:\Users\User\Documents\Arduino\BLE_scan_an_mqtt\BLE_scan_an_mqtt.ino:7:0:

C:\Users\User\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.h:151:12: note:   initializing argument 2 of 'boolean PubSubClient::publish(const char*, const char*)'

    boolean publish(const char* topic, const char* payload);

            ^

Mehrere Bibliotheken wurden für "BLEDevice.h" gefunden

Benutzt: C:\Users\User\Documents\Arduino\libraries\ESP32_BLE_Arduino

Nicht benutzt: C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\librar​ies\BLE

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

invalid conversion from 'int' to 'const char*' [-fpermissive]



Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.

Schade, Danke trotzdem.

bis dann,
Steinspiel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.12.2020, 21:34
Beitrag #7
RE: Sensorausgabe mit MQTT publishen ?
(12.12.2020 20:28)Tommy56 schrieb:  Zu Sketchname usw. schau mal bei Fips. Da gibt es spezielle Compilerinfos.
[...]

Ich werde es probieren!

bis dann,
Steinspiel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.12.2020, 22:36
Beitrag #8
RE: Sensorausgabe mit MQTT publishen ?
(12.12.2020 21:32)Steinspiel schrieb:  Habe da ne Fehlermeldung bekommen, mit der ich natürlich nichts (!) anfangen kann!

...

Schade, Danke trotzdem.

Ja, sorry, hatte vergessen, dass publish als payload eine Variable vom Typ char erwartet und foundDevices.getCount() ein int zurückgibt. ich hätte jedoch gedacht, dass es nur die Anzahl der gefundenen BLE-Geräte angibt und nicht die MAC-Adressen....
Versuch mal client.publish("esp/test",char(foundDevices.getCount()));
(wenn das nicht funktioniert, muss ich es selbst mal ausprobieren Wink )
Ich merke grad, dass ich bisher immer nur float zu char umwandeln musste, das geht mit dtostrf, wenn ich Werte per MQTT verschicke...
Gruß Jan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Einer RGB-LED am ESP Werte aus MQTT zuweisen. Manny 2 138 15.04.2021 16:50
Letzter Beitrag: Manny
  Erfahrungen mit ESP32 und WLAN/MQTT oder was ich beobachtet habe... Arduino4Fun 23 3.447 09.04.2021 16:15
Letzter Beitrag: amshh
  BUILTIN_LED vom ESP mit MQTT und NodeRed schalten. Manny 7 620 22.03.2021 18:24
Letzter Beitrag: Manny
  MQTT Topic abbonieren? Steinspiel 32 2.718 21.01.2021 22:50
Letzter Beitrag: Tommy56
  433MHz-WiFi-MQTT-Sender nbk83 25 2.093 04.01.2021 16:35
Letzter Beitrag: nbk83
  Wo MQTT LogIn Daten einfügen? Steinspiel 10 1.131 28.12.2020 14:32
Letzter Beitrag: Tommy56
  Hilfe bei async-mqtt-client für ESP32 amshh 7 1.051 12.11.2020 09:19
Letzter Beitrag: amithlon
  DHT11 Daten via MQTT an Raspi senden Hanibal_Smith 5 769 10.11.2020 16:24
Letzter Beitrag: biologist
  wert an client schicken während Deepsleep mqtt & ibroker stevensen 13 1.391 06.11.2020 21:07
Letzter Beitrag: nbk83
  MQTT Connect schleife looped crazysky 1 542 29.10.2020 15:21
Letzter Beitrag: crazysky

Gehe zu:


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