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.
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!
Für die Funkübertragung muss die mitgelieferte Antenne an den richtigen Anschluss gelötet werden:
Der Aufbau für den Sender beinhaltet zusätzlich noch einen Mikrotaster, der die Funkübertragung auslösen soll:
Der Empfänger bekommt zusatzlich einen Piezo-Buzzer und eine LED, damit das übertragene Funksignal visuell und akustisch bestätigt werden kann:
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);
}
}
#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;
}
}
}
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.
#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());
}
}
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:
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 |