Bluetooth kommunikáció két Arduino között

Képzeld el, hogy a projektjeidben nincsenek korlátozó kábelek, és az eszközök szabadon kommunikálhatnak egymással, akár egy távolabbi sarokból is. Ez nem sci-fi, hanem valóság, és az Arduino, a nyílt forráskódú mikrokontroller platform segítségével könnyedén megvalósítható. A Bluetooth technológia lehetővé teszi, hogy két Arduino „beszélgessen” egymással, adatokat cseréljen, vagy akár egyik a másikat irányítsa. Ebben az átfogó cikkben lépésről lépésre bemutatjuk, hogyan hozhatod létre ezt a vezeték nélküli kapcsolatot, a kezdeti beállítástól a praktikus alkalmazásokig.

Miért érdemes Bluetooth-t használni Arduinóval?

A vezeték nélküli kommunikáció számos előnnyel jár. Nincs szükség hosszú kábelekre, ami rugalmasabb elhelyezést tesz lehetővé, és esztétikusabbá teheti a projektedet. Gondolj csak bele: egy távolról irányítható robot, egy okos otthoni rendszer, ahol a szenzorok vezeték nélkül küldik az adatokat egy központi egységnek, vagy akár egy adatgyűjtő rendszer, ami kényelmesen továbbítja az információkat a számítógépedre. A Bluetooth modulok Arduinóval rendkívül költséghatékony és könnyen kezelhető megoldást nyújtanak ezekre a feladatokra.

A piacon számos Bluetooth modul található, de az HC-05 és az HC-06 a legnépszerűbbek az Arduino közösségben. Ennek oka egyszerű: olcsók, könnyen beszerezhetők, és a velük való munka nem igényel különösebb elektronikai vagy programozási előképzettséget, csak egy kis odafigyelést és türelmet.

A Bluetooth alapjai az Arduino világában: HC-05 és HC-06

Mielőtt mélyebben elmerülnénk a részletekben, tisztázzuk a két leggyakoribb modul közötti különbséget:

  • HC-06: Ez a modul „slave” (szolga) üzemmódban működik. Ez azt jelenti, hogy csak elfogadni képes a bejövő kapcsolatokat más Bluetooth eszközöktől (például egy okostelefontól, vagy egy HC-05 modulból). Ideális olyan projektekhez, ahol az Arduino egy távoli parancsot vár, például egy LED felkapcsolását vagy egy motor elindítását.
  • HC-05: Ez a modul sokkal rugalmasabb, mivel „master” (mester) vagy „slave” üzemmódban is képes működni. Ez létfontosságú, ha két Arduinót szeretnénk közvetlenül egymáshoz csatlakoztatni, mivel az egyiknek mesterként kell viselkednie (kezdeményezi a kapcsolatot), a másiknak pedig szolgaként (elfogadja a kapcsolatot). Ha kétirányú, Arduino-Arduino kommunikációra van szükség, az HC-05 a preferált választás.

Mivel a cikk kifejezetten a két Arduino közötti kommunikációra fókuszál, a továbbiakban elsősorban az HC-05 modult fogjuk használni és beállítani mester/szolga párosként.

Szükséges alkatrészek és bekötés

Ahhoz, hogy elkezdhesd a projektet, szükséged lesz a következőkre:

  • 2 db Arduino lap (pl. Arduino Uno, Nano, Mega – bármelyik megteszi)
  • 2 db HC-05 Bluetooth modul
  • Jumper kábelek
  • Breadboard (ajánlott, de nem kötelező)
  • Opcionálisan: feszültségosztó (ellenállások, vagy egy dedikált logikai szint konverter)

A bekötés menete

Mindkét Arduinohoz azonos módon kell bekötni az HC-05 modult. Fontos! Az HC-05 modul 3.3V-os logikai szinttel működik. Az Arduino UNO és Nano 5V-os logikai szinten dolgozik a digitális tűkön. Ez potenciális problémát jelenthet a modul RX (bemenet) tűje számára. Bár sokan direktben kötik be az Arduino TX-ét az HC-05 RX-ére anélkül, hogy probléma merülne fel rövid távon, a hosszú távú stabilitás és a modul védelme érdekében erősen ajánlott feszültségosztót használni az Arduino TX (5V) és a HC-05 RX (3.3V) közé. Az HC-05 TX tűje azonban közvetlenül köthető az Arduino RX tűjére, mivel az 3.3V-os jelet küld, amit az Arduino 5V-os bemenete is képes felismerni.

Feszültségosztó bemutatása: Használhatsz két ellenállást: egy 1kΩ-os és egy 2kΩ-os ellenállást. Kösd az Arduino TX (5V) kimenetét a 2kΩ-os ellenálláshoz, majd a 2kΩ-os ellenállás másik végét kösd össze az 1kΩ-os ellenállással. Az 1kΩ-os ellenállás másik végét kösd a GND-re. Az 1kΩ és 2kΩ ellenállások találkozási pontját kösd az HC-05 RX tűjére. Ez leosztja az 5V-os jelet kb. 3.3V-ra. Vagy használj egy kész logikai szint konverter modult.

Most nézzük a bekötést minden HC-05 modulhoz:

  • HC-05 VCC ➡️ Arduino 5V
  • HC-05 GND ➡️ Arduino GND
  • HC-05 TX ➡️ Arduino RX (javaslat: D10, ha SoftwareSerial-t használsz)
  • HC-05 RX ➡️ Arduino TX (javaslat: D11, ha SoftwareSerial-t használsz – ide kell a feszültségosztó!)

Fontos megjegyzés: Ne használd az Arduino 0 (RX) és 1 (TX) tűjét, ha soros monitort is szeretnél használni a debuggoláshoz, mert az Arduino ezeket a tűket a számítógéppel való kommunikációra használja. Helyette használjuk a SoftwareSerial könyvtárat, ami lehetővé teszi, hogy bármely más digitális tűt felhasználhassunk soros kommunikációra.

A Bluetooth modulok konfigurálása (AT parancsok)

Ez a lépés a legkritikusabb, mivel itt állítjuk be az egyik HC-05-öt mesternek, a másikat pedig szolgának. Az AT parancsok segítségével tudjuk konfigurálni a modulokat. Az AT parancsok módba való belépéshez a modul KEY/EN tűjét fel kell húzni 3.3V-ra, miközben áram alá helyezzük a modult. Egyes moduloknál egy kis gomb is található, amit lenyomva tartva, majd bekapcsolva lehet az AT módba lépni.

AT mód bekötés (csak a konfigurálás idejére):

Arduino és HC-05 modul (konfigurálás céljából):

  • HC-05 VCC ➡️ Arduino 5V
  • HC-05 GND ➡️ Arduino GND
  • HC-05 TX ➡️ Arduino D10 (RX tű a SoftwareSerial-hez)
  • HC-05 RX ➡️ Arduino D11 (TX tű a SoftwareSerial-hez – feszültségosztóval!)
  • HC-05 KEY/EN ➡️ Arduino 3.3V (Ez aktiválja az AT módot 38400 baud sebességgel)

Arduino sketch az AT parancsok küldéséhez:


#include <SoftwareSerial.h>

SoftwareSerial BTSerial(10, 11); // RX, TX (HC-05 TX to Arduino D10, HC-05 RX to Arduino D11 via voltage divider)

void setup() {
  Serial.begin(9600);    // Serial monitorhoz
  Serial.println("Enter AT commands:");
  BTSerial.begin(38400); // HC-05 AT command mód sebessége
}

void loop() {
  if (BTSerial.available()) {
    Serial.write(BTSerial.read());
  }
  if (Serial.available()) {
    BTSerial.write(Serial.read());
  }
}

Töltsd fel ezt a kódot az Arduinódra. Nyisd meg a Soros monitort (baud rate: 9600) és győződj meg róla, hogy az „Új sor” vagy „Mindkettő NL & CR” opció van kiválasztva. Most adhatod ki az AT parancsokat:

HC-05 konfigurálása Slave (szolga) módba:

Az egyik modul lesz a szolga. Csatlakoztasd az Arduinóhoz a fent leírt AT mód szerint, majd kapcsold be az Arduinot úgy, hogy a KEY/EN tű fel legyen húzva 3.3V-ra. Írd be a Soros monitorba a következő parancsokat:

  1. AT (Válasz: OK) – Teszt, hogy kommunikál-e a modul.
  2. AT+NAME=ArduinoSlave (Válasz: OK) – Nevezzük át a modulunkat.
  3. AT+PSWD=1234 (Válasz: OK) – Állítsuk be a jelszót.
  4. AT+ROLE=0 (Válasz: OK) – Állítsuk szolgára (0 = slave).
  5. AT+ADDR? (Válasz: +ADDR:xxxxxxxxxxxx) – Jegyezd fel a modul címét (12 digites hexadecimális szám, pl. 98da:01:021941). Ez a mester modulnak kell majd.

Kapcsold ki a modul áramellátását, majd távolítsd el a KEY/EN bekötést. A szolga modul most készen áll a normál üzemmódra (9600 baud).

HC-05 konfigurálása Master (mester) módba:

A másik modult mesterré konfiguráljuk. Hasonlóan, csatlakoztasd az Arduinóhoz AT mód szerint, majd kapcsold be az Arduinót úgy, hogy a KEY/EN tű fel legyen húzva 3.3V-ra. Írd be a Soros monitorba a következő parancsokat:

  1. AT (Válasz: OK)
  2. AT+NAME=ArduinoMaster (Válasz: OK) – Nevezzük át a modulunkat.
  3. AT+PSWD=1234 (Válasz: OK) – Állítsuk be ugyanazt a jelszót, mint a szolga modulnak.
  4. AT+ROLE=1 (Válasz: OK) – Állítsuk mesterre (1 = master).
  5. AT+CMODE=0 (Válasz: OK) – Csatlakozási mód beállítása (0 = megadott címre csatlakozik).
  6. AT+BIND=xxxxxxxxxxxx (Válasz: OK) – Itt írd be a szolga modul 12 digites címét, amit az előző lépésben jegyeztél fel. Ne felejtsd el kettőspontokkal elválasztani a szexet (pl. 98da,1,21941 – azaz AT+BIND=98da,1,21941)

Kapcsold ki a modul áramellátását, majd távolítsd el a KEY/EN bekötést. A mester modul is készen áll a normál üzemmódra (9600 baud).

Arduino kód a kommunikációhoz

Miután mindkét HC-05 modult konfiguráltuk (egyiket mesternek, másikat szolgának) és bekötöttük az Arduinóhoz a normál üzemmódnak megfelelően (KEY/EN tű nincs felhúzva, csak VCC, GND, TX, RX), elkezdhetjük a kommunikációs kód írását.

A normál üzemmódú bekötés emlékeztetőül (mindkét Arduinohoz):

  • HC-05 VCC ➡️ Arduino 5V
  • HC-05 GND ➡️ Arduino GND
  • HC-05 TX ➡️ Arduino D10 (SoftwareSerial RX)
  • HC-05 RX ➡️ Arduino D11 (SoftwareSerial TX – feszültségosztóval!)

Szolga Arduino kód (ArduinoSlave)

Ez az Arduino fogja fogadni a mester üzeneteit és válaszolni rájuk.


#include <SoftwareSerial.h>

SoftwareSerial BTSerial(10, 11); // RX, TX (HC-05 TX to Arduino D10, HC-05 RX to Arduino D11 via voltage divider)
const int LED_PIN = 13; // Példa: beépített LED

void setup() {
  Serial.begin(9600);    // Soros monitor a debugoláshoz
  BTSerial.begin(9600);  // HC-05 normál üzemmód sebessége (gyárilag 9600, de AT paranccsal átállítható)
  pinMode(LED_PIN, OUTPUT);
  Serial.println("Arduino Slave Ready. Waiting for connection...");
}

void loop() {
  if (BTSerial.available()) {
    char receivedChar = BTSerial.read();
    Serial.print("Received: ");
    Serial.println(receivedChar);

    if (receivedChar == '1') {
      digitalWrite(LED_PIN, HIGH);
      BTSerial.write("LED ONn");
      Serial.println("LED ON, sending confirmation.");
    } else if (receivedChar == '0') {
      digitalWrite(LED_PIN, LOW);
      BTSerial.write("LED OFFn");
      Serial.println("LED OFF, sending confirmation.");
    } else {
      BTSerial.write("Unknown command.n");
      Serial.println("Unknown command received.");
    }
  }

  // Opcionálisan, a szolga is küldhet adatot időzítetten
  // static unsigned long lastSendTime = 0;
  // if (millis() - lastSendTime > 5000) {
  //   BTSerial.print("Hello from Slave!n");
  //   Serial.println("Sent 'Hello from Slave!'");
  //   lastSendTime = millis();
  // }
}

Mester Arduino kód (ArduinoMaster)

Ez az Arduino fogja kezdeményezni a kapcsolatot és küldeni az üzeneteket a szolga modulnak.


#include <SoftwareSerial.h>

SoftwareSerial BTSerial(10, 11); // RX, TX (HC-05 TX to Arduino D10, HC-05 RX to Arduino D11 via voltage divider)

void setup() {
  Serial.begin(9600);    // Soros monitor a debugoláshoz
  BTSerial.begin(9600);  // HC-05 normál üzemmód sebessége
  Serial.println("Arduino Master Ready. Attempting to connect...");
}

void loop() {
  // Olvasás a Bluetooth modulról és kiírás a Soros monitorra
  if (BTSerial.available()) {
    Serial.write(BTSerial.read());
  }

  // Olvasás a Soros monitorról és küldés a Bluetooth modulra
  if (Serial.available()) {
    char inputChar = Serial.read();
    BTSerial.write(inputChar);
    Serial.print("Sent: ");
    Serial.println(inputChar);
  }

  // Példa: Küldjünk '1'-et, majd '0'-t 5 másodpercenként
  static unsigned long lastSendTime = 0;
  static bool ledState = false;

  if (millis() - lastSendTime > 5000) {
    if (ledState) {
      BTSerial.write('0');
      Serial.println("Sent '0' (Turn LED OFF)");
    } else {
      BTSerial.write('1');
      Serial.println("Sent '1' (Turn LED ON)");
    }
    ledState = !ledState;
    lastSendTime = millis();
  }
}

Töltsd fel a megfelelő kódot mindkét Arduinóra. Kapcsold be először a szolga, majd a mester Arduinót. Látnod kell, ahogy a mester modul LED-je gyorsan villogásból lassú villogásba, majd folyamatosan világító állapotba vált (ez jelzi a sikeres párosítást és kapcsolatot). A szolga modul LED-je is hasonlóan viselkedhet. Ezután a mester Arduino automatikusan küldi a parancsokat, és a szolga visszajelzéseket küld a Soros monitorodra.

Gyakori problémák és hibaelhárítás

A Bluetooth kommunikáció néha trükkös lehet. Íme néhány gyakori probléma és a megoldásuk:

  • Nincs kapcsolat / Nem párosodik:
    • Ellenőrizd újra az AT parancsokat! Győződj meg róla, hogy a mester és a szolga szerepek, a jelszavak és a kötési cím (BIND) pontosan be lettek állítva.
    • Ellenőrizd, hogy a KEY/EN tű nincs-e felhúzva 3.3V-ra normál üzemmódban.
    • Próbáld meg kikapcsolni és visszakapcsolni mindkét Arduinót (először a szolga, majd a mester).
    • Győződj meg róla, hogy a modulok elég közel vannak egymáshoz a párosításhoz.
  • Szemét karakterek a Soros monitoron:
    • Valószínűleg a baud rate (átviteli sebesség) nem egyezik. Győződj meg róla, hogy a BTSerial.begin() értéke (általában 9600) megegyezik a modul gyári vagy beállított értékével.
    • Az AT módhoz használt baud rate 38400, míg a normál kommunikációhoz általában 9600.
  • Nincs adatátvitel:
    • TX/RX felcserélve? Ez a leggyakoribb hiba. Az Arduino TX-e a modul RX-ére, és az Arduino RX-e a modul TX-ére megy.
    • Feszültségosztó hiánya vagy hibás bekötése: Ha az HC-05 RX tűje 5V-ot kap, az károsíthatja a modult vagy instabil működést okozhat. Ellenőrizd a feszültségosztó bekötését!
    • Győződj meg arról, hogy a SoftwareSerial inicializálása a megfelelő tűket használja (pl. SoftwareSerial BTSerial(10, 11);).
    • Ellenőrizd a tápellátást.
  • Az AT parancs mód nem működik:
    • Győződj meg róla, hogy a KEY/EN tű 3.3V-ra van húzva, mielőtt áram alá helyezed a modult.
    • Ellenőrizd a Soros monitor baud rate-jét (9600 a Serial-hoz, 38400 a BTSerial-hoz AT módban).
    • Próbáld meg újraindítani az Arduinot és a Soros monitort.

Lehetséges alkalmazások és további fejlesztési ötletek

Amint elsajátítod a két Arduino közötti Bluetooth kommunikáció alapjait, a lehetőségek szinte végtelenek:

  • Okos Otthon: Érzékelők adatainak vezeték nélküli gyűjtése (pl. hőmérséklet, páratartalom) és egy központi vezérlőhöz való továbbítása, amely relékkel vezérli a világítást vagy fűtést.
  • Robotika: Egy robot távirányítása egy másik Arduinóval, vagy különböző robotrészek közötti koordináció.
  • Adatgyűjtés: Egy távoli szenzoradatok vezeték nélküli naplózása egy másik Arduinón, ami akár SD kártyára is rögzítheti az adatokat.
  • Távirányító rendszerek: Például egy RC autó irányítása, vagy egy garázskapu nyitó/záró mechanizmus.
  • Oktatási projektek: Remek bevezetés a vezeték nélküli hálózatok és az IoT alapjaihoz.

A HC-05 modul hatótávolsága általában 10 méter beltéren, ami bőven elegendő otthoni vagy hobbiprojektekhez. Ha nagyobb távolságra van szükséged, érdemes más vezeték nélküli technológiákat (pl. NRF24L01, ESPNow, LoRa) megfontolni, de a Bluetooth tökéletes a közeli kommunikációra.

Összefoglalás

A Bluetooth kommunikáció két Arduino között egy rendkívül hasznos készség, amely megnyitja az ajtót a vezeték nélküli elektronikai projektek előtt. Bár az AT parancsok konfigurálása eleinte kissé bonyolultnak tűnhet, a folyamat megértése után rendkívül egyszerűvé válik. Az HC-05 modulok rugalmassága és az Arduino nyílt forráskódú ökoszisztémája kombinálva hatékony és költséghatékony megoldást kínál számtalan alkalmazáshoz. Ne habozz kipróbálni, kísérletezni, és élvezni a vezeték nélküli szabadságot, amit ez a technológia nyújt!

Leave a Reply

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük