Programování Bluetooth modulů HC-05 (2)

V předchozím článku o programování BT modulů HC-05 byl popsán postup práce při nastavení z PC. Mnoho z uživatelů tyto moduly spojuje s Arduinem, takže tentokrát se podíváme na možnost, jak HC-05 nastavit přes Arduino. Tím odpadne nutnost výroby speciálního přípravku a práce s univerzálním sériovým terminálem.

Vyjdeme z popisu pro Arduino UNO, pro ostatní bude postup podobný. Navazujeme na obecné poznatky uvedené v předchozím článku. Základní problém je v tom, že některé moduly se nedaří vždy nastavit, vyžadují totiž určité prodlevy mezi zapnutím napájení a dalšími úkony. Tyto prodlevy jim zajistí program v Arduinu. Současně využijeme ke komunikaci s modulem HC-05 sériový monitor, který je součástí prostředí pro psaní programů pro Arduino.

V první řadě si připravíme zapojení podle následujícího nákresu. BT modul je napájen z výstupu Arduina a pro vstup RxD modulu se musí napětí snížit z úrovní 5 V přibližně na úrovně 3 V, to zajistí odporový dělič.

arduHC Nyní do Arduina zavedeme program, který při inicializaci dodrží potřebná zpoždění. Jinak je program pro přenos dat mezi terminálem v PC a modulem „obousměrně průchozí“. Program vychází z verze uvedené na internetových stránkách Instructables, oproti ní má ale navíc doplněný výpis zadávaných povelů na plochu monitoru.

#include <SoftwareSerial.h>
#define bt_power 7
#define bt_wakeup_power 8
#define led_13 13
SoftwareSerial BT(A0, A1); // RX | TX
char c;
void setup()
{
  // set the pins to OUTPUT
  pinMode(bt_power, OUTPUT);
  pinMode(bt_wakeup_power, OUTPUT);
  pinMode(led_13, OUTPUT);

  // set the pins to LOW
  digitalWrite(bt_power, LOW);
  digitalWrite(bt_wakeup_power, LOW);
  digitalWrite(led_13, LOW);

  delay(100);
  digitalWrite(bt_wakeup_power, HIGH);
  delay(100);
  digitalWrite(bt_power, HIGH);

  Serial.begin(9600);
  BT.begin(38400);
  Serial.write("Zadejte prikaz AT: \n\n");
  digitalWrite(led_13, HIGH);
}

void loop()
{
  if (BT.available())
    Serial.write(BT.read());
  if (Serial.available()) {
    c = Serial.read();
    Serial.write(c);
    BT.write(c);
  }
}

Jakmile se program spustí, zapne BT modul a nastaví jej do příkazového režimu. LED na modulu bliká pomalu v dvousekundových intervalech. Nyní spustíme  sériový monitor Arduina a nastavíme v něm přenosovou rychlost 9600 Bd a také zakončení řádku „Obojí NL & CR“. To je důležité, bez toho přenos fungovat nebude! Ověříme funkčnost komunikace příkazem AT, odesíláme jej pomocí tlačítka „Pošli“ nebo z klávesnice ENTER. Odpověď by měla být „OK“

Další postup už záleží na tom, jak potřebujeme modul nastavit. Vybrané často používané příkazy i s parametry byly uvedeny v předchozím článku. Následující příklad nejprve ověří spojení, pak uvede modul do výchozího továrního nastavení, dál nastaví jméno „MOJE_BT“ a heslo „1357“ a nakonec vypíše adresu modulu.

UNO_BT