433Mhz HC-12 SI4463 Wireless Serial Port Module 1000m

6,99 

2 na sklade

Katalógové číslo: hc12 Kategórie: ,

Popis

Popis

Komunikačný modul fungujúci na frekvencií 433.4 MHz až 473 MHz (v závislosti od kanálu) dokáže posielať dáta na vzdialenosť až na jeden kilometer. Modul má výkon pri záťaži približne 100 mW, záleží akú komunikáčnú rýchlosť používate, tá sa dá nastaviť od 5000 bps – 236 000 bps. Platí, že čím vyššia rýchlosť, tým kratšia komunikačná vzdialenosť (200 m – 1.8 km).

Špecifikácie:
Pracovné napätie: 3.2 V – 5.5 V
Frekvencia: 433.3 – 473.0 MHz
1Počet kanálov: 100
Vysielací výkon: 100 mW (môže sa nastaviť)
Idle prúd: 16 mA

HC-12 je 100mW viackanálový bezdrôtový transceiver, ktorý môžete použiť vo svojich projektoch na prenos a príjem sériových informácií.

Získajte informácie o module vysielača a prijímača HC-12 a o tom, ako ho používať na prenos a príjem digitálnych dát.

HC-12 je poloduplexný bezdrôtový sériový komunikačný modul so 100 kanálmi v rozsahu 433,4-473,0 MHz, ktorý je schopný prenášať až 1 km. Tento projekt sa začne použitím HC-12 na vytvorenie bezdrôtového spojenia medzi dvoma počítačmi a skončí druhým článkom, ktorý vytvorí jednoduchý bezdrôtový GPS sledovač.

 

 

Doska plošných spojov HC-12 je postavená okolo mikrokontroléra STM8S003F3 a transceivera Si4463.

 

Transceiver Si4463

Si4463 zabezpečuje bezdrôtovú komunikáciu v tomto okruhu. Má maximálny vysielací výkon 20 dBm (100 mW) a citlivosť príjmu -129 dBm. V čipe sú zabudované dve 64-bajtové Rx a Tx FIFO pamäte spolu s veľkým množstvom pokročilých funkcií, ktoré nie sú implementované v dizajne HC-12. Viac informácií o viacpásmovej prevádzke, preskakovaní frekvencií atď. nájdete v údajovom liste.

 

Mikrokontrolér STM8S003FS

Ide o 8-bitový mikrokontrolér s 8 kB flash pamäte, 128 bajtov EEPROM a 10-bitovým ADC. Podporuje UART, SPI a I²C a má viacero I/O pinov. Ponúka mnoho rovnakých možností ako jeho náprotivky ATMega a XMC. Je naprogramovaný tak, aby ovládal Si4463, ako aj zvládal komunikáciu UART medzi HC-12 a čímkoľvek, ku ktorému je pripojený na druhom konci.

 

Modul vysielača a prijímača HC-12

V kombinácii s ďalšími komponentmi vytvárajú Si4463 a STM8S003 transceiver HC-12, ktorý poskytuje 4-kolíkové rozhranie UART na úrovni TTL (Vcc, Gnd, Tx, Rx) s 5. kolíkom, ktorý sa používa na vstup do „príkazového“ režimu. pre zmenu konfigurácie modulu. HC-12 má 100 podporovaných kanálov s odstupom 400 kHz, osem úrovní prenosu, osem podporovaných prenosových rýchlostí a tri rôzne pracovné režimy.

Piaty kolík na HC-12 je označený ako „Set“ a keď je nastavený na logickú nízku hodnotu, umožňuje výber rôznych nastavení na HC-12 pomocou príkazov AT odoslaných na kolík „RXD“.

Predvolená konfigurácia HC-12 je FU3 – na kanáli 1 je FU3 plne automatické a transparentné (pre iné zariadenia) nastavenie, ktoré sa prispôsobuje prenosovej rýchlosti pripojeného zariadenia (hoci na programovanie v príkazovom riadku je stále potrebná rýchlosť 9600 baudov). režim). 

Všimnite si, že so zvyšujúcou sa prenosovou rýchlosťou klesá citlivosť prijímača. Do predvoleného stavu sa môžete vrátiť odoslaním AT+DEFAULT raz v príkazovom režime.

Prenosová rýchlosť sériového portu Rýchlosť prenosu cez vzduch Citlivosť prijímača
1200 bps 5000 bps -117 dBm
2400 bps 5000 bps -117 dBm
4800 bps 15 000 bps -112 dBm
9600 bps 15 000 bps -112 dBm
19200 bps 58 000 bps -107 dBm
38 400 bps 58 000 bps -107 dBm
57 600 bps 236 000 bps -100 dBm
115200 bps 236 000 bps -100 dBm

V “HC12 Send/Recieve Example Program 1” sa HC-12 používajú vo svojom predvolenom stave (FU3: 20mW prenos, 9600 bps, Channel 001) na vytvorenie bezdrôtového mosta medzi sériovými portami dvoch počítačov. Transceivery musia byť fyzicky oddelené aspoň 1,5 metra, aby fungovali.

Tento program umožní posielanie správ medzi dvoma počítačmi cez vysielače HC-12. Text napísaný na jednom počítači sa zobrazí na sériovom monitore druhého počítača.

Začnite pripojením HC-12 transceiverov ku každému Arduinu:

  • Pripojte kolík HC-12 “Set” k kolíku 6 Arduina
  • Pripojte kolík HC-12 „RXD“ k kolíku 4 Arduina
  • Pripojte HC-12 “TXD” pin k Arduino pinu 5
  • Podľa údajového listu pripojte 22 µF až 1 mF zásobníkový kondenzátor paralelne s kolíkmi HC-12 “Gnd” a “Vcc”
  • Pripojte HC-12 “Gnd” a “Vcc” k zdroju 3,2 V až 5,5 V 200 mA. Podľa údajového listu, ak napájate HC-12 viac ako 4,5 V, umiestnite diódu 1N4007 do série s kolíkom HC-12 “Vcc”

 

 

Nahrajte nasledujúci kód a otvorte monitor sériového portu v Arduino IDE, aby ste mohli odosielať/prijímať správy.

Funkcie „*.available()“ čítajú počet bajtov uložených v Serial alebo SoftwareSerial FIFO vyrovnávacej pamäti Arduina. Pokiaľ existuje nenulová hodnota vrátená “*.available()”, funkcia “*.read()” vytiahne jeden bajt z vyrovnávacej pamäte a funkcia “*.write()” pošle tento bajt spolu na druhý sériový port, ktorý má čítať buď počítač alebo HC-12.

Arduino UART má 64-bajtovú prijímaciu vyrovnávaciu pamäť zabudovanú do hardvéru, takže všetky bajty údajov, ktoré presahujú 64-bajtový limit, budú vyradené. Softvérový seriál má tiež 64-bajtovú vyrovnávaciu pamäť; knižnicu SoftwareSerial však možno v prípade potreby upraviť tak, aby sa zvýšila.

 

/*  HC12 Send/Receive Example Program 1
    By Mark J. Hughes 
    for AllAboutCircuits.com
    
    Connect HC12 "RXD" pin to Arduino Digital Pin 4
    Connect HC12 "TXD" pin to Arduino Digital Pin 5
    Connect HC12 "Set" pin to Arduino Digital Pin 6
   
    Do not power over USB.  Per datasheet, 
    power HC12 with a supply of at least 100 mA with 
    a 22 uF - 1000 uF reservoir capacitor.
    Upload code to two Arduinos connected to two computers.
    
    Transceivers must be at least several meters apart to work.
   
 */

#include 

const byte HC12RxdPin = 4;                  // Recieve Pin on HC12
const byte HC12TxdPin = 5;                  // Transmit Pin on HC12

SoftwareSerial HC12(HC12TxdPin,HC12RxdPin); // Create Software Serial Port

void setup() {
  Serial.begin(9600);                       // Open serial port to computer
  HC12.begin(9600);                         // Open serial port to HC12
}

void loop() {
  if(HC12.available()){                     // If Arduino's HC12 rx buffer has data
    Serial.write(HC12.read());              // Send the data to the computer
    }
  if(Serial.available()){                   // If Arduino's computer rx buffer has data
    HC12.write(Serial.read());              // Send that data to serial
  }
}

„HC12 Ukážkový program odosielania/prijímania 2“ zostáva spätne kompatibilný s „Príkladovým programom odosielania a prijímania HC12 1“. V spôsobe, akým Arduino narába s údajmi, však došlo k dvom významným zmenám.

V prvom programe boli detekované jednotlivé bajty a načítané zo sériovej vyrovnávacej pamäte a softvérovej sériovej vyrovnávacej pamäte a okamžite zapísané na druhý sériový port. Nasledujúci program načíta celé reťazce údajov zo sériových vyrovnávacích pamätí a uloží ich, kým sa nezistí znak nového riadku, kedy vypíše celú vyrovnávaciu pamäť.

Prvý program nemal možnosť vstúpiť do príkazového režimu a zmeniť nastavenia transceivera HC-12. Nasledujúci program dokáže zistiť sekvencie príkazov a zmeniť nastavenia vzdialených a lokálnych transceiverov (za predpokladu, že používajú novšiu verziu kódu). Všimnite si, že je dôležité najskôr zmeniť nastavenia vzdialeného transceivera a potom zmeniť nastavenia lokálneho transceivera, aby sa zhodovali, pretože akékoľvek počiatočné zmeny na lokálnom transceiveri prerušia komunikáciu medzi nimi.

Arduino bude zbierať reťazce zo sériového portu a softvérového sériového portu. Po zistení nového riadku sa skontroluje, či reťazec je sekvencia príkazov (príkazy začínajú AT+). Ak je prítomná sekvencia príkazov, lokálny čip vykoná príkaz a odošle príkaz na vzdialený čip na vykonanie tam. Kód udržiava HC12 na rovnakom kanáli pri rovnakých úrovniach výkonu počas testovania.

Buďte opatrní, pretože je možné náhodne znížiť úroveň výkonu na diaľku na úroveň, že vzdialený vysielač s prijímačom už nebude môcť komunikovať s lokálnym vysielačom a prijímačom. Toto je rýchlo opravené vysielaním novej úrovne výkonu. Zmena prenosovej rýchlosti môže zakázať komunikáciu medzi HC-12 a Arduinom, pokiaľ sa súčasne nezmení prenosová rýchlosť Arduina.

/*  HC12 Send/Receive Example Program 2
    By Mark J. Hughes
    for AllAboutCircuits.com

    This code will automatically detect commands as sentences that begin
    with AT and both write them and broadcast them to remote receivers
    to be written.  Changing settings on a local transceiver will
    change settings on a remote receiver.

    Connect HC12 "RXD" pin to Arduino Digital Pin 4
    Connect HC12 "TXD" pin to Arduino Digital Pin 5
    Connect HC12 "Set" pin to Arduino Digital Pin 6

    Do not power HC12 via Arduino over USB.  Per the data sheet,
    power the HC12 with a supply of at least 100 mA with
    a 22 uF to 1000 uF reservoir capacitor and connect a 1N4007 diode in 
    series with the positive supply line if the potential difference exceeds 4.5 V.

    Upload code to two Arduinos connected to two computers 
    that are separated by at least several meters.

*/

#include 

const byte HC12RxdPin = 4;                      // "RXD" Pin on HC12
const byte HC12TxdPin = 5;                      // "TXD" Pin on HC12
const byte HC12SetPin = 6;                      // "SET" Pin on HC12

unsigned long timer = millis();                 // Delay Timer

char SerialByteIn;                              // Temporary variable
char HC12ByteIn;                                // Temporary variable
String HC12ReadBuffer = "";                     // Read/Write Buffer 1 for HC12
String SerialReadBuffer = "";                   // Read/Write Buffer 2 for Serial
boolean SerialEnd = false;                      // Flag to indicate End of Serial String
boolean HC12End = false;                        // Flag to indiacte End of HC12 String
boolean commandMode = false;                    // Send AT commands

// Software Serial ports Rx and Tx are opposite the HC12 Rx and Tx
// Create Software Serial Port for HC12
SoftwareSerial HC12(HC12TxdPin, HC12RxdPin);

void setup() {

  HC12ReadBuffer.reserve(64);                   // Reserve 64 bytes for Serial message input
  SerialReadBuffer.reserve(64);                 // Reserve 64 bytes for HC12 message input

  pinMode(HC12SetPin, OUTPUT);                  // Output High for Transparent / Low for Command
  digitalWrite(HC12SetPin, HIGH);               // Enter Transparent mode
  delay(80);                                    // 80 ms delay before operation per datasheet
  Serial.begin(9600);                           // Open serial port to computer
  HC12.begin(9600);                             // Open software serial port to HC12
}

void loop() {

  while (HC12.available()) {                    // While Arduino's HC12 soft serial rx buffer has data
    HC12ByteIn = HC12.read();                   // Store each character from rx buffer in byteIn
    HC12ReadBuffer += char(HC12ByteIn);         // Write each character of byteIn to HC12ReadBuffer
    if (HC12ByteIn == '\n') {                   // At the end of the line
      HC12End = true;                           // Set HC12End flag to true
    }
  }

  while (Serial.available()) {                  // If Arduino's computer rx buffer has data
    SerialByteIn = Serial.read();               // Store each character in byteIn
    SerialReadBuffer += char(SerialByteIn);     // Write each character of byteIn to SerialReadBuffer
    if (SerialByteIn == '\n') {                 // Check to see if at the end of the line
      SerialEnd = true;                         // Set SerialEnd flag to indicate end of line
    }
  }

  if (SerialEnd) {                              // Check to see if SerialEnd flag is true

    if (SerialReadBuffer.startsWith("AT")) {    // Has a command been sent from local computer
      HC12.print(SerialReadBuffer);             // Send local command to remote HC12 before changing settings
      delay(100);                               //
      digitalWrite(HC12SetPin, LOW);            // Enter command mode
      delay(100);                               // Allow chip time to enter command mode
      Serial.print(SerialReadBuffer);           // Echo command to serial
      HC12.print(SerialReadBuffer);             // Send command to local HC12
      delay(500);                               // Wait 0.5s for a response
      digitalWrite(HC12SetPin, HIGH);           // Exit command / enter transparent mode
      delay(100);                               // Delay before proceeding
    } else {
      HC12.print(SerialReadBuffer);             // Transmit non-command message
    }
    SerialReadBuffer = "";                      // Clear SerialReadBuffer
    SerialEnd = false;                          // Reset serial end of line flag
  }

  if (HC12End) {                                // If HC12End flag is true
    if (HC12ReadBuffer.startsWith("AT")) {      // Check to see if a command is received from remote
      digitalWrite(HC12SetPin, LOW);            // Enter command mode
      delay(100);                               // Delay before sending command
      Serial.print(SerialReadBuffer);           // Echo command to serial.
      HC12.print(HC12ReadBuffer);               // Write command to local HC12
      delay(500);                               // Wait 0.5 s for reply
      digitalWrite(HC12SetPin, HIGH);           // Exit command / enter transparent mode
      delay(100);                               // Delay before proceeding
      HC12.println("Remote Command Executed");  // Acknowledge execution
    } else {
      Serial.print(HC12ReadBuffer);             // Send message to screen
    }
    HC12ReadBuffer = "";                        // Empty buffer
    HC12End = false;                            // Reset flag
  }
}

Údaje prenášané diaľkovým vysielačom HC-12 sú prijímané a dekódované ako „AllAboutCircuits.com“ miestnym prijímačom HC-12. Všimnite si oneskorenie pred odoslaním .com, ktoré môže byť spôsobené spracovaním údajov Si4463 (pozri stranu 39 údajového listu Si4463 ) alebo niektorým aspektom programu bežiaceho na STM8S003FS.

 

Predchádzajúci kód, ak je nahraný na obe dosky, vám umožňuje naprogramovať lokálny aj vzdialený vysielač a prijímač súčasne.  

Tu sú niektoré ďalšie príkazy pre vašu referenciu:

Platné príkazy prenosovej rýchlosti: AT+B1200, AT+B2400, AT+B4800, AT+9600, AT+19200, AT+38400, AT+57600, AT+115200

Platné príkazy kanála: AT+C001, AT+C002, AT+C0xx, … , AT+C099, AT+C100. Podľa údajového listu, ak používate viacero HC-12 na rôznych kanáloch, rozmiestnite susedné kanály aspoň päť od seba40kHz1 kanál×5 kanálov=200kHz

Platné príkazy vysielacieho výkonu: AT+P1 (-1 dBm), AT+P2 (2 dBm), AT+P3 (5 dBm), AT+P4 (8 dBm), AT+P5 (11 dBm), AT+P6 ( 14 dBm), AT+P7 (17 dBm), AT+P8 (20 dBm)

Návrat na predvolené nastavenia: AT+DEFAULT 

K dispozícii sú ďalšie príkazy; ďalšie informácie nájdete v používateľskej príručke.

Záver

HC-12 je schopný transceiver s pôsobivým dosahom (až 1 km). Je vyhovujúci pre väčšinu hobby a dokonca aj pre niektoré priemyselné aplikácie. Je to dôležitá alternatíva k veľmi lacnému nRF24L01 s nízkym výkonom, ale s krátkym dosahom . Hoci je o niečo drahší ako nRF24L01, jeho rozsah a jednoduchosť použitia robia z HC-12 vynikajúcu voľbu pre projekty zahŕňajúce sledovanie. V nasledujúcom článku preskúmame používanie HC-12 v aplikácii GPS (Global Positioning System).