Arduino Bluetooth modul HM-10 je komunikační modul, který umožňuje propojit Arduino bezdrátově s dalším zařízením, které podporuje Bluetooth. Tento modul obsahuje řídící čip CC2541 s Bluetooth ve verzi 4.0 BLE (Bluetooth Low Energy) a komunikuje s Arduinem pomocí sériové linky s výchozí rychlostí 9600 baudů. Vzhledem k velikosti celého modulu je i anténa poměrně malá, ale díky nové technologii lze komunikovat až na vzdálenost 60 metrů na volném prostranství. Co se týká napájecího napětí, tak pro tento modul HM-10 je zapotřebí napětí v rozsahu 3,3 až 6 Voltů. Proudový odběr při napájení 5 Volty se pohybuje okolo 270 uA v klidu a při komunikaci dosahuje maximálně 20 mA. Celý modul má pak rozměry 43 x 15 mm.

Arduino Bluetooth 4.0 BLE modul HM-10

Pro úspěšné propojení Bluetooth modulu HM-10 s Arduinem stačí zapojit celkem čtyři vodiče. Propojíme RXD s pinem 11, TXD s pinem 10, GND se zemí Arduina a VCC s 3,3 nebo 5 Volty Arduina. Pro datové piny RXD a TXD lze využít také ostatní digitální piny, ale tuto volbu je nutné provést na začátku programu. Na deskách Mega a Mega 2560 je možné pro pin RX využít pouze tyto piny: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69). A na deskách Leonardo a Micro lze pro pin RX využít tyto piny: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI). Viz reference knihovny SoftwareSerial.

Schéma zapojení Arduino Bluetooth 4.0 BLE modulu HM-10

Ukázkový program obsahuje na svém začátku nastavení čísel propojovacích pinů pro Bluetooth a LED diodu, kdy využíváme integrovanou LED diodu na pinu 13. Dále připojíme knihovnu SoftwareSerial a následně inicializujeme modul Bluetooth s nastavenými piny. V podprogramu setup je zahájena komunikace s Bluetooth modulem rychlostí 9600 baudů a vytištěna testovací zpráva. Následně je nastavena komunikace Arduina s počítačem po sériové lince s vytištěním testovací zprávy. A na konci provedeme nastavení LED diody jako výstupu. Nekonečná smyčka loop obsahuje vytvoření proměnné pro ukládání dat a hlavní if podmínku. V této podmínce zjistíme, jestli se nám nenačetly nějaká data přes Bluetooth a v případě že ano, tak si je pomocí funkce read načteme do proměnné. Následně proběhne dekódování přijatého znaku pomocí funkce switch. Uvnitř této funkce můžeme uvést všechny typy zprávy, na které chceme reagovat. Jako první tedy po přijetí znaku nuly vypneme LED diodu a vypíšeme informaci zpět do Bluetooth zařízení. Příkaz break znamená ukončení aktuálního běhu funkce switch. Poté v dalších case najdeme pod jedničkou zapnutí LED diody a v případě přijetí znaku „a“ vypíšeme do Bluetooth modulu aktuální čas od zapnutí Arduina. Při přijetí znaku „b“ je uvedena ukázka, jak přijmout více znaků, tedy například konfiguraci pro běh Arduina. Jako první je vytištěna informace o načítání zprávy a poté pomocí smyčky while tiskneme přijaté znaky zpět do té doby, dokud jsou nějaké k dispozici. V dalších dvou case se nachází takzvané řídící znaky CR a LF, které se mohou vyskytovat v komunikaci podle použitého programu na druhém zařízení. V programu tedy v případě jejich přijetí nevykonáme žádnou funkci. Bylo je ale nutné takto přidat do case, protože poslední case default vypíše v případě přijetí ostatních znaků hlášku o neznámém znaku. Po funkci switch se v programu nachází už jen pauza po dobu 100 milisekund.

// Arduino Bluetooth modul HM-10

// nastavení propojovacích pinů Bluetooth a LED diody
#define RX 11
#define TX 10
#define pinLED 13
// připojení knihovny SoftwareSerial
#include <SoftwareSerial.h>
// inicializace Bluetooth modulu z knihovny SoftwareSerial
SoftwareSerial bluetooth(TX, RX);

void setup() {
  // zahájení komunikace s Bluetooth modulem
  // skrze Softwarovou sériovou linku rychlostí 9600 baud
  bluetooth.begin(9600);
  bluetooth.println("Arduino zapnuto, test Bluetooth.");
  // komunikace po sériové lince rychlostí 9600 baud
  Serial.begin(9600);
  Serial.println("Arduino zapnuto, test Bluetooth.");
  // nastavení pinu s LED diodou jako výstup
  pinMode(pinLED, OUTPUT);
}

void loop() {
  // proměnná pro ukládání dat z Bluetooth modulu
  byte BluetoothData;
  // kontrola Bluetooth komunikace, pokud je dostupná nová
  // zpráva, tak nám tato funkce vrátí počet jejích znaků
  if (bluetooth.available() > 0) {
    // načtení prvního znaku ve frontě do proměnné
    BluetoothData=bluetooth.read();
    // dekódování přijatého znaku
    switch (BluetoothData) {
      // každý case obsahuje dekódování jednoho znaku
      case '0':
        // v případě přijetí znaku nuly vypneme LED diodu
        // a vypíšeme hlášku zpět do Bluetooth zařízení
        digitalWrite(pinLED, LOW);
        bluetooth.println("Vypni LED diodu.");
        break;
      case '1':
        // v případě přijetí jedničky zapneme LED diodu
        // a vypíšeme hlášku zpět do Bluetooth zařízení
        digitalWrite(pinLED, HIGH);
        bluetooth.println("Zapni LED diodu.");
        break;
      case 'a':
        // v případě přejetí znaku 'a' vypíšeme
        // čas od spuštění Arduina
        bluetooth.print("Cas od spusteni Arduina: ");
        bluetooth.print(millis()/1000);
        bluetooth.println(" vterin.");
        break;
      case 'b':
        // zde je ukázka načtení většího počtu informací,
        // po přijetí znaku 'b' tedy postupně tiskneme 
        // další znaky poslané ve zprávě
        bluetooth.print("Nacitam zpravu: ");
        BluetoothData=bluetooth.read();
        // v této smyčce zůstáváme do té doby,
        // dokud jsou nějaké znaky ve frontě
        while (bluetooth.available() > 0) {
          bluetooth.write(BluetoothData);
          Serial.write(BluetoothData);
          // krátká pauza mezi načítáním znaků
          delay(10);
          BluetoothData=bluetooth.read();
        }
        bluetooth.println();
        break;
      case '\r':
        // přesun na začátek řádku - znak CR
        break;
      case '\n':
        // odřádkování - znak LF
        break;
      default:
        // v případě přijetí ostatních znaků
        // vytiskneme informaci o neznámé zprávě
        bluetooth.println("Neznamy prikaz.");
    }
  }
  // krátká pauza mezi kontrolami komunikace Bluetooth modulu
  delay(100);
}

Po nahrání programu do Arduino desky s připojeným Bluetooth modulem HM-10 můžeme přejít k připojení Bluetooth modulu s druhým zařízením. Mezi tyto zařízení můžeme zařadit například chytrý telefon či tablet s podporou Bluetooth 4.0 BLE. Dalším krokem je tedy zvolení nějakého komunikačního programu. Pokud bychom chtěli otestovat komunikaci s chytrým telefonem či tabletem, který má operační systém Android, tak je nutné stáhnout nějakou aplikaci Bluetooth Terminal z Obchodu Play, já jsem vyzkoušel „Serial Bluetooth Terminal“ od Kai Morich. V této aplikaci pak stačí zvolit správné zařízení, stisknout ikonu propojení a můžeme začít komunikovat s Arduinem. Pro chytrá zařízení od firmy Apple jsem pak našel vhodnou aplikaci s názvem HM10 Bluetooth Serial Lite od Alex van der Lugt. Zde opět stačí otevřít aplikaci, spojit se s modulem hm10 a začít komunikovat. Pokud byste měli u nějaké aplikace problém s neodesíláním zpráv, tak je dobré zkontrolovat, že máte nastaveno posílání znaků NL a CR s každou zprávou, protože tento modul to vyžaduje.

Ukázka funkce Arduino Bluetooth 4.0 BLE modulu HM-10

Ukázka funkce Arduino Bluetooth 4.0 BLE modulu HM-10

Arduino Bluetooth modul HM-10 je velice zajímavým komunikačním prvkem pro Arduino. Díky své malé velikosti se hodí do různých projektů, kde chceme komunikovat s Arduinem z chytrých zařízení jako je telefon či tablet. A díky podpoře nové technologie BT 4.0 BLE má také oproti starší generaci výrazně nižší spotřebu a zároveň větší dosah.

 

Seznam použitých komponent:

https://dratek.cz/arduino/1511-original-arduino-uno-rev3-1485165418.html

https://dratek.cz/arduino-site-wifi-bt-rj45/1312-arduino-android-ios-hm-10-bluetooth-4-0-ble-cc2540-cc2541-seriovy-bezdratovy-modul-1464644818.html

FB tw

Další podobné články