Moduł bluetooth HC-05 + Arduino Uno + Android

Bluetooth HC-05 to świetny moduł umożliwiający komunikację w obie strony z innym modułem albo z telefonem czy tabletem wykorzystującym komunikację BT. Aby przygotować moduł do transmisji musimy ustawić go tak, by przyjmował komendy AT. Poniżej pokazuję jak to zrobić wykorzystując niezawodne Arduino Uno.
hc-05

Komendy AT

Wgrywamy program do Arduino Uno:



#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX

void setup() {
Serial.begin(9600);
Serial.println("Enter AT commands:");
mySerial.begin(38400);
}

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

Podłączamy moduł HC-05  do Arduino  w następujący sposób:
Arduino                    HC-05
+5V VCC
GND GND
PIN 10 ( RX ) TX (przez konwerter)
PIN 11 ( TX ) RX (przez konwerter)
Sposób podłączenie HC-05 do Arduino NANO i UNO przez konwertery poziomów logicznych
Sposób podłączenie HC-05 do Arduino NANO i UNO przez konwertery poziomów logicznych

Podczas podłączenia zasilania do modułu należy przytrzymać przycisk znajdujący się przy pinach. Wówczas dioda zacznie migać z mniejszą częstotliwością. To oznacza wejście w stan umożliwiający konfigurację AT.

Otwieramy monitor portu szeregowego w Arduino IDE i wpisujemy komendę „AT” i wciskamy ENTER. Należy pamiętać, żeby ustawić opcję „Both NL & CR”  i „Autoscroll”.
Jeśli wszystko działa poprawnie, powinniśmy otrzymać w oknie odpowiedź „OK”

KILKA UWAG!

Jeden z moich modułów reagował na małe litery komend inny nie. Nie sprawdzałem czy to sprawka Nano, czy samych modułów, wniosek jest taki, że lepiej pisać komendy AT WIELKIMI LITERAMI.

Niektóre komendy wymagają dodatkowego akcji aby się wyświetlały. Jeden z moich modułów nie chciał wyświetlać nazwy „AT+NAME?”, dopiero jednoczesne wciśnięcie przycisku (tego samego, który wprowadza w tryb AT) spowodowało, że nazwa pojawiła się na monitorze portu szeregowego Arduino IDE.

Pamiętajmy, że szybkość transmisji musi wynosić w naszym przypadku „9600,0,0” i taką należy ustawić by komunikacja się udała. Służy do tego komenda: „AT+UART=9600,0,0”, sprawdzamy komendą „AT+UART?

Inne komendy AT:
AT COMMAND LISTING
AT COMMAND LISTING

Pełen zestaw komend AT dla modułu HC-05

Android i HC-05. Komunikacja w obie strony.

Duże podziękowania ElektroPrzewodnikowi za świetny film instruktażowy na YouTube.

Podłączenie:
Połączenie Arduino Uno z HC-05 przez konwerter poziomów.
Połączenie Arduino Uno z HC-05 przez konwerter poziomów.
I kod programu.

Pamiętamy żeby przy ładowaniu programu odłączyć RX .

/*
 * Program, który lekko zmieniłem 
 * napisał ElektroPrzewodnik 
 * https://youtu.be/8DOg8onUvks
 */

void setup() {
  Serial.begin(9600);
  pinMode(8, INPUT_PULLUP);
  pinMode(9, INPUT_PULLUP);

}

char cmd[100];
char cmdIndex;
boolean prz1, prz2, prz1_old, prz2_old = true;

void exeCmd()  {

  if (cmd[0] == 's') {
    unsigned int val = atol(cmd + 2);
    Serial.println(val);   
  } 
}

void loop() {
  if (Serial.available() > 0)
  {
    char c = (char)Serial.read();
    if (c == '\n') {
      cmd[cmdIndex] = 0;
      exeCmd();
      cmdIndex = 0;
    } else {
      cmd[cmdIndex] = c;
      if (cmdIndex < 99) cmdIndex++;
    }
  }

  prz1 = digitalRead(8);
  prz2 = digitalRead(9);
  
  if (prz1 != prz1_old)
  {
    prz1_old = prz1;
    if (prz1)
    Serial.println("led1 0\n");
    else
    Serial.println("led1 1\n");
  }

  if (prz2 != prz2_old)
  {
    prz2_old = prz2;
    if (prz2)
    Serial.println("led2 0\n");
    else
    Serial.println("led2 1\n");
  }
}
  

Aplikacja na Arduino to RoboRemoFree

Dodaj komentarz