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
mehrere ESP`s mit Strom versorgen?
03.01.2021, 00:22
Beitrag #25
RE: mehrere ESP`s mit Strom versorgen?
Moin Jan,
(02.01.2021 23:00)nbk83 schrieb:  Bekommst Du denn jetzt auch dein JSON übermittelt vom Scanner?

Ja, alles bestens: JSON wird übermittelt, Node-Red filtert nach den die mir wichtigen MAC Adressen und wenn alles passt wird der richtige Schalter in openHAB umgelegt und das Radio geht an wenn ich nach Hause komme... Big Grin

Zitat:Hmm, versuche mal die Scantime des Scanners runter zu setzen (wenn ich recht erinnere liegt die aktuell bei 8 Sekunden),

Hatte ich schon probiert: nur 5 sec, das ändert nichts, ist auch zu schnell. Bei über 18 sec wird ziemlich häufig die Verbindung zum MQTT Server verloren, trotzdem ist die Verzögerung unverändert.

Zitat:
Ja, könnte ich. Da haben sich andere aber schon viel Mühe mit gegeben. Smile
[/quote]

Oh ja, das liest sich gut! Danke. ;-)

Zitat: Die Funktionen, also z.B. void setup_wifi() {tu was}, kannst Du letztendlich überall außerhalb von anderen Funktionen hinschreiben.

So hatte ich das gehofft. Damit könnte ich auf jeden Fall etwas mehr Ordnung rein bekommen, so das ich in nem halben Jahr auch noch weiß was mit dem Code gemeint ist.

Zitat:Das mit dem Subsribe Topic werde ich aber weiter verfolgen...
???

Ich meinte diese Art von "Rückkanal": im Dashboard was schalten und auf der Platine passiert was... Nur so für spätere Ideen.

Zitat:Könntest Du nochmal eine aktuelle Version des Sketches posten.

Ja, die LED`s bei den Temperaturabfragen habe ich auskommatiert, wegen der "Delay - Unklarheit". Und die JSON Erstellung habe ich hier ganz nach unten ins Loop gesetzt, weil ich dachte dadurch ändert sich was beim schalten der blauen LED, tut sich aber nicht.

Danke noch einmal, ich hänge es rann...

Code:
/*********
  BME280 und BTE Scanner zusammen
  die LED Ampeln sind auskommatiert
  
  Rui Santos
  Complete project details at https://randomnerdtutorials.com  
  https://randomnerdtutorials.com/esp32-mqtt-publish-subscribe-arduino-ide/

*********/

#include <WiFi.h>
#include <WiFiClient.h>
#include <PubSubClient.h>
#include <Wire.h>
#include <BLEDevice.h>  
#include <BLEScan.h>    
#include <BLEAddress.h>
#include <Adafruit_BME280.h>
#include <Adafruit_Sensor.h>

// MQTT-Parameter aus bte-sketch eingefuegt
#define MQTT_name "mosquittopi"  
#define MQTT_scantopic "kueche/ble/signal"  
#define MQTT_statustopic "kueche/ble/anzahl"  
#define QoS 0  

const char* ssid = "xxx";
const char* password = "xxx";
const char* mqtt_server = "192.168.xxx.xx";
const int mqttPort = 1883;
const char* mqttUser = "xxx";
const char* mqttPassword = "xxx";

int scanTime = 8; // Suchzeit BTE Scanner
BLEScan* pBLEScan;  
WiFiClient espClient;
PubSubClient mqtt_client(espClient);
long lastMsg_temperatur = 0;
long lastMsg_humidity = 0;
long lastMsg_pressure = 0;
long lastMsg = 0;
char msg[50];
int value = 0;

Adafruit_BME280 bme; // I2C
float temperature = 0;
float humidity = 0;
float pressure = 0;

// LED Pin
const int ledPin_rot = 4;
const int ledPin_gruen = 0;
const int ledPin_gelb = 2;
const int ledPin_blau = 19;

void setup() {
  Serial.begin(115200);
  if (!bme.begin(0x76)) {
    Serial.println("keinen aktiven BME280 Sensor, Verkabelung pruefen!");
    while (1);
  }
  setup_wifi();
  mqtt_client.setServer(mqtt_server, 1883);
  mqtt_client.setCallback(callback);

  pinMode(ledPin_rot, OUTPUT);
    pinMode(ledPin_gruen, OUTPUT);
    pinMode(ledPin_gelb, OUTPUT);
    pinMode(ledPin_blau, OUTPUT);  
}
  //----------------WIFI Verbindung Anfang--------------
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());
}
  //----------------WIFI Verbindung Ende--------------

  //----------------MQTT eingehender Topic Anfang--------------
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 kueche/led/output, you check if the message is either "on" or "off".
  // Changes the output state according to the message
  if (String(topic) == "kueche/led/output") {
    Serial.print("Changing output to ");
    if(messageTemp == "on"){
      Serial.println("on");
      digitalWrite(ledPin_blau, HIGH);
    }
    else if(messageTemp == "off"){
      Serial.println("off");
      digitalWrite(ledPin_blau, LOW);
    }
  }
}
//----------------MQTT eingehender Topic Ende--------------

//----------------MQTT bei Bedarf erneute Verbindung Anfang--------------
void reconnect() {
  // Loop until we're reconnected
  while (!mqtt_client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Attempt to connect
    if (mqtt_client.connect("ESP8266Client", mqttUser, mqttPassword)) {
      Serial.println("connected");
    mqtt_client.setBufferSize(2048); // <--aus-bte-sketch-eingefuegt
    mqtt_client.publish(MQTT_statustopic,"Geraet verbunden");        
      // Subscribe
      mqtt_client.subscribe("kueche/led/output");
    } else {
      Serial.print("failed, rc=");
      Serial.print(mqtt_client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
    //----------------MQTT bei Bedarf erneute Verbindung Ende--------------
    //---------------------------------------------------------------------
    
  Serial.println("Starte BLE Scanner");
  BLEDevice::init("");
  pBLEScan = BLEDevice::getScan();  
  pBLEScan->setActiveScan(true);  
  pBLEScan->setInterval(100);
  pBLEScan->setWindow(99);  
  
}
void loop() {
  if (!mqtt_client.connected()) {
    reconnect();
  }
  mqtt_client.loop();

  

  


  //---------------Temperaturmessung Intervall + Ampel LED schalten---------------------------

  long now_temp = millis();
  if (now_temp - lastMsg_temperatur > 60000) {   // jede 1 Minuten (= 60 Sekunden)
  //if (now_temp - lastMsg_temperatur > 5000) {   // variabel  
    lastMsg_temperatur = now_temp;
  
    // Temperature in Celsius
    temperature = bme.readTemperature();  
    
    // Convert the value to a char array
    char tempString[8];
    dtostrf(temperature, 1, 2, tempString);
    Serial.print("Temperature: ");
    Serial.println(tempString);
    mqtt_client.publish("kueche/bme280/temperature", tempString);

      /*digitalWrite(ledPin_rot, HIGH);   // sets the LED on
      delay(1000);                      // waits for a second
      digitalWrite(ledPin_rot, LOW);    // sets the LED off*/    

  }
  
  //---------------Luftfeuchtigkeitsmessung Intervall + Ampel LED schalten---------------------------
  
  long now_hum = millis();
  if (now_hum - lastMsg_humidity > 600000) {   // alle 10 Minuten (= 600 Sekunden)
  //if (now_hum - lastMsg_humidity > 10000) {   // variable  
    lastMsg_humidity = now_hum;  
    humidity = bme.readHumidity();
    
    // Convert the value to a char array
    char humString[8];
    dtostrf(humidity, 1, 2, humString);
    Serial.print("Humidity: ");
    Serial.println(humString);
    mqtt_client.publish("kueche/bme280/humidity", humString);

      /*digitalWrite(ledPin_gruen, HIGH);     // sets the LED on
      delay(1000);                          // waits for a second
      digitalWrite(ledPin_gruen, LOW);      // sets the LED off */

  }    
  
  //---------------Luftdruckmessung Intervall + Ampel LED schalten---------------------------
  
    long now_press = millis();
    if (now_press - lastMsg_pressure > 900000) {   // alle 15 Minute (= 900 Sekunden)
    //if (now_press - lastMsg_pressure > 15000) {   // variabel  
    lastMsg_pressure = now_press;
      
    pressure = bme.readPressure ()/ 100.0;    // wegen Kommastelle: durch 100 teilen

    // Convert the value to a char array
    char presString[6];
    dtostrf(pressure, 1, 2, presString);
    Serial.print("Pressure: ");
    Serial.println(presString);
    mqtt_client.publish("kueche/bme280/pressure", presString);

        /*digitalWrite(ledPin_gelb, HIGH);    // sets the LED on
        delay(1000);                        // waits for a second
        digitalWrite(ledPin_gelb, LOW);     // sets the LED off */
    }    

//
// JSON Teil BTE Scanner - Anfang
//  
  int j;
  String NachrichtJSON;
  BLEScanResults foundDevices = pBLEScan->start(scanTime); // BLE Scanen

  NachrichtJSON = "{\r\n";     // JSON Format vorbereiten

  for (j = 0; j < foundDevices.getCount(); j++) // Alle Gefundene Bluetooth Device durchgehen
  {
    NachrichtJSON = NachrichtJSON + "\"" + foundDevices.getDevice(j).getAddress().toString().c_str() + "\":";
    if (j != foundDevices.getCount() - 1)  NachrichtJSON = NachrichtJSON + String(foundDevices.getDevice(j).getRSSI()) + ",\r\n";
    else NachrichtJSON = NachrichtJSON + String(foundDevices.getDevice(j).getRSSI()) + "\r\n}";
  } // Alle gefundene MACs durchgehen
  // diese "if" spührt das letzte Eintragung und beendet den json Datensatz

  pBLEScan->clearResults(); // Speicher freigeben
  mqtt_client.publish(MQTT_scantopic, (char*) NachrichtJSON.c_str());
  Serial.println(NachrichtJSON);
//
// JSON Teil BTE Scannerh - Ende
//

}

bis dann,
Steinspiel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.01.2021, 00:12
Beitrag #26
RE: mehrere ESP`s mit Strom versorgen?
Was Du so schreibst, also dass bei 18 Sekunden Scanintervall die MQTT-Verbindung abreißt, lässt mich vermuten, dass BT den Wlan-Empfang entweder stört oder der ESP ein Problem damit hat BT und WLAN wirklich gleichzeitig zu nutzen.
Du könntest evtl. versuchen in der Zeile pBLEScan->setActiveScan(true); false statt true zu setzen...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2021, 21:19
Beitrag #27
RE: mehrere ESP`s mit Strom versorgen?
Moin,
(04.01.2021 00:12)nbk83 schrieb:  [...]
Du könntest evtl. versuchen in der Zeile pBLEScan->setActiveScan(true); false statt true zu setzen...

Ich melde mich leider erst jetzt, das Arbeitsleben hat mich wieder... ;-(

Ich hatte es gestern schon ausprobiert, keine Veränderung.
Nun hatte begonnen mir ein "eigenes" "nur WIFI + MQTT Sketch zu erstellen (als Grundlage ohne Schnickschnack so zu sagen), das läuft schon und ich will es noch mal mit dem Subscribe Topic vom Orginal Sketch versuchen die LED zu schalten...

Allerdings muss ich zugeben das ich mich , trotz der knappen Zeit die ich im Moment habe, ziemlich von dem OLED Display ablenken lasse was gestern in der Post lag... Smile

bis dann,
Steinspiel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Mehrere EthernetClients/WiFiClients in verschiedenen Tasks? miq19 15 1.356 07.10.2020 18:15
Letzter Beitrag: Tommy56
  ESP32 Cam mehrere Clients nbk83 3 1.322 29.04.2020 21:22
Letzter Beitrag: nbk83
  Strom sparen bei ESPs im Batteriebetrieb ardu_arne 0 896 11.12.2019 20:47
Letzter Beitrag: ardu_arne
  Begrenzung 2048 Bytes: Wie mehrere Pakete? GuaAck 10 4.225 06.02.2018 17:12
Letzter Beitrag: GuaAck

Gehe zu:


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