Bluetooth модуль HC-05

Содержание:

  • Обзор
  • Технические характеристики модуля
  • Пример использования
  • Часто задаваемые вопросы FAQ

Обзор модуля Bluetooth HC-05

Контроллер Arduino не поддерживают  беспроводную связь, а часто это просто необходимо. Например, удаленное управление роботом на Arduino, отправка данных с метеостанции на арудино в Интернет или на домашний сервер, связь нескольких устройств между собой. Здесь в помощь разработчикам устройств множество внешних модулей для организации различных технологий беспроводной связи: модули WiFi, GSM/GPRS, IR, Bluetooth, радиомодули для работы в различных частотных диапазонах.

Bluetooth модуль HC-05 для Arduino

Технология Bluetooth используется для передачи данных между двумя устройствами, которые находятся в непосредственной близости друг с другом, причем необязательна прямая видимость. Технология Bluetooth обеспечивает хорошую устойчивость к широкополосным помехам, что позволяет множеству устройств, находящихся в одном месте, одновременно общаться между собой, не мешая друг другу. Очень широко данная технология используется в телефонах, планшетах, ноутбуках.

Одно из лучших решений для организации двусторонней связь по Bluetooth вашего Arduino-устройства с планшетом, ноутбуком или другим Bluetooth-устройством – Bluetooth-модуль HC-05 , который может работать как master (осуществлять поиск Bluetooth-устройств и инициировать установку связи), так и slave (ведомое устройство).


Технические характеристики модуля HC05

  • Чип Bluetooth: HC-05(BC417143);
  • Диапазон частот радиосвязи: 2,4–2,48 ГГц;
  • Мощность передачи: 0,25–2,5 мВт;
  • Чувствительность: –80 dBм;
  • Напряжение питания: 3,3–5 В;
  • Потребляемый ток: 50 мА;
  • Радиус действия: до 10 метров;
  • Интерфейс: последовательный порт;
  • Режимы: master, slave;
  • Температура хранения: –40…85 °C;
  • Рабочий диапазон температур: –25…75 °C;
  • Габариты: 27 x 13 x 2,2 мм.

.


Подключение

Датчик имеет 6 выводов стандарта 2,54 мм :

  • VCC — (питание 3,6 – 6 В);
  • GND — (земля).
  • TXD, RXD — UART интерфейс;
  • STATE — индикатор состояния;
  • KEY — контакт для входа в режим программирования.

Bluetooth модуль HC-05

Настройка модуля осуществляется в режиме программирования отправкой AT-команд по последовательному порту. Для входа в режим программирования необходимо подать на контакт KEY сигнал высокого уровня. На некоторых модулях контакт KEY отсутствует, и вместо него контакт EN:

  • EN — включение/выключение модуля;

Bluetooth модуль HC-05

В этом случае для входа в режим программирования необходимо подать сигнал высокого уровня на контакт 34:

Bluetooth модуль HC-05

Для модуля к плате Arduino по последовательному порту будем использовать со сторону Arduino программный UART.  Схема подключения на рисунке:

Bluetooth модуль HC-05

Получить должны примерно следующие:

Схема в сборе HC-05


Программирование модуля Bluetooth HC05

Настройка модуля осуществляется в режиме программирования отправкой AT-команд по последовательному порту. Подключим модуль HC05 к плате Arduino по схеме соединений на рисунке 5. На контакт KEY модуля (или вывод 34 платы) подадим 3.3В. AT-команды будем отправлять из монитора последовательного порта Arduino IDE. Загрузим в Arduino скетч из листинга 1. Нам понадобится Arduino-библиотека SoftwareSerial.  Скорость UART модуля в режиме программирования 38400 бод, но может и отличаться, в этом случае следует подобрать.

include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // указываем пины rx и tx соответственно

void setup()  {
  pinMode(2,INPUT);
  pinMode(3,OUTPUT);
  Serial.begin(9600);
  mySerial.begin(38400);
  Serial.println("start prg");
}

void loop() {
  if (mySerial.available()) {
    char c = mySerial.read(); // читаем из software-порта
    Serial.print(c); // пишем в hardware-порт
  }
  if (Serial.available()) {
    char c = Serial.read(); // читаем из hardware-порта
    mySerial.write(c); // пишем в software-порт
  }
}

После загрузки скетча откроем монитор последовательного порта Arduino IDE и начнем отправлять AT-команды:

Отправка AT-команд


Список основных AT-команд:

  • AT — тестовая команда.

Параметров нет.

Ответ модуля: OK

  • AT+VERSION? — получить версию прошивки модуля.

Параметров нет.

Ответ модуля: +VERSION: <Param>

OK

где <Param> — версия прошивки Bluetooth-модуля.

  • AT+RESET — сброс настроек.

Параметров нет.

Ответ модуля: OK

  • AT+ORGL — установка пользовательских настроек модуля.

Параметров нет.

Ответ модуля: OK

  • AT+ADDR? — получить адрес модуля.

Параметров нет.

Ответ модуля:  +ADDR:<Param>

где <Param> — адрес Bluetooth-модуля NAP: UAP : LAP.

  • AT+NAME? — получить имя модуля.

Параметров нет.

Ответ модуля: +NAME:<Param>

где <Param> — имя Bluetooth-модуля.

  • AT+NAME=<Param> — установить новое имя модуля.

Параметр: <Param> — имя Bluetooth-модуля.

Ответ модуля: +NAME:<Param>

OK (или FAIL)

  • AT+PSWD? — получить пин-код доступа к Bluetooth-модулю.

Параметров нет.

Ответ модуля: + PSWD:<Param>

где <Param> — пин-код. По умолчанию 1234.

  • AT+PSWD=<Param> — установить код доступа к Bluetooth-модулю.

Параметр: <Param> — код доступа к модулю.

Ответ модуля: OK (или FAIL)

  • AT+CLASS=<Param> — установить режим работы модуля Bluetooth-модуля.

Параметр: <Param> — класс. В документации модуля не приведены возможные значения данного параметра. По умолчанию он установлен в 0. Если предполагается использовать модуль в режиме master, значение не надо изменять. Если использовать модуль в режиме slave, при значении параметра, равном 0, он невидим для устройств с операционной системой Android. Для видимости необходимо установить значение параметра равным 7936.

Ответ модуля: OK

  • AT+CLASS? — получить класс модуля.

Параметров нет.

Ответ модуля: +CLASS:<Param>

где <Param> — класс модуля.

  • AT+IAC — получить код доступа к запросу GIAC (General Inquire Access Code).

 Различным физическим каналам связи, исполь­зуемым в процессе установления соединения, соответствуют различные коды доступа к каналам. В каналах опроса, за исключением выделенных, используется одинаковый для всех устройств общий код доступа к запросу.

Параметров нет.

Ответ модуля: + IAC:<Param>

где <Param> — код доступа к запросу.

  • AT+IAC=<Param> — установить код доступа к запросу.

Параметр: <Param> — код доступа к запросу. Значение по умолчанию 9e8b33.

Ответ модуля: OK (или FAIL)

  • AT+ROLE? — получить режим работы модуля.

Параметров нет.

Ответ модуля: +ROLE:<Param>

где <Param> — режим работы модуля Bluetooth-модуля:

  • 0 — slave. В этом режиме другой мастер может подключиться к модулю;
  • 1 — master. В этом режиме модуль может сам подключиться к какому-нибудь Bluetooth-устройству;
  • 2 — slave-loop. Модуль отправляет обратно все байты, которые ему прислали.
  • AT+ROLE=<Param> — установить режим работы Bluetooth-модуля.

Параметр: <Param> — режим работы Bluetooth-модуля:

  • 0 — slave;
  • 1 — master;
  • 2 — slave-

Ответ модуля: OK

  • AT+UART=<Param1>,<Param2>,<Param3> — установить модуль для последовательного порта.

Параметры:

  • <Param1> — скорость обмена (9600,19200,38400,57600,115200);
  • <Param2> — стоп-бит:
  • 0 — нет;
  • 1 — есть;
  • <Param3> — бит паритета:
  • 0 — нет;
  • 1 — есть.

Ответ модуля: OK (или FAIL).

  • AT+UART? — получить параметры обмена модуля.

Параметров нет.

Ответ модуля: +UART:<Param1>,<Param2>,<Param3>

где:

  • <Param1> — скорость обмена (9600,19200,38400,57600,115200);
  • <Param2> — стоп-бит;
  • <Param3> — бит паритета.
  • AT+CMODE=<Param> — установить режим подключения Bluetooth-модуля.

Параметр: <Param> — режим подключения Bluetooth-модуля:

  • 0 — модуль может подключаться только к определенному командой AT+BIND Bluetooth-устройству;
  • 1 — модуль может подключаться к любому Bluetooth-устройству;
  • 2 — режим slave-loop.

Ответ модуля: OK

  • AT+CMODE? — получить режим подключения модуля.

Параметров нет.

Ответ модуля: +CMODE:<Param>

где <Param> — режим подключения Bluetooth-модуля:

  • 0 — модуль может подключаться только к определенному командой AT+BIND Bluetooth-устройству;
  • 1 — модуль может подключаться к любому Bluetooth-устройству;
  • 2 — режим slave-loop.
  • AT+INQM=<Param1>,<Param2>,<Param3> — установить параметры для запроса поиска Bluetooth-устройств.

Параметры:

  • <Param1>:
  • 0 — стандартный режим запроса;
  • 1 — запрос в режиме RSSI;
  • <Param2> — максимальное количество устройств, отвечающих на запрос;
  • <Param3> — таймаут ожидания (1–48: от 1,28 сек до 61,44 сек).

Ответ модуля: OK (или FAIL).

  • AT+INQM? — получить параметры для запроса поиска Bluetooth-устройств.

Параметров нет.

Ответ модуля: +UART:<Param1>,<Param2>,<Param3>

  • AT+INQ — запуск поиска Bluetooth-устройств.

Параметров нет.

Ответ модуля — список найденных устройств.

  • AT+BIND=<Param> — привязать Bluetooth-модуль к другому модулю.

Параметр: <Param> — адрес авторизованного Bluetooth-модуля.

Ответ модуля: OK (или FAIL).

  • AT+BIND? — получить адрес устройства, привязанного к Bluetooth-модулю.

Параметров нет.

Ответ модуля: <Param> — адрес устройства, привязанного к Bluetooth-модулю.

  • AT+FSAD=<Param> — поиск авторизированного Bluetooth-устройства.

Параметр: <Param> — адрес авторизованного Bluetooth-модуля:

Ответ модуля: OK (или FAIL).

  • AT+RMSAD=<Param> — удалить устройство из списка авторизированных для нашего Bluetooth-модуля.

Параметр: <Param> — адрес авторизованного Bluetooth-модуля.

Ответ модуля: OK (или FAIL).

  • AT+RMAAD — очистить список авторизированных устройств для нашего Bluetooth-модуля.

Параметр: <Param> — адрес авторизованного Bluetooth-модуля.

Ответ модуля: OK (или FAIL).

  • AT+LINK=<Param> — соединиться с Bluetooth-устройством.

Параметр: <Param> =— адрес Bluetooth-устройства.

Ответ модуля: OK (или FAIL).

Полный список AT-команд можно найти здесь.


Пример использования

Рассмотрим пример получения на Android-устройстве (телефон, смартфон, планшет) данных влажности воздуха и температуры с датчика DHT11, подключенного к Arduino. Arduino каждые 10 секунд получает данные с датчика DHT11 и отправляет их через модуль HC05 на Android-устройство.

Нам понадобятся следующие детали:

Соберем схему, показанную на рисунке:

Пример использования Bluetooth модуль HC-05

Получаем:

HC-05 схема в сбореЗагрузим на плату Arduino скетч ( смотрите ниже) – получение данных влажности и температуры с  датчика DHT11 и выдача данных в последовательный порт (hardware) через модуль HC05 на Android-устройство.

//makerplus.ru
// подключение библиотеки DHT
#include "DHT.h"
// константы
#define DHTPIN 8           // пин подключения контакта DATA
#define DHTTYPE DHT11      // датчик DHT 11
#define INTERVAL_GET_DATA 2000  // интервала измерений, мс
// создание экземпляра объекта DHT
DHT dht(DHTPIN,DHTTYPE);
// переменная для интервала измерений
unsigned long millis_int1=0;
int pos=0;
//  подключение библиотеки SoftwareSerial.h
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // указываем пины rx и tx соответственно

void setup() {
  Serial.begin(9600);  // запуск последовательного порта
  mySerial.begin(9600);
  dht.begin();         // запуск DHT
  Serial.println("start prg");
}

void loop() {
  if(millis()-millis_int1 >= INTERVAL_GET_DATA) {
    pos=1-pos;
    if(pos==0)  {
      // получение данных влажности c DHT11
      int humidity = dht.readHumidity();
      // вывод в монитор последовательного порта
      Serial.print("humidity=");Serial.println(humidity);
      mySerial.print("H=");mySerial.println(humidity);
    }
    else  {
      // получение данных влажности c DHT11
      int temp = dht.readTemperature();
      // вывод в монитор последовательного порта
     Serial.print("temperature=");Serial.println(temp);
     mySerial.print("T=");mySerial.println(temp);
    }
    // старт интервала отсчета
    millis_int1=millis();
  }
}

Проверим на Android-устройстве получение данных, отправляемых Arduino через bluetooth-модуль HC05. На Android-устройчстве установим программу Bluetooth Terminal. В программе установим соединение с модулем HC05 :

Соединение с модулем в программе Bluetooth Terminal.

И наблюдаем прием данных, поступающих из Arduino через модуль HC05 (рисунок 11):

Получение данных из Arduino в программе Bluetooth Terminal

И выдача данных в монитор последовательного порта Arduino IDE:

Выдача данных в монитор последовательного порта


Часто задаваемые вопросы FAQ

1. На AT-команды нет ответа модуля

  • Проверьте правильность подключения модуля;
  • Проверьте подключения контакта KEY модуля (или вывода 34) к 3,3В;
  • Проверьте установленные параметры для последовательного порта (скорость 38400 бод, может у модулей разных производителей отключаться).

2. Android-устройство не может подключиться к bluetooth-модулю HC05

  • Проверьте подключение модуля к питанию, должно быть быстрое мигание светодиода на модуле (поиск сети);
  • Проверьте отключение контакта KEY модуля (или вывода 34) от 3,3В;
  • Установите AT-командами роль slave (AT+ROLE=0).

3. Не передаются данные на Android-устройство

  • Проверьте правильность подключения bluetooth-модулю HC05 к плате Arduino;
  • Скорость обмена данными Arduino и HC05 должна соответствовать установленной с помощью AT-команды AT+UART.