Содержание
- Обзор
- Технические характеристики модуля
- Подключение
- Программирование модуля
- Пример использования
- Часто задаваемые вопросы FAQ
Обзор модуля Bluetooth HC-05
Контроллер Arduino не поддерживают беспроводную связь, а часто это просто необходимо. Например, удаленное управление роботом на Arduino, отправка данных с метеостанции на арудино в Интернет или на домашний сервер, связь нескольких устройств между собой. Здесь в помощь разработчикам устройств множество внешних модулей для организации различных технологий беспроводной связи: модули WiFi, GSM/GPRS, IR, Bluetooth, радиомодули для работы в различных частотных диапазонах.
Технология 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 — контакт для входа в режим программирования.
Настройка модуля осуществляется в режиме программирования отправкой AT-команд по последовательному порту. Для входа в режим программирования необходимо подать на контакт KEY сигнал высокого уровня. На некоторых модулях контакт KEY отсутствует, и вместо него контакт EN:
- EN — включение/выключение модуля;
В этом случае для входа в режим программирования необходимо подать сигнал высокого уровня на контакт 34:
Для модуля к плате Arduino по последовательному порту будем использовать со сторону Arduino программный UART. Схема подключения на рисунке:
Получить должны примерно следующие:
Большой ассортимент датчиков ардуино и модулей можно купить в магазине 3DIY.
Программирование модуля 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 — тестовая команда.
Параметров нет.
Ответ модуля: 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).
Пример использования
Рассмотрим пример получения на Android-устройстве (телефон, смартфон, планшет) данных влажности воздуха и температуры с датчика DHT11, подключенного к Arduino. Arduino каждые 10 секунд получает данные с датчика DHT11 и отправляет их через модуль HC05 на Android-устройство.
Нам понадобятся следующие детали:
- плата Arduino
- плата прототипирования
- датчик DHT11
- модуль Bluetooth HC05
- соединительные провода
- Телефон или планшет но ОС Android
Соберем схему, показанную на рисунке:
Получаем:
Загрузим на плату Arduino скетч ( смотрите ниже) – получение данных влажности и температуры с датчика DHT11 и выдача данных в последовательный порт (hardware) через модуль HC05 на Android-устройство.
// подключение библиотеки 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 :
И наблюдаем прием данных, поступающих из Arduino через модуль HC05:
И выдача данных в монитор последовательного порта Arduino IDE:
Часто задаваемые вопросы FAQ
1. На AT-команды нет ответа модуля- Проверьте правильность подключения модуля;
- Проверьте подключения контакта KEY модуля (или вывода 34) к 3,3В;
- Проверьте установленные параметры для последовательного порта (скорость 38400 бод, может у модулей разных производителей отключаться).
- Проверьте подключение модуля к питанию, должно быть быстрое мигание светодиода на модуле (поиск сети);
- Проверьте отключение контакта KEY модуля (или вывода 34) от 3,3В;
- Установите AT-командами роль slave (AT+ROLE=0).
- Проверьте правильность подключения bluetooth-модулю HC05 к плате Arduino;
- Скорость обмена данными Arduino и HC05 должна соответствовать установленной с помощью AT-команды AT+UART.