[hw] HC-12, 433 MHz, sériový port

Pablo74
Příspěvky: 130
Registrován: 03 lis 2019, 17:00

[hw] HC-12, 433 MHz, sériový port

Příspěvek od Pablo74 » 14 pro 2024, 10:06

Modul HC-12 je bezdrátový sériový port, komunikace běží na 433 MHz. Z hlediska SW jde pro začátečníky asi o nejjednodušší způsob bezdrátové komunikace mezi dvěma jednočipy.

HC-12 nefunguje samostatně, musí se jako komunikační modul připojit k jednočipu (Arduino, ESP8266, ESP32, ...). Zapojení je banální a návodů jak na to je plný internet, česky třeba tady https://navody.dratek.cz/navody-k-produ ... 3-mhz.html

Já si tyto moduly pořídil na hadexu, konkrétně: https://www.hadex.cz/m349b-bezdratovy-m ... 12-si4463/

Jako vývojovou desku často používám ideaspark ESP32 s grafickým displejem, viz deska č. 3 v tomto vlákně viewtopic.php?t=3579

Pro zjištění konfigurace modulu z výroby jsem vyzkoušel tento prográmek:

Kód: Vybrat vše

// Vysílač (sender.ino)
#include <U8g2lib.h>
#include <HardwareSerial.h>

// Inicializace displeje pro ESP32 přes I2C
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);

HardwareSerial SerialHC12(2);  // Použití UART2

void setup() {
  Serial.begin(9600);         // Konzole pro komunikaci s PC
  SerialHC12.begin(9600, SERIAL_8N1, 17, 16);  // RX=17, TX=16
  u8g2.begin();
  u8g2.clearBuffer();
  u8g2.setFont(u8g2_font_helvB18_tr);
  u8g2.setCursor(0, 36);
  u8g2.print("AT comm.");
  u8g2.sendBuffer();
}

void loop() {
  // Příkazy z PC do HC-12
  if (Serial.available()) {
    String cmd = Serial.readStringUntil('\n');
    SerialHC12.println(cmd);
  }
  
  // Odpovědi z HC-12 na PC
  if (SerialHC12.available()) {
    String response = SerialHC12.readStringUntil('\n');
    Serial.println(response);
  }
}
Na displeji jsem zobrazil jen statický text "AT comm.", jinak se nezobrazuje nic dalšího; komunikace s modulem HC-12 probíhá přes sériový monitor v prostředí Arduino IDE. Pozor, že pro práci a AT příkazy musí být pin modulu označený SET připojen na zem, GND.

Tučně označím moje příkazy a netučně odpověď od modulu HC-12.

AT
OK

AT+RX
OK+B9600
OK+RC001
OK+RP:+20dBm
OK+FU3

Výchozí nastavení (z výroby) je tedy:
OK+B9600: Přenosová rychlost je nastavena na 9600 baudů
OK+RC001: Kanál je nastaven na číslo 1
OK+RP:+20dBm: Výkon je nastaven na +20 dBm, což je cca 100 mW. POZOR: Toto je vysoko nad povolený limit pro ČR (10 mW)! Nutno snížit pomocí AT příkazu AT+P4 nebo nižší.
OK+FU3: Komunikační mód FU3 (Full Duplex)

Další info bude následovat.

Pablo74
Příspěvky: 130
Registrován: 03 lis 2019, 17:00

Re: [hw] HC-12, 433 MHz, sériový port

Příspěvek od Pablo74 » 14 pro 2024, 10:27

Změna výchozího nastavení modulu na nové hodnoty. Na vývojové desce běží stejný program jako v předchozím příspěvku a příkazy se ručně zapisují do sériového monitoru v Arduino IDE.

Tučně jsou moje příkazy a netučně odpovědi modulu.

Změna komunikačního kanálu na č. 80 (původně kanál č. 1)
AT+C080
OK+C080

Změna vysílacího výkonu na 8 mW (původně 100 mW)
AT+P4
OK+P4

Změna vysílacího režimu na FU4 (původně FU3)
AT+FU4
OK+FU4,B1200

A závěrečná kontrola nastavení:
AT+RX
OK+B1200
OK+RC080
OK+RP:+08dBm
OK+FU4

Pablo74
Příspěvky: 130
Registrován: 03 lis 2019, 17:00

Re: [hw] HC-12, 433 MHz, sériový port

Příspěvek od Pablo74 » 14 pro 2024, 11:05

Pro účely testování skutečného dosahu v reálném prostředí města jsem si připravil dva programy, opět pro již zmíněnou vývojovou desku ideaspark ESP32.

Vysílač posílá jedno celé číslo (int) postupně z rozsahu 0 - 99, poté zase od nuly; a to s prodlevou 2.5 s.

Na přijímači se zobrazují současně tři hodnoty, které byly přijaty: vlevo poslední hodnota, uprostřed předchozí a vpravo ještě o jednu předchozí, tj. schématicky (n), (n-1), (n-2).

Interval 2.5 s jsem zvolil experimentálně, je dost dlouhý na to, abych při chůzi a sledování displeje dával pozor a dost krátký na to, abych zjistil hranice dosahu. No a zobrazení tří posledně přijatých hodnot mi umožní nepřehlédnout možný částečný výpadek komunikace.

Program pro vysílač

Kód: Vybrat vše

// Vysílač (sender.ino)
#include <U8g2lib.h>
#include <HardwareSerial.h>

// Inicializace displeje pro ESP32 přes I2C
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);

HardwareSerial SerialHC12(2);  // Použití UART2

int counter = 0;

void setup() {
  SerialHC12.begin(1200, SERIAL_8N1, 17, 16);  // RX=17, TX=16
  u8g2.begin();
  u8g2.clearBuffer();
  u8g2.setFont(u8g2_font_helvB18_tr);
}

void loop() {
  // Odeslání čísla každých 2.5 sekundy
  SerialHC12.print(counter);
  
  // Aktualizace displeje
  u8g2.clearBuffer();
  u8g2.setCursor(0, 36);
  u8g2.print("Sending: ");
  u8g2.setCursor(90, 63);
  u8g2.print(counter);
  u8g2.sendBuffer();

  counter = (counter + 1) % 100;  // Reset na 0 po dosažení 99

  delay(2500);
}
Program pro přijímač

Kód: Vybrat vše

#include <U8g2lib.h>
#include <HardwareSerial.h>

// Inicializace displeje pro ESP32 přes I2C
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);
HardwareSerial SerialHC12(2);  // Použití UART2

// Pole pro ukládání posledních tří hodnot
int receivedValues[3] = {-1, -1, -1};
int valueCount = 0;

int receivedValue;

void setup() {
  SerialHC12.begin(1200, SERIAL_8N1, 17, 16);  // RX=17, TX=16
  u8g2.begin();
  u8g2.clearBuffer();
  u8g2.setFont(u8g2_font_helvB18_tr);
  u8g2.setCursor(0, 36);
  u8g2.print("HC-12");
  u8g2.sendBuffer();
}

void loop() {
  if (SerialHC12.available()) {
    receivedValue = SerialHC12.parseInt();
    
    // Pokud je přijata validní hodnota (0-99)
    if (receivedValue >= 0 && receivedValue <= 99) {
      // Posun hodnot v poli
      receivedValues[2] = receivedValues[1];
      receivedValues[1] = receivedValues[0];
      receivedValues[0] = receivedValue;
      
      // Zvýšení počtu přijatých hodnot (max 3)
      if (valueCount < 3) {
        valueCount++;
      }

      // Aktualizace displeje
      u8g2.clearBuffer();

      u8g2.setCursor(0, 36);
      u8g2.print("HC-12");  

      u8g2.setCursor(0, 63);
      u8g2.print(receivedValues[0]);

      u8g2.setCursor(45, 63);
      u8g2.print(receivedValues[1]);

      u8g2.setCursor(90, 63);
      u8g2.print(receivedValues[2]);

      u8g2.sendBuffer();
    }
  }
}

Pablo74
Příspěvky: 130
Registrován: 03 lis 2019, 17:00

Re: [hw] HC-12, 433 MHz, sériový port

Příspěvek od Pablo74 » 14 pro 2024, 11:55

Nastavil jsem tedy oba HC-12 do režimu FU4 (slibuje nejdelší dosah za cenu pomalé přenosové rychlosti) a legální výkon max. 8 mW. Moduly mají spirálovou anténku (viz odkaz na hadex.cz v prvním příspěvku).

V prostředí městské zástavby jsem se dostal jen na desítky metrů, což mi subjektivně přijde dost málo. Vysílač umístěný uprostřed bytu (záměrně ne u okna), přijímač šel se mnou po ulici.

HC-12 má i APEX konektor pro připojení kvalitnější antény, která se musí koupit zvlášť.

Jedna technická zajímavost: modul HC-12 i jednočip s ESP32 napájím ze stejného zdroje ze dvou AA článků v sérii, jsou to Li-Ion články s výstupním napětím 1.5 V (přes interní měnič), změřil jsem na nich za provozu napětí 2.98 V - HW mi tedy pracuje s napájecím napětí 3 V, ačkoli se dle specifikací počítá se 3.3 V.

Zmíněné AA lithiové články jsou tyto: https://www.aliexpress.com/item/1005003202925252.html

Uživatelský avatar
Diego
Příspěvky: 208
Registrován: 23 črc 2017, 09:43
Kontaktovat uživatele:

Re: [hw] HC-12, 433 MHz, sériový port

Příspěvek od Diego » 16 pro 2024, 04:42

Pěkná práce, tyhle moduly taky používam a taky jsem chtěl zjistit dosah ale ještě jsem se k tomu nedostal. Zajímalo by mě jaký by byl dosah při napájení 5V, určitě se taky zvětší. A píšeš uprostřed bytu ale ne jestli panelák nebo cihla a v jakém patře ;)
https://arze.cz - ARduino Zapojení Elektronika
https://hackaday.io/projects/hacker/1326779 - Moje probíhající i dokončené projekty

Pablo74
Příspěvky: 130
Registrován: 03 lis 2019, 17:00

Re: [hw] HC-12, 433 MHz, sériový port

Příspěvek od Pablo74 » 16 pro 2024, 17:40

Napsal jsem několik nepřesností či dokonce chyb, takže náprava:

1. číslo kanálu musí být mezi 1 a 15 (vyšší kanály už nejsou v ČR legální), takže ne kanál 80, ale 8
2. nastavení vysílacího výkonu není na 8 mW, ale 8dBm, tj. asi 6.4 mW
3. konektor pro externí anténu není apex, ale IPEX

Tolik chyb, ach jo.

Testování dosahu: využil jsem možnost, která se mi naskytla: městská zástavba, druhé patro v paneláku. Jak už jsem psal, dosah v desítkách metrů mi přijde dost málo. Jak vysílač, tak i přijímač jsem napájel 3 V.

Pablo74
Příspěvky: 130
Registrován: 03 lis 2019, 17:00

Re: [hw] HC-12, 433 MHz, sériový port

Příspěvek od Pablo74 » 17 pro 2024, 19:11

Informace o dalším testu, nastavení; poznatky a spekulace.

Stejná vývojová deska (jednočip), stejné napájení, stejná anténa, ale odlišné nastavení modulů oproti poslednímu testu; aktuální nastavení obou HC-12:

Odpověď modulu na AT+RX vypadá takhle:

Kód: Vybrat vše

OK+B2400
OK+RC007
OK+RP:+08dBm
OK+FU3
Kanál č. 7, rychlost komunikace 2400 baudů, mód FU3.

Program pro vysílač i přijímač zůstal stejný, s jednou změnou (nastavení přenosové rychlosti):

Kód: Vybrat vše

SerialHC12.begin(2400, SERIAL_8N1, 17, 16);
Vysílač opět uvnitř bytu (ne u okna) ve druhém patře paneláku, stejné místo, stejné město. Vzdálenost měřena odhadem přes mapy.cz, takže je orientační.

Poznatky (P) a spekulace (S):
P: signál projde zdí a je dostupný na ulici, ale další panelák signál zastíní tak, že příjem už není možný.
P: dosah signálu ve směru A - asi 120 m, přímá viditelnost (*)
P: dosah signálu ve směru B - asi 90 m, přímá viditelnost (*)
S: šíření signálu je magie :-)

(*) Ta zmíněná přímá viditelnost je fiktivní, přes zeď, ale myslím tím, že kromě zdi už není v cestě nic.

Ještě jsem zjistil verzi firmware, AT+V

Kód: Vybrat vše

www.hc01.com HC-12 v2.6

Uživatelský avatar
kiRRow
Příspěvky: 1313
Registrován: 07 kvě 2019, 07:03
Bydliště: Opava

Re: [hw] HC-12, 433 MHz, sériový port

Příspěvek od kiRRow » 18 pro 2024, 15:04

Jakákoliv bezdrátová komunikace je duchařina. Všichni jsme jistě už zažili rádio, které začlo šumět, když někdo prošel kolem. Posunutím wifirouteru o 15cm jsem byl schopen zdegradovat signál z 98% na 10% (chytal ten signál 2x - jednou na přímo a jednou odrazem s fázovým posuvem, takže signál se krásně odečetl). Nejen počasí, ale dokonce i denní doba má vliv na rádiový signál a jeho šíření. A zdi ? ... nikdy nevíš co je ve vnitř. Zažil jsem hotel v celoarmaturované stavbě ... celý prošpikovaný opakovačema mobilního signálu, protože jak jsi nestál u okna, tak jsi ani sms neposlal.

Cmrnda
Příspěvky: 41
Registrován: 25 dub 2024, 17:58

Re: [hw] HC-12, 433 MHz, sériový port

Příspěvek od Cmrnda » 18 pro 2024, 16:19

433MHz je stále na panelák moc, sice lepší než 2,4 či 5GHz ale zkus jít co nejníž, dlouhý vlny a tak.

Pablo74
Příspěvky: 130
Registrován: 03 lis 2019, 17:00

Re: [hw] HC-12, 433 MHz, sériový port

Příspěvek od Pablo74 » 20 pro 2024, 13:21

Další test dosahu; stejné nastavení HW a SW jako v testu ze dne 17. 12. 2024

Tentokrát starý vesnický dům, kdysi se říkalo stavení; některé zdi z kamene (a pořádná tloušťka), některé z cihel. Vyílač v jedné místnosti, cca 1.5 m nad podlahou (tj. i nad venkovní úrovní, tj. nad zemí), přijímač šel se mnou po venku. Měl jsem ho převážně zvednutý nad hlavu, tj. výškově kolem dvou metrů.
Opět je dosah v desítkách metrů, přitom v prostředí není žádné rušení na 433 MHz a okolo domu je volný prostor, žádné další zděné stavby či domy.

Tak to vypadá, že s tímhle HW a SW nastavením, napájením a hlavně anténami se spolehlivého spojení na delší vzdálenost nedočkám.

V létě jsem na stejném místě zkoušel komunikaci s ESP-NOW, tj. na 2.4 GHz, teď s těmi HC-12 jedu na 433 MHz a dosah je naprosto srovnatelný. To je samo o sobě dost podivný.

Velkou roli zřejmě bude hrát i počasí, zdi, vysílací výkon a antény.

Jako spolehlivou komunikaci uvnitř bytu to doporučit můžu, jako komunikaci z bytu na pár metrů ven taky, ale jinak ne.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host