Zum Inhalt springen →

Serielle Kommunikation mit dem HC-12 433Mhz Funkmodul

Da ich bisher noch recht wenig (also gar keine) Erfahrung mit Wireless Kommunikation auf 433MHz Basis machen konnte, habe ich mir 2x HC-12 433Mhz Funkmodule bestellt um damit eine drahtlose bidirektionale Verbindung zwischen den beiden Modulen herzustellen. Besonders die Tatsache, dass die Module eine Reichweite von bis zu 1000 Meter haben, hat mich sehr gereizt.

Technische Daten des HC-12 433Mhz Funkmoduls

  • 433MHz ISM-Band Region 1 (Europa, Afrika, Nachfolgestaaten der UdSSR und Mongolei)
  • Frequenz 433,4 – 473,0 MHz 
  • 400kHz Kanalbreite
  • 100 mögliche Kanäle
  • Bis 1000m Reichweite mit externer Antenne
  • Versorgungsspannung: 3.2V – 5.5V
  • Max. 100mW (20dBm)
  • Empfänger Empfindlichkeit von -100 dBm bis -117 dBm bei 5000 bps
  • Modulgröße: 27.8mm*14.4mm*4mm
  • Baudrate von 1.2Kbps bis 115,2 Kbps
  • UART/TTL Interface
  • IPEX20279-001E-03 Standard-HF-Buchse

HC-12 433Mhz Funkmodul Anschlüsse

Pin 1VCCDC 3,2V-5,5V min. 200mA
Pin 2GNDGround
Pin 3RXDUART Eingang (3,3V TTL)
Pin 4TXDUART Ausgang (3,3V TTL)
Pin 5SETSettings Pin (10k Pull-Up)

Anschlüsse für die Antenne befinden sich auf der anderen Seite des Moduls. Hier kann man die beigefügte Antenne anlöten oder eine externe Antenne über die IPEX20279-001E-03 HF-Buchse  anschließen.

HC-12 433Mhz Funkmodul AT-Kommandos

Um das Modul zu konfigurieren werden AT-Befehl verwendet. Die Konfiguration des Moduls bleibt auch nach dem Ausschalten erhalten und geht nicht verloren. Um in den AT-Modus zu wechseln muss der Pin 5 (SET) mit GND verbunden werden. 

Folgende AT-Befehle stehen dann zur Verfügung:

  • AT
    Das übliche Test-Kommando wird mit OK vom Modul bestätigt

  • AT+Bxxxx
    Befehl zum Ändern der UART-Baudrate.
    Standardwert: 9600bps
    Mögliche Werte: 
    1200bps
    2400bps
    4800bps,
    9600bps 
    19200bps
    38400bps
    57600bps 
    115200bps
    Beispiel: AT+B19200
    Antwort: OK+B19200
  • AT+Cxxx
    Befehl zum Ändern des Kommunikationskanals der drahtlosen Verbindung  
    Mögliche Werte: 001 -127 (Ab einem Kanal > 100 ist die Distanz nicht garantiert)
    Standardwert: 001
    Beispiel: AT+C002
    Antwort: OK+C002
  • AT+FUx
    UART-Übertragungsmodus ändern
    Mögliche Werte:FU1, FU2, FU3 und FU4.
    Standardmodus:  FU3
    Beispiel: AT+FU1
    Antwort: OK+FU1
  • AT+Px
    Einstellen der Sendeleistung
    Mögliche Werte: 1-8
    Standardmodus: 8 (20dBm)
    Beispiel: AT+P5 
    Antwort: OK+P5
  • AT+Ry
    Abfragen der eingestellten Parameter für Baudrate, Kommunikationskanal, Übertragungsmodus und Sendeleistung
    Mögliche Werte: B, C, F, P
    Beispiel: AT+RB 
    Antwort: OK+B9600
  • AT+RX
    Abfragen aller Parameter des Moduls
    Beispiel: AT+RX
    Antwort: 
    OK+FU3
    OK+B9600
    OK+C001
    OK+RP:+20 dBm
  • AT+Uxxx
    Kann verwendet werden, um die Datenbits, Paritätsbits und Stoppbits der UART-Kommunikation zu konfigurieren. 
    Beispiel: AT+U8O1
    Antwort: OK+U8O1
  • AT+V
    Abfrage der Modul-Firmware Versionsinformationen
    Beispiel: AT+V
    Antwort: www.hc01.com HC-12_V2.4
  • AT+SLEEP
    Dieser Befehl versetzt das  Modul beim Verlassen des AT-Befehls-Modus in den Deep-Sleep. Der Betriebsstrom beträgt dann etwa 22μA, und das Modul kann die UART-Daten nicht weiterleiten. Um den Deep-Sleep Modus wieder zu verlassen, muss das Modul erneut in den AT-Befehlsmodus-Zustand versetzt werden. Durch den Wechsel in den AT-Modus mit der SET Pin verlässt das Modul automatisch den Schlafmodus.
    Beispiel: AT+SLEEP
    Antwort: OK+SLEEP
  • AT+DEFAULT
    Restore Factory Default
    Beispiel: AT+DEFAULTAntwort: OK+DEFAULT

Ein erster Test

Für den ersten Test habe ich die Antennen die ein paar Male-Header auf die HC-12 Module aufgelötet und mit einem Arduino Nano verbunden. Es wird zwar empfohlen, noch einen Kondensator zwischen VCC und Masse zu setzen um die Versorgungsspannung zu glätten, aber ich habe erstmal darauf verzichtet und wie es scheint, funktioniert es auch so ganz gut. 

Nur ein Arduino und 4 Jumper-Kabel sind für einen funktionierenden Testaufbau nötig.

AdruinoHC-12
3.3 VoltVCC
GNDGND
P4TXD
P5RXD

Um die Kommunikation zu testen habe ich dann einfach das folgende kleine Stück C-Code von Dejan Nedelkovski übernommen, den RX und TX Port angepasst und auf beide Arduinos ausgespielt.

/* 
      Arduino Long Range Wireless Communication using HC-12 Example 01
      by Dejan Nedelkovski, www.HowToMechatronics.com
*/

#include <SoftwareSerial.h>

SoftwareSerial HC12(4, 5); // HC-12 TX Pin, HC-12 RX Pin
void setup() {
  Serial.begin(9600);             // Serial port to computer
  HC12.begin(9600);               // Serial port to HC12
}
void loop() {
  while (HC12.available()) {        // If HC-12 has data
    Serial.write(HC12.read());      // Send the data to Serial monitor
  }
  while (Serial.available()) {      // If Serial monitor has data
    HC12.write(Serial.read());      // Send that data to HC-12
  }
}

Zum Testen der Kommunikation muss man nun nur 2 serielle Monitore über die Arduino IDE  starten. Nun wird alles, was wir in den ersten seriellen Monitor eingibt über die Funkverbindung an den Anderen Arduino gesendet und auf dem zweiten seriellen Monitor wieder ausgegeben.

In meinem Fall waren beide Arduinos an den gleichen Computer angeschlossen und man muss schon viel Fantasie und technisches Verständnis haben, um die Faszination in dem Moment zu verstehen, denn alles was man sieht ist, dass in einem Fenster etwas eingegeben wird und in einem anderen Fenster der Text wieder ausgegeben wird ….
Aber das war ja auch nur ein erster Test und die echte Herausforderung über eine größere Distanz steht noch aus.

Hinweis: Um auf dem Mac mehrere Serielle-Monitore zu öffnen muss man in den Programme Ordner wechseln und das Programm Arduino-IDE kopieren. Dann ist es möglich mehrere getrennte Arduino-IDEs zu starten und für unterschiedliche Ports einen Seriellen-Monitor zu öffnen.

HC-12 Distanz Test

Für den Test über die Distanz habe ich die Module auf Werkseinstellungen gelassen und auch keine externen Antennen verwendet. Ich wollte einfach mal prüfen, was das Modul mit der Gummiwurst (Spulenantenne) und den Werkseinstellungen so schafft. Statt des Sketches von Dejan Nedelkovski habe ich 2 unterschiedliche Sketeches auf die Module aufgespielt. Eine Sketch hat im Sekundentakt gesendet und der Andere hat kurz geblinkt, wenn etwas empfangen wurde. Auch die beiden Sketches sind super-simpel.

#include <SoftwareSerial.h>

SoftwareSerial HC12(5, 4); // HC-12 TX Pin, HC-12 RX Pin

void setup() {
  Serial.begin(9600);             // Serial port to computer
  HC12.begin(9600);               // Serial port to HC12
}
void loop() {
  HC12.write(1);
  delay(1000);
}
#include <SoftwareSerial.h>

const int LED = 13;

SoftwareSerial HC12(5, 4); // HC-12 TX Pin, HC-12 RX Pin

void setup() {
  Serial.begin(9600);             // Serial port to computer
  HC12.begin(9600);               // Serial port to HC12
  pinMode(LED, OUTPUT);
}
void loop() {
  while (HC12.available()) {        // If HC-12 has data
    HC12.read();
    digitalWrite(LED, HIGH);
  }
  delay(200);
  digitalWrite(LED, LOW); 
}

Nun habe ich den Sender auf den Gartentisch gelegt und bin mit dem Empfänger losgegangen. Nach ca. 200 Metern wurde die Verbindung instabil und das Blinken wurde unregelmäßiger. Allerdings habe ich auch festgestellt, dass die Verbindung noch ca. 50 Meter weiter OK war, wenn ich stehengeblieben bin und die Antenne in Richtung des Senders gehalten habe. Scheinbar ist die Verbindung schlechter, wenn man sich bewegt.

Aber 200 Meter sind schon mal eine ordentliche Distanz, wenn man bedenkt, dass die Module im Werkszustand waren. Mit einem anderen Übertragungsmodus und einer externen Antenne lässt sich hier ganz bestimmt noch eine Menge rausholen.

Hinweis

Ich habe die Module von AZ-Delivery über Amazon bestellt. Dort kosten die Module etwas mehr als bei Aliexpress oder Banggood allerdings bekommt man hier Original-Teile und keine billigen Nachbauten.
Die DIY TECH BROS zeigen in dem Video „2 KM SUCCESS STORY with HC-12 – going beyond 1800 meters!“ unter https://www.youtube.com/watch?v=awOPJK5He28&t=2s dass man nach Möglichkeit keine billigen Nachbauten verwenden sollte, wenn man Reichweite benötigt und welche Antenne eine Reichweite bis zu 2 km möglich macht.

Fazit

Das HC-12 433 MHz Modul macht einen sehr guten Eindruck. Man kann sehr schnell und einfach einen Funkverbindung aufbauen und hat geeignete Möglichkeiten, die Sendeleistung, Distanz und die Übertragungsgeschwindigkeit zu steuern ohne sich gleich mit fortgeschrittenen Kommunikationsprotokollen wie z.B. I2C oder SPI befassen zu müssen. Dabei muss man aber immer berücksichtigen, dass es keine Security-Features im Übertragungskanal gibt. Jeder 433 MHz Transceiver mit den gleichen Kanal-Einstellungen in Reichweite kann Daten Senden und Empfangen. Es ist also eine Art Broadcast (https://de.wikipedia.org/wiki/Broadcast) Kommunikation in der Jeder Teilnehmer mit jeden anderen Teilnehmer in Reichweite kommuniziert. 

Veröffentlicht in Allgemein