Funkmodul HC-12

Das HC-12 ist ein Funkmodul auf der Basis des Transceiver-Chips SI4438 (andere Modelle auch mit SI4463 für eine höherer Reichweite), welches mit einer Basisfrequenz von 433MHz arbeitet. Da es einen eigenen Mikrocontroller besitzt, ist es recht einfach über eine serielle Verbindung (UART) anzusteuern.

Funkmodul HC-12 mit Transceiver-IC SI4438
Abb.: Funkmodul HC-12 mit Transceiver-IC SI4438

Merkmale

Frequenzbereich: 433,4 MHz bis 473,0 MHz
Spannungsversorgung: 3,2 V bis 5,5 V
Stromaufnahme: bei Übertragung: max. 100 mA
ohne Übertragung: 80 µA bis 16 mA (ja nach Modus)
Baudrate: 1200 bis 115200
Reichweite: max. 1800 m
Funkleistung: Sendeleistung: -1dBm (0,79mW) bis 20dBm (100mW)
Empfangsempfindlichkeit: -117dBm (0,019pW) bis -100dBm (10pW)
Übertragungsrate: max. 250000 bps
Funkkanäle: 100 (Schritte: 400 kHz)

Vorsicht: Das Modul sendet in seinen Standardeinstellungen mit 100mW, jedoch sind in Deutschland laut gesetzlichen Vorschriften nur max. 10mW für diese Frequenzen erlaubt. Auch liegen die zulässigen Frequenzbereiche 433,05 MHz und 434,79 MHz, damit dürfen nur die Kanäle 1-4 verwendet werden!

Vorbereitung

Für die Funkübertragung muss die mitgelieferte Antenne an den richtigen Anschluss gelötet werden:

Löten von Stiftleiste und Antenne an das HC-12 Modul
Abb.: Löten von Stiftleiste und Antenne an das HC-12 Modul

Beispiel: Einfache Türklingel per Funk

Verwendete Bauteile

Aufbau (Sender und Empfänger)

Der Aufbau für den Sender beinhaltet zusätzlich noch einen Mikrotaster, der die Funkübertragung auslösen soll:

Schaltplan für den Sender
Abb.: Schaltplan für den Sender

Der Empfänger bekommt zusatzlich einen Piezo-Buzzer und eine LED, damit das übertragene Funksignal visuell und akustisch bestätigt werden kann:

Schaltplan für den Empfänger
Abb.: Schaltplan für den Empfänger

Sketch für den Sender

Sowohl für den Sender als auch für den Empfänger wird die Library SoftwareSerial verwendet

#define PIN_HC12_TX 7
#define PIN_HC12_RX 8
#define PIN_BUTTON  5

#include <SoftwareSerial.h<
SoftwareSerial hc12(PIN_HC12_TX, PIN_HC12_RX);

void setup()
{
    hc12.begin(9600);
    pinMode(PIN_BUTTON, INPUT_PULLUP);
}

void loop()
{
    if (digitalRead(PIN_BUTTON) == LOW) {
        hc12.write((byte)1);
    } else {
        hc12.write((byte)0);
    }
}

Sketch für Empfänger

#define PIN_HC12_TX 7
#define PIN_HC12_RX 8
#define PIN_LED     12
#define PIN_PIEZO   5

#include <SoftwareSerial.h>
SoftwareSerial hc12(PIN_HC12_TX, PIN_HC12_RX);

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

void loop()
{
  if (hc12.available()) {
    switch (hc12.read()) {
      case 1:
        digitalWrite(PIN_LED, HIGH);
        tone(PIN_PIEZO, 440);
        break;
      case 0:
      default:
        digitalWrite(PIN_LED, LOW);
        noTone(PIN_PIEZO);
        break;
    }
  }
}

Erhöhung der Reichweite

Einstellungen ändern

Die Einstellungen des HC-12 können über sogenannte AT-Befehle gesteuert werden. Dazu muss der PIN SET mit Ground/0V verbunden werden. Es ist auch möglich SET mit einem GPIO-Pin des Mikrocontrollers zu verbinden und diesen auf OUTPUT und dann LOW zu setzen. (SET besitzt einen internen Pullup-Widerstand von 10kΩ). Wenn dann SET wieder von Ground/0V getrennt wird bzw. der GPIO-Pin auf INPUT gesetzt wurde, dann geht das Modul nach ca. 40ms wieder in den Funkmodus zurück.

Sketch

#define PIN_HC12_TX 7
#define PIN_HC12_RX 8

#include <SoftwareSerial.h>
SoftwareSerial hc12(PIN_HC12_TX, PIN_HC12_RX);

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

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

Aufbau/Anschlüsse

Der Aufbau ist wieder bei dem "Sender" nur mit dem Unterschied, dass nach dem Hochladen des Codes bzw. dem Einschalten des Moduls der Pin SET mit GND verbunden wird.
Folgende AT-Befehle stehen dann zur Verfügung:

AT-Befehle des HC-12

Befehl Beschreibung Ausgabe/Beispiel
AT Test-Kommando OK
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:+20dBm
AT+Uxxx Kann verwendet werden, um die Datenbits, Paritätsbits und Stoppbits der UART-Kommunikation zu konfigurieren. Beispiel: AT+U8O1
Antwort: OK+U8O1
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+V Abfrage der Modul-Firmware Versionsinformationen Beispiel: AT+V
Antwort: www.hc01.com HC-12_V2.4
AT+DEFAULT Wiederherstellen der Standard-Einstellungen Beispiel: AT+DEFAULT
Antwort: OK+DEFAULT
zurück