TFA433 von UNO auf WEMOS D1 mini nutzen

Hallo zusammen.
Ich habe einen einfachen 433MHz Empfänger am UNO getestet, um diverse Temperatur-Sender von TFA-DOSTMANN zu empfangen. Das klappt auch am UNO hervorragend mit dem folgenden Code:

#include <tfa433.h>   //TFA_433_Receiver_for_Dostmann_30.3208.02

TFA433 tfa = TFA433();

void setup() {
  Serial.begin(115200);
  tfa.start(2); //Input pin where 433 receiver is connected.
}

void loop() {
  if (tfa.isDataAvailable()) {
    // Pointer results:
    // byte type = 0, id = 0, channel = 0, humidity = 0;
    // bool battery = false;
    // float temperature = 0;
    // tfa.getData(type, id, battery, channel, temperature, humidity);
    // char temperatureStr[5];
    // dtostrf(temperature, 0, 1, temperatureStr);
	  // char txt[100];
    // sprintf(txt, "type: %d, id: %d, battery: %s, channel: %d, temperature: %s C, humidity: %d%%", type, id, (battery ? "OK" : "NOK"), channel, temperatureStr, humidity);
    // Serial.println(txt);
    // Struct results:
    tfaResult result = tfa.getData();
    char temperatureStr[5];
    result.temperature = ((result.temperature-32)*5)/9;
    dtostrf(result.temperature, 0, 1, temperatureStr);
	  char txt[100];
    sprintf(txt, "type: %d, id: %d, battery: %s, channel: %d, temperature: %s C, humidity: %d%%", result.type, result.id, (result.battery ? "OK" : "NOK"), result.channel, temperatureStr, result.humidity);
    Serial.println(txt);
  }
}

Jetzt möchte ich das ganze mit einem WEMOS D1 mini machen, da ich die Werte gerne per WLAN an meine Homematic schicken möchte. Leider kommen da Fehlermeldungen, die ich nicht verstehe. Ich habe mit ChatGPT versucht dahinter zu kommen, was falschläuft, aber leider erfolglos.

Vielleicht kann mir hier jemand weiterhelfen?

Arduino: 1.8.19 (Linux), Board: "LOLIN(WEMOS) D1 R2 & mini, 80 MHz, Flash, Disabled (new aborts on oom), Disabled, All SSL ciphers (most compatible), 32KB cache + 32KB IRAM (balanced), Use pgm_read macros for IRAM/PROGMEM, 4MB (FS:2MB OTA:~1019KB), v2 Lower Memory, Disabled, None, Only Sketch, 921600"





/home/XXXXX/Arduino/libraries/TFA433/tfa433.cpp: In static member function 'static void TFA433::_handler()':
/home/XXXXX/Arduino/libraries/TFA433/tfa433.cpp:96:35: error: invalid conversion from 'volatile byte*' {aka 'volatile unsigned char*'} to 'const byte*' {aka 'const unsigned char*'} [-fpermissive]
   96 |   byte calculated = _lfsr_digest8(_buff, _BUFF_SIZE-1, 0x98, 0x3e) ^ 0x64;
      |                                   ^~~~~
      |                                   |
      |                                   volatile byte* {aka volatile unsigned char*}
In file included from /home/XXXXX/Arduino/libraries/TFA433/tfa433.cpp:1:
/home/XXXXX/Arduino/libraries/TFA433/tfa433.h:63:40: note:   initializing argument 1 of 'static byte TFA433::_lfsr_digest8(const byte*, unsigned int, byte, byte)'
   63 |   static byte _lfsr_digest8(byte const message[], unsigned n, byte gen, byte key);
      |                             ~~~~~~~~~~~^~~~~~~~~
Mehrere Bibliotheken wurden für "tfa433.h" gefunden
 Benutzt: /home/XXXXX/Arduino/libraries/TFA433
 Nicht benutzt: /home/XXXXX/Arduino/libraries/TFA_433_Receiver_for_Dostmann_30.3208.02
exit status 1
Fehler beim Kompilieren für das Board LOLIN(WEMOS) D1 R2 & mini.


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

da würde ich anfangen:

passt also nicht zu deinem Kommentar im Sketch.

Welche Library für den TFA433 verwendest du genau?!? Bitte den Download exakt verlinken!

Dann die "falsche" library LÖSCHEN
Dann noch mal für den UNO kompilieren. Klappt?
Und dann noch mal für den Wemos kompilieren. Klappt?

Sorry, kleiner Fehler in den Kommentaren.

Es funktioniert auf dem UNO mit beiden Libraries und auf dem ESP mit keiner der beiden.

Das sind die beiden Libraries:

https://github.com/d10i/TFA433

https://github.com/denxhun/TFA433

Die Fehlermeldung scheint auch die gleiche zu sein.

Arduino: 1.8.19 (Linux), Board: "LOLIN(WEMOS) D1 R2 & mini, 80 MHz, Flash, Disabled (new aborts on oom), Disabled, All SSL ciphers (most compatible), 32KB cache + 32KB IRAM (balanced), Use pgm_read macros for IRAM/PROGMEM, 4MB (FS:2MB OTA:~1019KB), v2 Lower Memory, Disabled, None, Only Sketch, 921600"


/home/XXXXX/Arduino/libraries/TFA_433_Receiver_for_Dostmann_30.3208.02/src/tfa433.cpp: In static member function 'static void TFA433::_handler()':
/home/XXXXX/Arduino/libraries/TFA_433_Receiver_for_Dostmann_30.3208.02/src/tfa433.cpp:95:35: error: invalid conversion from 'volatile byte*' {aka 'volatile unsigned char*'} to 'const byte*' {aka 'const unsigned char*'} [-fpermissive]
   95 |   byte calculated = _lfsr_digest8(_buff, _BUFF_SIZE-1, 0x98, 0x3e) ^ 0x64;
      |                                   ^~~~~
      |                                   |
      |                                   volatile byte* {aka volatile unsigned char*}
In file included from /home/XXXXX/Arduino/libraries/TFA_433_Receiver_for_Dostmann_30.3208.02/src/tfa433.cpp:1:
/home/XXXXX/Arduino/libraries/TFA_433_Receiver_for_Dostmann_30.3208.02/src/tfa433.h:63:40: note:   initializing argument 1 of 'static byte TFA433::_lfsr_digest8(const byte*, unsigned int, byte, byte)'
   63 |   static byte _lfsr_digest8(byte const message[], unsigned n, byte gen, byte key);
      |                             ~~~~~~~~~~~^~~~~~~~~
exit status 1
Fehler beim Kompilieren für das Board LOLIN(WEMOS) D1 R2 & mini.


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

Arduino: 1.8.19 (Linux), Board: "LOLIN(WEMOS) D1 R2 & mini, 80 MHz, Flash, Disabled (new aborts on oom), Disabled, All SSL ciphers (most compatible), 32KB cache + 32KB IRAM (balanced), Use pgm_read macros for IRAM/PROGMEM, 4MB (FS:2MB OTA:~1019KB), v2 Lower Memory, Disabled, None, Only Sketch, 921600"



/home/XXXXX/Arduino/libraries/TFA433/tfa433.cpp: In static member function 'static void TFA433::_handler()':
/home/XXXXX/Arduino/libraries/TFA433/tfa433.cpp:96:35: error: invalid conversion from 'volatile byte*' {aka 'volatile unsigned char*'} to 'const byte*' {aka 'const unsigned char*'} [-fpermissive]
   96 |   byte calculated = _lfsr_digest8(_buff, _BUFF_SIZE-1, 0x98, 0x3e) ^ 0x64;
      |                                   ^~~~~
      |                                   |
      |                                   volatile byte* {aka volatile unsigned char*}
In file included from /home/XXXXX/Arduino/libraries/TFA433/tfa433.cpp:1:
/home/XXXXX/Arduino/libraries/TFA433/tfa433.h:63:40: note:   initializing argument 1 of 'static byte TFA433::_lfsr_digest8(const byte*, unsigned int, byte, byte)'
   63 |   static byte _lfsr_digest8(byte const message[], unsigned n, byte gen, byte key);
      |                             ~~~~~~~~~~~^~~~~~~~~
exit status 1
Fehler beim Kompilieren für das Board LOLIN(WEMOS) D1 R2 & mini.


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


Da hast du recht, sieht man auch in Wokwi, je nachdem, ob man einen Test für UNO oder ESP32 macht. Hat wenig mit den libraries zu tun.

Beim Uno sieht man übrigens eine warning

C:\Users\Michael_X\Documents\Arduino\sketch_apr12b\sketch_apr12b.ino:10:26: warning: invalid conversion from 'volatile byte* {aka volatile unsigned char*}' to 'const byte* {aka const unsigned char*}' [-fpermissive]
   Serial.println(test(msg));
                          ^
C:\Users\Michael_X\Documents\Arduino\sketch_apr12b\sketch_apr12b.ino:2:6: note:   initializing argument 1 of 'byte test(const byte*)'
 byte test(const byte* msg) {
      ^~~~

Warum ist dein _buff als volatile definiert?

Dein Sketch kompiliert Sauber jedoch nur wenn ich die Ausgabe kommentiere.
Den sprintf musst Reparieren :wink:

#include <tfa433.h>   //TFA_433_Receiver_for_Dostmann_30.3208.02

TFA433 tfa = TFA433();

void setup() {
  Serial.begin(115200);
  tfa.start(2); //Input pin where 433 receiver is connected.
}

void loop() {
  if (tfa.isDataAvailable()) {
    // Pointer results:
    // byte type = 0, id = 0, channel = 0, humidity = 0;
    // bool battery = false;
    // float temperature = 0;
    // tfa.getData(type, id, battery, channel, temperature, humidity);
    // char temperatureStr[5];
    // dtostrf(temperature, 0, 1, temperatureStr);
    // char txt[100];
    // sprintf(txt, "type: %d, id: %d, battery: %s, channel: %d, temperature: %s C, humidity: %d%%", type, id, (battery ? "OK" : "NOK"), channel, temperatureStr, humidity);
    // Serial.println(txt);
    // Struct results:
    tfaResult result = tfa.getData();
    char temperatureStr[5];
    result.temperature = ((result.temperature - 32) * 5) / 9;
    dtostrf(result.temperature, 0, 1, temperatureStr);
    //char txt[100];
    // sprintf(txt, "type: %d, id: %d, battery: %s, channel: %d, temperature: %s C, humidity: %d%%", result.type, result.id, (result.battery ? "OK" : "NOK"), result.channel, temperatureStr, result.humidity);
    //Serial.println(txt);
  }
}

benutzt wurde die Lib:

Hallo

Danke erstmal für Eure Antworten. Aber es wird immer undurchsichtiger. Ich versuche es zu erklären.

Ich hatte auch nach auskommentieren des "sprint .... " immer noch Fehler beim Kompilieren.
Daraufhin habe ich die entsprechende Library erneut über die Arduino IDE heruntergeladen. Jetzt habe ich 3 Libraries. (Ich entferne über den Datei-Explorer immer 2 damit nur eine vorhanden ist und kompiliere dann.

Den Sketch habe ich so umgebaut:

#include <tfa433.h>

TFA433 tfa = TFA433();

void setup() {
  Serial.begin(115200);
  tfa.start(2); //Input pin where 433 receiver is connected.
}

void loop() {
  if (tfa.isDataAvailable()) {
    // Pointer results:
    // byte type = 0, id = 0, channel = 0, humidity = 0;
    // bool battery = false;
    // float temperature = 0;
    // tfa.getData(type, id, battery, channel, temperature, humidity);
    // char temperatureStr[5];
    // dtostrf(temperature, 0, 1, temperatureStr);
	  // char txt[100];
    // sprintf(txt, "type: %d, id: %d, battery: %s, channel: %d, temperature: %s C, humidity: %d%%", type, id, (battery ? "OK" : "NOK"), channel, temperatureStr, humidity);
    // Serial.println(txt);
    // Struct results:
    tfaResult result = tfa.getData();
    char temperatureStr[5];
    
    dtostrf(result.temperature, 0, 1, temperatureStr);
    result.temperature = ((result.temperature - 32) * 5) / 9;
    
	  //char txt[100];
    //sprintf(txt, "type: %d, id: %d, battery: %s, channel: %d, temperature: %s C, humidity: %d%%", result.type, result.id, (result.battery ? "OK" : "NOK"), result.channel, temperatureStr, result.humidity);
    //Serial.println(txt);
    Serial.print("Kanal:  ");
    Serial.print(result.channel);
    Serial.print("     Temperatur:  ");
    Serial.println(result.temperature);
  }
}

Auf dem UNO: Mit den beiden von mir bisher genutzten Libraries funktioniert es wie gewollt. Mit der neu heruntergeladenen Library sind alle Werte falsch und ergeben keinen Sinn mehr.
Sieht dann so aus:

17:56:39.805 -> Kanal:  3  Kanal:  65     Temperatur:  3480
17:57:39.818 -> Kanal:  65     Temperatur:  3480
17:57:42.670 -> Kanal:  65     Temperatur:  3480
17:57:42.836 -> Kanal:  65     Temperatur:  3480
17:58:42.263 -> Kanal:  65     Temperatur:  3480
17:59:00.412 -> Kanal:  65     Temperatur:  3480
17:59:19.564 -> Kanal:  65     Temperatur:  3480
18:00:01.350 -> Kanal:  65     Temperatur:  3480
18:00:42.143 -> Kanal:  65     Temperatur:  3480
18:00:56.352 -> Kanal:  65     Temperatur:  3480
18:01:11.125 -> Kanal:  2     Temperatur:  1161
18:01:14.411 -> Kanal:  2     Temperatur:  1161
18:01:18.527 -> Kanal:  2     Temperatur:  1161
18:01:24.802 -> Kanal:  2     Temperatur:  1161
18:01:54.184 -> Kanal:  2     Temperatur:  1161
18:02:04.838 -> Kanal:  2     Temperatur:  1161
18:02:06.630 -> Kanal:  2     Temperatur:  1161
18:02:13.532 -> Kanal:  2     Temperatur:  1161
18:02:18.839 -> Kanal:  2     Temperatur:  1161
18:02:43.285 -> Kanal:  2     Temperatur:  1161
18:02:43.749 -> Kanal:  2     Temperatur:  1161
18:02:46.269 -> Kanal:  1     Temperatur:  1477
18:03:10.358 -> Kanal:  1     Temperatur:  1062
18:03:47.591 -> Kanal:  1     Temperatur:  1062
18:03:50.646 -> Kanal:  1     Temperatur:  1062
18:04:07.166 -> Kanal:  1     Temperatur:  1062
18:04:15.395 -> Kanal:  1     Temperatur:  1062
18:04:22.827 -> Kanal:  1     Temperatur:  1062
18:06:36.095 -> Kanal:  1     Temperatur:  1062
18:06:40.013 -> Kanal:  1     Temperatur:  1062
18:07:00.321 -> Kanal:  1     Temperatur:  1062
18:07:03.407 -> Kanal:  1     Temperatur:  1062
18:07:10.111 -> Kanal:  1     Temperatur:  1062
18:07:26.544 -> Kanal:  1     Temperatur:  1062
18:07:32.983 -> Kanal:  1     Temperatur:  1062
18:07:36.767 -> Kanal:  2     Temperatur:  468
18:07:53.600 -> Kanal:  2     Temperatur:  468
18:07:59.605 -> Kanal:  2     Temperatur:  468
18:08:16.552 -> Kanal:  2     Temperatur:  468
18:09:01.510 -> Kanal:  2     Temperatur:  468
18:10:44.762 -> Kanal:  3     Temperatur:  669

Auf ESP:Mit den bisherigen Libraries, wie gesagt, schon Probleme beim Kompilieren. Mit der neu herunter geladenen Library ganz seltsame Ausgaben auf dem Serial Monitor.

Entweder so:

18:12:03.809 -> ⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮

Oder nach einem Reset am ESP sowas: (das läuft ewig weiter)

18:13:12.633 -> 
18:13:12.633 -> User exception (panic/abort/assert)
18:13:12.633 -> --------------- CUT HERE FOR EXCEPTION DECODER ---------------
18:13:12.633 -> 
18:13:12.633 -> Abort called
18:13:12.633 -> 
18:13:12.633 -> >>>stack>>>
18:13:12.633 -> 
18:13:12.633 -> ctx: cont
18:13:12.633 -> sp: 3fffff80 end: 3fffffd0 offset: 0010
18:13:12.633 -> 3fffff90:  0001c200 0000001c 00000002 40202889  
18:13:12.633 -> 3fffffa0:  3fffdad0 00000000 3ffee5f0 40201044  
18:13:12.666 -> 3fffffb0:  3fffdad0 00000000 3ffee5f0 40201d1c  
18:13:12.666 -> 3fffffc0:  feefeffe feefeffe 3fffdab0 40100d95  
18:13:12.666 -> <<<stack<<<
18:13:12.666 -> 
18:13:12.666 -> --------------- CUT HERE FOR EXCEPTION DECODER ---------------
18:13:12.666 -> 
18:13:12.666 ->  ets Jan  8 2013,rst cause:2, boot mode:(3,6)
18:13:12.666 -> 
18:13:12.666 -> load 0x4010f000, len 3424, room 16 
18:13:12.699 -> tail 0
18:13:12.699 -> chksum 0x2e
18:13:12.699 -> load 0x3fff20b8, len 40, room 8 
18:13:12.699 -> tail 0
18:13:12.699 -> chksum 0x2b
18:13:12.699 -> csum 0x2b
18:13:12.699 -> v00042810
18:13:12.699 -> ~ld
18:13:12.766 -> ⸮⸮⸮⸮g⸮;⸮⸮o|⸮$⸮l #⸮e⸮|r⸮l⸮n⸮⸮n⸮

So sieht es auf dem UNO aus wenn es funktioniert:

18:15:59.876 -> Kanal:  3     Temperatur:  20.61
18:16:32.945 -> Kanal:  1     Temperatur:  19.83
18:16:35.866 -> Kanal:  2     Temperatur:  20.06
18:16:58.873 -> Kanal:  3     Temperatur:  20.61
18:17:25.958 -> Kanal:  1     Temperatur:  19.78
18:17:32.896 -> Kanal:  2     Temperatur:  20.11

Achso, das sagt mir nix.

Kann/muss man das irgendwo einstellen?

Das kommt aus der Fehlermeldung, ist aber aus der Library.
Die ist also nicht für ESP. Ob es ein Klacks ist, sie auf einem ESP zum Kompilieren und ans Laufen zu kriegen, kann ich nicht sagen, hab nur ein kleines Testprogramm geschrieben, das den Fehler zeigt (tatsächlich auf Uno nur als Warnung)

Das habe ich mir mittlerweile gedacht. Aber gehofft, das ich falsch liege.

Na dann muss ich mir was anderes überlegen, denn ich kann das leider nicht.

Vielen Dank für Eure Zeit und Mühe.

Oder hat noch jemand eine andere Idee für mein Problem.

Gibt es einen Arduino mit WLAN, auf dem der Code funktionieren könnte?

Temperatur über 433MHz empfangen und per WLAN an HomeMatic schicken.

Ergebnis meiner Überlegungen:

Ich werde es jetzt mal mit nem NANO und einem Ethernet Shield versuchen.

Anders komme ich nicht weiter.

Vielen Dank für Eure Hilfe.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.