Moduł bluetooth HC-05 + Arduino/ESP8266/ESP32 + Android

Moduł HC-05

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.

Komendy AT

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

void setup() {
Serial.begin(115200);
Serial.println();
Serial.println("Wpisz komendy AT:");
mySerial.begin(38400); // szybkość transmisji dla AT 
}

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

Wgrywamy program do Arduino Uno:

Podłączamy moduł HC-05  do Arduino  w następujący sposób:
HC-05ArduinoESP8266
VCC+5V+5V
GNDGNDGND
TX (przez konwerter)PIN 10 ( RX )D2 (RX)
RX (przez konwerter)PIN 11 ( TX )D3 (TX)
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. Lepiej pisać komendy AT WIELKIMI LITERAMI.

Niektóre komendy wymagają dodatkowego działania aby się wyświetlały. Jeden z 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.

Inne komendy AT:

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.

I kod programu.

/*
 * 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");
  }
}

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

Aplikacja na Arduino to RoboRemoFree

HC-05 i ESP8266

KOD

#include <SoftwareSerial.h>
SoftwareSerial SerialBT(D2, D3); // RX, TX

void setup() {
  Serial.begin(38400);
  SerialBT.begin(38400); 
  Serial.println("The device started, now you can pair it with bluetooth!");
}

void loop() {
  if (Serial.available()) {
    SerialBT.write(Serial.read());
  }
  if (SerialBT.available()) {
    Serial.write(SerialBT.read());
  }
  delay(20);
}

ESP8266 z HC-05 łączymy jak pokazałem w tabelce. Moje moduły są na VCC = 5V. Oczywiście nie potrzeba konwertorów, bo logika pinów ESP8266 działa na 3.3V, co jest bardzo przyjemne w tym wypadku. Kod powyżej umożliwia konwersację w obie strony na przykład z programem Serial Bluetooth Terminal na Androidzie. Pamiętać należy, by dla szeregowego monitora Arduino ustawić szybkość transmisji na 38400. Jak też dla transmisji modułu HC-05. Inaczej zobaczymy krzaczki.

HC-05 i ESP32

ESP32 jak wiemy ma wbudowany moduł BT. Jeśli użyjemy klasycznej jego formy (takiej jak HC-05) program kontaktujący się z Serial Bluetooth Terminal będzie banalnie prosty:

//This example code is in the Public Domain (or CC0 licensed, at your option.)
//By Evandro Copercini - 2018
//
//This example creates a bridge between Serial and Classical Bluetooth (SPP)
//and also demonstrate that SerialBT have the same functionalities of a normal Serial

//#include "BluetoothSerial.h"
//
//#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
//#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
//#endif
//
//BluetoothSerial SerialBT;

void setup() {
  Serial.begin(115200);
  //SerialBT.begin("ESP32test"); //Bluetooth device name
  Serial.println("The device started, now you can pair it with bluetooth!");
}

void loop() {
  if (Serial.available()) {
    SerialBT.write(Serial.read());
  }
//  if (SerialBT.available()) {
//    Serial.write(SerialBT.read());
//  }
  delay(20);
}

Jeden komentarz

  1. Pingback:Bluetooth, parowanie HC-05 – Arduino dla strasznych lamerów

Dodaj komentarz