433 MHz an einem ESP32-C3 funktioniert nicht

Hey zusammen!

Ich bin ziemlich neu in dieser ganzen Arduino-Geschichte und benötige etwas Hilfe. Mein Auto wird inzwischen recht oft Amateur-motorsportlich auf Trackdays genutzt und ich fange an mich sehr für den Reifendruck beim Fahren zu interessieren. Das Auto hat zwar Reifendruckkontrollsensoren, die Europa-üblich auf 433 MHz funken, aber außer einer Lampe, die mich bei Unterschreitung eines vorher eingestellten Drucks warnt, wird mir nichts weiter geboten. Aus diesem Grunde hab ich mir erstmal "auf die Schnelle" einen ESP32 zu bestellen und zwar genau genommen diesen. Der funktioniert auch soweit, ein außerdem bestelltes I2C-Display zeigt mir lustig meine Fake-Daten an. Ist schon ein sehr cooles Gefühl wenn sowas das erste Mal funktioniert. :slight_smile:

Weit weniger Glück habe ich mit dem Funk. Mein hier bestelltes RXB8-Funkmodul (bestellt basierend auf Blogbeiträgen, die ihm selbst ohne Antenne sehr gute Reichweiten zugeschrieben haben) scheint nichts zu empfangen. Angeklemmt habe ich das Funkmodul logischerweise an 5V und Masse vom ESP32 und den Data-Pin an Pin 10 (GPIO10) vom ESP32.

Als Library nutze ich rc-switch und von dort grundsätzlich unverändert das Beispiel ReceiveDemo_Simple.ino aus dem Repository:

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

void setup() {
  Serial.begin(9600);
  mySwitch.enableReceive(10); // Geändert auf den Pin am ESP32
}

void loop() {
  if (mySwitch.available()) {
    Serial.print("Received ");
    Serial.print(mySwitch.getReceivedValue());
    Serial.print(" / ");
    Serial.print(mySwitch.getReceivedBitlength());
    Serial.print("bit ");
    Serial.print("Protocol: ");
    Serial.println(mySwitch.getReceivedProtocol());

    mySwitch.resetAvailable();
  }
}

Im Auto mit der Zündung rumzuspielen (was den Sensoren eigentlich einen Sendebefehl geben sollte) zeichnet nichts auf. Ebenso auf dem Garagenfunkschlüssel rumzuhämmern. Der serielle Output bleibt still. Allerdings: Als ich am Anfang das Funkmodul (fälschlicherweise?) an Pin 2 (GPIO2/A2) angeschlossen hatte und folglicherweise mySwitch.enableReceive(2) genutzt hatte, kam nach 10 Minuten von irgendwo einmal drei Bits und nochmal 15 Minuten später 5 Bits rein. Woher weiß ich nicht. Ob das überhaupt echte Daten waren oder einfach nur Müll durch den falschen Pin, das weiß ich nicht.

Mir ist übrigens vollkommen bewusst, dass es bereits Projekte gab, die das mal umgesetzt haben. Am Populärsten ist wohl das Beispiel auf Hackster.io mit dem Toyota Auris. Allerdings hatte ich vermutet, dass es technisch keinen Unterschied macht ob ich den RXB8 benutze oder den aus dem Hackster-Beispiel genutzen TI C1101.

Hat irgendwer eine Idee was ich falsch mache?

Das kann schon einen großen Unterschied machen. Der RXB8 kann nur AM, der CC1101 auch FM. So lange du nicht weißt, wie die Sensoren was senden, ist das stochern im Nebel.

Grundsätzlich funktioniert ein RXB8 an einem ESP32 auch mit der von dir genutzten Library. Unabhängig davon, kann der RXB8 an jedem beliebigen, frei nutzbaren digitalen Pin des ESP32 betrieben werden.

Huch, stimmt ja. Ich hab ganz vergessen, dass es da ja noch mehr Unterscheidungen gibt. Ich meine ich kann mir gern mal einen CC1101 bestellen. Von dem ist ja bekannt, dass er fähig ist das RDKS-Signal zu empfangen, wenn das der einzige Ansatz ist, den du jetzt hast.

Danke dir auch schonmal! :slight_smile:

Da ich die Sensoren nicht kenne und auch noch nicht verwendet habe, fällt mir dazu nichts mehr ein.

Habe vermutet das es wird Digital alles erledigt, nach kurzer suche das gefunden
https://mk4-wiki.denkdose.de/artikel/rdks/rdks-sensor_rf-protocol
Also hast als Anfänger dir was tolles ausgesucht. :wink:

Alles gut, ich bin um jeden Versuch zu helfen dankbar!

Ich hab auch inzwischen bemerkt was für ein Mammutprojekt ich da angefangen habe. Aber jetzt fühl ich mich auch herausgefordert, also wird's angegangen. :grin:

Es wird irgend wo komplettes Protokoll zu finden sein, musst gezielt danach suchen, dann sparst Du dir ein Haufen Arbeit

Hab ich schon gefunden. :slight_smile:

Sehe nix :wink:

Schau mal hier: https://ww1.microchip.com/downloads/en/Appnotes/00238C.pdf

Das sieht mir vollständig aus. Damit arbeite ich zumindest grad bzw. versuche es.

Wird nix.

  1. Das gezeigte ist für 315MHz.
  2. Die Kodierung fehlt weiter hin.
    Mit Protokoll meinte ich wie ist das Signal aufgebaut, wie werden die Daten gesendet.
    Habe was gefunden nur nicht vollständig,
    Reading TPM-Sensors via Arduino - #7 by editor1979

und noch mehr + Code

Und in dieser Doku ist die Modulationsart ASK (AM).
Was wiederum auch mit dem RXB8 funktioniert.
Zumindest für die Versuche. Im Endausbau sehe ich aber den CC1101, da dieser deutlich besser in seinen Leistungsdaten ist. Auch wenn du da nur den Empfangspart benötigst.

Fair point. Möglicherweise ist es bei 433 MHz aber ähnlich.

Das steht in dem von mir verlinkten Dokument auf Seite 5.

Führt mich nur leider wieder zu der ursprünglichen Frage wieso der Sketch nicht funktioniert. ^^ Ich hab inzwischen einen zweiten RXB8 und zwei C1101 bestellt. Den zweiten RXB8 um einen Defekt ausschließen zu können. Die beiden C1101 da es damit belegbar mal funktioniert hat. Wenn die hier sind, kann ich mich ja nochmal melden, sollte es weiterhin nicht funktionieren. Ansonsten hoffe ich mein Projekt hier irgendwann vorstellen zu können. :slight_smile:

Außerdem hab ich noch insgesamt vier Arduino-Abklatsche mit ATmega328P bestellt, da die ebenfalls sehr beliebte Radiohead-Library auf Grund dieses Bugs nicht auf dem ESP32-C3 funktioniert. Ich könnte zwar einen Fork benutzen, der das behebt, aber kost' ja nix so n Board. :grin:

Das wiederum kann (recht sicher) am Protokoll liegen, welches von der RCSwitch nicht verstanden wird.
Entweder es gibt dazu eine fertige Library, die zum Protokoll passen muss. Das wiederum von Produkt zu Produkt unterschiedlich sein kann.
Da wird dann noch etwas Arbeit auf dich zukommen.

Da du schon ein "Zufallssignal" empfangen hast, wird der Empfänger wohl noch funktionieren. Ich habe von denen schon etliche gekauft und alle haben funktioniert.

Das ist mal ein guter Hinweis. Bei mir läuft für ein spezielles Projekt auch die RadioHead und ich werde das mal mit einem ESP32C3 testen. Interessiert mich halt, ob in beide Richtungen (Senden oder Empfang) oder nur eine davon betroffen ist.

Hey hey, der Empfänger funktioniert wirklich! Ich hab jetzt RF433any ausprobiert und da kommt tatsächlich Zeugs bei rum:

11:31:15.655 -> Waiting for signal
11:32:38.198 -> Data: 2e c5
11:32:51.698 -> Data: 09 c4
11:33:25.098 -> Data: 26 e5
11:33:37.605 -> Data: 9d 53
11:33:46.785 -> Data: e1 44
11:34:31.405 -> Data: 2c 10

Keine Ahnung was für Zeugs, aber es ist schonmal etwas. Dann hat RCSwitch wohl tatsächlich das Protokoll nicht verstanden. Ein Schritt näher. Jetzt nur noch RF433any verstehen, denn das simple Codebeispiel ist als nicht-C-Entwickler gar nicht mal so simpel. :grin:

Edit: Aber auch das empfängt nichts von den RDKS-Sensoren. Eventuell muss ich gleich mal ne Runde fahren.

Weißt du denn, wer das sendet ?
Kann ja irgendwas aus deiner Nachbarschaft sein. Oder sind das gar deine Sensoren? Dann musst du entschlüsseln, was das bedeutet. :wink:

Nope, ziemlich sicher nicht. Der Datensatz der Sensoren ist deutlich größer und sollte 112 Bits umfassen. Im Parkmodus (15 Min keine Rotation der Räder) sollte der Sensor nur alle paar Stunden etwas senden. Außerdem taucht keinerlei Aktivität im Serial Monitor auf wenn ich die Taste im Auto zum Anlernen des aktuellen Drucks betätige. Wer das sendet weiß ich nicht.

Nur mal so als Zwischeninfo:

Ich habe heute mal die Libraries RCSwitch und RadioHead am ESP32-C3 die Empfangsfunktion getestet.

K.A. was da seinerzeit mit RadioHead für ein Problem war, offensichtlich bereits behoben. :wink:

Und beides funktioniert hier problemlos.
Somit kannst du auch damit deine Funktionen testen.

Yep, die hab ich nach deinem Kommentar jetzt auch nochmal ausprobiert. Ich hab die Version aus dem Library Manager gezogen. Die scheint aber veraltet. Der Bug wurde in Version 1.126 behoben. Allerdings hat diese und alle bis zur aktuellen Version 1.130 einen anderen Bug:

.../libraries/RadioHead/RH_ASK.cpp: In member function 'void RH_ASK::timerSetup()':
.../libraries/RadioHead/RH_ASK.cpp:563:23: error: too many arguments to function 'hw_timer_t* timerBegin(uint32_t)'

Auch das scheint ein Problem mit dem ESP32 zu sein. Hätte ich doch mal einen originalen Arduino gekauft...

Sketch:

#include <RH_ASK.h>

RH_ASK rf_driver(2000, 10, A0, A1, false);

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

Nee nur "Normalen" ESP32 ohne Zusatz Buchstaben