Arduino Forum

International => Deutsch => Topic started by: adruinoboy on Aug 29, 2020, 03:10 pm

Title: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Aug 29, 2020, 03:10 pm
Hallo Forenmitglieder,

ich habe mit meinen beiden Arduino UNO eine kleine Wetterstation gebaut. Das Außengerät sendet nur Temp. und Luftfeuchtigkeit über Bluetooth zum Innengerät. Mithilfe dieses Forums konnte ich auch einen sehr guten Sketch entwickeln.
Nur merke ich, dass die Bluetooth-Module, ein HC-05 und ein HC-06 zu schwach und unzuverlässig sind. 2 Meter direkter Sichtkontakt schaffen die gerade noch, bei 4 Metern bricht der Funkkontakt noch einer Weile ab. Das reicht für die meisten Fälle nicht aus.
Jetzt meine Frage: Weiß jemand wie ich mit ähnlichen Modulen auf die üblichen 100m Reichweite komme? Es soll solche Module in einer "Class1 Variante" geben, die ich im ganzen Internet nicht zum Kauf finden konnte.

In einem Forum hatte einer mit ZigBee Modulen mehr als 1000m Reichweite erreicht. Das ist für mich zwar überdimensioniert, aber lieber soll das Signal zu weit reichen, als dass ich es nicht nutzen kann. Falls der Stromverbrauch zu hoch wird, nutze ich das Gerät lieber mit Netzteil. Freue mich, wenn mich jemand weiter bringen kann.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Aug 29, 2020, 03:31 pm
Dann empfehle ich dir HC-12, werden auch seriell angesteuert und haben auch eine sehr gute Reichweite.

Und hier (https://arduino-projekte.webnode.at/meine-projekte/parametrieren-des-hc-12/) findest du gute Informationen dazu.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: Peter-CAD-HST on Aug 29, 2020, 04:22 pm
Moin  adruinoboy,

bist du dir sicher, dass das ein Reichweitenproblem ist?

Mit einem HC-05 Modul erreiche ich, bei einer Sichtverbindung, eine Datenfunkstrecke >10m.

Gruß Peter
und gesund bleiben
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Aug 29, 2020, 08:12 pm
Hallo Peter-CAD-HST,

welches Problem kann da sonst noch in Frage kommen?
Hast du bei dir zwei HC-05 Module verwendet? Vielleicht ist das mein Problem, dass ich ein HC-05 und ein HC-06 Modul verwendet habe?

Gruß
adruinoboy
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Aug 29, 2020, 08:19 pm
Hallo HotSystems,

der Artikel sieht echt gut aus. Ich werde es mit einem HC-12 probieren.

Ich habe eine weitere Frage: Unter diesem Link von dir ...

https://arduino-projekte.webnode.at/meine-projekte/parametrieren-des-hc-12/

... schreibt er von dem "Zusammenhang zwischen UART-Baudrate und Luftbaudrate".
Hängt eigentlich die Reichweite von der Baud-Rate ab?

Gruß
arduinoboy
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Aug 29, 2020, 09:50 pm
Hallo HotSystems,

der Artikel sieht echt gut aus. Ich werde es mit einem HC-12 probieren.

Ich habe eine weitere Frage: Unter diesem Link von dir ...

https://arduino-projekte.webnode.at/meine-projekte/parametrieren-des-hc-12/

... schreibt er von dem "Zusammenhang zwischen UART-Baudrate und Luftbaudrate".
Hängt eigentlich die Reichweite von der Baud-Rate ab?

Gruß
arduinoboy
Hallo,
das ist eine gute und richtige Entscheidung, da Bluetooth meist nur für kurze Strecken gedacht ist.

Ja, geringfügig ist die Reichweite auch davon abhängig. Das wird alles sehr ausführlich im Datenblatt beschrieben, ist aber für kurze Strecken nicht von Bedeutung.

Aber bedenke, du brauchst 2 Stück davon.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: Peter-CAD-HST on Aug 30, 2020, 12:27 am
Moin  adruinoboy,

bist du dir sicher, dass das ein Reichweitenproblem ist?

Mit einem HC-05 Modul erreiche ich, bei einer Sichtverbindung, eine Datenfunkstrecke >10m.

Gruß Peter
und gesund bleiben
Hallo Peter-CAD-HST,

welches Problem kann da sonst noch in Frage kommen?
Hast du bei dir zwei HC-05 Module verwendet? Vielleicht ist das mein Problem, dass ich ein HC-05 und ein HC-06 Modul verwendet habe?

Gruß
adruinoboy

Moin adruinoboy

Hier kommt ein Link zu einem guten Beitrag  (https://wolles-elektronikkiste.de/hc-05-und-hc-06-bluetooth-module)zum Thema Bluetooth mit HC-05 und HC-06 Modulen.

Viel Erfolg
Gruss Peter
und gesund bleiben

Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Aug 31, 2020, 04:13 pm
Danke für den Link,

diese Seite kannte ich schon.
Ich bin gerade dabei einen hc-12 zu suchen. Weiß jemand wo ich ein fertig-gelötetes HC-12 Module bekomme?
Ich habe mir mal Module gekauft und alle die ich selber gelötet habe, waren kaputt.
Ich hoffe mir kann jemand weiter helfen, sonst muss es bei mir an dieser Stelle scheitern.

Gruß
adruinoboy
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Aug 31, 2020, 04:18 pm
Warum sind die beim Löten kaputt gegangen ?
Was für einen Lötkolben verwendest du ?

Ich kenne keine, die fertig gelötet sind.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Aug 31, 2020, 05:08 pm
Ich habe eine Lötstation von Quick 3202. Die soll eigentlich sehr gut sein.
Hat auch was gekostet.
Ich habe mit 350°C gelötet.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Aug 31, 2020, 05:21 pm
Ich habe eine Lötstation von Quick 3202. Die soll eigentlich sehr gut sein.
Hat auch was gekostet.
Ich habe mit 350°C gelötet.
Dann sollte das doch damit funktionieren.
Da du bei den Stiften nicht direkt am Chip lötest, wird das auch kein Problem sein.

Somit frage ich, was ist da kaputt gegangen ?
Oder war es ein Kurzschluss bzw. schlechte oder kalte Lötstelle ?

Edit:
Hast du niemanden (Kollege, Bekannter o.ä.) in deiner Gegend, der das Löten für dich übernehmen kann ?
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Aug 31, 2020, 06:34 pm
Ich hatte zwei Co2-Sensoren MH-Z19 gelötet, beide geben murks aus. Zahlenwerte in einem Bereich, die nicht möglich sind.
Dann habe ich zwei fertig-gelötete gekauft, die haben auf anhieb die richtigen Zahlen ausgegeben.

Dann hatte ich noch 2 Luftdrucksensoren BMP180 gelötet. Die haben bei mir mit dem Beispielsketch aus der Bibliothek nichts ausgegeben.
Die Lötstellen sehen auch gut aus.
Ich weiß es nicht.

Wie lange darf eigentlich mit dem Lötkolben den Pin berühren, ohne dass die Platine einen Schaden nimmt?
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Aug 31, 2020, 06:49 pm
Wie lange darf eigentlich mit dem Lötkolben den Pin berühren, ohne dass die Platine einen Schaden nimmt?
Das hängt sehr von der Qualität der Platine ab. Normal dauert es nicht länger wie 2-3 Sek. bis das Lot richtig geflossen ist.
Das ist dann aber auch schon sehr lange. Besser sind da dann 1-2 Sek.

Aber auch das Zinn spielt dabei eine große Rolle und die Temperatur. Es wird zwar bleifrei empfohlen, aber ich verwende noch bleihaltiges, das lässt sich deutlich besser verarbeiten.

Ist dein Lötkolben zusätzlich geerdet ?
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Aug 31, 2020, 06:53 pm
Noch eine andere Frage: Sind die HC-12 Module von Banggood eigentlich gut?
Oder sollte man solche Sachen da lieber nicht kaufen?
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Aug 31, 2020, 07:07 pm
Ist dein Lötkolben zusätzlich geerdet ?
Bei mir ist ein Erdungskabel dabei, aber ich habe das nicht benutzt.
Kann das das Problem gewesen sein, warum bei mir alle Module nach dem Löten unbrauchbar sind?

Wo soll ich das Erdungskabel dranklemmen?
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Aug 31, 2020, 10:32 pm
Wo soll ich das Erdungskabel dranklemmen?
Da ich deinen Lötkolben nicht kenne, kann ich dir da keinen Tipp geben.
Aber statische Entladungen können schon Bauteile zerstören.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: Peter-CAD-HST on Sep 01, 2020, 08:31 am
Moin,

meine Lötstation hat keine geerdete Lötspitze  :smiley-eek:  und mit dieser Lötstation arbeite ich >40 Jahre ohne das sich je ein halbleitendes Gefüge sich in die ewigen Jagdgründe verabschieded hat.

Gruss Peter
und gesund bleiben
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Sep 01, 2020, 08:45 am
meine Lötstation hat keine geerdete Lötspitze
Es geht doch überhaupt nicht um deine Lötstation.

Zu dem gibt es Lötstationen, die eine Erdung haben und die sollte dann auch angeschlossen werden.
Nur darum geht es.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Sep 01, 2020, 09:31 am
Okay, ich werde das Edungskabel anschließen. Mit welcher Temperatur lötet ihr vorzugsweise?
Ich werde auf jeden Fall noch paar Lötübungen machen. Das will ich lernen.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: Peter-CAD-HST on Sep 01, 2020, 09:38 am
Es geht doch überhaupt nicht um deine Lötstation.

Zu dem gibt es Lötstationen, die eine Erdung haben und die sollte dann auch angeschlossen werden.
Nur darum geht es.

Warum ?  :o 

Löten die dann besser ?
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Sep 01, 2020, 09:46 am
Okay, ich werde das Edungskabel anschließen. Mit welcher Temperatur lötet ihr vorzugsweise?
Ich werde auf jeden Fall noch paar Lötübungen machen. Das will ich lernen.
Dann besorge dir Lochrasterplatinen und versuche damit das zu lernen.
Anfangen solltest du mit Pertinaxplatinen, da siehst du sofort, wenn du zu lange gelötet hast. Dann lösen sich die Lötaugen vom Trägermaterial. Erst wenn das gut klappt, solltest du dich an die richtigen Module ran wagen.

Und die Temperatur meines Weller Magnastat beträgt je nach Spitze ca. 310 bzw. 370 Grad.
Damit komme ich seit Jahre gut klar.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Sep 03, 2020, 10:55 pm
Danke für eure Tipps. Ich habe mich mit dem Löten mehr befasst und einige Übungen gemacht.
Jetzt funktionieren plötzlich meine Totgeglaubten Co2-Sensoren wieder.
Also danke an alle, die mir Hilfe geleistet haben.
Wenn ich so weit bin, dass ich die HC-12 Module gelötet habe, melde ich mich wieder.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Sep 03, 2020, 11:07 pm
Super dass es jetzt funktioniert.

Danke für die Rückmeldung und weiterhin viel Erfolg.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Sep 16, 2020, 05:57 pm
Hallo,

jetzt ist es soweit. Ich habe meine HC-12 Module gelötet. Das hat echt besser geklappt als erwartet.
Die funktionieren sehr gut und senden und empfangen aus dem seriellen Monitor alles, was ich schreibe.

Jetzt will ich zwei Messwerte senden. Also einmal die Temperatur und die Luftfeuchtigkeit.
Ich hatte das vor einigen Jahren mit HC-05 und HC-06 Modulen ausgeführt und der endgültige Sketch sah so aus:

Code: [Select]


#include <Streaming.h>    //Bibliothek zur BT Verbindung
#include <SoftwareSerial.h>
#include "DHT.h"          //DHT Bibliothek laden

enum Comand {
              Temperatur   = 1,
              Feuchtigkeit = 2
            };

float tempaussen = 0;
float feuchteaussen = 0;

#define rxPin 3
#define txPin 4
#define DHTPIN 2
#define DHTTYPE DHT22   //Es handelt sich um den DHT22 Sensor

SoftwareSerial btSerial(rxPin, txPin);
DHT dht(DHTPIN, DHTTYPE); //Der Sensor wird ab jetzt mit "dht" angesprochen

void setup()
{
  btSerial.begin(9600);
  Serial.begin(9600);
  dht.begin();
}

void loop()
{
      //Auslesen der Temp. und Feuchtigkeit
    tempaussen = dht.readTemperature(); //Temperatur außen wird gemessen und gespeichert
    feuchteaussen = dht.readHumidity(); //Luftfeuchte außen wird gemessen und gespeichert

      //Senden der Messwerte
    btSerial << Temperatur << ',' << tempaussen << ';' << endl;
    btSerial << Feuchtigkeit << ',' << feuchteaussen << ';' << endl;

//Löschen der Messwerte
   tempaussen = 0;     //Der Wert für Temperatur wird genullt
   feuchteaussen = 0;  //Der Wert für Feuchte wird für die nächste Runde genullt
}


Das hat sehr gut funktioniert.
Ich habe den Sketch dann auch für meine HC-12 Module übertragen, aber das hat nicht funktioniert.
Der kann den Befehl << Temperatur ...
nicht ausführen.
Ich schicke mal, wie ich den Sketch angepasst habe, damit ihr mir genauer helfen könnt.

Code: [Select]

#include <SoftwareSerial.h>
#include <SoftwareSerial.h>
#include "DHT.h"          //DHT Bibliothek laden

enum Comand {
              Temperatur   = 1,
              Feuchtigkeit = 2
            };

unsigned long BT_timestore;   //Variable Speicher für Systemzeit
float tempaussen = 0;
float feuchteaussen = 0;

#define DHTPIN 2        //DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   //Es handelt sich um den DHT22 Sensor

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin
DHT dht(DHTPIN, DHTTYPE); //Der Sensor wird ab jetzt mit "dht" angesprochen

void setup()
{
 Serial.begin(9600);             // Serial port to computer
 HC12.begin(9600);               // Serial port to HC12
}
void loop()
{
  tempaussen = dht.readTemperature(); //Temperatur außen wird gemessen und gespeichert
  feuchteaussen = dht.readHumidity(); //Luftfeuchte außen wird gemessen und gespeichert

  while (HC12.available())
  {// If HC-12 has data
  Serial.write(HC12.read());      // Send the data to Serial monitor
  //Senden der Messwerte
  HC12.write << Temperatur << ',' << tempaussen << ';' << endl;
  HC12.write << Feuchtigkeit << ',' << feuchteaussen << ';' << endl;
  }
  while (Serial.available())
  {      // If Serial monitor has data
  HC12.write(Serial.read());      // Send that data to HC-12
  }
  delay(1000);
}
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Sep 16, 2020, 06:16 pm
Wenn du es mit Streaming machen möchtest, musst du auch die Library dazu einbinden.

Was ich allerdings nicht verstehe, du fragst die serielle zum HC12 nach Daten ab und willst dann erst per Streaming senden. Das kommt mir ein wenig konfus vor.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Sep 16, 2020, 11:16 pm
Hallo HotSystems,

ich hatte vorher vergessen die Bibliothek einzubinden. Dafür hatte ich die "SoftwareSerial" zwei mal reingeschrieben. Das habe ich jetzt geändert. Danke für den Tipp, dass ist natürlich quatsch.
Ich habe damit also diesen Sketch hier:

Code: [Select]

#include <Streaming.h>    //Bibliothek zur BT Verbindung
#include <SoftwareSerial.h>
#include "DHT.h"          //DHT Bibliothek laden

enum Comand {
              Temperatur   = 1,
              Feuchtigkeit = 2
            };

unsigned long BT_timestore;   //Variable Speicher für Systemzeit
float tempaussen = 0;
float feuchteaussen = 0;

#define DHTPIN 2        //DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   //Es handelt sich um den DHT22 Sensor

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin
DHT dht(DHTPIN, DHTTYPE); //Der Sensor wird ab jetzt mit "dht" angesprochen

void setup()
{
 Serial.begin(9600);             // Serial port to computer
 HC12.begin(9600);               // Serial port to HC12
}
void loop()
{
  tempaussen = dht.readTemperature(); //Temperatur außen wird gemessen und gespeichert
  feuchteaussen = dht.readHumidity(); //Luftfeuchte außen wird gemessen und gespeichert

  while (HC12.available())
  {// If HC-12 has data
  Serial.write(HC12.read());      // Send the data to Serial monitor
  //Senden der Messwerte
  HC12.write << Temperatur << ',' << tempaussen << ';' << endl;
  HC12.write << Feuchtigkeit << ',' << feuchteaussen << ';' << endl;
  }
  while (Serial.available())
  {      // If Serial monitor has data
  HC12.write(Serial.read());      // Send that data to HC-12
  }
  delay(1000);
}


Damit erhalte ich folgende Fehlermeldung:

exit status 1
no match for 'operator<<' (operand types are '<unresolved overloaded function type>' and 'Comand')
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Sep 16, 2020, 11:30 pm
Ok, dann solltest du das mal in der "einfachen" Version machen.
Z.B. mit dieser Anweisung:

Code: [Select]
hc12.print(Deine Daten);
Aber ohne das ganze "drumherum".

Und sieh dir diese Beschreibung (https://arduino-projekte.webnode.at/meine-projekte/parametrieren-des-hc-12/) an.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: Peter-CAD-HST on Sep 17, 2020, 06:41 am
Moin adruinoboy,
die Fehlermeldung wird durch die Codezeilen
HC12.write << Temperatur << ',' << tempaussen << ';' << endl;
HC2.write << Feuchtigkeit << ',' << feuchteaussen << ';' << endl;
erzeugt.
Für diese einfache Anwendung ist ein Streaming nicht sinnvoll.
Ersetze diese durch
//  HC12.write << Temperatur << ',' << tempaussen << ';' << endl;
//  HC12.write << Feuchtigkeit << ',' << feuchteaussen << ';' << endl;

    HC12.print (Temperatur); // Kommando
    HC12.print (",");        // Abgrenzung
    HC12.print (tempaussen); // Messwert
    HC12.println (";");        // Abgrenzung

    HC12.print (Feuchtigkeit); // Kommando
    HC12.print (",");        // Abgrenzung
    HC12.print (feuchteaussen); // Messwert
    HC12.println (";");        // Abgrenzung
viel Erfolg
Gruss Peter
und gesund bleiben
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Sep 17, 2020, 10:10 am
Für diese einfache Anwendung ist ein Streaming nicht sinnvoll.

Aber wie kann ich das mit dem zweiten Arduino sauber auslesen, damit er genau zwischen Temp. und Luftfeuchte unterscheiden kann.
Nicht, dass ich auf dem zweiten Arduino so etwas auf dem Display ausgebe:

50,7 °C
20,3 %

Weil die Werte vertauscht wurden.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Sep 17, 2020, 10:24 am
Ich habe den Sketch jetzt so verändert, wie ihr mir das geraten habt.

Code: [Select]

#include <Streaming.h>    //Bibliothek zur BT Verbindung
#include <SoftwareSerial.h>
#include "DHT.h"          //DHT Bibliothek laden

enum Comand {
              Temperatur   = 1,
              Feuchtigkeit = 2
            };

float tempaussen = 0;
float feuchteaussen = 0;

#define DHTPIN 2        //DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   //Es handelt sich um den DHT22 Sensor

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin
DHT dht(DHTPIN, DHTTYPE); //Der Sensor wird ab jetzt mit "dht" angesprochen

void setup()
{
 Serial.begin(9600);             // Serial port to computer
 HC12.begin(9600);               // Serial port to HC12
}
void loop()
{
  tempaussen = dht.readTemperature(); //Temperatur außen wird gemessen und gespeichert
  feuchteaussen = dht.readHumidity(); //Luftfeuchte außen wird gemessen und gespeichert

  while (HC12.available())
  {// If HC-12 has data
  Serial.write(HC12.read());      // Send the data to Serial monitor
  //Senden der Messwerte
    HC12.print (Temperatur); // Kommando
    HC12.print (",");        // Abgrenzung
    HC12.print (tempaussen); // Messwert
    HC12.println (";");        // Abgrenzung

    HC12.print (Feuchtigkeit); // Kommando
    HC12.print (",");        // Abgrenzung
    HC12.print (feuchteaussen); // Messwert
    HC12.println (";");        // Abgrenzung
  }
  while (Serial.available())
  {      // If Serial monitor has data
  HC12.write(Serial.read());      // Send that data to HC-12
  }
  delay(1000);
}


Das funktioniert so schon mal, aber nur wenn ich etwas über den seriellen Monitor schicke.
Dann sendet er ca. 10 mal die Temp. und die Luftfeuchte und wartet bis ich wieder etwas schreibe.
Die Ausgabe sieht so aus:

Code: [Select]

10:20:32.801 -> Hallo
10:20:41.914 -> 1,21.00;
10:20:41.914 -> 2,49.50;
10:20:41.914 -> 1,21.00;
10:20:41.961 -> 2,49.50;
10:20:41.961 -> 1,21.00;
10:20:41.961 -> 2,49.50;
10:20:41.961 -> 1,21.00;
10:20:41.961 -> 2,49.50;
10:20:42.014 -> 1,21.00;
10:20:42.014 -> 2,49.50;
10:20:42.014 -> 1,21.00;
10:20:42.014 -> 2,49.50;
10:20:42.060 -> 1,21.00;
10:20:42.060 -> 2,49.50;
10:20:42.060 -> 1,21.00;
10:20:42.060 -> 2,49.50;
10:20:42.114 -> 1,21.00;
10:20:42.114 -> 2,49.50;
10:20:42.114 -> 1,21.00;
10:20:42.114 -> 2,49.50;
10:20:42.114 -> 1,21.00;
10:20:42.161 -> 2,49.50;
10:20:42.161 -> 1,21.00;
10:20:42.161 -> 2,49.50;
10:20:42.161 -> 1,21.00;
10:20:42.215 -> 2,49.50;
10:20:42.215 -> 1,21.00;
10:20:42.215 -> 2,49.50;
10:20:42.215 -> 1,21.00;
10:20:42.215 -> 2,49.50;



Ich habe nur einmal "Hallo zurück" los geschickt. Dann schickt er den ganzen Text auf einmal.

Übrigens: Der 2. Arduino hat noch meinen ersten Sketch.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: Peter-CAD-HST on Sep 17, 2020, 10:47 am
Moin adruinoboy
schaue dir dazu das Beispiel  Serial Event example aus dem IDE an.
Gruss Peter
und gesund bleiben
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Sep 17, 2020, 11:50 am
Danke für deinen Hinweis. ich habe versucht das in meinen Sketch einzubauen.

Code: [Select]

#include <SoftwareSerial.h>
#include "DHT.h"          //DHT Bibliothek laden

enum Comand {
              Temperatur   = 1,
              Feuchtigkeit = 2
            };

unsigned long BT_timestore;        //Variable Speicher für Systemzeit
float tempinnen = 0;
float feuchteinnen = 0;
String Temperatur = "";            // a String to hold incoming data
String Luftfeuchte = "";           // a String to hold incoming data
bool stringtempComplete = false;   // wheter the string is complete
bool stringfeuchteComplete = false;// wheter the string is complete

#define DHTPIN 2        //DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   //Es handelt sich um den DHT22 Sensor

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin
DHT dht(DHTPIN, DHTTYPE); //Der Sensor wird ab jetzt mit "dht" angesprochen

void setup()
{
 Serial.begin(9600);             // Serial port to computer
 HC12.begin(9600);               // Serial port to HC12
 //reserve 200 byzes for the Temp. und Luftfeuchte
 Temperatur.reserve(200);
 Luftfeuchte.reserve(200);
}

void loop()
{
  tempinnen = dht.readTemperature(); //Temperatur innen wird gemessen und gespeichert
  feuchteinnen = dht.readHumidity(); //Luftfeuchte innen wird gemessen und gespeichert

  while (HC12.available())        // If HC-12 has data
  {
  Serial.write(HC12.read());      // Send the data to Serial monitor
  //Senden der Messwerte
    HC12.print (Temperatur);   // Kommando
    HC12.print (",");          // Abgrenzung
    HC12.print (tempaussen);   // Messwert
    HC12.println (";");        // Abgrenzung

    HC12.print (Feuchtigkeit);  // Kommando
    HC12.print (",");           // Abgrenzung
    HC12.print (feuchteaussen); // Messwert
    HC12.println (";");         // Abgrenzung
  }
  while (Serial.available())
  {      // If Serial monitor has data
  HC12.write(Serial.read());      // Send that data to HC-12
  }
  if (stringtempComplete)
  {
    Serial.println(Temperatur);
    //clear the string:
    Temperatur = "";
    stringtempComplete = false;
  }

  if (stringfeuchteComplete)
  {
    Serial.println(Luftfeuchte);
    //clear the string:
    Luftfeuchte = "";
    stringfeuchteComplete = false;
  }
}

void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    Temperatur += inChar;
    Luftfeuchte += inChar;
    // if the incoming character is a newline, set a flag so the main loop can
    // do something about it:
    if (inChar == '\n') {
      stringtempComplete = true;
      stringfeuchteComplete = true;
    }
  }
}


Probleme macht jetzt diese Zeile:
String Temperatur = "";

Die Fehlermeldung sieht so aus:
exit status 1
'String Temperatur' redeclared as different kind of symbol
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Sep 17, 2020, 12:02 pm
Du willst doch mit diesem Sketch die Daten senden ?

Dann solltest du das mal vom auslesen der seriellen Schnittstelle und des HC-12 trennen.

Also schmeiß alles raus und sende nur die Daten.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Sep 17, 2020, 12:13 pm
Ja, ich habe meine ganzen Informationen in Sketche aufgeteilt.
Der eine soll senden, der andere nur aus lesen.
Also Meine Sender sieht jetzt so aus:

Code: [Select]

#include <Streaming.h>    //Bibliothek zur BT Verbindung
#include <SoftwareSerial.h>
#include "DHT.h"          //DHT Bibliothek laden

enum Comand {
              Temperatur   = 1,
              Feuchtigkeit = 2
            };

unsigned long BT_timestore;        // Variable Speicher für Systemzeit

#define DHTPIN 2        // DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   // Es handelt sich um den DHT22 Sensor

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin
DHT dht(DHTPIN, DHTTYPE);    // Der Sensor wird ab jetzt mit "dht" angesprochen

void setup()
{
 Serial.begin(9600);             // Serial port to computer
 HC12.begin(9600);               // Serial port to HC12
}

void loop()
{
  tempaussen = dht.readTemperature(); // Temperatur innen wird gemessen und gespeichert
  feuchteaussen = dht.readHumidity(); // Luftfeuchte innen wird gemessen und gespeichert

  while (HC12.available())        // If HC-12 has data
  {
  //Senden der Messwerte
    HC12.print (Temperatur);   // Kommando
    HC12.print (",");          // Abgrenzung
    HC12.print (tempaussen);   // Messwert
    HC12.println (";");        // Abgrenzung

    HC12.print (Feuchtigkeit);  // Kommando
    HC12.print (",");           // Abgrenzung
    HC12.print (feuchteaussen); // Messwert
    HC12.println (";");         // Abgrenzung
  }
  while (Serial.available())
  {      // If Serial monitor has data
  HC12.write(Serial.read());      // Send that data to HC-12
  }
}


Mein Empfänger so:

Code: [Select]

#include <Streaming.h>    //Bibliothek zur BT Verbindung
#include <SoftwareSerial.h>
#include "DHT.h"          //DHT Bibliothek laden

enum Comand {
              Temperatur   = 1,
              Feuchtigkeit = 2
            };

unsigned long BT_timestore;        //Variable Speicher für Systemzeit
float tempinnen = 0;
float feuchteinnen = 0;
String Temperatur = "";            // a String to hold incoming data
String Luftfeuchte = "";           // a String to hold incoming data
bool stringtempComplete = false;   // wheter the string is complete
bool stringfeuchteComplete = false;// wheter the string is complete

#define DHTPIN 2        //DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   //Es handelt sich um den DHT22 Sensor

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin
DHT dht(DHTPIN, DHTTYPE); //Der Sensor wird ab jetzt mit "dht" angesprochen

void setup()
{
 Serial.begin(9600);             // Serial port to computer
 HC12.begin(9600);               // Serial port to HC12
 //reserve 200 byzes for the Temp. und Luftfeuchte
 Temperatur.reserve(200);
 Luftfeuchte.reserve(200);
}

void loop()
{
  tempinnen = dht.readTemperature(); //Temperatur innen wird gemessen und gespeichert
  feuchteinnen = dht.readHumidity(); //Luftfeuchte innen wird gemessen und gespeichert

  while (HC12.available())        // If HC-12 has data
  {
  Serial.write(HC12.read());      // Send the data to Serial monitor
  //Senden der Messwerte
    HC12.print (Temperatur);   // Kommando
    HC12.print (",");          // Abgrenzung
    HC12.print (tempaussen);   // Messwert
    HC12.println (";");        // Abgrenzung

    HC12.print (Feuchtigkeit);  // Kommando
    HC12.print (",");           // Abgrenzung
    HC12.print (feuchteaussen); // Messwert
    HC12.println (";");         // Abgrenzung
  }
  while (Serial.available())
  {      // If Serial monitor has data
  HC12.write(Serial.read());      // Send that data to HC-12
  }
  if (stringtempComplete)
  {
    Serial.println(Temperatur);
    //clear the string:
    Temperatur = "";
    stringtempComplete = false;
  }

  if (stringfeuchteComplete)
  {
    Serial.println(Luftfeuchte);
    //clear the string:
    Luftfeuchte = "";
    stringfeuchteComplete = false;
  }
}

void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    Temperatur += inChar;
    Luftfeuchte += inChar;
    // if the incoming character is a newline, set a flag so the main loop can
    // do something about it:
    if (inChar == '\n') {
      stringtempComplete = true;
      stringfeuchteComplete = true;
    }
  }
}
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Sep 17, 2020, 12:46 pm
Und wozu hast du im Sender diese Anweisung ?
Code: [Select]
while (HC12.available())        // If HC-12 has data

Die brauchst da nicht.
Und im Empfänger sehe ich da auch Optimierungspotential.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Sep 17, 2020, 01:05 pm
Danke. Beim Sender gibt es keine Probleme beim Hochladen.

Ich freue mich sehr, wenn du mich langsam durch deine Optimierungsschritte leiten könntest.
Ich würde gerne einen optimalen Sketch haben und dabei etwas lernen.

Der Empfänger hat beim Hochladen folgendes Problem:

exit status 1
'String Temperatur' redeclared as different kind of symbol

Der Fehler bezieht sich auf diese Zeile:
String Temperatur = "";

Ich verstehe das Problem nicht.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: michael_x on Sep 17, 2020, 01:59 pm
Code: [Select]
enum Comand {
              Temperatur   = 1,
              Feuchtigkeit = 2
            };

String Temperatur = "";

void setup() {}
void loop() {}
Problem

Neben Umbenennen hilft auch

Code: [Select]
enum class Comand {
              Temperatur  ,
              Feuchtigkeit
            };

String Temperatur = "";
Comand typ = Comand::Temperatur;
void setup() {}
void loop() {}
erfordert Comand::Temperatur bei Bedarf
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Sep 17, 2020, 08:53 pm
Danke. Beim Sender gibt es keine Probleme beim Hochladen.

Ich freue mich sehr, wenn du mich langsam durch deine Optimierungsschritte leiten könntest.
Ich würde gerne einen optimalen Sketch haben und dabei etwas lernen.

Wenn es beim Hochladen keine Problem gibt, heißt es nicht, dass es auch funktioniert.

Warum siehst du dir nicht die Beispiele an, die ich in Post #26 verlinkt habe.
Da ist alles sehr genau beschrieben und funktioniert.

Du musst beim Senden nicht vorher den Empfänger auf Daten abfragen.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Sep 17, 2020, 08:59 pm
Ich habe meinen Sketch laut den Hinweisen von Michael_x angepasst.
Ich muss ja für die Temperatur als auch für die Feuchtigkeit den Comand typ erstellen. Bei der Temperatur meckert das Programm nicht, aber bei der Feuchtigkeit. Mein Sketch sieht so aus:

Code: [Select]

#include <Streaming.h>    //Bibliothek zur BT Verbindung
#include <SoftwareSerial.h>
#include "DHT.h"          //DHT Bibliothek laden

enum class Comand {
              Temperatur ,
              Feuchtigkeit
            };

unsigned long BT_timestore;        //Variable Speicher für Systemzeit
float tempinnen = 0;
float feuchteinnen = 0;
String Temperatur = "";            // a String to hold incoming data
Comand typ = Comand::Temperatur;   // Wird nur bei Bedarf erzeugt
String Luftfeuchte = "";           // a String to hold incoming data
Comand typ = Comand::Luftfeuchte;  // Wird nur bei Bedarf erzeugt
bool stringtempComplete = false;   // wheter the string is complete
bool stringfeuchteComplete = false;// wheter the string is complete

#define DHTPIN 2        //DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   //Es handelt sich um den DHT22 Sensor

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin
DHT dht(DHTPIN, DHTTYPE); //Der Sensor wird ab jetzt mit "dht" angesprochen

void setup()
{
 Serial.begin(9600);             // Serial port to computer
 HC12.begin(9600);               // Serial port to HC12
 //reserve 200 byzes for the Temp. und Luftfeuchte
 Temperatur.reserve(200);
 Luftfeuchte.reserve(200);
}

void loop()
{
  tempinnen = dht.readTemperature(); //Temperatur innen wird gemessen und gespeichert
  feuchteinnen = dht.readHumidity(); //Luftfeuchte innen wird gemessen und gespeichert

  while (HC12.available())        // If HC-12 has data
  {
  Serial.write(HC12.read());      // Send the data to Serial monitor
  //Senden der Messwerte
    HC12.print (Temperatur);   // Kommando
    HC12.print (",");          // Abgrenzung
    HC12.print (tempinnen);   // Messwert
    HC12.println (";");        // Abgrenzung

    HC12.print (Feuchtigkeit);  // Kommando
    HC12.print (",");           // Abgrenzung
    HC12.print (feuchteinnen); // Messwert
    HC12.println (";");         // Abgrenzung
  }
  while (Serial.available())
  {      // If Serial monitor has data
  HC12.write(Serial.read());      // Send that data to HC-12
  }
  if (stringtempComplete)
  {
    Serial.println(Temperatur);
    //clear the string:
    Temperatur = "";
    stringtempComplete = false;
  }

  if (stringfeuchteComplete)
  {
    Serial.println(Luftfeuchte);
    //clear the string:
    Luftfeuchte = "";
    stringfeuchteComplete = false;
  }
}

void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    Temperatur += inChar;
    Luftfeuchte += inChar;
    // if the incoming character is a newline, set a flag so the main loop can
    // do something about it:
    if (inChar == '\n') {
      stringtempComplete = true;
      stringfeuchteComplete = true;
    }
  }
}


Die Fehlermeldung lautet:

exit status 1
redefinition of 'Comand typ'

Ich verstehe das nicht. Wenn ich die Zeile als Kommentar vernachlässige:
// Comand typ = Comand::Luchtfeuchte;
Meckert er, dass Feuchtigkeit nicht definiert ist.

Freue mich über weitere Hilfestellungen.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Sep 17, 2020, 09:24 pm
Lt. welchen Hinweisen ?
Kannst du das nicht zitieren oder beischreiben ?
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Sep 17, 2020, 11:06 pm
Warum siehst du dir nicht die Beispiele an, die ich in Post #26 verlinkt habe.
Da ist alles sehr genau beschrieben und funktioniert.

Auf der Seite finde ich am Ende nur ein Beispiel zur Parametrierung des HC-12 Moduls.
Ich wüsste nicht, wie ich das für mich anwenden könnte.

Ich freue mich, wenn du mich eines besseren Belehren könntest.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: Serenifly on Sep 17, 2020, 11:20 pm
Code: [Select]

enum class Comand {
              Temperatur ,
              Feuchtigkeit
            };

Code: [Select]

Comand typ = Comand::Luftfeuchte;


Du musst das auch richtig und konsequent anwenden

Eigentlich sollte eher gemeckert werden dass "Luftfeuchte" nicht definiert ist


Außerdem definierst du "typ" zweimal:
Code: [Select]

Comand typ = Comand::Temperatur;
Comand typ = Comand::Luftfeuchte;


Und "command" schreibt man mit zwei 'm' ;)
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Sep 17, 2020, 11:42 pm
Danke Serenifly,

das sollte eigentlich klar sein. Tut mir Leid, dass ich so unaufmerksam war.
Ich habe jetzt meine Variablen konstant angewendet und Command richtig geschrieben ;)
Dann funktioniert es auch sofort besser.

Meine Sender-Sketch sieht so aus:

Code: [Select]

#include <Streaming.h>    //Bibliothek zur BT Verbindung
#include <SoftwareSerial.h>
#include "DHT.h"          //DHT Bibliothek laden

enum class Command {
              Temperatur ,
              Feuchtigkeit
            };

float Temperatur = 0;
float Feuchtigkeit = 0;
unsigned long BT_timestore;        // Variable Speicher für Systemzeit

#define DHTPIN 2        // DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   // Es handelt sich um den DHT22 Sensor

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin
DHT dht(DHTPIN, DHTTYPE);    // Der Sensor wird ab jetzt mit "dht" angesprochen

void setup()
{
 Serial.begin(9600);             // Serial port to computer
 HC12.begin(9600);               // Serial port to HC12
}

void loop()
{
  Temperatur = dht.readTemperature(); // Temperatur innen wird gemessen und gespeichert
  Feuchtigkeit = dht.readHumidity(); // Luftfeuchte innen wird gemessen und gespeichert

  //Senden der Messwerte
    HC12.print (Temperatur);   // Kommando
    HC12.print (",");          // Abgrenzung
    HC12.print (Feuchtigkeit);  // Kommando
    HC12.print (",");           // Abgrenzung
}


Und mein Empfänger-Sketch:

Code: [Select]

#include <Streaming.h>    //Bibliothek zur BT Verbindung
#include <SoftwareSerial.h>
#include "DHT.h"          //DHT Bibliothek laden

enum class Command {
              Temperatur ,
              Feuchtigkeit
            };

unsigned long BT_timestore;        //Variable Speicher für Systemzeit
String Temperatur = "";            // a String to hold incoming data
Command typ1 = Command::Temperatur;   // Wird nur bei Bedarf erzeugt
String Feuchtigkeit = "";           // a String to hold incoming data
Command typ2 = Command::Feuchtigkeit;  // Wird nur bei Bedarf erzeugt
bool stringtempComplete = false;   // wheter the string is complete
bool stringfeuchteComplete = false;// wheter the string is complete

#define DHTPIN 2        //DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   //Es handelt sich um den DHT22 Sensor

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin
DHT dht(DHTPIN, DHTTYPE); //Der Sensor wird ab jetzt mit "dht" angesprochen

void setup()
{
 Serial.begin(9600);             // Serial port to computer
 HC12.begin(9600);               // Serial port to HC12
 //reserve 200 byzes for the Temp. und Luftfeuchte
 Temperatur.reserve(200);
 Feuchtigkeit.reserve(200);
}

void loop()
{
  Temperatur = dht.readTemperature(); //Temperatur innen wird gemessen und gespeichert
  Feuchtigkeit = dht.readHumidity(); //Luftfeuchte innen wird gemessen und gespeichert

  while (HC12.available())        // If HC-12 has data
  {
  Serial.write(HC12.read());      // Send the data to Serial monitor
  //Senden der Messwerte
    HC12.print (Temperatur);   // Kommando
    HC12.print (",");          // Abgrenzung
    HC12.print (Feuchtigkeit);  // Kommando
    HC12.print (",");           // Abgrenzung
  }
  while (Serial.available())
  {      // If Serial monitor has data
  HC12.write(Serial.read());      // Send that data to HC-12
  }
  if (stringtempComplete)
  {
    Serial.println(Temperatur);
    //clear the string:
    Temperatur = "";
    stringtempComplete = false;
  }

  if (stringfeuchteComplete)
  {
    Serial.println(Feuchtigkeit);
    //clear the string:
    Feuchtigkeit = "";
    stringfeuchteComplete = false;
  }
}

void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    Temperatur += inChar;
    Feuchtigkeit += inChar;
    // if the incoming character is a newline, set a flag so the main loop can
    // do something about it:
    if (inChar == '\n') {
      stringtempComplete = true;
      stringfeuchteComplete = true;
    }
  }
}


Ihr wollt bestimmt wissen was am Empfänger raus kommt. So was hier:

Code: [Select]

23:40:34.195 -> b⸮⸮L⸮/90ɹ⸮⸮⸮⸮⸮⸮21n⸮⸮r⸮ILL⸮.9XŽ⸮⸮KM⸮,21ݱ⸮⸮⸮⸮0,b⸮b⸮⸮$LL⸮.9X⸮݂⸮%MN⸮2L'b⸮⸮rLKKK⸮b⸮bN⸮,⸮⸮4LK%I⸮⸮Mh⸮⸮⸮S⸮hD⸮''t⸮b⸮Mh⸮'b⸮⸮⸮L.70,f⸮b⸮t⸮⸮i'⸮&MK⸮217⸮⸮r⸮⸮t⸮⸮⸮KK⸮1.⸮њrbt⸮⸮⸮KK⸮1.⸮њrbt⸮⸮⸮KK⸮11b&I4⸮$Dr&b⸮Ѻ⸮L%ӂ⸮`i⸮\⸮⸮I⸮3⸮trLK⸮LI⸮XŹ2⸮3⸮$it&&%r.70,45.00,21.70,45.00,21.70,45.00,21.70,45.00,21.70,45.00,21.70X⸮⸮L#⸮r⸮⸮SSD1L&⸮⸮.⸮⸮D$⸮⸮&M⸮.Dɘ⸮⸮LL⸮$r⸮⸮⸮rM.60,44.90,21.60,44.90,21.60,44.90,21.60,44.90,21.60,44.90,21.60.MNIb⸮NK⸮$dN2L&⸮r\%⸮&⸮⸮L,bM⸮6⸮b⸮⸮K⸮db'.70ѹ⸮⸮L⸮⸮&⸮M⸮⸮21ݱ⸮⸮⸮I⸮KM⸮,21ݱ⸮⸮ ⸮I&KM⸮,


Für mich schon mal ein Fortschritt. Aber ich hoffe es geht noch besser :)
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Sep 18, 2020, 08:44 am
Auf der Seite finde ich am Ende nur ein Beispiel zur Parametrierung des HC-12 Moduls.
Ich wüsste nicht, wie ich das für mich anwenden könnte.

Ich freue mich, wenn du mich eines besseren Belehren könntest.
Ahh...ich sehe schon, du hast es ja schon so hinbekommen.
Endlich auch ohne der überflüssigen Abfrage im Sender. ;)

Aber du hast Recht, in dem Beitrag ist kein Tutorial für den HC-12 mehr vorhanden.
K.A. wo das geblieben ist, egal geht ja jetzt.

Was das Problem mit den gezeigten Daten ist, muss ich mir noch näher ansehen.

Da du ja kein Streaming weiter verwendest, kannst du die Einbindung der Library auch wieder entfernen.

Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Sep 18, 2020, 04:27 pm
Ja, okay. Ich habe die Bibliotheken rausgenommen.
Also nochmal, fast das gleiche. Der Sender:

Code: [Select]

#include <SoftwareSerial.h>
#include "DHT.h"          //DHT Bibliothek laden

enum class Command {
              Temperatur ,
              Feuchtigkeit
            };

float Temperatur = 0;
float Feuchtigkeit = 0;
unsigned long BT_timestore;        // Variable Speicher für Systemzeit

#define DHTPIN 2        // DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   // Es handelt sich um den DHT22 Sensor

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin
DHT dht(DHTPIN, DHTTYPE);    // Der Sensor wird ab jetzt mit "dht" angesprochen

void setup()
{
 Serial.begin(9600);             // Serial port to computer
 HC12.begin(9600);               // Serial port to HC12
}

void loop()
{
  Temperatur = dht.readTemperature(); // Temperatur innen wird gemessen und gespeichert
  Feuchtigkeit = dht.readHumidity(); // Luftfeuchte innen wird gemessen und gespeichert

  //Senden der Messwerte
    HC12.print (Temperatur);   // Kommando
    HC12.print (",");          // Abgrenzung
    HC12.print (Feuchtigkeit);  // Kommando
    HC12.print (",");           // Abgrenzung
}


Und hier der Empfänger:

Code: [Select]

#include <SoftwareSerial.h>
#include "DHT.h"          //DHT Bibliothek laden

enum class Command {
              Temperatur ,
              Feuchtigkeit
            };

unsigned long BT_timestore;        //Variable Speicher für Systemzeit
String Temperatur = "";            // a String to hold incoming data
Command typ1 = Command::Temperatur;   // Wird nur bei Bedarf erzeugt
String Feuchtigkeit = "";           // a String to hold incoming data
Command typ2 = Command::Feuchtigkeit;  // Wird nur bei Bedarf erzeugt
bool stringtempComplete = false;   // wheter the string is complete
bool stringfeuchteComplete = false;// wheter the string is complete

#define DHTPIN 2        //DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   //Es handelt sich um den DHT22 Sensor

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin
DHT dht(DHTPIN, DHTTYPE); //Der Sensor wird ab jetzt mit "dht" angesprochen

void setup()
{
 Serial.begin(9600);             // Serial port to computer
 HC12.begin(9600);               // Serial port to HC12
 //reserve 200 byzes for the Temp. und Luftfeuchte
 Temperatur.reserve(200);
 Feuchtigkeit.reserve(200);
}

void loop()
{
  Temperatur = dht.readTemperature(); //Temperatur innen wird gemessen und gespeichert
  Feuchtigkeit = dht.readHumidity(); //Luftfeuchte innen wird gemessen und gespeichert

  while (HC12.available())        // If HC-12 has data
  {
  Serial.write(HC12.read());      // Send the data to Serial monitor
  //Senden der Messwerte
    HC12.print (Temperatur);   // Kommando
    HC12.print (",");          // Abgrenzung
    HC12.print (Feuchtigkeit);  // Kommando
    HC12.print (",");           // Abgrenzung
  }
  while (Serial.available())
  {      // If Serial monitor has data
  HC12.write(Serial.read());      // Send that data to HC-12
  }
  if (stringtempComplete)
  {
    Serial.println(Temperatur);
    //clear the string:
    Temperatur = "";
    stringtempComplete = false;
  }

  if (stringfeuchteComplete)
  {
    Serial.println(Feuchtigkeit);
    //clear the string:
    Feuchtigkeit = "";
    stringfeuchteComplete = false;
  }
}

void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    Temperatur += inChar;
    Feuchtigkeit += inChar;
    // if the incoming character is a newline, set a flag so the main loop can
    // do something about it:
    if (inChar == '\n') {
      stringtempComplete = true;
      stringfeuchteComplete = true;
    }
  }
}


Ich freue mich, wenn ihr da noch genauer rein schaut.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Sep 18, 2020, 04:40 pm
Was mir auch auffällt, du hast am Empfänger auch den Sensor dran und liest ihn aus.
Willst du beide Sensordaten gleichzeitig anzeigen ?
Dann musst du das aber anders aufbauen, also nacheinander.


Also wozu ist das hier im Empfänger ?

Code: [Select]
#define DHTPIN 2        //DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   //Es handelt sich um den DHT22 Sensor

DHT dht(DHTPIN, DHTTYPE); //Der Sensor wird ab jetzt mit "dht" angesprochen

Temperatur = dht.readTemperature(); //Temperatur innen wird gemessen und gespeichert
Feuchtigkeit = dht.readHumidity(); //Luftfeuchte innen wird gemessen und gespeichert

    HC12.print (Temperatur);   // Kommando
    HC12.print (",");          // Abgrenzung
    HC12.print (Feuchtigkeit);  // Kommando
    HC12.print (",");           // Abgrenzung



usw.
Im Empfänger willst du doch sicher nur die gesendeten Daten anzeigen ?
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Sep 18, 2020, 05:45 pm
Ich habe hier mal einen Teil meines Empfänger-Test-Sketches mit dem HC-12 kopiert.
Es ist nur die Loop, aus der du die notwendigen Teile entnehmen kannst.

Code: [Select]
void loop()
{
  if (HC12.available() > 0) {
    inputString = "";
    while (HC12.available() > 0) {
      digitalWrite(ledPin, HIGH);
      //Serial.print(char(HC12.read()));

      char inChar = (char(HC12.read()));
      inputString.concat(inChar);                 // Füge das Zeichen an den String an, damit wir den kompletten Text erhalten
      if (inputString != "")
      {
        if (inChar == '\r') {
          stringComplete = true;
        }
      }
    }
  }
  lcd.setCursor(0, 1);
  if (stringComplete) {
    char c_Input[10];
    inputString.toCharArray(c_Input, 7);
    lcd.print(c_Input);                           // Anzeige auf LCD
  }
  delay(100);
  digitalWrite(ledPin, LOW);
}


Die Anzeige erfolgt hier auf einem LCD, welches du aber leicht für dich anpassen kannst.
Z.B. auf dem seriellen Monitor.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Sep 18, 2020, 11:42 pm
Hallo HotSystems,

der Empfänger soll sowohl die empfangenen Daten vom Sender anzeigen als auch die eigenen Temperatur und Feichtigkeitswerte des eigenen Sensors.
Deswegen dieser Teilsketch.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Sep 19, 2020, 12:16 am
Vielen Dank erstmal wieder für deine Hilfe. Ich habe den Sketch jetzt soweit angepasst.
Der Empfängersketch lautet:

Code: [Select]

#include <SoftwareSerial.h>
#include "DHT.h"          //DHT Bibliothek laden

enum class Command {
              Temperatur ,
              Feuchtigkeit
            };

unsigned long BT_timestore;        //Variable Speicher für Systemzeit
String Temperatur = "";            // a String to hold incoming data
String inputString = "";           //Definition für Empfangene Daten HC12
String stringComplete = "";        //Definition für Empfangene Daten HC12
Command typ1 = Command::Temperatur;   // Wird nur bei Bedarf erzeugt
String Feuchtigkeit = "";           // a String to hold incoming data
Command typ2 = Command::Feuchtigkeit;  // Wird nur bei Bedarf erzeugt
bool stringtempComplete = false;   // wheter the string is complete
bool stringfeuchteComplete = false;// wheter the string is complete

#define DHTPIN 2        //DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   //Es handelt sich um den DHT22 Sensor

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin
DHT dht(DHTPIN, DHTTYPE); //Der Sensor wird ab jetzt mit "dht" angesprochen

void setup()
{
 Serial.begin(9600);             // Serial port to computer
 HC12.begin(9600);               // Serial port to HC12
 //reserve 200 byzes for the Temp. und Luftfeuchte
 Temperatur.reserve(200);
 Feuchtigkeit.reserve(200);
}

void loop()
{
  if (HC12.available() > 0)
  {
    inputString = "";
    while (HC12.available() > 0)
    {
      char inChar = (char(HC12.read()));
      inputString.concat(inChar);           //Füge das Zeichen an den String an, damit wir den kompletten Text erhalten
      if (inputString != "")
      {
        if (inChar == '\r')
        {
          stringComplete = true;
        }
      }
    }
  }
  //lcd.setCursor(0, 1);
  if (stringComplete)
  {
    char c_Input[10];
    inputString.toCharArray(c_Input, 7);
    Serial.println(c_Input);                        //Anzeige auf seriellem Monitor
  }
  delay(100);
}


Aber immernoch bekomme ich ganz schön viel Müll raus.

Die Ausgabe sieht folgendermaßen aus:

Code: [Select]

00:12:26.080 ->
00:12:26.265 -> ⸮⸮r⸮⸮⸮
00:12:26.350 -> 0,49.1
00:12:26.444 -> ,49.10
00:12:26.566 -> 49.10,
00:12:26.666 -> 9.10,2
00:12:26.767 -> 9.10,2
00:12:26.867 -> 9.10,2
00:12:26.967 -> 22.00,
00:12:27.067 -> 22.00,
00:12:27.215 -> 2.00,4
00:12:27.315 -> .00,49
00:12:27.415 -> 0,49.0
00:12:27.516 -> 0,49.0
00:12:27.669 -> 0,22.0
00:12:27.769 -> ,22.00
00:12:27.870 -> 22.00,
00:12:27.970 -> 2.00,4
00:12:28.070 -> .00,49
00:12:28.170 -> 00,49.
00:12:28.318 -> 0,49.0
00:12:28.418 -> ,49.00
00:12:28.518 -> 49.00,
00:12:28.619 -> 9.00,2
00:12:28.719 -> .00,22
00:12:28.819 -> .00,22
00:12:28.920 -> .00,22
00:12:29.020 -> 22.00,
00:12:29.120 -> 2.00,4
00:12:29.274 -> .00,49
00:12:29.374 -> 00,49.
00:12:29.475 -> 0,49.0
00:12:29.575 -> ,49.00
00:12:29.807 -> 49.00,
00:12:29.807 -> .00,22
00:12:29.891 -> .00,22
00:12:30.023 -> 00,22.
00:12:30.123 -> 0,22.0
00:12:30.224 -> 22.00,
00:12:30.324 -> .00,49
00:12:30.424 -> 00,49.
00:12:30.578 -> 0,49.0
00:12:30.678 -> 0,49.0
00:12:30.778 -> 0,49.0
00:12:30.879 -> 0,49.0
00:12:30.979 -> 22.00,
00:12:31.079 -> .00,22
00:12:31.180 -> 00,22.
00:12:31.280 -> 0,22.0
00:12:31.380 -> 22.00,
00:12:31.527 -> 22.00,
00:12:31.628 -> 2.00,4
00:12:31.728 -> .00,49
00:12:31.828 -> 00,49.
00:12:31.982 -> 0,49.0
00:12:32.082 -> 0,22.0
00:12:32.182 -> ,22.00
00:12:32.283 -> 22.00,
00:12:32.383 -> 2.00,4
00:12:32.483 -> .00,49
00:12:32.584 -> 00,49.
00:12:32.731 -> 0,49.0
00:12:32.831 -> 0,49.0
00:12:32.932 -> 0,49.0
00:12:33.032 -> 22.00,
00:12:33.132 -> .00,22
00:12:33.232 -> .00,49
00:12:33.386 -> 00,49.
00:12:33.487 -> 0,49.0
00:12:33.587 -> ,49.00
00:12:33.687 -> 49.00,
00:12:33.787 -> 9.00,2
00:12:33.888 -> 00,22.
00:12:34.035 -> ,22.00
00:12:34.135 -> 2.00,4
00:12:34.236 -> 2.00,4
00:12:34.336 -> 2.00,4
00:12:34.437 -> 2.00,4
00:12:34.536 -> .00,49
00:12:34.690 -> 00,49.
00:12:34.790 -> 00,49.
00:12:34.837 -> 00,49.
00:12:34.991 -> 22.00,
00:12:35.091 -> .00,22
00:12:35.191 -> 00,22.
00:12:35.292 -> 0,22.0
00:12:35.392 -> ,22.00
00:12:35.492 -> 22.00,
00:12:35.640 -> 2.00,4
00:12:35.740 -> 00,49.
00:12:35.840 -> 0,49.0
00:12:35.940 -> 9.00,2
00:12:36.094 -> 0,22.0
00:12:36.194 -> .00,49
00:12:36.295 -> 0,49.0
00:12:36.395 -> ,49.00
00:12:36.495 -> 49.00,
00:12:36.642 -> 9.00,2
00:12:36.743 -> .00,22
00:12:36.843 -> .00,22
00:12:36.943 -> .00,22
00:12:37.044 -> 22.00,
00:12:37.145 -> 2.00,4
00:12:37.297 -> .00,49
00:12:37.398 -> 00,49.
00:12:37.498 -> 0,49.0
00:12:37.598 -> ,49.00
00:12:37.699 -> 9.00,2
00:12:37.799 -> 9.00,2
00:12:37.946 -> 00,22.
00:12:38.047 -> ,22.00
00:12:38.147 -> ,22.00
00:12:38.300 -> 0,49.0
00:12:38.400 -> 9.00,2
00:12:38.501 -> 0,22.0
00:12:38.601 -> ,22.00
00:12:38.701 -> 22.00,
00:12:38.802 -> 22.00,
00:12:38.902 -> 22.00,
00:12:39.002 -> 22.00,



Irgendwas passt mit der Trennung der Zahlen nicht.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: wno158 on Sep 19, 2020, 03:04 pm
Nimm mal das delay(100) am Ende der Loop raus.

Bei 9600bps hast Du ca. 1/10000s pro Bit, macht rund und eckig 1/1000s (1ms) pro Byte. Du wartest aber 100ms ohne dass die CPU irgendetwas anderes tun darf. In der Zeit können theoretisch bis zu 100 Byte vom HC12 einlaufen. Soooo lang ist der Engangspuffer von SoftSerial vermutlich nicht.

Das Lesen von Bytes findet ja richtigerweise nur statt, wenn Daten anliegen (HC12.available()). Die Verarbeitung findet statt, wenn der String komplett ist (stringComplete). Die loop() darf also wiederholt aufgerufen werden um den String vom HC12 einzusammeln.

Nur den InputString darfst Du dann nicht bei jedem einlaufenden Byte wieder löschen, sondern nur, nachdem er komplett ist. Und bei der Gelegenheit solltest Du dann stringComplete auch wieder zurücksetzen

Ohne es kompiliert oder getestet zu haben:
Code: [Select]

#include <SoftwareSerial.h>
#include "DHT.h"          //DHT Bibliothek laden

enum class Command {
              Temperatur ,
              Feuchtigkeit
            };

unsigned long BT_timestore;        //Variable Speicher für Systemzeit
String Temperatur = "";            // a String to hold incoming data
String inputString = "";         //Definition für Empfangene Daten HC12
String stringComplete = "";        //Definition für Empfangene Daten HC12
Command typ1 = Command::Temperatur;   // Wird nur bei Bedarf erzeugt
String Feuchtigkeit = "";           // a String to hold incoming data
Command typ2 = Command::Feuchtigkeit;  // Wird nur bei Bedarf erzeugt
bool stringtempComplete = false;   // wheter the string is complete
bool stringfeuchteComplete = false;// wheter the string is complete

#define DHTPIN 2        //DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   //Es handelt sich um den DHT22 Sensor

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin
DHT dht(DHTPIN, DHTTYPE); //Der Sensor wird ab jetzt mit "dht" angesprochen

void setup()
{
 Serial.begin(9600);             // Serial port to computer
 HC12.begin(9600);               // Serial port to HC12
 //reserve 200 byzes for the Temp. und Luftfeuchte
 Temperatur.reserve(200);
 Feuchtigkeit.reserve(200);
}

void loop()
{
  if (HC12.available() > 0)
  {
    // HIER NOCH NICHT LÖSCHEN!
 // inputString = "";
    while (HC12.available() > 0)
    {
      char inChar = (char(HC12.read()));
      inputString.concat(inChar);           //Füge das Zeichen an den String an, damit wir den kompletten Text erhalten
      if (inputString != "")
      {
        if (inChar == '\r')
        {
          stringComplete = true;
        }
      }
    }
  }
  //lcd.setCursor(0, 1);
  if (stringComplete)
  {
    char c_Input[10];
    inputString.toCharArray(c_Input, 7);
    Serial.println(c_Input);                        //Anzeige auf seriellem Monitor
 // JETZT ABER!
 inputString = "";
 stringComplete = false;
  }
  // BITTE NICHT.
  // delay(100);
}


Gruß Walter
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Sep 19, 2020, 04:11 pm
Hallo Walter,

danke für dein Bemühen. Deine Erklärung hört sich plausibel an. Ich habe den Empfänger auch so angepasst. Aber das Ergebnis ist das gleiche. Hier mein veränderter Sketch und dann die sinnlose Ausgabe auf dem seriellen Monitor:

Code: [Select]

#include <SoftwareSerial.h>
#include "DHT.h"          //DHT Bibliothek laden

enum class Command {
              Temperatur ,
              Feuchtigkeit
            };

unsigned long BT_timestore;        //Variable Speicher für Systemzeit
String Temperatur = "";            // a String to hold incoming data
String inputString = "";           //Definition für Empfangene Daten HC12
String stringComplete = "";        //Definition für Empfangene Daten HC12
Command typ1 = Command::Temperatur;   // Wird nur bei Bedarf erzeugt
String Feuchtigkeit = "";           // a String to hold incoming data
Command typ2 = Command::Feuchtigkeit;  // Wird nur bei Bedarf erzeugt
bool stringtempComplete = false;   // wheter the string is complete
bool stringfeuchteComplete = false;// wheter the string is complete

#define DHTPIN 2        //DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   //Es handelt sich um den DHT22 Sensor

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin
DHT dht(DHTPIN, DHTTYPE); //Der Sensor wird ab jetzt mit "dht" angesprochen

void setup()
{
 Serial.begin(9600);             // Serial port to computer
 HC12.begin(9600);               // Serial port to HC12
 //reserve 200 byzes for the Temp. und Luftfeuchte
 Temperatur.reserve(200);
 Feuchtigkeit.reserve(200);
}

void loop()
{
  if (HC12.available() > 0)
  {
    inputString = "";
    while (HC12.available() > 0)
    {
      char inChar = (char(HC12.read()));
      inputString.concat(inChar);           //Füge das Zeichen an den String an, damit wir den kompletten Text erhalten
      if (inputString != "")
      {
        if (inChar == '\r')
        {
          stringComplete = true;
        }
      }
    }
  }
  //lcd.setCursor(0, 1);
  if (stringComplete)
  {
    char c_Input[10];
    inputString.toCharArray(c_Input, 7);
    Serial.println(c_Input);                        //Anzeige auf seriellem Monitor
    inputString = "";
    stringComplete = false;
  }
}


Code: [Select]

16:09:15.597 ->
16:09:17.143 -> ͦ
16:09:17.143 -> &
16:09:17.143 ->
16:09:17.143 -> ⸮
16:09:17.143 ->
16:09:17.143 -> ⸮b
16:09:17.143 -> ⸮⸮r
16:09:17.143 -> ʂb
16:09:17.143 -> ⸮⸮r
16:09:17.256 -> ⸮⸮
16:09:17.256 ->
16:09:17.256 ->
16:09:17.256 ->
16:09:17.256 ->
16:09:17.256 ->
16:09:17.256 ->
16:09:17.256 -> 0,3
16:09:17.256 -> 7.9
16:09:17.256 -> 0,2
16:09:17.256 -> 3.4
16:09:17.256 -> 0,3
16:09:17.256 -> 7
16:09:17.256 ->
16:09:17.256 ->
16:09:17.256 ->
16:09:17.256 ->
16:09:17.256 ->
16:09:17.256 ->
16:09:17.256 ->
16:09:17.256 ->
16:09:17.256 ->
16:09:17.256 ->
16:09:17.256 ->
16:09:17.256 -> .9
16:09:17.256 -> 0,23.4
16:09:17.256 -> 0,37.9
16:09:17.256 -> 23.40,
16:09:17.256 -> 7.90,2
16:09:17.312 -> 40,37.
16:09:17.312 -> 0,23.4
16:09:17.312 -> 37.90,
16:09:17.312 -> 3.40,3
16:09:17.326 -> 90,2
16:09:17.326 -> 3.40,3
16:09:17.326 -> 23.40
16:09:17.326 -> ,37.9
16:09:17.326 -> 0,23.4
16:09:17.326 -> 7.90,
16:09:17.326 -> 23.40,
16:09:17.326 -> 90,2
16:09:17.326 -> 3.40,3
16:09:17.376 -> 0,23.4
16:09:17.376 -> 0,37.9
16:09:17.376 -> 23.40,
16:09:17.376 -> 90,23
16:09:17.423 -> .40,37
16:09:17.423 -> ,23
16:09:17.423 -> .40,37
16:09:17.423 -> 90,23.
16:09:17.423 -> ,37.90
16:09:17.423 -> 23.40,
16:09:17.423 -> 90,23
16:09:17.423 -> .40,37
16:09:17.470 -> ,23
16:09:17.470 -> .40,37
16:09:17.470 -> 90,23.
16:09:17.470 -> 37.90
16:09:17.470 -> ,23.40
16:09:17.516 -> .90,23
16:09:17.516 -> 40,37.
16:09:17.516 -> ,
16:09:17.516 ->
16:09:17.516 ->
16:09:17.516 ->
16:09:17.516 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.563 ->
16:09:17.610 ->
16:09:17.610 ->
16:09:17.610 ->
16:09:17.610 ->
16:09:17.610 ->
16:09:17.610 ->
16:09:17.610 ->
16:09:17.610 ->
16:09:17.610 ->
16:09:17.610 ->
16:09:17.610 ->
16:09:17.610 ->
16:09:17.610 ->
16:09:17.610 ->
16:09:17.610 ->
16:09:17.610 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.657 ->
16:09:17.704 ->
16:09:17.704 ->
16:09:17.704 ->
16:09:17.704 ->
16:09:17.704 ->
16:09:17.704 ->
16:09:17.704 ->
16:09:17.704 ->
16:09:17.704 ->
16:09:17.704 ->
16:09:17.704 ->
16:09:17.704 ->
16:09:17.704 ->
16:09:17.704 ->
16:09:17.704 ->
16:09:17.704 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 ->
16:09:17.752 -> 23.4
16:09:17.798 -> 0,37.8
16:09:17.798 -> ,23.4
16:09:17.798 -> 0,37.8
16:09:17.798 -> .40,37
16:09:17.845 -> .80,23
16:09:17.845 -> 40,37.
16:09:17.845 -> 23.40
16:09:17.845 -> ,37.80
16:09:17.892 -> .40
16:09:17.892 -> ,37.80
16:09:17.892 -> 23.40,
16:09:17.892 -> 80,23.
16:09:17.892 -> 0,37.8
16:09:17.892 -> 3.40,
16:09:17.892 -> 37.80,
16:09:17.892 -> 40
16:09:17.892 -> ,37.80
16:09:17.938 -> 23.40,
16:09:17.938 -> 80,23
16:09:17.938 -> .40,37
16:09:17.938 -> ,23.4
16:09:17.938 -> 0,37.8


Es gibt regelmäßige Aussetzer. Ich freue mich über weitere Hilfe. Ich komme da nicht weiter.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Sep 19, 2020, 04:37 pm
So wie das aussieht, sendest du die Daten ohne Pause.

Da solltest du beim Senden zwingend eine Pause einlegen.
Du musst die Daten nicht ständig senden. Mach eine längere Pause, min. 5 Sek. oder länger.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: wno158 on Sep 19, 2020, 06:20 pm
Habe jetzt den Sender nicht nochmal nachgeschlagen; schließe mich aber Dieters Argument an. So schnell ändern sich die Werte wohl nicht.

Aber in Zeile 39 (Sketch aus #50) setzt Du immer noch jedesmal, wenn Du erfolgreich auf Empfang von (mindestens) einem Byte prüfst, den inputString zurück.
Wenn Du da nicht zufällig auf den Anfang der Übertragung triffst geht es schief.

Gruß Walter
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Sep 19, 2020, 06:29 pm
Hallo Walter,
da das Beispiel des Sketches von mir kam, weiß ich, dass es auch so funktioniert.
Aber dein Vorschlag ist sicher auch ok.

Vermutlich liegt das Problem aber tatsächlich am gesendeten Signal.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: wno158 on Sep 19, 2020, 07:00 pm
Ah ja, das habe ich wohl verdrängt :)

Wenn das also mit langsamerem Sender nicht funktioniert, würde ich noch gerne ein "Sendeprotokoll" sehen, also die auf den HC12 gesendeten Informationen dort ebenfalls auf den seriellen Monitor kopieren.

Warum?

inputString.toCharArray(c_Input, 7); nimmt nur 7 Zeichen aus dem empfangenen String.
Wenn der Sender noch der aus #44 ist, darf der HC12.print() der beiden Float-Werte nicht allzu viele (Nachkomma)Stellen liefern: TTT.tt,FFF.ff, sind schon 14 Zeichen.
Deshalb würde ich mal nachsehen, was da eigentlich gesendet wird.

Eigentlich würde für die Ausgabe im Empfänger ja auch ein Serial.println(inputString.c_str()); reichen, oder?
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Sep 19, 2020, 10:08 pm
Eigentlich würde für die Ausgabe im Empfänger ja auch ein Serial.println(inputString.c_str()); reichen, oder?
Da fehlt mir die Erfahrung, habe es damit noch nicht probiert.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: michael_x on Sep 20, 2020, 10:42 am
Wenn du schon
String inputString hast, macht

Serial.println(inputString);  den Aufruf der .c_str() Methode selbst. Kannst du dir also sparen, oder machen, kein Unterschied.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: combie on Sep 20, 2020, 11:43 am
Moin adruinoboy,
die Fehlermeldung wird durch die Codezeilen
HC12.write << Temperatur << ',' << tempaussen << ';' << endl;
HC2.write << Feuchtigkeit << ',' << feuchteaussen << ';' << endl;
erzeugt.
Für diese einfache Anwendung ist ein Streaming nicht sinnvoll.
Ersetze diese durch
//  HC12.write << Temperatur << ',' << tempaussen << ';' << endl;
//  HC12.write << Feuchtigkeit << ',' << feuchteaussen << ';' << endl;

    HC12.print (Temperatur); // Kommando
    HC12.print (",");        // Abgrenzung
    HC12.print (tempaussen); // Messwert
    HC12.println (";");        // Abgrenzung

    HC12.print (Feuchtigkeit); // Kommando
    HC12.print (",");        // Abgrenzung
    HC12.print (feuchteaussen); // Messwert
    HC12.println (";");        // Abgrenzung
viel Erfolg
Gruss Peter
und gesund bleiben
Oje.....

Streaming nicht verstanden!
Nicht nur von dir ....

Code: [Select]

// falsch
HC12.write << Temperatur << ',' << tempaussen << ';' << endl;


// richtig
HC12 << Temperatur << ',' << tempaussen << ';' << endl;





Der Grund:
Der << Operator benötigt eine Referenz auf eine Print Instanz.
write ist allerdings eine Methode, welche nur die Anzahl gesendeter Bytes zurückgibt, keine Referenz auf eine Print Instanz.
Zudem fehlen die Klammern bei der Methode.

Also blanker Unsinn das so zu versuchen.


Quote
Für diese einfache Anwendung ist ein Streaming nicht sinnvoll.
Eine völlige Fehleinschätzung.


Streaming ist sinnvoll, wenn man ein Herz für Programmästhetik hat.
> Ästhetik bedeutet wörtlich:
> Lehre von der Wahrnehmung bzw. vom sinnlichen Anschauen.

Es hat also nichts mit der Einfachheit der Anwendung zu tun, sondern eher mit Empfindungen.


---

Zudem rate ich zum CmdMessenger, wenn man Probleme beim parsen von seriellen Übertragungen hat.
Denn der hat das dazu nötige Zeugs schon im Bauch.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: Peter-CAD-HST on Sep 20, 2020, 12:20 pm
Oje.....

Streaming nicht verstanden!
Nicht nur von dir ....


Code: [Select]

// falsch
HC12.write << Temperatur << ',' << tempaussen << ';' << endl;


// richtig
HC12 << Temperatur << ',' << tempaussen << ';' << endl;





Der Grund:
Der << Operator benötigt eine Referenz auf eine Print Instanz.
write ist allerdings eine Methode, welche nur die Anzahl gesendeter Bytes zurückgibt, keine Referenz auf eine Print Instanz.
Zudem fehlen die Klammern bei der Methode.

Also blanker Unsinn das so zu versuchen.

Eine völlige Fehleinschätzung.


Streaming ist sinnvoll, wenn man ein Herz für Programmästhetik hat.
> Ästhetik bedeutet wörtlich:
> Lehre von der Wahrnehmung bzw. vom sinnlichen Anschauen.

Es hat also nichts mit der Einfachheit der Anwendung zu tun, sondern eher mit Empfindungen.


---

Zudem rate ich zum CmdMessenger, wenn man Probleme beim parsen von seriellen Übertragungen hat.
Denn der hat das dazu nötige Zeugs schon im Bauch.

Quote
Streaming nicht verstanden!
Nicht nur von dir ....
Stimmt nicht, ich habe mich mit Thema "Streaming" nicht beschägtigt.
Erstmal eine falsche Aussage unterstellen, dass ist immer einfacher als kontruktive Beispiele zugeben.
Ich wünsche einen geschmeidigen Sonntag
Gruß Peter
und gesund bleiben
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: combie on Sep 20, 2020, 12:50 pm
Quote
Stimmt nicht, ich habe mich mit Thema "Streaming" nicht beschägtigt.
Stimmt also doch!
(ist deine Logik kaputt?)
Wer sich noch nicht mit sowas beschäftigt hat, kann es nicht verstanden haben.


Natürlich ist es auch viel einfacher über irgendwas zu urteilen, wenn man es nicht verstanden hat. Z.B. wird das Urteil dann nicht von irgendwelchen Fakten getrübt.
Nennt man dann auch gerne Vorurteil.

Merke:
Es ist nicht schlimm, irgendwas nicht zu wissen.
Aber es ist schlimm aus dem Nichtwissen (falsche) Urteile abzugeben.

Siehe:
> Für diese einfache Anwendung ist ein Streaming nicht sinnvoll.


Als Wissender, zumindest als Person mit fundiertem Halbwissen, erlaube ich mir das Fehlurteil zu kritisieren.
Dabei ist mir völlig egal, ob dir das schmeckt, oder nicht.
Keinesfalls lasse ich die Mitleser über die Klinge springen, nur damit dein Wohlbefinden gewahrt bleibt.

---

Quote
dass ist immer einfacher als kontruktive Beispiele zugeben.
Nunja...
Zumindest konnte ich dir(und anderen) zeigen, wie man es in diesem Fall richtig anwendet.
Es ist ok, wenn du das nicht als Beispiel akzeptieren möchtest, ....

Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: michael_x on Sep 20, 2020, 07:30 pm
Ob man Streaming verwendet oder nicht, ist völlig wurscht.
Macht - wenn man dran gewöhnt ist - das Programmieren der Ausgabe oft etwas einfacher und übersichtlicher.

Wenn man es verwendet, muss man es natürlich richtig machen, und dabei hilft es ungemein, das Ganze einigermaßen zu verstehen.

Man kann sich diesen Lern-Aufwand aber auch gern für "später" aufheben, und weiter Serial.print schreiben.

Threads sind zwar Allgemeingut, aber eigentlich wäre es höflich, hier weiter bei adruinoboys Problem zu bleiben.

Code: [Select]
    while (HC12.available() > 0)
    {
      char inChar = (char(HC12.read()));
      inputString.concat(inChar);      //Füge das Zeichen an den String an
      if (inputString != "")
      {
        if (inChar == '\r')
        {
          stringComplete = true;
        }
      }
    }
Das while kann auch nach stringComplete weitergehen. Und die Zeilenumbrüche willst du eigentlich nicht in inputString drin haben...
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Sep 21, 2020, 11:06 am
Danke Leute, dass ihr mir helft.
Mir gefiel - als ich mich mit meinen Bluetooth-Modulen beschäftgt hatte - die Variante von Combie mit dem Streaming. Ich habe jetzt meinen Sketch mit dem Streaming ausgeführt. Das gute ist, dass der Sketch dadurch auch recht übersichtlich bleibt.
Würde mich freuen, wenn ihr mir da weiter helft. Ich erhalte jetzt noch gar nichts.

Mein Sender sieht so aus:

Code: [Select]

#include <Streaming.h>    //Bibliothek zur BT Verbindung
#include <SoftwareSerial.h>
#include "DHT.h"          //DHT Bibliothek laden

enum Comand {
              Temperatur   = 1,
              Feuchtigkeit = 2
            };

unsigned long BT_timestore;   //Variable Speicher für Systemzeit
float tempaussen = 0;
float feuchteaussen = 0;

#define DHTPIN 2        //DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   //Es handelt sich um den DHT22 Sensor

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin
DHT dht(DHTPIN, DHTTYPE); //Der Sensor wird ab jetzt mit "dht" angesprochen

void setup()
{
 Serial.begin(9600);             // Serial port to computer
 HC12.begin(9600);               // Serial port to HC12
}
void loop()
{
  tempaussen = dht.readTemperature(); //Temperatur außen wird gemessen und gespeichert
  feuchteaussen = dht.readHumidity(); //Luftfeuchte außen wird gemessen und gespeichert

  //Senden der Messwerte
  HC12 << Temperatur << ',' << tempaussen << ';' << endl;
  HC12 << Feuchtigkeit << ',' << feuchteaussen << ';' << endl;
  delay(1000);
}


Der Empfänger ist so:

Code: [Select]

#include <CmdMessenger.h> //Bibliothek zur BT Verbindung
#include <Streaming.h>    //Bibliothek zur BT Verbindung
#include <SoftwareSerial.h>

enum Comand {
              Temperatur   = 1,
              Feuchtigkeit = 2
            };

float t = 0;
float f = 0;
float ti = 0;
float fi = 0;
unsigned long BT_timestore;  //Variable Speicher für Systemzeit

//Für die Funkverbindung
SoftwareSerial HC12(10, 11);
CmdMessenger cmdMessenger {Serial};

void setup()
{
  HC12.begin(9600);
  Serial << "Start: "<< __FILE__ << endl;
 
  cmdMessenger.attach(Temperatur, [](){
                                         t = cmdMessenger.readFloatArg();
                                         Serial << "Temperatur " << t << " °C" << endl;
                                      });
                                     
  cmdMessenger.attach(Feuchtigkeit, [](){
                                           f = cmdMessenger.readFloatArg();
                                           Serial << "Feuchtigkeit " << f << " %" << endl;
                                        });
}

void loop()
{
  /*Nachtwächterfunktion*/
  if (millis() - BT_timestore > 10000)   //Wenn 10 Sek. seit dem letzten Loopdurchlauf vergangen sind, dann auslesen und senden
  {     
   //Auslesen der Empfangenendaten vom BT Modul
   cmdMessenger.feedinSerialData();
   
  //Speichern der Systemzeit in BT_timestore für die nächste Loop
  BT_timestore = millis();
 }
}


Mein serieller Monitor bleibt leer, ich erhalte nichts.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: michael_x on Sep 21, 2020, 12:11 pm
Quote
Ich erhalte jetzt noch gar nichts.
Da musst du den CmdMessenger fragen / ansehen.
Der ist der einzige, der was mit Serial macht.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: combie on Sep 21, 2020, 12:53 pm
Quote
Der Empfänger ist so:

Code: [Select]

//Für die Funkverbindung
SoftwareSerial HC12(10, 11);
CmdMessenger cmdMessenger {Serial};

Wenn du von HC12 lesen willst, warum liest du dann von Serial?
Ist doch nicht logisch oder?
Wie soll das je klappen?

Code: [Select]
CmdMessenger cmdMessenger {HC12};

Zudem:
Quote
Code: [Select]
void setup()
{
  HC12.begin(9600);
  Serial << "Start: "<< __FILE__ << endl;
Da fehlt das Serial.begin(9600);
Ohne dem sind keine seriellen Ausgaben möglich.
Also siehst du auch nix.

---

Ich habe den Eindruck, du stocherst einfach nur im Nebel rum, und hoffst durch Zufall das richtige zu tun.
Das wird keiner.

Vergleich:
Wenn du 1000 Affen an 1000 Schreibmaschinen setzt, wie lange dauert es bis einer davon einen Roman geschrieben hat?
OK, der Vergleich hinkt, die Affen haben vermutlich keine Chance, weil sie die deutsche  Sprache (oder irgendeine anderen menschliche) nicht beherrschen.

Aber du kannst diese Sprache lernen, welche du verwendest.
Und auch lernen logisch zu denken.
Hilfreich dabei: Bilder malen.
z.B. Datenflussdiagramme.
Die hätten dir den einen Fehler sofort gezeigt





Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Sep 21, 2020, 03:32 pm
Danke für eure Hilfe. Jetzt funktioniert es.

Ich bin mit der Programmierung noch nicht vertraut. Ich möchte es dennoch lernen.
Ich wüsste jetzt gar nicht, welche Bilder ich in meinem Fall malen sollte.

Ich betrachte den Sketch immer nur so, wie er da steht.

Hilfreich dabei: Bilder malen.
z.B. Datenflussdiagramme.
Die hätten dir den einen Fehler sofort gezeigt
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: combie on Sep 21, 2020, 06:12 pm
Quote
Ich wüsste jetzt gar nicht, welche Bilder ich in meinem Fall malen sollte.
Da kann ich dir evtl helfen, bzw. Vorschläge machen.


A:
Betrachte die Lösung aus Sicht der Daten, wie sie durchs System fließen.
Definiere die Kanäle und baue die Transformationen.
Male Datenflussdiagramme.

B:
Betrachte die Lösung als einen endlichen Automaten.
Also benenne die Zustände und baue die Zustandsübergänge.
Male Zustandsdiagramme.

C:
Betrachte die Lösung aus Sicht der einzelnen Komponenten, der Objekte.
Schreibe (Funktionen und) Klassen und lass deren Instanzen miteinander kommunizieren.
Male UML Diagramme.

D:
Betrachte die Lösung aus Sicht des Kontrollablaufs, wann wird was getan.
Verwende if, Case For usw. Baue Funktionen
Male Programmablaufpläne

Alle diese Sichtweisen haben ihre Eigenheiten, welche sich auch vortrefflich verquicken lassen.

Mit zunehmender Übung werden diese Bildchen immer klarer und treffender.




-----

Quote
Ich betrachte den Sketch immer nur so, wie er da steht.
Das ist im Grunde ok...
Nur muss man dabei sehen, dass der Code nicht unbedingt menschlich ist.
Genauer: Er ist eher nicht für Menschen geschrieben, sondern für eine Maschine.

Eigentlich ist der richtige Weg:
1. Bildchen malen
2. Das gemalte in Programmcode gießen

Mit viel Übung, kann man die Bildchen auch im Kopf malen.
Aber diese dann anderen zu zeigen, ist um so schwieriger.

Der umgekehrte Weg, aus dem Programmcode, die Absicht des Programmierers zu erraten, ist schwer.
Ins Besondere, wenn man wenig Übung hat, und der gezeigte Code sogar noch (logische) Fehler enthält.
Dann ist es quasi unmöglich.
Zumindest geht es mir so, und etwas Übung habe ich schon....




Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Sep 22, 2020, 09:33 am
Danke für die Vorschläge, ich werde mal versuchen solche Bildchen zu erstellen.

Übrigens, bei mir läufts jetzt und ich bedanke mich für alle, die dazu beigetragen haben.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Oct 12, 2020, 08:59 pm
Hallo,
ich wollte mein Thema noch einmal aufgreifen. Ich hatte gesagt, dass es funktioniert.
Jetzt nach einigen Wochen praktischer Erfahrung merke ich doch, dass es nicht immer zuverlässig funktioniert.
Es gibt machmal Tage da werden beide Werte (Temp. und Luftfeuchtigkeit) richtig empfangen.
Aber dann gibt es ganz plötzlich den Fall, dass nur noch die Temperatur oder nur noch die Feuchtigkeit angezeigt wird. Der jeweils andere Wert ist dann einfach 0.
Die Null ist klar, weil ich am Ende der Loop alle Werte auf 0 setze. So kann ich Fehler dieser Art schneller entlarven.

Falls jemand weiter weiß, ich würde mich sehr freuen.
Meine Sketche haben sich etwas verändert deswegen schicke ich nochmal den Sender:
Code: [Select]

#include <Streaming.h>    // Bibliothek zur BT Verbindung
#include <SoftwareSerial.h>
#include "DHT.h"          // DHT Bibliothek laden

enum Comand {
              Temperatur   = 1,
              Feuchtigkeit = 2
            };

unsigned long BT_timestore;   // Variable Speicher für Systemzeit
float tempaussen = 0;
float feuchteaussen = 0;

#define DHTPIN 2        // DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   // Es handelt sich um den DHT22 Sensor

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin
DHT dht(DHTPIN, DHTTYPE);    // Der Sensor wird ab jetzt mit "dht" angesprochen

void setup()
{
 Serial.begin(9600);
 HC12.begin(9600);               // Serial port to HC12
}

void loop()
{
  /*Nachtwächterfunktion*/
  if (millis() - BT_timestore > 62000)   // Wenn 62 Sek. seit dem letzten Loopdurchlauf vergangen sind, dann auslesen und senden
  { 
  //Auslesen der Temperatur und der Feuchtigkeit
  tempaussen = dht.readTemperature(); // Temperatur außen wird gemessen und gespeichert
  feuchteaussen = dht.readHumidity(); // Luftfeuchte außen wird gemessen und gespeichert
  Serial.println(tempaussen);
  Serial.println(feuchteaussen);
   
  // Senden der Messwerte
  HC12 << Temperatur << ',' << tempaussen << ';' << endl;
  HC12 << Feuchtigkeit << ',' << feuchteaussen << ';' << endl;

  // Speichern der Systemzeit in BT_timestore für die nächste Loop
  BT_timestore = millis();
  }
}


und meinen Empfänger:
Code: [Select]

#include <CmdMessenger.h> // Bibliothek zur BT Verbindung
#include <Streaming.h>    // Bibliothek zur BT Verbindung
#include <SoftwareSerial.h>
#include <LiquidCrystal_I2C.h> // LiquidCrystal_I2C Bibliothek einbinden
#include "DHT.h"               // DHT Bibliothek laden

#define DHTPIN 2        // DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   // Es handelt sich um den DHT22 Sensor

LiquidCrystal_I2C lcd(0x27, 20, 4);  // Zur Deklarierung des Displays
DHT dht(DHTPIN, DHTTYPE);           // Der Sensor wird ab jetzt mit "dht" angesprochen

enum Comand {
              Temperatur   = 1,
              Feuchtigkeit = 2
            };

float t;
float f;
float ti;
float fi;
unsigned long BT_timestore;  // Variable Speicher für Systemzeit

// Für die Funkverbindung
SoftwareSerial HC12(10, 11);
CmdMessenger cmdMessenger {HC12};

void setup()
{
  Serial.begin(9600);
  HC12.begin(9600);
 
  cmdMessenger.attach(Temperatur, [](){
                                         t = cmdMessenger.readFloatArg();
                                      });
                                     
  cmdMessenger.attach(Feuchtigkeit, [](){
                                          f = cmdMessenger.readFloatArg();
                                        });
 
 lcd.init();            // Im Setup wird der LCD gestartet
 lcd.backlight();       // Hintergrundbeleuchtung einschalten
}

void loop()
{
  /* Nachtwächterfunktion */
  if (millis() - BT_timestore > 60000)   //Wenn 60 Sek. seit dem letzten Loopdurchlauf vergangen sind, dann auslesen und senden
  {
  // Auslesen der Empfangenendaten vom Funk Modul
  cmdMessenger.feedinSerialData();
  Serial.println(t);
  Serial.println(f);
     
  // Auslesen der Innenmesswerte
  ti = dht.readTemperature(); // Temperatur außen wird gemessen und gespeichert
  fi = dht.readHumidity(); // Luftfeuchte außen wird gemessen und gespeichert

   /* Schreiben der Messwerte auf das LCD */

  // Habe ich zur Vereinfachung rausgenommen

  // Löschen der Messwerte
  t = 0;
  f = 0;
  ti = 0;
  fi = 0;
   
  // Speichern der Systemzeit in BT_timestore für die nächste Loop
  BT_timestore = millis();
 }
}


Übrigens ich habe auf dem seriellen Monitor die Daten anzeigen lassen, die gesendet und empfangen werden. Der Sender sendet immer zuverlässig, ohne Aussetzer. Das Problem muss irgendwo im Empfänger liegen. Ich komme aber nicht drauf.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Oct 13, 2020, 09:42 am
Wenn es, wie du schreibst, beim Empfänger falsch angezeigt wird, dann liegt es vermutlich an der Funkstrecke.
Durch Störungen auf 433 MHz kann sowas schon mal passieren.
Die Frequenz darf ja von allen genutzt werden.

Mein Tipp: Das Signal mehrfach senden und am Empfänger vergleichen. Daraus dann dein Ergebnis ermitteln.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Oct 13, 2020, 02:16 pm
Danke HotSystems für deinen Hinweis. Der gefällt mir gut. Ich bin mit dem Programmieren jedoch nicht so weit fortgeschritten, dass ich das ausführen könnte.
Mein erster Gedanke war es mehrere Variablen einzuführen, wie z.B. t1, t2, t3.
Dann die empfangenen Werte 3 mal auslesen. Also dieser Befehl:

  cmdMessenger.attach(Temperatur, [](){
                                         t = cmdMessenger.readFloatArg();
                                      });
                                     
  cmdMessenger.attach(Feuchtigkeit, [](){
                                          f = cmdMessenger.readFloatArg();
                                        });

3 mal hintereinander ausführen mit entsprechenden t1, t2 und t3. Das gleiche natürlich auch für f.
Ist der Ansatz bisher richtig?

Ich weiß aber dann nicht wie ich die Werte miteinander vergleichen soll. Ich freue mich über weitere Hilfestellungen.

Freundlicher Gruß
Adruinoboy
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Oct 13, 2020, 02:50 pm
Du kannst das Auslesen in einer Schleife erledigen, die du entsprechend deiner Wunschanzahl durchlaufen lässt. Anschließend kannst du die mit eine if-Abfrage prüfen.
Evtl. hat da ja noch jemand einen besseren oder einfacheren Tipp.
Ich müsste mich da auch erst rantasten, da ich es bisher noch nicht gebraucht habe.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Oct 13, 2020, 09:43 pm
Ich habe das mal mit der Schleife einmal ausgeführt.
Der Sketch meines Empfängers sieht jetzt so aus:

Code: [Select]

#include <CmdMessenger.h> // Bibliothek zur Funk Verbindung
#include <Streaming.h>    // Bibliothek zur Funk Verbindung
#include <SoftwareSerial.h>
#include "DHT.h"               // DHT Bibliothek laden

#define DHTPIN 2        // DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   // Es handelt sich um den DHT22 Sensor

DHT dht(DHTPIN, DHTTYPE);           // Der Sensor wird ab jetzt mit "dht" angesprochen

enum Comand {
              Temperatur   = 1,
              Feuchtigkeit = 2
            };

float t;
float f;
float ti;
float fi;
unsigned long BT_timestore;  // Variable Speicher für Systemzeit

// Für die Funkverbindung
SoftwareSerial HC12(10, 11);
CmdMessenger cmdMessenger {HC12};

void setup()
{
  Serial.begin(9600);
 
  cmdMessenger.attach(Temperatur, [](){
                                         t = cmdMessenger.readFloatArg();
                                      });
                                     
  cmdMessenger.attach(Feuchtigkeit, [](){
                                          f = cmdMessenger.readFloatArg();
                                        });
}

void loop()
{
  /* Nachtwächterfunktion */
  if (millis() - BT_timestore > 1000)   //Wenn 60 Sek. seit dem letzten Loopdurchlauf vergangen sind, dann auslesen und senden
  {
    do
    {
     // Auslesen der Empfangenendaten vom Funk Modul
     cmdMessenger.feedinSerialData();
    } while ((t == 0) or (f == 0));

  Serial.println(t);
  Serial.println(f);
     
  // Auslesen der Innenmesswerte
  ti = dht.readTemperature(); // Temperatur außen wird gemessen und gespeichert
  fi = dht.readHumidity(); // Luftfeuchte außen wird gemessen und gespeichert

  // Löschen der Messwerte
  t = 0;
  f = 0;
  ti = 0;
  fi = 0;
   
  // Speichern der Systemzeit in BT_timestore für die nächste Loop
  BT_timestore = millis();
 }
}


Jetzt habe ich folgendes Problem, dass er gar nicht mehr aus der do-Schleife raus will.
Es gibt im seriellen Monitor keine Ausgabe.
Es waren mehrere Minuten indenen der Sender jede Sekunde sinnvolle Werte gesendet hat.
Aber der Empfänger bleibt in der Schleife und kommt nicht raus.

Freue mich über Anregungen für eine Lösung.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Oct 13, 2020, 10:41 pm
Nimm keine do, sondern eine for-Schleife.
Da kommst du raus, wenn die gewünschte Anzahl gelaufen ist.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Oct 13, 2020, 10:47 pm
Aber wie kann ich bei einer for-Schleife unterscheiden, ob er jetzt t=0 oder einen vernünftigen Wert empfangen hat?
Das gleiche gilt natürlich auch für die Feuchtigkeit.

Wenn ich z.B. die Bedingung vereinfache und als Bedingung nur "while (f == 0);" wähle erhalte ich öfter irgendwelche Messwerte, aber dann wird die Temperatur einfach als 0 ausgegeben.

Das zeigt, dass die Schleife soweit funktioniert, aber entweder gibt es echt so viele Störungen oder im Sketch passt irgendwas noch nicht.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Oct 13, 2020, 10:52 pm
Aber wie kann ich bei einer for-Schleife unterscheiden, ob er jetzt t=0 oder einen vernünftigen Wert empfangen hat?
Das gleiche gilt natürlich auch für die Feuchtigkeit.
Die nutzt du ja erstmal nur um die Variablen zu füllen.
Danach werden die Inhalte der Variablen miteinander verglichen.

Das Auslesen könnte dann so aussehen, ungetestet:

Code: [Select]
    for (int i = 0; i < 5; i++)
    {
      sensorTemp[i] = dht.readTemperature();
      sensorHumi[i] = dht.readHumidity();
      delay(xx);
    }


Du musst da nur drauf achten, dass es nicht so schnell aufeinander passiert, dafür mein delay(xx);
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Oct 13, 2020, 10:59 pm
Die nutzt du ja erstmal nur um die Variablen zu füllen.
Danach werden die Inhalte der Variablen miteinander verglichen.

Kannst du mir da ein praktisches Beispiel zeigen?
Muss ich das händisch machen, oder erledigt das die for-Funktion für mich.
Ich weiß noch nicht, was du meinst.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Oct 13, 2020, 11:05 pm
Kannst du mir da ein praktisches Beispiel zeigen?
Hatte ich noch hinzugefügt.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Oct 13, 2020, 11:17 pm
Code: [Select]
   for (int i = 0; i < 5; i++)
    {
      sensorTemp[i] = dht.readTemperature();
      sensorHumi[i] = dht.readHumidity();
      delay(xx);
    }

Danke für das Beispiel. Ist sensorTemp ein Array? Oder ist das in meinem Fall das t bzw. f. Die sind bei mir floats.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Oct 13, 2020, 11:26 pm
Vielleicht habe ich was falsch gemacht, aber meine serielle Ausgabe der ersten 30 sek. sieht so aus:

Code: [Select]

0.00
0.00
19.90
70.80
0.00
0.00
20.00
71.20
0.00
0.00
20.00
71.10


Genau das, was ich nicht wollte. "t" und "f" sind beide 0,00.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Oct 13, 2020, 11:34 pm
Da hast du sicher etwas falsch übernommen.

Wie sieht denn der komplette Sketch jetzt aus ?
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: Peter-CAD-HST on Oct 14, 2020, 07:14 am
Moin adruinoboy
Baue einen zweitem Datenempfänger auf. So kannst du über das Ausschlußverfahren feststellen welches Objekt nicht richtig arbeitet.
Gruß Peter
und gesund bleiben
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Oct 14, 2020, 10:33 am
Mein gesamte Sketch des Empfängers sieht jetzt so aus:

Code: [Select]

#include <CmdMessenger.h> // Bibliothek zur Funk Verbindung
#include <Streaming.h>    // Bibliothek zur Funk Verbindung
#include <SoftwareSerial.h>
#include "DHT.h"               // DHT Bibliothek laden

#define DHTPIN 2        // DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   // Es handelt sich um den DHT22 Sensor

DHT dht(DHTPIN, DHTTYPE);           // Der Sensor wird ab jetzt mit "dht" angesprochen

enum Comand {
              Temperatur   = 1,
              Feuchtigkeit = 2
            };

float t;
float f;
float ti;
float fi;
unsigned long BT_timestore;  // Variable Speicher für Systemzeit
int sensorTemp[5];
int sensorHumi[5];

// Für die Funkverbindung
SoftwareSerial HC12(10, 11);
CmdMessenger cmdMessenger {HC12};

void setup()
{
  Serial.begin(9600);
  HC12.begin(9600);
 
  cmdMessenger.attach(Temperatur, [](){
                                         t = cmdMessenger.readFloatArg();
                                      });
                                     
  cmdMessenger.attach(Feuchtigkeit, [](){
                                          f = cmdMessenger.readFloatArg();
                                        });
}

void loop()
{
  /* Nachtwächterfunktion */
  if (millis() - BT_timestore > 10000)   //Wenn 60 Sek. seit dem letzten Loopdurchlauf vergangen sind, dann auslesen und senden
  {
    for (int i = 0; i < 5; i++)
    {
      sensorTemp[i] = dht.readTemperature();
      sensorHumi[i] = dht.readHumidity();
      delay(50);
    }

  Serial.println(t);
  Serial.println(f);
     
  // Auslesen der Innenmesswerte
  ti = dht.readTemperature(); // Temperatur außen wird gemessen und gespeichert
  fi = dht.readHumidity(); // Luftfeuchte außen wird gemessen und gespeichert

  Serial.println(ti);
  Serial.println(fi);

  // Löschen der Messwerte
  t = 0;
  f = 0;
  ti = 0;
  fi = 0;
   
  // Speichern der Systemzeit in BT_timestore für die nächste Loop
  BT_timestore = millis();
 }
}
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Oct 14, 2020, 10:43 am
Dann kann es ja nicht funktionieren.

Du musst dir die Werte im Array auch anzeigen lassen, nicht nur deine "t" und "f" Werte.
Die solltest du jetzt mal ausklammern.

Mach mal z.B. dies:

Code: [Select]

//Serial.println(t);
//Serial.println(f);

Serial.println(sensorTemp[0]);
Serial.println(sensorTemp[1]);
Serial.println(sensorTemp[2]);
Serial.println(sensorTemp[3]);
Serial.println(sensorTemp[4]);

Serial.println(sensorHumi[0]);
Serial.println(sensorHumi[1]);
Serial.println(sensorHumi[2]);
Serial.println(sensorHumi[3]);
Serial.println(sensorHumi[4]);


Dann kannst du sehen ob da große Unterschiede sind.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Oct 14, 2020, 03:30 pm
Hallo HotSystems,

stop, da zeigt er mir doch jetzt die Innentemperatur und Innenfeuchtigkeit an.
Diese Werte machen keine Probleme. Es geht ja um die empfangenen Werte.
Die ich über mein HC-12 Modul erhalte. Die werden mit 433 Mhz gesendet.
Die werden ja hier gar nicht ausgelesen.

Nochmal zum abgleichen, mein Sketch sieht jetzt so aus:

Code: [Select]

#include <CmdMessenger.h> // Bibliothek zur Funk Verbindung
#include <Streaming.h>    // Bibliothek zur Funk Verbindung
#include <SoftwareSerial.h>
#include "DHT.h"               // DHT Bibliothek laden

#define DHTPIN 2        // DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   // Es handelt sich um den DHT22 Sensor

DHT dht(DHTPIN, DHTTYPE);           // Der Sensor wird ab jetzt mit "dht" angesprochen

enum Comand {
              Temperatur   = 1,
              Feuchtigkeit = 2
            };

float t;
float f;
float ti;
float fi;
unsigned long BT_timestore;  // Variable Speicher für Systemzeit
int sensorTemp[5];
int sensorHumi[5];

// Für die Funkverbindung
SoftwareSerial HC12(10, 11);
CmdMessenger cmdMessenger {HC12};

void setup()
{
  Serial.begin(9600);
  HC12.begin(9600);
 
  cmdMessenger.attach(Temperatur, [](){
                                         t = cmdMessenger.readFloatArg();
                                      });
                                     
  cmdMessenger.attach(Feuchtigkeit, [](){
                                          f = cmdMessenger.readFloatArg();
                                        });
}

void loop()
{
  /* Nachtwächterfunktion */
  if (millis() - BT_timestore > 10000)   //Wenn 60 Sek. seit dem letzten Loopdurchlauf vergangen sind, dann auslesen und senden
  {
    for (int i = 0; i < 5; i++)
    {
      sensorTemp[i] = dht.readTemperature();
      sensorHumi[i] = dht.readHumidity();
      delay(50);
    }

  //Serial.println(t);
  //Serial.println(f);

  Serial.println(sensorTemp[0]);
  Serial.println(sensorTemp[1]);
  Serial.println(sensorTemp[2]);
  Serial.println(sensorTemp[3]);
  Serial.println(sensorTemp[4]);

  Serial.println(sensorHumi[0]);
  Serial.println(sensorHumi[1]);
  Serial.println(sensorHumi[2]);
  Serial.println(sensorHumi[3]);
  Serial.println(sensorHumi[4]);
     
  // Auslesen der Innenmesswerte
  ti = dht.readTemperature(); // Temperatur außen wird gemessen und gespeichert
  fi = dht.readHumidity(); // Luftfeuchte außen wird gemessen und gespeichert

  // Löschen der Messwerte
  t = 0;
  f = 0;
  ti = 0;
  fi = 0;
   
  // Speichern der Systemzeit in BT_timestore für die nächste Loop
  BT_timestore = millis();
 }
}


Mich interessieren das "t" und das "f". Den Sensor auswerten ist kein Problem.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Oct 14, 2020, 03:50 pm
ohhh...sorry, da bin ich falsch abgebogen.

Werde mir das späte nochmal ansehen, bin gerade beschäftigt.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Oct 15, 2020, 12:20 am
Moin adruinoboy
Baue einen zweitem Datenempfänger auf. So kannst du über das Ausschlußverfahren feststellen welches Objekt nicht richtig arbeitet.
Gruß Peter
Ich habe das gleiche nochmal aufgebaut.
Ausserdem habe ich probiert eine andere Frequenz zu wählen. Es stehen ja 100 Kanäle zur Auswahl. Da habe ich eine deutlich höhere Frequenz ausgewählt. Bisher lief es ohne Störungen.
Aber ich beobachte es noch. Ich bin gespannt ob es wirklich zuverlässig funktioniert, oder nicht.

Trotzdem würde ich gerne noch die Messwerte sammeln und auswerten. Einfach um Störungen herauszufiltern.
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: adruinoboy on Oct 16, 2020, 04:03 pm
Ich möchte das Thema hiermit abschließen.
Nach dem ich den Kanal mit den AT-Befehlen umgestellt habe, gibt es keine Störungen mehr.
Es werden auch keine Nullen mehr empfangen. Es werden wohl Störungen gewesen sein, da einige Funkgeräte mit dieser Frequenz funktionieren.
 
Ich bedanke mich bei allen, die mir geholfen haben.

Adruinoboy
Title: Re: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee
Post by: HotSystems on Oct 16, 2020, 04:09 pm
Super, dass du es selbst hinbekommen hast.
Und danke für deine Rückmeldung.

Wäre noch schön, wenn du deinen aktuellen Sketch hier postest.

Und setze ein "Erledigt" o.ä. vor den Titel deines Eingangspost.