HC-12 Funkmodul

Über den Beitrag

In einem meiner ersten Beiträge hatte ich schon einmal über 433 MHz Funkmodule berichtet, dabei aber das HC-12 Modul ausgelassen. Diese Lücke möchte ich nun schließen, zumal das HC-12 Modul einige sehr positive Eigenschaften hat. Es zeichnet sich zum einen durch überaus einfache Bedienbarkeit aus, zum anderen kann es sowohl als Sender wie auch als Empfänger eingesetzt werden.

Der Beitrag ist folgendermaßen gegliedert:

  • Technische Eigenschaften
  • Schnelleinstieg
  • Einstellungen
  • Reichweitentest
  • Übermittlung von Sensordaten

Grundlagen / Technische Eigenschaften

Das HC-12 Funkmodul bekommt ihr in Online-Shops für 6 bis 9 Euro. In chinesischen Shops ist es noch mal deutlich günstiger, ihr müsst dort aber ein paar Wochen Lieferzeit in Kauf nehmen. Normalerweise wird eine Spiralantenne mitgeliefert.

Das Moduldesign variiert. Die einen Module basieren auf dem SI4463 Transceiver, die anderen auf dem SI4438. Ersterer hat eine etwas höhere Reichweite (weitere Details hier). Die Anschlüsse scheinen bei allen HC-12 Modulen gleich zu sein. Ich konnte Module mit SI4463 und SI4438 Transceiver kombinieren, andere jedoch berichten von Problemen. Um auf der sicheren Seite zu sein, versucht lieber „sortenrein“ zu arbeiten. 

Zwei HC-12 Module mit Spiralantenne
HC-12 Modul Rückseite

Schon mal vorab: nicht alles, was das HC-12 Modul in Bezug auf die Frequenzbereiche und Reichweiten kann, ist auch erlaubt (in Deutschland). Also nicht zu früh freuen. Ich komme darauf später noch zurück.

Hier die wichtigsten Daten im Überblick:

  • Frequenzbereich: 433.4 – 473.0 MHz
  • Strombedarf:
    • nicht sendend: je nach Betriebsmodus 80 µA – 16 mA
    • beim Senden: ~100 mA
    • Schlafmodus: 23 µA (eigene Messung)
  • Spannungsversorgung: 3.2 – 5.5 Volt
  • Kommunikation mit dem Modul: seriell (RX / TX)
    • Baudrate: 1200 – 115200
    • Spannungslevel: 3.3 Volt
  • Reichweite: maximal 1800 m
  • maximale Sendeleistung: 20 dBm / 100 mW
  • Übertragungsrate (Funk): bis 250000 bps
  • Einstellungen über AT Kommandos (SET Pin)

Ein wesentliches Merkmal des HC-12 Moduls ist, dass es einen eigenen Microcontroller besitzt, der sich um die Funkübertragung kümmert. Ihr tretet nur über die serielle Verbindung mit dem Modul in Kontakt. Wie ihr sehen werdet, ist der Umgang mit den Modulen dadurch erstaunlich einfach. Ihr braucht euch mit keiner Funkbibliothek herumzuschlagen. 

Schnelleinstieg

Schaltung

Lötet die Spiralantenne an das Modul und verbindet es mit dem Microcontroller oder Arduino eurer Wahl. Am Arduino Nano könnte es so aussehen:

Das HC-12 Modul am Arduino Nano
Das HC-12 Modul am Arduino Nano

Das HC-12 Modul wird über Software Serial angesteuert. RX und TX des Moduls werden „über Kreuz“ mit den Software Serial Pins verbunden, d.h. RX an TX und TX an RX. Bei 5 Volt Boards solltet ihr Spannungsteiler einsetzen. Den SET Pin brauchen wir im Schnelleinstieg noch nicht, da wir die Standardeinstellungen nutzen.

Der Aufbau ist für die Sende- und die Empfängerseite identisch. Verbindet beide Arduinos mit dem Computer.

Der Basissketch

Als Einstieg nehmen wir den modifizierten SoftwareSerial Sketch aus den Beispielen der Arduino IDE. Wir wählen 9600 Baud, denn das ist die Voreinstellung des HC-12.

#include <SoftwareSerial.h>
SoftwareSerial hc12(10,11);

void setup() {
  Serial.begin(9600);
  hc12.begin(9600);
  Serial.println("Let's start!");
}

void loop() { 
  if (hc12.available()) {
    Serial.write(hc12.read());
  }
  if (Serial.available()) {
    hc12.write(Serial.read());
  }
}

 

Ladet den Sketch auf den ersten Arduino, dann öffnet ihr eine zweite Instanz der Arduino IDE (also einfach die Arduino IDE noch mal aufrufen, ohne die erste zu schließen). Wählt den Port des zweiten Arduinos und ladet den Sketch auch auf den zweiten Arduino. Nun könnt ihr für beide einen seriellen Monitor öffnen. Schreibt eine Nachricht in eines der Eingabefelder, geht auf Senden und schon taucht die Nachricht im seriellen Monitor des anderen Arduinos auf.

Ausgabe HC12_SoftwareSerial.ino
Ausgabe HC12_SoftwareSerial.ino

So einfach ist das! Einziges Problem: Wenn ihr in Deutschland wohnt, habt gerade gegen die gesetzlichen Bestimmungen zur Nutzung des 433 MHz Frequenzbandes verstoßen. Diese legen 10 mW als maximal zulässige Sendeleistung fest. Das HC-12 Modul sendet in seinen Standardeinstellungen jedoch mit 100 mW. Wir kommen gleich dazu, wie ihr in die Legalität zurückkehren könnt. Wenn ihr mehr über die Vorschriften für die Funknutzung wissen wollt, dann empfehle ich diesen Link zu einer leicht verständlichen Zusammenfassung.

Einstellungen am HC-12 Funkmodul

Die Einstellung erfolgt über AT Befehle, die ihr vielleicht schon von den HC-05 und HC-06 Bluetooth Modulen kennt. Um in den AT Modus zu gelangen, müsst ihr einfach nur SET mit GND verbinden. Alternativ verbindet ihr SET mit einem I/O Pin und setzt diesen auf OUTPUT und LOW. Der SET Pin ist intern mit einem 10 kOhm Pull-Up Widerstand verbunden. Wenn ihr ihn wieder von GND trennt beziehungsweise am I/O Pin auf INPUT wechselt, geht er in den normalen Funkmodus zurück. Dafür braucht er ca. 40 Millisekunden.

Es macht einen Unterschied, ob ihr SET im laufenden Betrieb auf LOW zieht oder schon beim Einschalten des Moduls:

  • Laufender Betrieb: das Modul bleibt weiterhin mit den für die serielle Verbindung gewählten Einstellungen (Baudrate, Datenbits, Paritätsbit, Stopbit) erreichbar.
  • SET an GND beim Einschalten: Die Baudrate für die Kommunikation mit dem Modul wird auf 9600 Baud gesetzt. Ferner gelten: 8 Datenbits, keine Parität, ein Stopp Bit.

Letztere Methode ist praktisch, falls ihr vergessen haben solltet, welche Baudrate ihr am Modul eingestellt habt. Sonst müsstet ihr schlicht durchprobieren.

Bringt das HC-12 Modul als ersten Test in den AT Modus. Auf dem Arduino nutzt ihr weiterhin den HC12_SoftwareSerial Sketch von oben. Tippt „AT“ (ohne die Anführungsstriche) in das Eingabefeld. Das Modul antwortet freundlicherweise mit „OK“.

Einstellung der Baudrate

Der folgenden Tabelle könnt ihr entnehmen, welche Baudraten ihr für die Kommunikation mit dem HC-12 Modul einstellen könnt. Die Funkbaudrate („Baud Rate in the Air“) wird von dem Modul automatisch angepasst.

Einstellung der Baudraten am HC-12 Modul
Tabelle 1: Einstellung der Baudraten am HC-12 Modul

Eine höhere Datenrate erkauft ihr euch mit einer geringeren Empfangssensitivität. Mit jeder Reduktion um 6 dBm verringert sich die Sensitivität auf die Hälfte.

Sende- und Empfangsmodul müssen die dieselbe Baudrate eingestellt haben. Die Einstellung erfolgt mit:

  • AT+Bx mit x = 1200, 2400, 4800, usw.

Die Einstellung ist immer erst dann aktiv, wenn ihr den AT Modus verlassen habt.

Einstellung des Funkmodus

Das HC-12 Modul hat die vier Funkmodi: FU1, FU2, FU 3 (default) und FU4:

Die Funkmodi des HC-12 Moduls
Tabelle 2: Die Funkmodi des HC-12 Moduls

Ihr stellt den Funkmodus mit der folgenden Anweisung ein:

  • AT+FUx mit x = 1, 2, 3 oder 4

Funkmodus FU1

FU1 ist ein moderater Energiesparmodus. Damit verbraucht das HC-12 Modul 3.6 mA (3.8 mA nach meiner Messung) solange es nicht sendet. Ihr könnt in diesem Modus alle Baudraten wählen, allerdings ist die Funkbaudrate („in the air“) auf 250000 bps festgelegt. Das bedeutet, dass ihr eine hohe Datenrate habt, aber nur eine begrenzte Reichweite. Die angegebenen 100 m halte ich für sehr optimistisch. Außerdem reduziert sich dieser Wert, wenn ihr die Sendeleistung auf das in Deutschland erlaubte Niveau senkt. 

Wenn ihr das Modul anweist etwas zu senden, dann geschieht das mit einer gewissen Verzögerung. Im Modus FU1 liegt die Verzögerung zwischen 15 und 25 ms. 

Funkmodus FU2

Der Modus FU2 ist ein extremer Energiesparmodus. Der Verbrauch sinkt laut Datenblatt auf 80 µA. Ich habe sogar noch weniger gemessen, und zwar schwankte der Verbrauch periodisch zwischen 23 und 80 µA. Anscheinend geht das Modul zwischenzeitlich kurz in den Schlafmodus. Als Baudrate ist nur 1200, 2400 oder 4800 zulässig. Die Funkbaudrate ist mit 250000 bps wieder sehr hoch eingestellt und die Reichweite entsprechend begrenzt. Die Verzögerung beträgt 500 ms.

Falls ihr aus einem anderen Modus in FU2 wechselt und es war eine höhere Baudrate eingestellt, dann wird die Baudrate auf 4800 reduziert. Stellt ihr hingegen den FU2 Modus ein und wählt dann eine Baudrate größer 4800, funktioniert eure Übertragung nicht mehr.

Funkmodus FU3

FU3 ist der voreingestellte Modus. Alle Baudraten sind wählbar. Die Funkbaudrate wird entsprechend Tabelle 1 automatisch festgelegt. Der Verbrauch ist mit 16 mA recht hoch. Laut Datenblatt können 1000 m Reichweite erzielt werden (bei in Deutschland unzulässigen 100 mW Sendeleistung). Die Verzögerung liegt – abhängig von der Baudrate – zwischen 4 und 80 ms.

Funkmodus FU4

Dieser Modus ist konzipiert, um hohe Reichweiten von bis zu 1800 Metern zu erreichen. Die einzig zulässige Baudrate ist 1200. Dabei wird die Funkbaudrate hier sogar auf 500 bps reduziert. Die Datenpakete sollten 60 Bytes nicht überschreiten und zwischen dem Senden zweier Pakete sollte eine Pause von 2 Sekunden liegen.

Einstellen der Sendeleistung

Jetzt kommen wir zu der angekündigten Einstellung, mit der ihr in den legalen Bereich der Sendeleistung kommt. Das HC-12 Modul bietet acht Stufen (Power Level):

Sendeleistung des HC-12 Moduls

Wie ihr unschwer erkennt, liegt die legale Grenze zwischen Level 4 und Level 5. Die Einstellung erfolgt über:

  • AT+Px mit x = 1, 2, 3, 4, 5, 6, 7, 8

Die Voreinstellung ist 8.

Einstellung des Kanals

Ein schönes Feature des HC-12 Moduls ist die Möglichkeit 100 Kanäle einzustellen, deren Frequenzen um jeweils 400 kHz verschoben sind. Kanal 001 hat die Frequenz 433.4 MHz, Kanal 100 liegt bei 473.0 MHz. Leider gibt es hier wieder ein Problem (zumindest in Deutschland), denn der zulässige Frequenzbereich liegt zwischen 433.05 und 434.79. Erlaubt sind damit nur die Kanäle 1 bis 4.

Eingestellt werden die Kanäle mit:

  • AT+Cx mit x = 001, 002, 003 …. 099, 100

Die Voreinstellung ist Kanal 001.

Einstellung des Datenformats

Bei der seriellen Datenübertragung könnt ihr die Zahl der Bits einstellen, die direkt hintereinander übertragen werden. Etwas anderes als 8 wäre exotisch. Danach kommt ein Paritätsbit – oder auch keins (non parity). Wird eines übertragen, könnt ihr wählen, ob auf gerade (even parity) oder ungerade Parität (odd parity) geprüft wird. Zum Schluss werden entweder 1, 2 oder 1.5 Stopp Bits übertragen.

Das Datenformat wird so eingestellt:

  • AT+Uxyz mit:
    • x = Anzahl Bits, also normal 8
    • y = O (odd parity check), E ( even parity check), N (no parity check)
    • z = 1 (ein Stop Bit), 2 (2 Stop Bits), 3 (1.5 Stop Bits)

Die Voreinstellung ist: 8N1.

Weitere Einstellungen

  • AT+SLEEP versetzt das Modul in den Schlafmodus. Es benötigt dann lediglich 23 µA. Der Schlafmodus beginnt, wenn ihr den AT Modus verlassen habt. Das Modul wird geweckt, indem ihr einmal in den AT Modus und wieder zurückgeht. Einen Beispielsketch dazu gibt es weiter unten.
  • AT+DEFAULT setzt alle Einstellungen zurück.
  • AT+UPDATE versetzt das Modul in einen Zustand, der das Aufspielen einer neuen Firmware erlaubt.

Abfragen des HC-12 Moduls

Ihr könnt nicht nur Einstellungen vornehmen, sondern diese auch abfragen:

  • AT+V liefert die Firmware Version
  • AT+Rx, mit
    • x = B, C, F oder P für Baud Rate, Kanal, Funkmodus oder Leistung
    • x = X bedeutet, dass alle Parameter abgefragt werden

So sieht dann die Antwort zu einer Abfrage mit „AT+RX“ aus:

Abfrage des HC-12 Moduls mit AT+RX
Abfrage des HC-12 Moduls mit AT+RX

Den Schlafmodus verwenden

Der Schlafmodus eignet sich besonders für Module, die nur ab und zu etwas senden sollen, wie zum Beispiel die Daten einer Wetterstation. Im Prinzip habe ich weiter oben schon erklärt, wie es funktioniert. Wichtig ist, dass an einigen Stellen Wartezeiten eingefügt werden.

Der Beispielsketch sorgt dafür, dass das HC-12 Modul alle 10 Sekunden ein freundliches „Hello again“ versendet und danach in den Schlaf geschickt wird.

#include <SoftwareSerial.h>
SoftwareSerial hc12(10,11);
int SETPin = 5;

void setup() {
  pinMode(SETPin,INPUT);
  Serial.begin(9600);
  hc12.begin(9600);
  Serial.println("Let's start!");
}

void loop() { 
  hc12.print("Hello again");
  delay(100);
    
  pinMode(SETPin, OUTPUT);
  delay(50);
  hc12.print("AT+SLEEP");
  delay(50);
  pinMode(SETPin, INPUT);
  
  delay(10000);
  
  pinMode(SETPin, OUTPUT);
  delay(100);
  pinMode(SETPin, INPUT); 
  delay(100);
}

 

Reichweitentest

Um die Reichweite des Moduls zu testen, habe ich zunächst wieder die weiter oben abgebildete Schaltung verwendet. Die beiden Arduino Nano Boards habe ich mit einer 9 Volt Batterie betrieben. Die Sendeeinheit lief mit dem folgenden sehr einfachen Sketch, den ich wohl nicht erklären muss:

#include <SoftwareSerial.h>
SoftwareSerial hc12(10,11);

void setup() {
  hc12.begin(9600);
}

void loop() { 
  hc12.print("Hi Wolle");
  delay(3000);
}

 

Auf der Empfängerseite habe ich dem Arduino Nano noch eine LED an Pin 6 spendiert. Der Empfängersketch prüft, ob eine Nachricht gesendet wurde. Ist das der Fall, dann prüft er, ob die Nachricht korrekt ist. Wenn das auch der Fall ist, leuchtet die LED für eine halbe Sekunde auf. Ich habe mich mit dem Empfänger vom Sender entfernt und geprüft, wann die LED aufhörte zu blinken oder dieses nicht mehr regelmäßig tat. Den Versuch habe ich auf freiem Feld mit direktem Sichtkontakt durchgeführt.

#include <SoftwareSerial.h>
SoftwareSerial hc12(10,11);
int ledPin = 6;

void setup() {
  hc12.begin(9600);
  pinMode(ledPin, OUTPUT);
}

void loop() { 
  String message = "";
  if(hc12.available()) {
    message = hc12.readString();
    if(message=="Hi Wolle"){
      digitalWrite(ledPin, HIGH);
      delay(500);
      digitalWrite(ledPin, LOW);
    }
  }
}

 

Mit den Standardeinstellungen (FU3 / 9600 Baud / verbotene 100 mW Sendeleistung) und der mitgelieferten Spiralantenne konnte ich eine Strecke von ca. 120 Metern überbrücken. Das ist nur ein Bruchteil der weiter oben angegebenen 600 Meter.

Verbesserung der Reichweite

Durch zwei Änderungen der Hardware könnt ihr die Reichweite erhöhen:

  • Stattet die Stromversorgung mit einem fetten Kondensator aus.  Im Datenblatt werden 1000 µF empfohlen. Ich hatte nur 470 µF in meinem Fundus. Der Kondensator sorgt dafür, dass der plötzliche, hohe Strombedarf beim Senden gedeckt werden kann.
  • Verwendet eine bessere Antenne. Aus früheren Versuchen weiß ich, dass ein 17.3 cm (= 1/4 der Wellenlänge) langer, gerader Draht schon bessere Ergebnisse liefert als die Spiralantennen. 

Ich wollte jetzt aber aufs Ganze gehen und habe mir zwei externe 433 MHz Antennen für je ca. 15 Euro besorgt. Da diese einen SMA Anschluss hatten, musste ich mir noch zwei SMA auf IPEX Adapter besorgen. So sah der Aufbau aus:

Erhöhung der Reichweite der HC-12 Module mit externer Antenne
Erhöhung der Reichweite der HC-12 Module mit externer Antenne

Und so als Schaltbild:

Reichweitentest (Spannungsteiler habe ich weggelassen – Nachmachen auf eigene Gefahr!)

Damit habe ich eine Reichweite von über 1000 Metern erzielt. Der limitierende Faktor war am Ende die freie Sicht. Ob tatsächlich 1800 Meter erreichbar sind, kann ich also nicht mit Bestimmtheit sagen.

Mir wurde erst dann bewusst, dass die eingesetzte Sendeleistung in Deutschland nicht erlaubt ist. Ich habe daraufhin weitere Versuche mit der legalen Sendeleistung (Powerlevel 4) durchgeführt. Bei Verwendung der Spiralantenne im Modus FU3 sank die Reichweite weniger als befürchtet auf 80 Meter. Durch den Wechsel auf FU4 ging es dann wieder hoch auf 180 Meter. Und mit der guten Antenne konnte ich dann 350 Meter erreichen. 

Ich habe auch die Module mit dem SI4438 Chip getestet und konnte keinen Unterschied zu den SI4463 basierten Modulen feststellen. Allerdings habe ich nur einen Parametersatz ausprobiert.

Hier eine Zusammenfassung aller Testergebnisse:

Ergebnisse der HC-12 Reichweitentests
Ergebnisse der HC-12 Reichweitentests

In meinem Haus konnte ich mit FU3 / 9600 Baud / Spiralantenne / Powerlevel 4 problemlos durch zwei Wände und eine Zimmerdecke hindurchsenden.

Schaut euch an, was ihr wirklich braucht und spielt ein bisschen herum. Und haltet euch an die gesetzlichen Vorgaben bezüglich der Sendeleistung. Ihr wollt schließlich auch nicht, dass eure 433 MHz Anwendungen durch andere gestört werden!

Übermittlung von Sensordaten

Als Abschluss noch – für die weniger Erfahrenen – eine Anleitung, wie ihr Sensordaten übertragen könnt. Genauer ausgedrückt geht es darum, wie ihr Integer und Float Daten als Strings zusammenfasst, sendet und auf der Empfängerseite wieder in Zahlen umwandelt.

Der Sender, der die Daten zur Verfügung stellt (Server) wandelt die Daten mittels String(Zahl) in Strings, die zusammengefügt und durch Nicht-Zahlen (hier Sternchen) voneinander getrennt werden. Erhält der Sender eine entsprechende Anfrage, wird der String gesendet. Der Sketch versendet feste Werte. Das würdet ihr durch Sensordaten oder Ähnliches ersetzen.

#include <SoftwareSerial.h>
SoftwareSerial hc12(10,11);

void setup() {
  Serial.begin(9600);
  Serial.println("Let's start!");
  hc12.begin(9600);
}

void loop() { 
  String requestString = "";
  if (hc12.available()) {
    requestString = hc12.readString();
    Serial.println(requestString);
  }
  if(requestString == "request"){
    String dataString = "";
    createDataString(dataString);
    Serial.println(dataString);
    hc12.print(dataString);
  }
}

void createDataString(String &data){
  int sensor1 = 746;
  int sensor2 = 8295;
  float sensor3 = 41.84;
  data = "*" + String(sensor1) + "*" + String(sensor2) + "*" + String(sensor3); 
}

 

Auf der Empfängerseite (Client) habe ich einen Taster installiert, der die Anfrage auslöst.

Schaltung für Sensordatensketch (die Spannungsteiler habe ich weggelassen – Nachmachen auf eigene Gefahr).

Nach kurzer Zeit erhält der Client die Antwort vom Server. Um die Zahlen aus eingehenden String zu extrahieren, gibt es die überaus nützlichen Funktionen parseInt() und parseFloat(). Diese Funktionen analysieren die ankommenden Zeichen. Sie warten bis Zahlen auftreten, sammeln diese bis zur nächsten Nicht-Ziffer (außer dem Punkt bei parseFloat()) und wandeln die Zahlenkette in einen Integer- beziehungsweise Floatwert.

#include <SoftwareSerial.h>
SoftwareSerial hc12(10,11);
int requestPin = 7;

void setup() {
  pinMode(requestPin, INPUT);
  Serial.begin(9600);
  hc12.begin(9600);
  Serial.println("Let's start!");
}

void loop() { 
  int sensorData1 = 0;
  int sensorData2 = 0;
  float sensorData3 = 0.0; 
  
  if (hc12.available()){
    sensorData1 = hc12.parseInt();
    sensorData2 = hc12.parseInt();
    sensorData3 = hc12.parseFloat();
    
    Serial.print("Sensor 1: ");
    Serial.println(sensorData1);
    Serial.print("Sensor 2: ");
    Serial.println(sensorData2);
    Serial.print("Sensor 3: ");
    Serial.println(sensorData3);  
  }
  if(digitalRead(requestPin)) {
    delay(300); // debounce
    hc12.print("request"); 
  }
}

 

Und so sieht die Ausgabe auf der Sender- und der Empfängerseite aus:

Ausgabe von HC12_Data_Server.ino / HC12_Data_Client.ino

Danksagung

Die beiden Männchen auf dem Beitragsbild stammen von Peggy und Marco Lachmann-Anke. Das Paragrafensymbol habe ich Michael Schwarzenberger zu verdanken. Alles wie gewohnt von Pixabay.

Das HC-12 Modul als Fritzing Bauteil stammt von Estevão Trabbold (stvz) auf fritzing.org.

133 thoughts on “HC-12 Funkmodul

  1. Nachdem ich nun einige Wochen mit zwei HC-12-Modulen getestet habe, in denen mein Testprogramm auf 2000 Codezeilen angewachsen ist, möchte ich noch kurze meine Erfahrungen hinzufügen:
    Mein Testszenario: auf jeder Seite ein ESP32 mit einem HC-12 Modul, welches ich mit 5 Volt betreibe und auf dem Eingangspin ( HC-12 TX – ESP-32 RX Pin) habe ich einen 100K-Widerstand eingefügt um sicherzustellen, dass mir das 4V-Signal vom HC-12 nicht den ESP-32 killt. (Ein echter Pegelwandler war mir zu Aufwändig).
    Als FunkModus habe ich AT+FU4 eingestellt, volle Sendeleistung, 1200Baud, auf beiden Seiten gleicher Funk-Kanal..
    Ein Gerät habe ich auf der Straßenseite zum Fenster ( 5. Stock ) gestellt und mit dem anderen Gerät bin ich „gewandert“.

    Meine bisherigen Erkenntnisse (bei denen mir Wolfgang dankenswerter Weise mit Analyse geholfen hat) sind:
    +) Es sind offensichtlich unterschiedliche HC-12-Module im Umlauf: Ich habe welche in China gekauft, welche die im Datenblatt beschriebenen 60Bytes Datenblöcke nicht übertragen können, sondern nur maximal 29 Bytes. Ich habe meine Blocksize auf 25 Bytes gestellt und mit Sendemodus AT+FU4 und 1200 Baud läuft die Übertragung.
    +) HalbDuplex: Für meine Testzwecke habe ich eine Verbindung in beide Richtungen inklusive CRC16-Prüfung und Acknowledge-Message programmiert. Ich hatte erhofft, dass sich die Module selbst ums halbduplex kümmern. Dem ist NICHT so: Falls beide Module gleichzeitig Daten zur Übertragung bekommen, kollidiert dies und auf beiden Seiten kommen nur verkrüppelte Daten an. Falls man Datenübertragung nur in eine Richtung betreibt, ist das kein Problem. Ansonsten muss man sich selbst darum kümmern, dass man keine Kollisionen erzeugt.
    +) Bei direktem Sichtkontakt habe ich beidseitige Übertragung mit bis zu 200 Meter erreicht.
    +) Sobald Hindernisse (Häuser, Bäume, Kastenwagen) dazwischen waren, habe ich Stellen gefunden bei denen es noch auf ca 50 Meter funktionierte und wenn ich im Stiegenhaus im Erdgeschoß ( 6 Stockwerke darunter) war, kam keine Übertragung zustande.
    +) Im 3. Stock (zwei Betondecken dazwischen) war die Datenübertragung noch recht gut.
    +) Im 2. Stock (drei Betondecken dazwischen) war die Datenübertragungsqualität nur noch bei ca 50%.
    Fazit: Wenn man Module gekauft hat, muss man testen, welche Datenblock-Größen (29 oder 60 Bytes) diese in einem Block übermitteln können. Wenn dann die Übermittlung nur in eine Richtung gehen soll, kann man diese recht einfach nutzen. Wenn man bidirektionale Übertragung machen möchte, muss man etwas mehr Aufwand in die Programmierung stecken…

    Mein Ziel ist es eigentlich eine Funkübertragung aus dem Keller in die Wohnung (7 Stockwerke darüber) zu erreichen, bei der es nur um ganz wenige Daten geht (Meldung Kellereinbruch). Leider ist mir das mit den HC-12-Modulen (noch) nicht gelungen. Da ich keinen Strom im Kellerabteil habe, muss ich es mit Akkus lösen. Da ich auch keine andere Kabelverbindung von der Wohnung in den Keller zustande bringen kann, suche ich weiter…. Vielleicht schafft es ja das HC-14 Modul, welches meine nächsten Testkandidaten werden.. mal sehen..

    Liebe Grüße
    Johann

    1. Hallo Johann,
      vielen Dank für den unfangreichen und hilfreichen Kommentar! Da ich 8 Module, davon vier SI4463 basiert und vier SI4438 basiert, getestet habe und alle die 60 Byte im FU4 Modus übertragen können, würde mich sehr interessieren, welche Erfahrungen andere gemacht haben. Aus China kommen sie letzten Endes alle. Aber vielleicht hat es eine schlechte Charge gegeben? So etwas gab es auch mal beim Bewegungssensor RCWL-0516. Sehr ärgerlich.

      Mit dem HC-14 konnte ich größere Reichweiten erzielen. Der HC-14 wird Gegenstand meines nächsten Beitrages.
      VG, Wolfgang

  2. Hallo Wolfgang!

    Habe die letzten Tage mit HC-12-FunkModulen zugebracht und bin auf nachfolgende Erfahrungen gekommen, welche im Datenblatt leider nicht so angegeben sind:
    Da ich eine dauerhafte Übertragung über längere Strecken einrichten wollte, habe ich mein Programm so gebaut, dass ich mit niedriger Baudrate (1200 Baud) arbeite. Damit ich den Übertragungspuffer nicht mit zu vielen Daten überlaste, hatte ich mir ausgerechnet wie viele Bytes ich in welcher Zeit an das Modul senden kann und habe dementsprechend eine nonblocking Übertragung mit Datencontainer und CRC16-Absicherung gebaut. Diese hat aber NICHT funktioniert. Es gingen immer wieder zirka 40% der Daten verloren und ich habe schon an meinem Programm gezweifelt. Als ich dann aber die Module rausgenommen habe und die zwei ESP32 über Kreuz verbunden hatte, habe ich klar gesehen, dass ich alle Daten richtig auf die Reise schicke und dann begann das große Suchen und Testen….
    Langer Rede kurzer Sinn: Man darf das HC-12-Modul NICHT kontinuierlich langsam mit Daten beschicken. Dabei gehen viele Daten verloren! Wenn man jedoch eine Message mit bis zu 63 Bytes Länge in einem Block auf die Reise schickt, und danach mindestens 1500 Millisekunden (bei 1200 Baud) wartet, kommen die Daten gut an.
    Ab 64 Bytes Message-Länge funktioniert es wieder NICHT mehr. (Da dürfte der Puffer des HC-12-Modules überlaufen).
    Wenn man mit der Baudrate in die Höhe geht (z.B. 19200) muss man zwischen den Nachrichten-Containern nicht mehr so lange warten, jedoch sinkt dann auch die Reichweite…
    Fazit aus meiner Sicht: Sehr preiswertes Modul für kleine Nachrichten-Blöcke, jedoch nicht geeignet, wenn man einen kontinuierlichen Datenstrom übertragen möchte.
    Passt das auch zu Deinem Eindruck bzw. Einschätzung oder hast Du andere Erfahrungen?
    Grüße aus Wien
    Johann

    1. Hallo Johann,
      ja, das deckt sich. Darauf hatte ich im Beitrag aber auch hingewiesen:
      Dieser Modus ist konzipiert, um hohe Reichweiten von bis zu 1800 Metern zu erreichen. Die einzig zulässige Baudrate ist 1200. Dabei wird die Funkbaudrate hier sogar auf 500 bps reduziert. Die Datenpakete sollten 60 Bytes nicht überschreiten und zwischen dem Senden zweier Pakete sollte eine Pause von 2 Sekunden liegen.
      VG, Wolfgang

  3. Hallo! Danke für den interessanten Artikel. Ich habe mir auch schon zwei HC-12 aus Fernost besorgt und möchte diese mit dem ESP32 testen. Der selbe Hersteller bietet auch ein ziemlich ähnliches Modul HC-14 an, welches bis zu 3000m reichen soll. Ist unterwegs und das Datenblatt hab ich mir auch schon übersetzt. Wenn ich erste Erfahrungen habe, kann ich berichten. https://www.hc01.com/goods/64101578c3c2fb11fcd14d3c
    FRAGE: Wenn ich das HC-12 Funkmodul mit VCC 5V versorge, muss ich dann Sorge haben, dass über das RX-Signal des HC-12 zu viel Spannung zurück-kommt? Habe gelesen, dass der ESP32 sehr empfindlich auf die 3.3V-Eingänge sein soll…… oder reicht da ein einfacher Widerstand mit 100 Ohm? Oder muss ich wirklich ein Level-Shifter-Modul einbauen?
    Sorry für die vielleicht dumme Frage, aber ich bin zwar ganz gut in Programmieren, aber bei der grundsätzlichen Elektronik falle ich eher in die Kategorie „Bausatz-Löter“.

    1. Hallo Johann, ja bei Stromversorgung mit 5 Volt könnte es Probleme geben. Die Module scheinen keinen Spannungsregler zu haben. Aber du kannst ja noch einmal nachmessen, was da für eine Spannung herauskommt. Sonst nimm doch einfach 3.3 Volt als Versorgung. Ansonsten einen Levelshifter. Gibt es für ca. einen Euro.

      1. Hallo, Alle.
        In keinem Beispiel sehe einen Pegelwandler.
        Im Datenblatt sehe ich VVc 5V= oder 3.2 V= // RXD /T XD 3.2V=.
        Ich habe gerade 2 HC12 zerstört und jetzt 2 neue
        mit Pegelwandler installiert. Ich hoffe, dass ich jetzt
        in aller Ruhe weiter komme.
        Halte ich sehr von Bedeutung.
        Gruß, Eckehard

        1. Hallo Eckehard,

          das habe ich in der Tat übersehen – tut mir leid. Ist mir auch deswegen nicht weiter aufgefallen, weil – warum auch immer – trotz Testens über lange Zeit bei mir nichts passiert ist. Die Spannungsteiler sind jetzt zumindest in der ersten Schaltung drin. Bei den anderen Schaltungen weise ich darauf hin.

          VG, Wolfgang

  4. Hallo Wolfgang,

    ich bin noch absoluter Anfänger was Arduino Mikrocontroller betrifft und möchte mir mit zwei,
    oder mehr HC-12 Funkmodulen einen Bewegungsmelder über möglichst grosse Distanzen bauen.
    Dazu habe ich vorerst auf einem Breadboard das Projekt von Tom Heylen mit „wireless communication
    with HC-12“ nachgebaut, sowie die Codes von ihm verwendet, was soweit auch funktioniert.
    Da ich aber zwecks Reichweite die Einstellung mit max. Sendeleistung verwenden möchte,
    habe ich mit einem RF Explorer den entsprechenden Frequenzbereich gescannt, um zu sehen,
    wie lange der Sender sendet. Und da habe ich gesehen, dass sobald einmal vom Taster das
    Signal kam, der Sender permanent weiter sendet, auch wenn der Taster nicht betätigt wird.
    Das würde ich aber gerne vermeiden, was eigentlich möglich sein sollte, da vor dem ersten
    Tasterbetätigung noch nichts gesendet wurde. Daher dachte ich mir, dass man vielleicht über
    den Schlafmodus das Sendemodul wieder in den Ausgangszustand versetzen könnte. Ich habe
    also ausgehend vom Originalen Code
    ——————————————————————————————
    //HC-12 Momentary Button Send
    //Autor Tom Heylen tomtomheylen.com

    #include

    SoftwareSerial mySerial(2, 3); //RX, TX

    int buttonPin = 8;
    boolean onOff = 0;
    void setup() {
    pinMode(buttonPin, INPUT);
    mySerial.begin(9600);
    }

    void loop() {

    int buttonState = digitalRead(buttonPin);//read button state

    if(buttonState == 1){//if button is down
    mySerial.println(1111);//send unique code to the receiver to turn on. In this case 1111
    onOff = 1;//set boolean to 1
    }
    if(buttonState == 0 && onOff == 1){//Verifier to send off signal once
    mySerial.println(0000);//send unique code to the receiver to turn off. In this case 0000
    }
    delay(20);//delay little for better serial communication
    }
    ——————————————————————————————
    versucht den AT+sleep Befehl irgendwie einzubauen und den Set Pin vom HC-12 mit D5 verbunden:

    #include

    SoftwareSerial mySerial(2, 3); //RX, TX
    SoftwareSerial hc12(2, 3);
    int SETPin = 5;
    int buttonPin = 8;
    boolean onOff = 0;
    void setup() {
    pinMode(buttonPin, INPUT);
    mySerial.begin(9600);
    hc12.begin(9600);
    }

    void loop() {

    int buttonState = digitalRead(buttonPin);//read button state

    if(buttonState == 1){//if button is down
    mySerial.println(1111);//send unique code to the receiver to turn on. In this case 1111
    onOff = 1;//set boolean to 1
    }
    else if(buttonState == 0 && onOff == 1){//Verifier to send off signal once
    mySerial.println(0000);//send unique code to the receiver to turn off. In this case 0000
    }
    delay(20);//delay little for better serial communication

    else(buttonState == 0 && onOff == 0);
    pinMode(SETPin, OUTPUT);
    {delay(50);
    hc12.print(„AT+SLEEP“);
    delay(50);
    pinMode(SETPin, INPUT);
    }
    }

    Ich habe eine Weile herumprobiert, bis er es ohne Fehler kompiliert hat, aber wie zu erwarten hat es nicht
    nach meiner Vorstellung funktioniert und es wurde gar nichts übertragen. Hast du vielleicht eine Idee,
    wie man das Sendemodul wieder in den Zustand vor dem ersten Auslösen per Taster zurück setzt, so dass es
    nur nach Auslösen per Taster oder eben später per Bewegungsmelder einmal sendet?

    1. Hi,

      bin zwar nicht Wolfgang aber ich bin mal so frech:

      Dieses Problem hatte ich kürzlich selbst in anderem Kontext, ich denke dein Problem liegt beim Taster, nicht beim Funkmodul. Lass dir mal den buttonState am Anfang der loop() via Serial.println(buttonState); ausgeben. Ich hatte einen Pin erwischt, der den State nach 1x drücken beibehält.

      Gruß,

      Tom

      1. Hallo Christoph, ich kann Tom nur zustimmen. Der HC-12 sendet nur, wenn man ihm das ausdrücklich sagt. Er sendet nicht von sich aus einfach weiter. Wenn ich mal raten darf, dann hast du keinen Pull-Down Widerstand (z.B. 10 kOhm) am Tasterpin oder er ist irgendwie falsch verbunden.

        Wenn du auf einen Widerstand verzichten möchtest, dann kannst du auch einfach die Logik umdrehen:
        * Taster mit GND verbinden
        * pinMode(buttonPin, INPUT_PULLUP);
        * if(buttonState == 0){//if button is down……..
        * if(buttonState == 1 && onOff == 1){//Verifier to send off signal once……

        1. Hallo Wolfgang und Tom,

          also ich verwende in meinem Aufbau schon einen Pulldown Widerstand, es ist so aufgebaut wie hier unter step 2, wiring and setup dargestellt:
          https://www.instructables.com/Long-Range-18km-Arduino-to-Arduino-Wireless-Commun/
          Es funktioniert wie gesagt auch die Kommunikation zwischen den beiden Modulen wie es soll, zumindest mit dem originalen Code von Tom Heylen. Ich habe statt der LED am Empfänger einen Summer eingesetzt und der piepst auch nur, solange am Sender der Taster gedrückt ist, natürlich um ein, zwei Sekunden zeitversetzt. Dann ist der Summer wieder still, aber am Scanner sehe ich, dass auf der eingestellten Frequenz das Signal bestehen bleibt. Wenn ich den Arduino mit dem Sender erstmals per USB anstecke habe ich an allen Pins am HC-12 ca. 4,1 bis 4,2V per Multimeter gemessen, sobald einmal der Taster gedrückt wurde, am RXD Pin leicht schwankend zwischen 2,5 und 2,8V. Wenn ich die Verbindung zwischen Arduino und RXD am HC-12 kappe, verschwindet das Sendesignal am Scanner und die Spannung am RXD Pin steigt auf 3,3V, obwohl der Pin doch jetzt gar nicht mehr mit dem Arduino verbunden ist…sehr seltsam. Verbinde ich dann den Pin wieder mit dem Arduino, kommt das Signal am Scanner sofort wieder. Wie gesagt, ich sehe das Signal am Scanner, aber der Empfänger reagiert da nicht, bzw. piepst nicht.

          1. Wenn die Spannung am RXD Pin heruntergeht, dann bedeutet das im Normalfall, dass der SoftwareSerial TX-Pin des Arduino (als in diesem Fall Pin 3) Daten sendet. Denn: eine Serial Datenleitung ist um Grundzustand High. Überträgst du Daten, dann geschieht das bitweise. Dabei werden Einsen kodiert, indem die Leitung auf GND gezogen wird. Die Übertragung eines „Hello World“ sieht beispielsweise so aus:
            https://wolles-elektronikkiste.de/wp-content/uploads/2022/01/Serial_hello_world.png
            „Makroskopisch“, also mit einem Multimeter, nimmst du das als einen gewissen Spannungsabfall wahr (wie bei einem PWM Signal).
            Es erscheint mir also, als ob der TX Pin dauersendet. Das würde bedeuten, dass – aus welchen Gründen auch immer – der Taster bzw. der mit ihm verbundene Pin nicht sicher in seinen Ursprungszustand LOW wieder zurückkehrt. Bitte greife hierzu noch einmal den Vorschlag von Tom auf und checke das. Wie dann zu erklären ist, dass das Piepsen tatsächlich nur auf Knopfdruck passiert, das kann ich dir nicht sagen. Eins nach dem anderen.
            Noch etwas anderes, was aber nichts mit dem Problem zu tun hat:
            Mir ist absolut unklar, was die Variable onOff bewirken soll. Beim ersten Tasterdruck wechselt sie von 0 auf 1 und wird nie wieder 0. Aus meiner Sicht kann sie ersatzlos gestrichen werden. Vielleicht sollte dadraus mal eine Art Debouncing werden.
            VG, Wolfgang

          2. Der Code von Tom Heylen ist schon etwas sonderbar, die Variable onOff soll dafür sorgen, dass das Signal nur einmal gesendet wird, bleibt, wie Wolfgang schon schrieb, aber auf 1. Dadurch wird dann 0000 in jedem Durchgang des Loops gesendet, das ist das Signal was du misst, denn dein Multimeter misst ja nicht ob da 1 oder 0 kommt, sondern ob überhaupt irgendwas kommt. Für den Empfänger heisst das dann nach allen 20ms „mach aus“ „mach aus“ „mach aus“ usw. 😉
            Nach dieser Zeile:
            mySerial.println(0000);//send unique code to the receiver to turn off. In this case 0000

            muss ein

            onOff=0;

            1. Hallo Wolfgang, hallo Tom,

              super, danke für den Hnweis Tom! Genau das war es…ich habe noch das onOff=0; eingefügt und jetzt hat er mit dem selbstständig Senden nach dem Tastendruck aufgehört.

  5. Hallo Wolfgang,

    vielen Dank für die super Beschreibung. Ich habe gerade mit 2 x Arduino und 2 x HC-12 eine Auswertung für meinen Stromzähler gebaut, die Software hat etwas gedauert. Funktioniert Bestens. Der 2. Arduino soll später den Verbrauch von Solarstrom steuern, z.B. Akku laden usw.

    Gruß Micha

  6. Spielt die Verbindungslänge zur Spiralantenne eigentlich eine Rolle?
    Normalerweise lötet man sie ja direkt aufs Board, aus Platz -und Positionierungsgründen würde ich sie lieber 2-3cm vom Board entfernt positionieren. Ändere ich damit die Antennenlänge oder spielt nur der Spiralteil eine Rolle?

    1. Hallo Tom, ich bin kein Funktechniker, deswegen kann ich dir die Frage nicht sicher beantworten. Bei den länglich geformten Antennen spielt die Länge eine entscheidende Rolle. Üblicherweise nimmt man ein Viertel der Wellenlänge, was ca. 17,3 cm sind. Das habe ich gut verstanden. Was ich bisher nicht wirklich verstanden habe, ist, wie genau eine Spiralantenne berechnet wird bzw. welchen Einfluss eine Verlängerung um ein gerades Stück dort hat. In solchen ungewissen Fällen gehe ich praktisch vor und probieren einfach aus. Ich habe versucht, etwas im Netz dazu zu finden, aber es gibt anscheinend niemanden, der sich erbarmt, das Thema Nichtprofis verständlich zu erklären.
      VG, Wolfgang

      1. Tja, so geht es mir auch, da man aber die externe Antenne auch mit einem Kabel verbindet, erscheint es mir unlogisch, dass die Verbindung da eine Rolle spielen soll.

        Mir ist das irgendwie schon klar, dass es dabei um die Wellenlänge geht, daher auch die mehrfachen Spiralen an den externen Antennen, so mein „Gefühl“ 😉

        Aber was weiß ich schon. Das Koaxkabel an der Fernsehantenne hat am Ende auch keine Rolle gespielt, war aber auch geschirmt. Ich werde es wohl probieren müssen.

      2. Hi,
        auch ich bin kein Profi, bastle aber gerade mit RFM69 (433MHz) Transceivern, welche eine RSSI-Auswertung (Empfangsfeldstärke) ermöglichen.
        Der Wechsel von der kleinen Fussili (Spiralantenne, 25mm) Senderseitig auf einen gestreckten Draht von 17.0cm bringt eine Verbesserung der Empfangsfeldstärke um ca. 20dBi. Am Empfänger war eh schon ein 17.0cm Draht die Antenne. Pro 6dB verdoppelt sich die Reichweite bei ansonsten gleichen Bedingungen, hier also ca. x8!
        Die Drahtlänge berechnet sich zu 17.3cm, aber es gibt noch den Verkürzungsfaktor (wiki) x 0.98, also 17.0cm Länge. Ich habe die Isolierung noch auf dem (Klingel-) Draht, also Verkürzungsfaktor x 0.96 und Länge 16.6cm. Das abknipsen von 17.0cm auf 16.6cm brachte nochmals ca. 3dBi am Empfänger.
        Der Wechsel von der Spiralantenne brachte auch einen merklich höheren Stromverbrauch beim senden, man bekommt also gar nicht so viel Leistung über die Fussili abgestrahlt, ggü. dem Draht.
        Alles getestet bei eingestellten 4dBm.
        Die Spirale baut eine Kombination aus Induktivität und Kapazität auf, damit die Antenne mechanisch kürzer wird, der Draht selbst ist dabei aber länger!

        Gruß André

        1. Hallo André,

          das ist interessant, auch wenn es jetzt nicht wirklich meine Problematik erörtert. Da ich maximal 100m brauche geht es mir gar nicht so sehr um Reichweite. Du schreibst „gestreckter Draht“, es wäre interessant zu wissen inwiefern dort Abweichungen Relevanz haben. Ich erinnere mich an ferngesteuerte Autos auf 433MHz, die am Fahrzeug einen gebogenen Draht hatten. Was ist, wenn man die 17cm in ein Rechteck biegt (z.B. Rand eines Gehäuses)?

          Gruß,

          Tom

          1. Hi Tom,
            wenn es Dir nicht um die Reichweite geht, kannst Du auch gern ersatzweise „Empfangsqualität“ einsetzen 😉 Also ob es noch ankommt oder gerade nicht mehr …
            Ich bin kein HF-Techniker, imho denke ich, daß ein gebogener Draht immernoch eine bessere Sendeleistung bringt als die kleinen Fussili, solange es keine geschlossene Drahtwindung wird. Aber da wird nur ausprobieren helfen.

            Gruß André

  7. Hallo Wolfgang,

    kannst du eine I2C Version eines Transceivers empfehlen?
    Ich wollte mich gerade darauf stürzen das HC-12 an ein ESP32_2432S024 Display zu baumeln aber leider musste ich feststellen, dass man die verfügbaren GPIO da extrem beschränkt oder eben schon für die Komponenten verbraucht hat. Nach dem Schema sind 21 (SDA),22 (SCL) und 35 (input only) übrig. Bin nicht sicher ob ich da SET,TXD und RXD drauf legen kann aber ein I2C Modul würde natürlich funktionieren.

    Gruß,

    Tom

    1. Hi Tom, ich kenne diese ESP32 Displays nicht. Aber du müsstest eigentlich per ESP32-SoftwareSerial die Pins nutzen können. Versuch macht klug! Ein I2C-basiertes Funkmodul ist mir nicht bekannt.
      VG, Wolfgang

      1. Hallo Wolfgang, einen Sender habe ich gefunden im horter-shop, leider keinen Empfänger.
        Ja die Pins kann ich direkt ansprechen, ich habe sie einmal mit einem LED blinktest ausgelotet, allerdings springt nur einer auf die „write“ Möglichkeit an, d.h. ich hätte dann wohl mit der SET Pin des HC-12 Moduls ein Problem. Aber den brauche ich wohl auch nicht unbedingt?

        Ich werde es mal versuchen.

        Gruß,

        Tom

      2. Hallo Wolfgang,

        ich gebe nochmal Rückmeldung, es funktioniert folgendermaßen:

        SoftwareSerial hc12(35,22);

        physisch: 22 an RXD und 35 an TXD des HC-12

        Nur falls jemand einmal so ein Smartdisplay verwenden möchte.
        Der GPIO geht 2x raus (ich weiss nicht warum sie das gemacht haben) und der 21 scheint zu kollidieren. Also will will man den Set auch noch nutzen wird es schwierig. Aber die Einstellungen legt man ja ohnehin nur einmal fest.

        Gruß,

        Tom

  8. Hallo Wolfgang,
    ich möchte meinen Stromzähler auslesen, der in einem Gewölbekeller – wohl früher Schutzraum – hängt.
    Da ich befürchte, dass ein Signal über WLAN mittels eines ESP8266 oder ESP32WROOM32 wegen der dicken Wände nicht ausreicht/durchkommt – das werde ich demnächst aber dennoch testen – , hätte ich gerne vorab eine Einschätzung von dir (und anderen – you’re welcome), ob es mit einem Nano, TEKT5400s und dem HC-12 klappen sollte.
    Ist das erstens physikalisch machbar und einfach (Löterfahrung schwach vorhanden, werden aber fast täglich mehr) und können zweitens die ermittelten Daten (auch in diesem Volumen) übermittelt/empfangen werden?
    Die übermittlung ist, denke ich, durchgehend ohne Pause (im zulässigen Frequenzbereich), also weitgehend unidirektional.
    Das Ganze soll dann in ESPHome + HausAssistant eingebunden werden (da sehe ich persönlich weniger eine Herausforderung).
    Was meinst du?
    Wie ist deine Einschätzung?

    Besten Dank vorab !
    LG Suzi

    1. Hallo Suzi,
      die WLAN Reichweite eines ESP32 oder ESP8266 ist begrenzt. Da bin ich bei einer dicken Gewölbekellerdecke eher pessimistisch. Mit dem HC-12 geht es vielleicht. In dem Modus, in dem ich auf freiem Feld bis zu 80 Meter erreicht habe, konnte ich zu Hause durch zwei Wände und eine Kellerdecke senden. Und da ich im FU4 Modus/1200 Baud auf freiem Feld auf über 1000 m gekommen bin, ist da noch Potenzial. Wenn die Kellerdecke allerdings mit viel Stahl verstärkt ist, dann kann es trotzdem eng werden. Wenn du z.B. sonst guten Handyempfang hast und im Keller gar nicht, wäre das ein Indiz, dass es schwierig wird. Letzten Endes kommst du ums ausprobieren nicht herum.
      Mit ESPHome habe ich keine Erfahrung, aber wenn du den HC-12 an einen ESP32 hängst, dann sehe ich keinen Grund, warum du die empfangenen Daten nicht in einem solchen Netz teilen können solltest.
      Viel Glück und viele Grüße,
      Wolfgang

    2. Ich habe die Übertragung der Zähler-Signale mit zwei HC-12 realisiert. Mit WLAN hatte ich mit dem weit entfernten Zähler (in einem angrenzenden Nachbarhaus mit 3 dicken Wänden) keine Chance für eine stabile Verbindung. Mit der seriellen 9600 Baud Übetragung per Funkstrecke läuft die Verbindung absolut stabil. Auf der Zählerseite ist die mitgelieferte Sprialantenne dran und auf der anderen Seite ein PVC ummantelter 0,8mm Kupferdraht mit 17cm Länge. Es ist auch noch Empfangsreverve vorhanden, habe ich getestet indem ich den Standort noch weiter weg getestet habe.

  9. Hi,
    Ich komme mit meinen HC12 Modulen und den Default Einstellungen im freien Feld kaum über 30 Meter.
    Und das mit SMA Antennen.
    Du scheinst ja mit der Standardantenne und power level 4 und ohne Kondensator auf fast 100 Meter zu kommen.

    Sehe ich das richtig, dass du in deinem Aufbau eine 9V Blockbatterie direkt an einem nano hängen hast und den Kondensator auf der 9V Seite?
    Müsste dieser nicht an den 5V hängen?

    1. Hallo Matthias,
      mit den Standardeinstellungen habe ich tatsächlich 120m erreicht. Ich kann allerdings nicht mehr mit Bestimmtheit sagen, ob ich da nicht schon den Kondensator dran hatte oder nicht. Ob es besser ist den Kondensator auf der 5V oder 9V Seite zu haben, das weiß ich nicht. Kommt drauf wo der Flaschenhals beim Nachliefern des Stroms ist, die Batterie oder der Spannungsregler. Ich hatte den Kondensator auf der 9V Seite und und habe damit die angegebenen Reichweiten erzielt. Du kannst ja mal beides ausprobieren. Vielleicht spielt auch eine Rolle, dass ich einen Li-9V-Block verwendet habe. Einen weiteren Einfluss können andere Funknetze haben, z.B. wenn ein Amateurfunker in der Nähe sitzt. Vielleicht hilft der Wechsel auf einen anderen Kanal? Mehr fällt mir da im Moment nicht zu ein. Hoffe, du kannst die Reichweite verbessern.

      1. Hallo Wolfgang,

        mit der Vermutung, daß 9V Lio Akkus Einfluss auf die Reichweite haben, liegst Du richtig.
        Ich benutze diese Akkus auch weil sie sich in einigen Multimetern, die ich eher selten verwende, so gut machen.

        Ich benutze diese 9V Lio Blöcke auch für ein HC12 mit einem Arduino nano davor.
        Ich habe 2 verschiedene Fabrikate. Als ich nun andere gekauft habe brach die Reichweite mit den neuen Akkus etwas ein. Nicht doll aber an der Reichweitengrenze doch merkbar.

        Als Funkamateur hab ich da mal mein 70cm Gerät an den neuen Akkublock gehalten.
        Der Akku produziert ein schwaches Grundrauschen im Bereich von etwa 137 bis 600 Mhz.
        Mit meinem SDR Empfänger kann ich das sogar sehen.
        Und dieses schwache Rauschen müllt wohl etwas den Empfänger des HC12 zu.
        Beim Aufladen strahlt der Akku nicht.

        Danke an dieser Stelle für die vielen schönen Tutorials hier.
        Das hat mir schon viel Zeit bei meine Bastelprojekten gespart.

        LG Dirk

  10. hallo,
    Das HC-12 Modul Reagiert nur auf den Befehl „AT“ alle anderen AT Befehle wie auch AT+FU1 funktionieren nicht. wurde mit „+“ und ohne probiert, auch bei der abfrage der einstelllungen kommt ein OK als Antwort. Sehr ärgerlich.
    Grüße olaf

    1. Hallo Olaf,
      tut mir leid für dich. Wenn dir allerdings jemand helfen soll, wäre ein wenig mehr Information hilfreich, z.B. welcher Chip wird auf dem HC-12 verwendet, welches Board verwendest du, hast du schon die Baudrate zurückgesetzt (mit SET an GND starten), welche Einstellungen im seriellen Monitor (Bausdrate, mit/ohne NL/CR), etc.
      VG, Wolfgang

  11. Hi Wolfgang,

    danke für den detaillierten Artikel. Ich konnte das Modul ohne Probleme mit einem Arduino UNO ans Laufen bringen. Ich versuche den Basis-Sketch allerdings auf einem ESP8266 ans Laufen zu bekommen, leider ohne Erfolg. Ich nutze das Wemos D1 Mini Board. Im Netz kursieren verschiedene Meinungen. Teilweise soll die SoftwareSerial Library unter den ESPs nicht gut funktioniert, allerdings gibt es auch Youtube Videos, wo es angeblich funktioniert.

    Konntest Du Erfahrungen mit dem Thema sammeln und hast eventuell einen Quick-Tip?

    Lg
    Nick

    1. Hallo Nick, welche Pins hast du für SoftwareSerial ausgewählt? Einige Pins können Probleme machen (D0, D3, D4 und D8). Und hast du die Pins in
      SoftwareSerial hc12 (pin1, pin2)
      richtig benannt? Ich meine damit: mit dem „D“ davor. Z.B. ist D1 = 5, D2 ist 4, usw.
      VG, Wolfgang

      1. Tatsächlich hat dein Tipp schon geholfen. Meine Lösung war jetzt:

        SoftwareSerial hc12(D1,D2)

        Kannst Du mir sagen, warum es bei den anderen PINs zu Problemen kommt?
        Außerdem hätte ich noch eine weitere Frage:

        Inwiefern hat der Funkmodus und die Sendeleistung einen Zusammenhang? Wenn ich den Funkmodus auf 4 setze (AT+FU4) und die Sendeleistung auf die legalen 8dBm (AT+P4), dann funktioniert es nicht mehr. Sobald ich ich z.B. den Funkmodus wieder auf 3 setze, funktioniert es wieder.

        1. Hi Nick,
          schön, dass zumindest dieser Teil leicht zu lösen war. Wegen der „verbotenen“ Pins schau am besten mal hier in diesem schönen Artikel:
          http://stefanfrings.de/esp8266/#wemosd1mini

          Ich weiß nicht, wie/ob sich der Funkmodus auf die Sendeleistung auswirkt. Zumindest hat der Modus Einfluss auf die Reichweite (siehe Tabelle im Beitrag). Der Funkmodus muss bei Sender und Empfänger identisch sein, vielleicht prüfst du das noch einmal. Die Reichweite hängt neben den Einstellungen von den baulichen Gegebenheiten ab und ob du Nachbarn mit starken 433 MHz Sendern hast. Vielleicht gehst du mal auf einen anderen Kanal. Zu den legalen Leistungen ist zu sagen, dass ich vielleicht etwas übervorsichtig war. Die Wattangaben beziehen sich auf die Leistung der Endstufe – davon wird aber nur ein Teil in Sendeleistung umgesetzt. Aber ich muss ja auch aufpassen, dass ich niemanden dazu animiere, etwas Illegales zu tun.
          VG, Wolfgang

        2. Hallo Nick!
          JA das Problem mit AT+FU4 kann ich bestätigen. Obwohl ich (wie im Datenblatt verlangt) auf 1200Baud runtergesetzt habe, gehen nur die ersten 28 Bytes gut und danach sind die Daten verfälscht (obwohl in meiner Testanordnung nur eine Schreibtischbreite zwischen den beiden Modulen liegt). Sobald man wieder auf AT+FU3 zurückstellt funktioniert es wieder (sofern man nicht mehr als 63 Bytes am Stück übertragen möchte).
          Grüße aus Wien
          Johann

        3. Hallo Nick,
          habe jetzt nochmals verifiziert:
          Man bekommt den Funkmodus AT+FU4 zum Laufen, wenn man seine Nachrichten in Pakete von max. 25 Bytes einteilt und zwischen den Paketen immer 2 Sekunden Abstand lässt.
          Die im Datenblatt angeführten 64 Byte funktionieren zwar bei +FU3, aber bei +FU4 nicht mehr. Bei 25 Bytes geht es noch gut, dann steigt mit jedem zusätzlichen Byte die Fehlerrate und ab 32 Bytes geht es immer schief.
          Ich übertrage jetzt Container mit 100Byte Nettodaten (+ 13 Byte Overhead für CRC-16-Prüfsumme und sonstige Steuerungsinfos). Es braucht zwar 5 Sekunden, bis die Daten ankommen, jedoch läuft es nun stabil.

          1. Hallo Johann,

            dieses Problem kann ich nicht nachvollziehen. Ich habe zwei HC12 Module an zwei Arduino Nanos angeschlossen und den Modus FU4 gewählt.

            Auf der Transmitterseite kam der folgende Sketch zum Einsatz:

            #include <SoftwareSerial.h>
            SoftwareSerial hc12(10,11);
            
            void setup() {
              Serial.begin(9600);
              hc12.begin(1200);
            }
            
            void loop() { 
              hc12.println("123456789012345678901234567890123456789012345678901234656789");
              delay(2000);
            }
            

            Damit werden 59 Zeichen + „Neue Zeile Zeichen“, also 60 Zeichen. Auf der Receiverseite habe ich den folgenden Sketch verwendet:

            #include <SoftwareSerial.h>
            SoftwareSerial hc12(10,11);
            
            void setup() {
              Serial.begin(9600);
              hc12.begin(1200);
            }
            
            void loop() {
              if (hc12.available()) {
                String messageIn = hc12.readString();
                Serial.println(messageIn);
              }
            }
            

            Während ich hier schreibe, verfolge ich auf dem Bildschirm die Ausgabe. Alles ist fehlerfrei. Ich habe es sowohl mit SI4463 als auch mit SI4438 basierten Modulen getestet.

            Vielleicht magst du noch einmal genau beschreiben, wie du die Daten versendest und empfängst. Oder, noch einfacher, du sendest mir die Sketche zu (wolfgang.ewald@wolles-elektronikkiste.de).

            Das Veröffentlichen von Code im Kommentarbereich ist ein wenig schwierig, da die Texte als HTML interpretiert werden.

            VG, Wolfgang

            1. Habe diese Mini-Sketches von Wolfgang auf meine beiden ESP32 (hardwareserial) adaptiert und kann klar sehen, dass spätestens ab 30 Bytes nichts mehr geht. Meine Module sind preisgünstige Ware von China und diese Module dürften sich wohl mit weniger Speicher begnügen. Mit den von mir derzeit benutzten 25-Bytes-Blöcken (bei +FU4 und 1200 Baud) funktionieren diese Billig-Module recht gut.
              Liebe Grüße
              Johann

              1. … und ich wiederum habe die Sketche von Johann unverändert bei mir auf zwei ESP32 / HC12 Modulen laufen lassen und sie funktionieren ohne eine einzige Fehlübertragung. Entweder hat Johann „Montagsmodelle“ erwischt oder ich habe besonders gute. Wer das hier liest, mag das ja vielleicht mal probieren.

  12. Moin

    ich bin mal wieder mit dem HC-12 am rum spielen und habe ein kleines feines Konfig-Tool für Windows gefunden:
    https://github.com/robert-rozee/HC-12-config

    Das Sotware-Config_HC-12.ino, welches man in seine Sketche integrieren kann und weiter oben in den Kommentaren bereits verlink wurde, poste ich dennoch einmal:
    https://c3824209b5.cbaul-cdnwnd.com/3fadd87ab95ba3924e26e1da659752b3/200002353-bd734be6e3/Config_HC-12_V1.0.ino.txt?_ga=2.212986324.1983763185.1567168725-1829516463.1487589414

    Gruß
    Robert

    1. Vielen Dank, das muss ich gelegentlich mal in den Blogbeitrag einbauen – ich will so viel…

      1. Hallo Wolfgang

        nichts überstürzen.
        Wenn was liegen bleibt, dann ist das halt so.
        Mach dass, wo nach Dir der Sinn steht.
        Sonst geht man kaputt.

        Gruß
        Robert

  13. Vielen Dank für die Anleitung. Ich hatte Probleme den Stromsparmodus bei SI4463 zu aktivieren, geholfen hat den SET Pin nicht wieder auf HIGH zurückzusetzen:

    digitalWrite(HC12_SET, LOW);
    delay(200);
    HC12.print(„AT+SLEEP“);
    delay(200);
    Serial.println(„HC12 Status:“+HC12.readString());

  14. Hallo Wolle,
    mir ist beim Test des HC-12 aufgefallen daß Module mit unterschiedlichen Transceiver IC’s nicht kompatibel sind. Eine Kontrolle ergab gleiche Parameter – nur sie funktionieren eben nicht zusammen. Ist Dir das auch schon aufgefallen und hast Du eine Erklärung ??

    1. Hallo Lothar,
      ich habe das schon mal getestet und es hat funktioniert. Siehe weiter unten (Antwort auf Kommentar von Pirmin). Allerdings gibt mir zu denken, dass es bei ihm auch nicht funktionierte. Vielleicht ein Problem unterschiedlicher Firmware Versionen o.ä.? Nur um sicher zu gehen: Wir reden über die Kombi SI4463/SI4438, richtig?

      Hier wird es zum Nachteil, dass die Module Black Boxes sind. Einfach zu handhaben, solange es keine Probleme gibt.

      VG,Wolfgang

      1. Nicht ganz, die Kombination ist SI4382A und SI44631B. Vielleicht liegt es daran.
        Alle Bausteine mit AT+DEFAULT zurückgesetzt – es bleibt dabei, die Bausteine sind untereinander nicht kompatibel. Obwohl alle die gleiche Firmware version 2.4 besitzen.
        Ich erwarte in den nächsten Tagen eine neue Lieferung (Transceiver ???) – ich werde dann wieder berichten.
        Die Anwendung (Übertragung von 4 Pegelständen an einen „Server“ – insgesamt 5xESP32) funktioniert problemlos – aber immer nur mit einem Transceivertyp.
        Vielen Dank für Deine schnelle Rückmeldung.

        1. Viele Einflussmöglichkeiten hat man ja nicht. Also muss man sich wohl damit abfinden, dass gewisse Kombinationen nicht funktionieren, was sehr schade ist. Aber vielen Dank für den Hinweis. Ich muss das demnächst mal im Beitragstext vermerken.

          1. Die neuen Module sind da und getestet. Wieder mit SI4382A – alles funktioniert.
            Also bitte bei der Bestellung aufpassen und die Kombination SI4382A und SI44631B meiden 🙂 .

  15. Hallo Wolfgang,

    ich bin neu hier und habe mit großem Interesse von Deinen Erfahrungen (und denen der anderen Menschen hier) mit dem HC-12 gelesen. Da ich für ein Projekt das Maximum an Reiichweite herausholen möchte (einschließlich der legalen Ausschöpfung der 100mW Sendeleistung dank AFu-Lizenz), hätte ich zwei Fragen:

    1. Hast Du für den Reichweitenvergleich zwischen der onboard-Spiralantenne und einer externen Stabantenne die Spiralantenne ausgelötet, wenn Du die externe Stabantenne angeschlossen hast? Wenn nicht, dürfte die externe Antenne doch eigentlich nur einen Teil der abgegebenen Leistung abbekommen…

    2. Gibt es irgendwelches Wissen oder Erfahrung darüber, ob das Modul irgendwo in seinem ja sehr breiten Frequenzspektrum besonders empfindlich ist? Ich habe schon versucht das selber herauszufinden, indem ich zwei HC-12-Module mit Kochtöpfen etc. so abgeschirmen wollte, dass sie auf der niedrigsten Leistungsstufe nicht mehr miteinander kommunizieren. Dann hätte ich die Leistungsstufe ermittelt, auf der eine Kommunikation gerade einsetzt – und das dann am unteren Ende des Frequenzspektrums, am oberen Ende und in der Mitte wiederholt.
    Leider kann ich die Dinger abschirmen wie ich will – sie kommunizieren auch bei Power Level 1 (0,8 mW) munter miteinander…

    1. Hallo Daniel,

      zu 1): Erstmal ein allgemeiner Kommentar. Vielleicht bin ich bezüglich meiner Kommentare zur er laubte Sendeleistung ein wenig zu weit gegangen. Wie Michael weiter unten kommentierte, beziehen sich die 100 mW aus der Spezifikation des hc-12 Moduls auf die Leistung der Endstufe, was aber nicht der Leistungsabgabe an der Antenne entspricht. Welchen Faktor man hir zugrunde legen muss, kann ich dir aber nicht sagen. Zur Antennenfrage: Ich habe für die Reichweitentests mit externer Antenne nur die externe Antenne verwendet (siehe auch mein Foto im Beitrag). Die kleine Spiralantenne musste ich nicht ablöten, da ich schlicht genügend Module habe.

      zu 2) mir ist nicht bekannt, dass die Sendeleistung und/oder die Empfindlichkeit für den Empfang über den Wellenlängenbereich schwankt. Was aber etwas ausmachen kann ist eine Störung durch andere 433 MHz Sender. Insofern würde ich eher in den oberen Frequenzbereich gehen. Allerdings ist rechtlich gesehen nur der Bereich zwischen 433.05 und 434.79 MHz zulässig, also bis Kanal 4.

      VG, Wolfgang

      1. Hallo Wolfgang,

        das mit der von der Antenne abgestrahlten Leistung ist schon richig – aber wenn eine Antenne einen Wirkungsgrad von sagen wir mal weniger als 50% hat, sollte man sich vielleicht eine bessere suchen oder basteln 🙂

        Uns Fnkamateuren steht der gesamte Bereich von 430 – 440 MHz offen, und im 70cm-Bandplan gibt es sogar Frequezbereiche, die ausdrücklich für digitale Experimente vorgesehen sind.

        Mal sehen, wenn ich etwas Zeit habe, bastele ich mal einen simplen Feldstärkeanzeiger und fahre den HC-12 einmal von oben nach unten durch. Ich kann mir aber auch gut vorstellen, dass es keine großen Unterschiede bei der Sendeleistung über das Frequenzspektrum gibt…

        Grüße,

        Daniel

        1. Ich bin alles andere als ein Funktechniker. Ich beziehe mich auf die Aussage von Michael (weiter unten), der zumindest für die mitgelieferten Sprialantentennen vermutet, dass man trotz 100 mW Endstufenleistung nicht die 10 mW Grenze reißt. Ich persönlich neige zu einer konservativen Aussage, damit ich niemanden zu illegalen Taten verleite. Wieviel besser die externen Antennen sind, entzieht sich meiner Kenntnis. Wikipedia sagt hier:

          „Nicht abgestimmte Langdrahtantennen erreichen selten mehr als 1 % Wirkungsgrad. Die Parabolantenne liegt meistens über 50 %, der Hornstrahler bei 80 % und mehr.“

          Die Angabe, dass nur der Frequenzbereich zwischen 433.05 und 434.79 MHz zulässig ist, habe ich aus dieser Quelle:
          https://www.mikrocontroller.net/articles/Allgemeinzuteilung

          Wenn das nicht korrekt ist, oder es Ausnahmen gibt, dann ändere ich das gerne, würde es aber durch eine Quelle belegen wollen. Hast du eine Quelle für die Zulässigkeit der 430-440 MHz Frequenzen?

          VG, Wolfgang

            1. Vielen Dank für die schnelle Antwort. Verstehe: der Unterschied ist eine Frage der Lizenz (und des Zwecks?). 433.05 und 434.79 MHz ist lizenzfrei. Also sollten sich alle Nicht-Amateurfunker tatsächlich darauf beschränken.

              1. Ja so ist es. Hier ist die Primärquelle, der aktuelle Frequenzplan 2022 der Bundesnetzagentur, siehe Seite 293

                Im 70 cm Band gilt im Frequenzbereich 433,05 – 434,79 MHz folgendes:

                Übertragung von Daten und Tonsignalen über kurze Entfernung
                Maximal zulässige äquivalente Strahlungsleistung: 10 mW ERP
                Relative Frequenzbelegungsdauer („duty cycle“): 100% bei einem Kanalabstand von 25 kHz

                Und man darf überrascht sein, was im 70 cm Band noch alles so herumgeistert. (Militärische Funkanwendungen und Betriebsfunk)

                Die Angabe der Strahlungsleistung bezieht sich auf einen Halbwellendipol. Das bedeutet, sobald eine Antenne im Bezug auf den Dipol mit 10mW (bei korrekter Anpassung) einen Gewinn aufweist, hat man die Latte gerissen.

                Solange es aber bei den 10mW bleibt, möchte ich hier mal die Kirche im Dorf lassen. Man munkelt, so manches Baofeng/Quansheng oder gar Markenfunkgerät hat Oberwellen jenseits der Zulässigen Dämpfung von 60 dB im 70cm Band.

                Wenn Sie aber ein Funkamateur der Klasse A neben sich wohnen haben, der mit erlaubten 750 W PEP sendet, werden Sie wahrscheinlich wenig Freude mit diesen HC-12 Funkmodulen haben. Aber er hat das Primärnutzungsrecht und zahlt dafür auch einen Betrag im Jahr.

  16. Hallo Wolfgang,

    vielen Dank für den prima Artikel (und viele andere) – hat mir sehr geholfen beim Einstieg in die Arduino-Funkübertragung! Meine HC-12 Module funken erstaunlich zuverlässig und weit – sogar bei nur 3,3 V.

    Kleiner Korrekturvorschlag:
    Im Sketch
    HC12_Distance_Test_Receiver
    fehlt das
    #include

    Dadurch wirft die Arduino-IDE einen Fehler, wenn man – faul wie ich – erstmal einfach den Sketch kopiert und kompiliert.

    Danke, Grüße, raLLi.

  17. Super Seiten von Dir! Danke Wolfgang.
    Die Sendeleistung bezieht sich Imho auf die EIRP Strahlungsleistung an der Antenne. Somit ist die Leistung der Endstufe (100mW) nicht alleine relevant.
    Vom Gefühl her, wären dann die 100mW mit der verkürzten Antenne schon im Normbereich.

    „Bei 433,025-434,7875 ist es 10mW EIRP. Also das was die Antenne abstrahlen darf“

    Manche Quellen schreiben von EIRP (Equivalent isotropic radiated power)(Rundstrahler) andere von ERP (Halbwellendipol).

    Eine gute Antenne bewirkt auch einen besseren Empfang und ist daher immer eine gute Wahl.
    ZB ein Dipol im Eigenbau: https://crycode.de/diy-433-mhz-dipol-antenne

    Viel Freude beim basteln!

    Michael

      1. Ihre Ausgangsleistung an der Antennenbuchse können Sie mit einem Spektralanalysator messen. Günstige Modelle gibt es schon um die 60 Euro (https://www.tinysa.org/wiki/)
        Danach multiplizieren Sie den Wert mit dem Antennengewinn ihrer Antenne, aber ziehen vorher die Dämpfungsverluste ab.
        Ich würde für die Praxis folgendes raten: Mit dem Spektralanalysator einfach die Ausgangsleistung des Funk-Moduls über ein definiertes Dämpfungsglied messen. Also statt einer Antenne schließen sie den Spektralanalysator an und gehen auf Sendung.
        Wenn Sie nicht gerade eine x30 oder größeres als Rundstrahler/Richtfunk anschließen, sollten sie eine ungefähre Vorstellung haben, was los ist. Wenn Sie dann noch verstehen, was Wellenlängen, Antennengewinn und Antennenlängen verbindet, kommen sie dem Ergebnis noch näher.

    1. „Bei 433,025-434,7875 ist es 10mW EIRP …“

      Ah ich denke Sie liegen genau 2,15 dB daneben. Das ist ein Faktor von 1,64 an mehr Leistung (10^(2,15dB/10))

      „Manche Quellen schreiben von EIRP andere von ERP. …“

      Die Primärquelle ist hier auf Seite 293:

      https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Frequenzen/20210114_Frequenzplan.pdf?__blob=publicationFile&v=1

      ERP ist richtig.

      Aber womöglich spielt all dies ohne hin keine praktische Rolle.

  18. Hallo,
    ideale Anleitung! Besten Dank hierfür… Ich habe es auch ausprobiert und ich bin überrascht, was die Teile an Reichweite bewerkstelligen können (mit der mitgelieferten Werksspiralantenne…)

    Ich habe mir nun 433 Mhz externe Sendeantennen bestellt und wollte wissen, welchen IPEX ich benötige. Gibt ja unterschiedliche Arten/Größen…

    Grüße,
    Tobi

  19. Hallo,
    Vielen Dank für den hilfreichen Beitrag! Ich hätte noch eine Frage zu den Unterschiedlichen Chips. Ich habe nämlich aus versehenen einen HC12 mit SI4463 und einen mit SI4463 gekauft. Eigentlich habe ich gedacht, dass SI4438 und SI4463 untereinander kompatibel sein müssten, aber das hat in meinen vielen Versuchen nicht funktioniert. Beide habe ich AT+DEFAULT gestellt und konnte auch über AT-Befehle mit den Modulen reden (weshalb ich falsche Verdrahtung ausschließe). Trotzdem haben sie das Signal des anderen nicht empfangen. Und dass die Module senden, habe ich mit einer externen SDR-Antenne von nooelec am Computer getestet. Kann mir jemand helfen, ob die beiden Chips untereinander funktionieren?
    Viele Grüße Pirmin

    1. Ich meinte natürlich, dass ich mir einen HC12 mit SI4438 und einen mit SI4463 gekauft habe

      1. Hallo, ich habe es nicht direkt ausprobiert, würde aber auch sagen, dass sie eigentlich kompatibel sein müssten. Aber ich wüsste auch nicht, was man sonst groß verkehrt machen könnte. Wenn die AT-Befehle ankommen, ist die Verkabelung in der Tat in Ordnung. Man könnte höchstens noch vergessen aus dem AT Modus zu gehen indem man SET auf GND Niveau lässt. Ansonsten muss ich das selbst mal testen, das schaffe ich aber heute wahrscheinlich nicht mehr. VG, Wolfgang

      2. Update: Ich habe es eben mit einer Kombi aus SI4438 und SI4463 probiert und es funktioniert. Beide im Default Zustand und als Sketch HC12_SoftwareSerial.ino, jeweils an einem Arduino Nano. Dann kann ich problemlos Nachrichten von einem zum anderen schicken. Voraussetzung ist wie schon erwähnt, dass man zum Senden der Nachrichten nicht mehr im AT Modus ist (SET unverbunden oder HIGH). Und wenn man beide Arduinos an einem PC hat, dann muss man die Arduino IDE zweimal aufrufen (2 Instanzen). Theoretisch kann natürlich auch eines Module defekt sein. Nach meiner Erfahrung liegt der Fehler aber meistens woanders.

        1. Vielen Dank für die Antwort, damit weiß ich, dass es theoretisch funktionieren sollte. Ich habe das Projekt etwas ruhen lassen und mich jetzt erneut dran gesetzt. Aber ich habe es immer noch nicht hingekriegt. Mir ist aber aufgefallen, dass die beiden Moduls unterschiedliche Firmware haben. Der SI4438 hat HC-12_v2.6 und der SI4463 hat HC-12_v2.4 (der ist etwas älter). Könnte das vielleicht ein Grund sein? Finde ich eigentlich nicht ganz zufriedenstellend aber sonst habe ich auch keine Idee mehr: AT-Befehle kommen an, über eine USB Antenne konnte ich sehen, dass ein Signal gesendet wird (allerdings nur den Ausschlag auf der Frequenz, nicht den Inhalt), AT+RX zeigt, dass beide gleiche Parameter haben und beide haben die gleiche Antenne. Den SET-Pin habe ich natürlich auch auf unverbunden gehabt.
          Wenn es die Firmware nicht ist bleibt wahrscheinlich aus irgendeinem Grund nur noch Defekt übrig, oder?

          1. Hallo, wenn ich wetten sollte, dann würde ich nicht auf die Firmware tippen, sondern eher auf einen Defekt. Ob es ein anderer Fehler sein könnte, ist schwer aus der Entfernung zu sagen. Manchmal ist es einfach nur etwas profanes wie ein kaputtes Kabel. Ich würde am ehesten zwei neue Module kaufen. Ist ärgerlich , ich weiß….
            VG, Wolfgang

  20. Hallo,
    ich bräuchte etwas Hilfe.
    Bei einem Projekt messe ich den Winkel eines Potentiometers aus. Diesen möchte ich dann per Variable von einem Funkmodul zum anderen Funkmodul senden.

    Das Programm um das Potentiometer auszulesen habe ich schon fertig. Jetzt ist nur noch die Frage wie man Variablen per HC12 versendet und ausließt.

    Hier das Programm (aber es funktioniert leider nicht, da keine Variable versendet wird):

    #include
    SoftwareSerial hc12(10,11);

    int potVal;
    int potPin;
    int angle = 1;

    void setup() {
    Serial.begin(9600);
    hc12.begin(9600);

    }
    void loop() {

    potVal = analogRead(potPin);
    Serial.println(potVal);
    angle = map(potVal, 0, 1023, 0, 179);

    hc12.write(„esel“);
    delay(1000);
    }

    Liebe Grüße,
    Konrad

    1. Hallo Konrad, sende den Wert einfach mit hc12.print(angle). Auf der anderen Seite kannst du den Wert mit hc12.parseInt() bequem auslesen. Wenn du mehrere Werte hast, dann würde ich sie in einem String „verpacken“, so wie ich es im Abschnitt „Übermittlung von Sensordaten beschrieben habe. VG, Wolfgang

      1. Hallo,
        wir bräuchten nochmals etwas Hilfe.
        Wir haben, wie gesagt, ein Projekt bei dem wir den Winkel eines Potentiometers auslesen (das klappt). Diesen möchte ich dann per Variable von einem Funkmodul zum anderen Funkmodul senden (Sender ist ein Arduino Nano und Empfänger ist ein Arduino Uno. Wir lesen dann den Wert aus und geben ihm den Namen „angle“. Dieser soll dann versendet werden. Wir sind nun ihrem Tipp gefolgt und haben die Sachen geändert, jedoch funktioniert es immer noch nicht.
        Wäre nett, wenn sie uns nochmals helfen könnten.
        Anbei diesmal beide Programme (Sender und Empfänger).

        Sender:
        #include
        SoftwareSerial hc12(10,11);
        int potVal;
        int potPin;
        int angle = 1;
        void setup() {
        Serial.begin(9600);
        Serial.println(„Let’s start!“);
        hc12.begin(9600)
        }
        void loop() {
        potVal = analogRead(potPin);
        Serial.println(potVal);
        angle = map(potVal, 0, 1023, 0, 179);
        hc12.print(angle);
        delay(1000);
        }

        Empfänger:
        #include
        SoftwareSerial hc12(10,11);
        void setup() {
        Serial.begin(9600);
        hc12.begin(9600);
        }
        void loop() {
        Serial.write(hc12.parseInt());
        delay(100);

        }

        Mit freundlichen Grüßen
        Konrad Wiese

        1. Hallo,
          loop() auf der Empfängerseite sollte so aussehen:

          void loop(){
          if (hc12.available()){
          Serial.println(hc12.parseInt());
          }
          }

          Also kein delay() und print anstelle write.
          VG, Wolfgang Ewald

  21. Hallo,
    eine Anfrage an alle HC12 Nutzer.
    Kennt jemand eine Quelle , wo es noch 4463er Module gibt.
    Bei ebay und Amazon werden 4463 angeboten aber es kommen immer nur 4438 an.
    Ich suche mindestens ein Modul. Zwei wären super.
    Vielen Dank an denjenigen der mir eins verkaufen kann oder mir eine Quelle nennen kann.

    Gruß Eckard

  22. Finde ich alles sehr gut. Ich baue gerade zwei Wetterstationen mit einer zentrale. Von einer zur anderen Seite funktioniert es. Rückwärts nur sporadisch. Wie der Blinker am auto. Geht, geht nicht, geht, geht nicht. Bin noch am experimentieren.

    1. Ich hoffe du findest den Fehler noch. Vielleicht „Kollisionen“, also beide Seiten senden gleichzeitig? Fehleranalyse aus der Ferne ist immer schwer. Sonst melde dich nochmal.

      1. Das geht ja richtig schnell. Super.
        Ich bin 67jahre und programmiere aus Spaß an der Freude. Mein Einstieg ins softwaregeschäft war ca. 1980 mit Commodore und deren Basic. Dann habe ich mal beim Studium was von FORTRAN gehört und ein simester damit zugebracht. Dann nie wieder.
        Danach habe ich einen kleinen Betrieb für Hard und Softwareentwicklung gehabt.
        Das war eine kleine Lebensgeschichte.

        Ja, du hast recht. Ich sende manchmal gleichzeitig. Darf man das nicht?
        Also immer nur in eine Richtung und danach die andere Richtung. Was passiert, wenn die Außenstellen gleichzeitig starten? Oder muss ich von der Zentrale abfragen!!
        Kann die serielle Schnittstelle „zustopfen“ also verstopft sein. Kann man Datenreste wieder löschen mit einem Befehl ?

        1. Hallo, ja das gute alte Basic…
          Offen gestanden habe ich nicht probiert, was passiert, wenn man gleichzeitig sendet. Aber ich glaube es, geht nur eins zur selben Zeit. Das müsste ich selbst erst einmal recherchieren oder probieren. Vielleicht gibt es da auch einen Puffer. Das Problem ist nicht unbedingt die serielle Schnittstelle. Das HC12-Modul ist recht komplex aufgebaut. Da ist noch ein eigener MCU drauf. Ich würde es mit Abfragen probieren. Eigentlich muss man aber auch bei einer Wetterstation einmal pro Minute oder sogar noch seltener senden. So schnell ändern sich die Temperaturen ja nicht. Und dann gibt es auch selten Kollisionen.

          1. die Datenmenge und Häufigkeit ist bei Wetterstation nicht hoch. ich wollte bzw. will nur mal gleichzeitig die grenzen sehen. es könnte ja mal für etwas anderes wichtig sein.
            jetzt ist der fall bei mir, dass ich von der einen Seite nur noch einen teil der Daten übertragen bekomme. der erst wird verschluckt. wo auch immer. ich verwende auf beiden Seiten exakt den gleichen Softwarestand. von rechts nach links läuft, von links nach rechts nur der Anfang der Übertragungs-Daten. kurze Datenmengen werden kpl. übertragen.

            irgendwo fand ich mal : HC12.flush(); diesen Programmbefehl. bei mir keine Funktion, soll aber irgendwie die serielle Schnittstelle säubern???

            1. Wenn man die z.B. die Serial.print Funktion ausführt, dann wird ein Puffer gefüllt und das Programm läuft weiter, wenn alles im Puffer drin ist. Das heißt es werden schon die nächsten Anweisungen ausgeführt, während die Schnittstelle noch sendet. Das kann man sehen, wenn man den Arduino nach einem print Befehl bei langsamer Baudrate und langen Strings in den Schlaf schickt. Die Nachricht wird teilweise verschluckt, obwohl die Schlafanweisung erst nach dem print Befehl kam. Da hilft die flush Anweisung. Sie bewirkt, dass die nächste Anweisung erst ausgeführt wird, wenn der Puffer leer ist. Ich weiß nicht ab dir das hilft. Auf die Entfernung ist Fehlersuche schwer…

              1. einen wunderschönen guten morgen aus dem sonnendurchfluteten bad Brückenau in Unterfranken.

                deine Nachtruhe ist aber auch nicht hoch. danke für deine nächtlichen Bemühungen.

                ich werde jetzt noch mal testen, auch an der hardware muss ich schauen.

                1. hallo,

                  ich habe weiter experimentiert.

                  ich habe den Befehl: HC12.flush(); jetzt eingefügt und oh wunder es geht wieder alles. der ist also anscheinend nicht ganz unwichtig.

                  jetzt habe ich noch ein Problem:
                  wenn ich die eine Seite nur über USB mit Spannung versorge, kommt es zu Aussetzern. mit externer 5v Versorgung geht alles gut. aber nur die eine Seite. bei der anderen Seite geht alles gut, auch wenn nur über USB versorgt wird.

                  als nächstes will ich noch die LCD anzeige optimieren. welcher wert an welcher stelle steht.

                  das ist mein sendescript:

                  //————-senden dht11 daten———————–

                  if (digitalRead(12) == LOW)
                  {
                  digitalWrite(13, HIGH);
                  i2 = i2 + 1;

                  HC12.print(„Hallo von „);

                  HC12.print(id); // ist die Platinen ID
                  HC12.print(“ „);

                  HC12.print((int)temperature); //werte aus DHT11
                  HC12.print(„*C „);
                  HC12.print((int)humidity);
                  HC12.print(„%H „);
                  HC12.print((int)valpoti);
                  HC12.print(“ „);
                  HC12.print(i2);

                  // Serial.println(„SENDEN dht11“);
                  // Serial.println(„Hallo, wie geht es“);

                  // Serial.println(Hallo);

                  HC12.flush(); //hier ist dieser Befehl

                  delay(1000);
                  digitalWrite(13, LOW);
                  delay(1000);

                  }

                  1. Für den Fall, dass Du einen sehr alten PC nutzt mit verbauten USB 1.0 oder 1.1 Interfaces. Die können nur maximal 100mA abgegeben, also soviel, wie HC12 schlimmstenfalls aufnimmt. Da könnte es dann schon eng werden.

                    Bei einer USB 2.0 und größer sollte das aber passen.

                    1. hallo Hardy

                      in meinem Büro steht noch (zur Abschreckung) ein Commodore PET2000. Auf dem habe ich mein Basic gelernt.
                      Jetzt benutze ich ein MacBook Air, ca.2,326 Jahre alt. also nicht ganz so alt wie ich oder mein Commodore.;-)

                      nach den infos von Wolle habe ich ein wenig umgestellt, verlangsamt und ohne Kollision sowie externe Spannung verwendet.
                      Seit heute spät-Vormittag läuft alles perfekt.
                      Jetzt noch ein wenig Kosmetik und alles ist ok.
                      Danke für alles. Vielleicht kann ich auch einmal behilflich sein. Habe verschiedene Projekte. Solarsystem, Modellbahn etc.

                      by the way, warum muss ich immer mit Namen und email abschliessen???

                  2. Hallo Lothar, schön, dass es funktioniert! Du musst deinen Namen und e-mail angeben, damit man weiß wer geschrieben hat. Mit Cookies könnte man das abkürzen, aber dann müsste ich noch mehr Datenschutz-Gedönse machen.

                    1. sooo, ein teil Kosmetik erledigt.

                      ich habe delays(500) vor senden und empfangen und delays(2000) nach senden und empfangen eingefügt. die werte habe ich erprobt auf minimum. bei zu kleinen werten „hängt“ sich der HC12 gerne auf. bei grösseren werten verliert man zeit.
                      jetzt läuft auch in Kollisionsübertragung ohne ausfälle. der HC12 braucht anscheinend „Ausruh-phasen“

  23. Hallo,
    vielen Dank für die Anleitung.
    Ich versuche derzeit einen Arduino mit HC-12 Modul als reinen Funkempfänger zu betreiben.
    Auf der Senderseite sollen unterschiedliche, bereits fertige, 433Mhz Funkfernbedienungen zum Einsatz bekommen.
    Als ersten Schritt würde ich gerne sämtliche Zeichen empfangen und im Serial Monitor ausgeben, die mir die Funkfernbedienungen senden.
    Leider erhalte ich im Arduino Serial Monitor keine Zeichen. Woran könnte dies liegen?
    Viele Grüße

    1. Hallo Michael,

      das HC-12 Modul verträgt sich nur mit anderen HC-12 Modulen. Oder du müsstest das Sendersignal so modifizieren, dass es das Signal eines HC-12 Moduls exakt simuliert. Das HC-12 Modul ist sehr einfach zu bedienen, weil man einfach nur print-Befehle an das Modul senden muss. Was danach passiert, also wie das Signal dann wirklich übertragen wird, darum muss man sich nicht kümmern – sofern man auf der anderen Seite auch ein HC-12 Modul hat, das das Format versteht. Wenn du Signale vorhandener 433 MHz Fernbedienungen empfangen möchtest, dann empfehle ich diese Beiträge

      https://wolles-elektronikkiste.de/433-mhz-funk-mit-dem-arduino

      https://wolles-elektronikkiste.de/funksteckdosen-und-handsender

      VG, Wolfgang

    1. Hi Siggi,

      ja, sehr gute Ergänzungen. Ich lasse den Link erstmal im Kommentar stehen. Ich schaue mal, dass ich ihn später mal im Text einbaue – das kann eine bisschen dauern.

      VG, Wolfgang

  24. Hallo Wolfgang,

    ich schon wieder:) Wir hatten ja erst zu den RXB12 /RXB8 – Modulen geschrieben,der Tausch hat durcj Deine Hilfe problemlos geklappt, vielen lieben Dank.

    Wenn Du Dich erinnerst, diese sitzen auf einer Relaisplatine (über Handsender angesteuert) .Wenn ich jetzt das RXB8 durch das HC-12 ersetzen wollen würde, was entspricht dem Data-Pin des RXB8 – TX, RX odetr Set?

    Und sorry, wenn es eine blöde Frage ist im Vergleich zu den technischen Ausführungen oben, vor denen ich richtig Respekt habe 🙂

    1. Die RXBx Module sind nicht mit den HC12-Modulen kompatibel. Die RXBx Module sind sehr simpel. Am Sender legst du Datenpin auf HIGH und solange sendet er ein Dauersignal. Am Empfänger dasselbe: so lange er was empfängt, geht sein Datenpin auf HIGH. Du kannst also die zu übertragenden Daten codieren, wie du willst. Normalerweise machen das dann Bibliotheken für dich, aber du könntest auch Morsezeichen senden oder die irgendetwas anderes ausdenken:
      https://wolles-elektronikkiste.de/eigene-funkprotolle
      Der HC-12 hingegen ist ein komplexes Bauteil mit eigenem Microcontroller. Du „siehst“ praktisch nur seine serielle Schnittstelle. Entsprechend übermittelst du deine Information byteweise. Der HC-12 übersetzt das dann entsprechend seinem Funkprotokoll. Auf der Empfängerseite wird das Funksignal dann rückübersetzt als Zeichenkette interpretiert und über die serielle Schnittstelle ausgeben.
      Insofern ist der TX Pin der Datenausgang des HC-12 Empfängers, nur kommen da komplexe Daten heraus die dein Relais nicht versteht.

      1. Danke für die ausführliche Antwort und schade, dann nützt mir das nix. Im Prinzip nutze ich es als Garagentor-Öffner mit einfachem Ein-Knopf-Handsender. Der Empfänger mit Spiralantenne sitzt innen 1m vom Tor und die Reichweite ist innen ok, ca. 40m.

        Da es ein Metallgitter-Tor ist, ist die Reichweite nach außen aber nur ca. 3m, ich brauche aber mind. 8-10m. Habe schon ein Koaxialkabel nach draußen gelegt, aber egal, ob ich dieses als Antenne nutze odet eine andere Antenne zusätzlich dran hänge – nützt nix, die Reichweite bricht dann auch innen ein, obwohl ich an der Spiralantenne nichts ändere.

        Ich werde einfach weiter probieren, es sei denn, du hast noch eine geniale Idee 😉

        Gruß, Olli

        1. Theoretisch könntest du den das Empfangsmodul in einem wasserdichten Gehäuse nach draußen verlegen und das Datensignal dann per Kabel nach drinnen schicken.

          Ich weiß nicht, was du an Antennen schon ausprobiert hast, ich habe mit dem im HC-12 Artikel beschriebenen Modell gute Erfahrungen gemacht. Das wäre vielleicht auch eine Option.

          Mehr fällt mir an einfachen Dingen erst einmal nicht ein.

          1. Es geht hier um eine Tiefgarage mit je 16 Parkplätzen auf jeder Seite, also ein ziemlich langer Schlauch. Das Tor wird über Schlüsselschalter geöffnet, was sehr lästig ist, wenn man im Auto sitzt, daher als Alternative die Funkschalter odet besser -taster.

            Das Problem ist ja nicht die Reichweite an sich, sondern das „entweder-oder“ . Entweder setze ich die Antenne nach innen ans Tor, dann deckt sie innen bis hinten alles ab, aber aussen nur zwei Meter… Das bringt nix, wenn man erst dreiviertel der Einfahrt runter muss (die auch noch stark gebogen ist), bevor das Tor reagiert.

            Setze ich die Antenne nach außen, habe ich das gleiche Spiel, nur innen kaum Empfang. Hänge ich eine Antenne nach innen und eine zweite nach außen, halbieren sich gefühlt beide Reichweiten und das bringt erst recht nix.

            Als Antennen verwende ich die kleinen Kupfer-Helix-Spiralantennen, habs es aber auch schon mit nur einem 17,3 cm Draht, einem zur Antenne umfunktionierten Koaxialkabel und einem Selbstbau-Dipol versucht . Industrielle Antennen wie aus deinem Beitrag würde ich nach den bisherigen Erfahrungen nur kaufen, wenn ich wüsste, dass es dann wirklich funktioniert und ich nicht beidseitig wieder diesen Schwund habe.

            Was ich nicht verstehe, dass diese ganzen LoRa Module in der Lage sind, komplexeste Daten zu übertragen, aber nicht fähig sind, so etwas simples auszuführen wie einen der zahlreichen Anschlüsse auf „high“ zu setzen, wenn ich am Universalsender (vorher im Relais angelernt) den Knopf drücke…. vorausgesetzt, ich habe Dich und das alles richtig verstanden 🙂

            1. Genau dieses Problem hatte ich auch.
              Ich konnte das dann so lösen, dass ich in der Blechverkleidung zwischen Einfahrt und Ausfahrtspur einfach einen quadratischen
              Ausschnitt von ca 18×8 cm in das Blech gemacht habe und dort auf der Garagenseite Empfänger mit der 17cm Drahtantenne platziert habe.
              Aussen habe ich einfach aus dem Baumarkt so ein gelbes Plastikschild „Ausfahrt frei halten !“ darüber geklebt.

              aus Plastik drüber gemacht.
              Die Reichweiten sind nun beidseitig super.

            2. Hallo Ollli,
              bei 2 Antennen verteilt sich die Sendeleistung, bei symmetrischem Aufbau also nur noch 50 % pro Antenne. Zusätzlich entsteht eine Richtwirkung, vorausgesetzt Leitungslänge und Abstand der Antennen stimmen. Macht also keinen Sinn.
              Gute Industrieantennen bringen ein paar dB Gewinn.
              Als workaround könntest Du ein 2. Modul an einen weiteren Serial des Empfängers anschließen. 2. Modul auf einen neuen Kanal, am besten mit 10 Chanel weiter.
              Beim Sender wiederholst Du das Signal, mit etwas Verzögerung, auf beiden Kanälen.

            3. Vielleicht kannst Du einfach 2 Empfänger verwenden, einen für Innen und einen für Außen. Die Relais zum öffnen können ja einfach parallel geschaltet werden.

  25. Hallo Wolfgang,
    meine HC12 Module übertragen nur noch 25 Byte pro Paket im FU4 Modus Powerlevel 4.
    Bei einem früherem Test gingen aber 60 Byte durch. Im FU3 Modus ist keine Veringerung feststellbar.
    Sind dir derartige Verhaltensweisen bekannt?

    Gruß Eckard!

    1. Hallo Eckard,

      eigentlich sollten 60 Bytes funktionieren. Das ist jedenfalls die Angabe in einem dieser verbesserungswürdigen Datenblätter. Ich habe den Aspekt gar nicht überprüft. Aber komisch ist schon, wenn es vorher ging und jetzt nicht mehr. Ist denn ein tatsächlich ein SI4463 Chip auf deinen Modulen verbaut? Wobei das natürlich trotzdem nicht erklären würde, warum es auf einmal nicht mehr geht.

      VG, Wolfgang

      1. Hallo Wolfgang,

        hatte vergessen zu erwähnen, dass es sich hier um den 4438 handelt.
        Einen Werksreset hatte ich auch durchgeführt. Ohne Erfolg.
        Erschöpftes Datenvolumen?.
        Danke für deine schnelle Antwort.

        Gruß Eckard!

  26. Hi Wolfgang,
    da ist dir ein prima Beitrag gelungen.- In einem der im Netz umhersegelnden Datenblättern habe ich gefunden, daß das Modul nach einer Änderung der Betriebsparameter die geänderten Parameter abspeichert. Damit ständen sie beim nächsten Power-up wieder zur Verfügung und man könnte die Parameter im Vorab anpassen, bevor das Modul in die Anwendung gesetzt wird. Hast du das bei deinen Untersuchungen bestätigt gefunden?
    Gruss, Hub

    1. Hallo Hub,

      ja, das kann ich bestätigen. Die Einstellungen, die man per AT-Befehl vornimmt, bleiben erhalten. Das wäre sonst auch recht unhandlich.

      VG, Wolfgang

  27. Habe soeben per Zufall Deine Seite gefunden – großartig!
    Eine Frage: ich wollte vor längerem schon etwas Basteln, um eine Benachrichtigung zu bekommen, wenn der Postbote am Briefkasten war – mit LoraWan bin ich leider gescheitert, da der Briefkasten aus Metall ist und das Signal nicht rauskommt .. meinst du das könnt mit dem Funkmodul klappen? Leider ist die Distanz relativ groß, der Briefkasten ist an der Nordseite des Hauses und ich wohne auf der Südseite in der 5. Etage (das Haus hat 5), sprich es müßte über das Flachdach drüberfunken ..
    Danke + Gruß aus Köln,
    Tom

    1. Hi Tom,

      da kann ich dir leider keine großen Hoffnungen machen. So ein Metallgehäuse ist eine ideale Abschirmung. Schau zum Beispiel mal hier, da gibt es eine Tabelle mit Durchlässigkeitsdaten:

      https://www.tor7.de/funktechnik-grundlagen

      Kannst du vielleicht die Antenne aus dem Briefkasten herausführen?

      VG, Wolfgang

  28. Hallo Wolfgang,
    deine Beiträge sind immer lückenlos und erstklassig! Sehr fundiertes Wissen, was du da mit uns teilst! Dafür ganz herzlichen Dank!
    Viele Grüße
    Markus

  29. Hallo,
    hab da mal noch eine Anmerkung zum Aufbau.
    Wäre es nich günstiger den Elko direkt an das HC12 Modul zusetzen,
    als den Nano zu puffern?

    Gruß Eckard!

    1. Da magst du recht haben – ich würde sagen: einfach ausprobieren. Danke für den Denkanstoß!

  30. Ich habe (leider) diese Internetsite vor Kurzem gefunden. Gratulation, ich finde sie super.
    Zum Thema: also die Nutzungsbedingungen für die Frequenzbereiche kommen von der Bundesnetzagentur (www.bundesnetzagentur.de). Da gibt es u.A. ein PDF „Non-specific Short Range Devices“. Dem entnehme ich, dass es für 433 MHz keine zeitliche Beschränkung gibt.
    … und gesund bleiben
    Werner

  31. Hallo,

    habe auch noch Erfahrungen mit den Modulen gesammelt.
    Mit der Erkenntnis, dass das 4463 nicht mit dem 4438 spricht und auch umgekehrt.
    Jedes Modul hat seine eigene Firmware. Hat jemand andere Erfahrungen gemacht?
    Fazit: Bei Ausfall muss die gleiche Version beschafft werden oder gleich paarweise ersetzen.
    Auf die Abbildungen bei dem Großversender A.. kann man sich nicht verlassen. Ich habe die andere Variante erhalten, als abgebildet.
    Gruß Eckard!

    1. Meine Erfahrungen sind da anders, bei mir hat auch der 4463 mit dem 4438 „geredet“. Aber ich will nicht ausschließen, dass es vielleicht Module gibt, wo das nicht funktioniert. Wichtig ist, dass die Module dieselben Einstellungen haben (Funkmodus, Baudrate, Paritätsbits, usw.).

      1. Das mit den Einstellungen ist schon klar. Gleiche Module mit unterschiedlichen Einstellungen würden ja auch nicht miteinander kommunizieren.
        Ich hatte zwei paare mit gleichen Einstellungen, überkreuz ging einfach nicht.
        Wohlbemerkt, es waren nicht alle vier aktiv.
        Mit der nächsten Lieferung versuche ich es noch einmal.
        Gruß Eckard

  32. Das nenne ich mal eine solide Anleitung! Bei allen anderen Beschreibungen, die ich gefunden habe, war das eher auf dem Niveau: „Einschalten, kuck, es geht.“
    Vor allem die in Deutschland bestehende Gesetzeslage nehme ich dankbar mit.

  33. @Koehne:
    Die Begrenzung gilt im 868MHz Band, dass sie für 433MHz auch gilt ist mir neu, gibt es einen Link für diese Regelung?
    @Wolle
    Danke für diesen Beitrag, hatte schon früher mit diesem Platinchen gespielt und einfach Temp und Feuchte Werte in eine Hausautomation geschickt.
    Gruß und kein Corona, Helmut

  34. Hallo,
    eine sehr gute Übersicht über die Kommandos, ich habe schon andere Module verwendet, bei denen man
    die erst mühsam durch Probieren heraus finden musste.

    Noch ein ganz wichtiger Hinweis zu den gesetzlichen Regelungen:
    Nicht nur die Leistung ist begrentzt, auch die Zeit: man darf nur etwa 1% der Zeit, also 3,6 Sekunden /Stunde
    senden, das grenzt die Datenmenge/Stunde sehr ein!!!!
    Für grössere Datenmengen sollte man auf 2,4 GHz ausweichen, da gibt es auch ähnliche Baugruppen,
    die habe ich noch nicht verwendet.
    Grüße
    Bernhard

    1. Nach meinen Informationen gibt es für 433 MHz keine Beschränkungen der Sendedauer (duty cycle). Für z.B. 868 MHz aber schon. Wenn es da Regelungen gibt, von denen ich nichts weiß, dann wäre ich über einen Link dahin dankbar.

      1. gemäß der PDF von der Bundesnetzagentur sehe ich das genauso, da steht unter „Zusätzliche Parameter / Frequenzzugangs- und Störungsminderungstechniken“ bei 433,050 – 434,790 MHz nichts.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert