В настоящее время в зарубежных и отечественных магазинах можно найти большое количество различных Bluetooth Serial модулей для DIY-устройств.
Цена на них не сильно высока: 5-10$ за модуль (с учетом бесплатной доставки в любую страну).
Их легко можно найти на широко известной площадке eBay введя в поисковую строку одно из словосочетаний: Bluetooth RS232, Bluetooth Serial, HC-03, HC-04, HC-05, HC-06.
В большинстве модулей используется чип BC417, плюс Flash-память. Чип поддерживает спецификацию Bluetooth v2.0 + EDR, AT-команды, может работать в режиме Master или Slave (модули HC-03/HC-5, может устанавливается AT-командой), поддерживает скорость обмена от 2400 до 1382400.
Напряжение питание модуля составляет 3.3В, ток потребления ~50мА.
Модули HC-03/HC-05 более функциональные, чем HC-04/HC-06.
Основные выводы модулей HC-04/HC-06:
UART_TX (pin 1), UART_RX (pin 2), UART_CTS (pin 3), UART_RTS (pin 4) – пины UART.
3,3V (pin 12) – питание 3.3В.
GND (pin 13) – общий.
PIO1 (pin 24) – индикатор рабочего режима. Если соединение не установлено – то светодиод мигает, если установлено, то постоянно горит.
Для модулей HC-03/HC-05 есть некоторые отличия. Линии UART и питания те же самые, но:
PIO8 (pin 31) – индикатор рабочего режима.
PIO9 (pin 32) – статус соединения, если соединение установлено, то на выходе будет высокий уровень.
PIO11 (pin 34) – вход включения режима AT-команд (необходимо подать лог. 1).
За более подробной документацией обращайтесь к PDF.
Итак, соберем простую схему для подключения Bluetooth модуля HC-06 к плате Arduino Nano V3.
Обратите внимание, что выводы TX и RX в плате Arduino Nano поменяны местами в отличии от Ardunio UNO и др. Поэтому внимательно смотрите распиновку своей Arduino платы.
Шаг между выводами в модуле составляет всего 1.5мм, поэтому придется взяться за паяльник и припаять провода к модулю. Всего необходимо припаять 5 проводов, однако светодиод подключать необязательно, он служит для индикации состояния.
Итак припаиваем провода и подключаем Bluetooth модуль следующим образом:
вывод Arduino 3.3В – к 12 пину модуля
вывод Arduino GND – к 13 пину модуля
вывод Arduino TX – к 2 пину модуля RX
вывод Arduino RX – к 1 пину модуля TX
Передача данных из Arduino по Bluetooth
Далее напишем простенький скетч для отправки сообщений из Bluetooth модуля в компьютер.
int cnt = 0; // счетчик void setup() { Serial.begin(9600); // инициализация порта } void loop() { cnt++; Serial.print(“Hello BB from Arduino! Counter:”); // выводим надпись Serial.println(cnt); // выводим значение счетчика и переводим на новую строку delay(1000); // ждем 1 секунду }
Как видите скетч довольно простой и хорошо прокомментирован. В цикле, раз в секунду происходит увеличение переменной cnt, которая затем с текстовой надписью выводится в последовательный порт на Bluetooth модуль.
Обратите внимание, что скорость порта установлена в значение 9600. При покупке модуля, спрашивайте на какое значение установлена скорость обмена по последовательному интерфейсу. Но в большинстве случаев это 9600.
При необходимости, скорость обмена можно изменить АТ-командами.
Откройте данный скетч в Arduino IDE, скомпилируйте и прошейте ваш Arduino. Если вы подключали светодиод в Bluetooth модулю, то он должен мигать, показывая тем самым, что модуль ожидает соединение.
Внимание! Если при прошивке платы Arduino ругается прошивальщик, то отключите питание 3.3В с Bluetooth модуля.
На компьютере, в качестве Bluetooth модуля использовался самый дешевый китайский Bluetooth USB адаптер, стоимостью около 200 руб. После того, как адаптер подключается к компьютеру, установите необходимые драйвера (в Windows 7 x64 у меня все драйвера поставились автоматом).
Затем щелкаем в трее по иконке Bluetooth модуля и выбираем “Добавить устройство”:
Имя моего модуля BOLUTEK, у вас оно скорее всего будет другим. Нажимаем “Далее” и переходим к окну, где необходимо ввести пароль для устройства:
Выбираем второй пункт: “Введите код образования пары устройства”. С завода, код установлен 1234. Его и вводим. Программа настроит и пропишет в системе виртуальные COM-порты (у меня прописало 2 шт, но может быть и один):
В дальнейшем, можно посмотреть на какой COM-порт назначилось и его параметры. Для этого щелкаем правой кнопкой мыши по устройству и выбираем “Свойства” и вкладку “Оборудование”. Там можно посмотреть и изменить параметры виртуального COM-порта:
Теперь, для приема и передачи данных на виртуальный COM порт можно использовать любую терминал программу. Я использовал бесплатную Tera Term. При каждом запуске программы предлагается выбор соединения, переключаем флажок на Serial и выбираем COM порт вашего Bluetooth модуля. У меня это COM4.
В терминале мы видим данные счетчика с платы Arduino:
Как видим, данные успешно передаются по Bluetooth соединению. Ниже в статье вы можете посмотреть видео.
Двунаправленный обмен данными по Bluetooth
Следующим шагом будет написание простенькой программы двунаправленного обмена данными между Arduino и компьютером. В схему я добавил светодиод, подключив его к 12 пину Arduino, через токоограничительный резистор. Но можно использовать и встроенный LED (обычно 13 пин).
char incomingByte; // входящие данные int LED = 12; // LED подключен к 12 пину void setup() { Serial.begin(9600); // инициализация порта pinMode(LED, OUTPUT); Serial.println(“Press 1 to LED ON or 0 to LED OFF…”); } void loop() { if (Serial.available() > 0) { //если пришли данные incomingByte = Serial.
read(); // считываем байт if(incomingByte == ‘0’) { digitalWrite(LED, LOW); // если 1, то выключаем LED Serial.println(“LED OFF. Press 1 to LED ON!”); // и выводим обратно сообщение } if(incomingByte == ‘1’) { digitalWrite(LED, HIGH); // если 0, то включаем LED Serial.println(“LED ON.
Press 0 to LED OFF!”); } } }
Программа работает очень просто. После запуска или сброса устройства, в последовательный порт выводится сообщение с предложением нажать 1 или 0. В зависимости от нажатой цифры светодиод будет загораться или гаснуть. А также, от Arduino будет выводиться сообщение загорелся светодиод, или погас.
Видео работы:
Подключаем к Android
Для платформы Android также существуют программы-терминалы. Но необходима специальная программа для работы в терминальном режиме по Bluetooth. Я установил вот эту: Bluetooth Terminal. Достаточно простая программа, ничего лишнего.
В моем Android устройстве нет Bluetooth модуля, но он прекрасно работает и с внешним USB-адаптером, который мы использовали для подсоединения к ПК.
Подключаем адаптер по USB, включаем на андроиде bluetooth, находим и вводим пароль для нашего Bluetooth устройства на Arduino и наконец запускаем программу терминал. Нажимаем “Connect a device – Secure” и выбираем наше устройство BOLUTEK.
Теперь вы можете отправлять и принимать данные с Bluetooth устройства при помощи терминала.
Видео соединения с Android устройством:
Скачать файлы к проекту
Источник: http://shemopedia.ru/arduino-i-bluetooth.html
Частный блог
JY-MCU — это недорогой модуль для создания связки UART-Bluetooth. Состоит из промышленного модуля HC-05/HC-06, закрепленного на макетной плате, с дополнительными стабилизатором и светодиодном. Цены моделей на основе HC-05 и HC-06 почти не отличаются, но модули обладают разным функционалом:
HC-05 — может работать в режимах Master/Slave, можно управлять соединением.
HC-06 — модуль может работать только в режиме Slave.
Спецификация на модуль JY-MCU (HC-06)
Питание | 3.3-6 Vdc |
Ток питания | 150mA |
Рабочее напряжение | 3.3Vdc |
Максимальное расстояние | 30м |
Bluetooth | V2.0+EDR |
Настойки по-умолчанию JY-MCU (HC-06)
Скорость | 9600,8,1,n |
Пароль | 1234 |
Имя | HC-06 |
Описание выводов JY-MCU (HC-06)
- VCC— положительный полюс источника питания;
- RXD— линия приёма сигнала UART;
- TXD— линия передачи сигнала UART;
- GND— земля;
Пример подключения JY-MCU (HC-06)
Так как рабочее напряжение модуля 3.3V, а Arduino — 5V, подключение лучше всего осуществлять через делитель напряжения.
Код, который моргает диодом, подключенным к pin 13, при получении цифры 0 или 1.
int ledPin = 13; int state = 0; void setup() { pinMode(ledPin, OUTPUT); digitalWrite(ledPin, LOW); Serial.begin(9600); } void loop() { if(Serial.available()){ state = Serial.read(); } if (state == '0') { digitalWrite(ledPin, LOW); Serial.println(“LED: off”); } else if (state == '1') { digitalWrite(ledPin, HIGH); Serial.println(“LED: on”); } }
Настройка модуля JY-MCU (HC-06)
Модуль JY-MCU позволяет поменять настройки по-умолчанию с помощью AT команд. Возможно указать новую скорость, имя и пароль для доступа.
Данный пример меняет имя модуля на ‘Merl1nSerial’, устанавливает скорость 57600 и пароль ‘0000’.
#define NAME “Merl1nSerial” #define BLUETOOTH_SPEED 9600 #include SoftwareSerial mySerial(10, 11); // TX, RX void setup() { Serial.begin(9600); while (!Serial) {} Serial.println(“Starting config”); mySerial.begin(BLUETOOTH_SPEED); delay(1000); mySerial.print(“AT”); waitForResponse(); mySerial.print(“AT+VERSION”); waitForResponse(); mySerial.print(“AT+PIN0000”); waitForResponse(); mySerial.print(“AT+NAME”); mySerial.print(NAME); waitForResponse(); mySerial.print(“AT+BAUD7”); waitForResponse(); Serial.println(“Done!”); } void waitForResponse() { delay(1000); while (mySerial.available()) { Serial.write(mySerial.read()); } Serial.write(”
“); } void loop() {}
В Port Monitor вы должны увидеть такой вывод, если он отличается — произошла ошибка.
Возможные значения для настройки скорости.
Warning: С настройкой скорости нужно быть очень осторожным, т.к. Arduino поддерживает строго определённые скорости:
2400 / 4800 / 9600 / 14400 / 19200 / 28800 / 38400 / 57600 / 76800 / 115200 / 230400 / 250000 / 500000 / 1000000 / 2000000.
Если указать для модуля JY-MCU скорость, которая не поддерживается Arduino, то подключиться и исправить получится только с компьютера через USB-Serial переходник.
В случает подозрения на неисправность модуля, проверить его просто: достаточно замкнуть RXD на TXD и послать символ через Bluetooth терминал. Если модуль исправен, то символ будет возвращаться обратно.
Источник: http://privateblog.info/arduino/bluetooth-modul-jy-mcu/
Bluetooth-модуль HC-05
уже давно и прочно вошёл в нашу жизнь в качестве удобного протокола связи различных устройств: мобильных телефонов, ноутбуков, КПК, гарнитур, мышей, клавиатур… Список можно ещё долго продолжать. Обычно эту технологию интегрируют в свои продукты крупные производители электроники в виде малюсенькой микросхемы в корпусе BGA или QFN.
А как быть нам, простому электронному люду, не владеющими тёмными силами создания 4-слойных плат и кунг-фу микромонтажа? Для этого есть
от наших китайских собратьев. Этот модуль представляет собой плату размером 2.7×1.4 см, с 34 выводами с шагом 1.
5 мм, расположенных по периметру платы, и имеет на одном из торцов антенну:
На плате расположен чип BC417 от компании Cambridge Silicon Radio, который обеспечивает аппаратную поддержку стека Bluetooth 2.0+EDR (Enhaced Data Rate), а также флэш-память ES29LV800DB-70WGI от Excel Semiconductor на 8 Мбит (1 МБ), хранящая прошивку и настройки.
С оригинальной китайской прошивкой модуль умеет работать в двух режимах: простого «радиоудлинителя » и управления AT-командами. В первом случае всё предельно просто — включаешь модуль, подключаешься к нему с компа или иного устройства, умеющего делать COM-порт по Bluetooth, и шлёшь в этот порт данные.
Во втором режиме можно управлять модулем посредством AT-команд вида «AT+КОМАНДА» — например, команда «AT+NAME?» позволяет узнать имя модуля, но об этом позже.
Для того, чтобы подключить модуль, проясним назначение выводов:
- TX, RX, CTS, RTS — линии UART; CTS и RTS недоступны в данной прошивке
- PCM_CLK, PCM_OUT, PCM_IN, PCM_SYNC — линии для приёма-передачи звука (недоступны)
- AIO0, AIO1 — линии I/O общего назначения (недоступны)
- RESET — линия сброса (активируется логическим нулём)
- 3.3 V, GND — питание, земля
- NC — не подсоединён (Not Connected)
- USB_D+, USB_D- — линии данных USB (недоступны)
- CSB, MOSI, MISO, CLK — линии SPI (CSB — это SS, Slave Select), используются для прошивки чипа
- PIO0 — разрешение/запрет RX
- PIO1 — разрешение/запрет TX
- PIO2-PIO7, PIO10 — линии I/O общего назначения
- PIO8 — для светодиода, показывающего состояние модуля: светодиод мигает с разной скоростью в зависимости от того, чем занят модуль — опросом Bluetooth-устройств, ожиданием или чем-то ещё
- PIO9 — для светодиода, показывающего статус соединения: горит, если установлено соединение с другим Bluetooth-устройством
- PIO11 — для управления режимом работы: по умолчанию режим простого удлинителя UART, а если подать на него логичскую 1 — режим AT-команд
Кстати, модуль питается от 3.3 В, но его линии I/O могут работать и с 5-вольтовой логикой, что позволяет подключать его UART к Arduino без заморочек. Но это ещё не всё: шаг между выводами у модуля — 1.5 мм, что категорически не сочетается с шагом отверстий в макетных платах, и для прототипирования придётся припаивать проводки. Но нас такой вариант не устроил, и пришлось немного напрячься и сделать плату-breakout для модуля. Zotlberg взял на себя эту задачу и успешно её решил вот в таком виде:
На плате установлен стабилизатор на 3.3 В, так что можно запитать модуль стандартным для напряжением 5 В, подключив питание к выводу, обозначенному 5V. Принципиальная схема платы:
А вот ещё исходники в формате DipTrace: и .
Итак, плата готова, приступим к работе с модулем. Ставим breakout в макетную плату и подключаем следующим образом:
- 3.3v — к 3.3 В от Arduino
- GND — к GND Arduino
- RX — к TX Arduino
- TX — к RX Arduino
Включаем Arduino с подключенным модулем.
Если в вашем компьютере нет встроенного Bluetooth-контроллера, воспользуйтесь Bluetooth USB-донглом вроде этого:Теперь займёмся программной частью. Для начала зальём в Arduino такой скетч: enum { LED_PIN = 13 }; enum LedState { LED_ON, LED_OFF, LED_BLINK }; LedState led_state; void setup() { led_state = LED_OFF; pinMode(LED_PIN, OUTPUT); Serial.
begin(38400); } void loop() { if (Serial.available()) { char command = Serial.
read(); switch (command) { case '1': led_state = LED_ON; break; case '0': led_state = LED_OFF; break; case '*': led_state = LED_BLINK; break; default: { for (int i = 0; i < 5; ++i) { digitalWrite(LED_PIN, HIGH); delay(50); digitalWrite(LED_PIN, LOW); delay(50); } } } } switch (led_state) { case LED_ON: digitalWrite(LED_PIN, HIGH); break; case LED_OFF: digitalWrite(LED_PIN, LOW); break; case LED_BLINK: { static unsigned long start_millis = 0; if (millis() - start_millis >= 300) { start_millis = millis(); digitalWrite(LED_PIN, !digitalRead(LED_PIN)); } } } }
Windows 7 Кликните правой кнопкой мыши на значке Bluetooth в трее:
В появившемся списке устройств выбираем наш модуль и жмём Далее:
В следующем окне выберите вариант ввода PIN-кода вручную:
Введите код «1234» и нажмите Далее:
Если авторизация пройдёт успешно, то вы увидите следующее окно:Откройте список Bluetooth-устройств и зайдите в свойства модуля:
На вкладке «Службы» поставьте галочку напротив профиля последовательного порта и нажмите ОК:
Windows установит нужный драйвер и покажет облачко с соответствующим сообщением и названием порта:
Теперь вам понадобится программа-терминал с хорошей настраиваемостью. Неплохим вариантом будет лёгкая и бесплатная (даже для коммерческого использования) программа . Установите её, запустите и нажмите Settings. В настройках поставьте:
Port — COM6 (ну или какой порт Windows назначила модулю у вас)
Baud rate — 38400
Transmitted text — Append nothing
Жмите OK и в главном окне программы Disconnected — click to connect:
Всё — можно слать символы:
Модуль должен зажигать светодиод L в ответ на символ '1', тушить на '0' и мигать им на '*' c частотой примерно два раза в секунду. При вводе любых других символов светодиод должен около секунды мигать с большей частотой.
Ubuntu Linux 11.04
Запустите bluetooth-wizard и нажмите «Вперёд»:В следующем окне дождитесь нахождения вашего модуля и нажмите кнопку «Параметры PIN»:Выберите PIN-код 1234 и закройте окно:В окне со списком устройств Жмите «Вперёд», и если будут ошибки, повторите операцию с PIN-кодом. В случае успеха вы увидите такое окно:Запустите сканирование доступных Bluetooth-устройств:$ hcitool scan Scanning …
00:11:04:29:02:55 H-C-2010-06-01H-C-2010-06-01 — это имя нашего устройства (может быть также «HC-05»). Создаём устройство для работы по протоколу RFCOMM:$ sudo rfcomm bind /dev/rfcomm0 00:11:04:29:02:55
Всё, теперь можно обмениваться данными через виртуальный COM-порт /dev/rfcomm0.
Можно прямо в консоли:$ stty -F /dev/rfcomm0 38400 # устанавливаем скорость порта $ echo -n '1' > /dev/rfcomm0 # пишем туда символ '1', без символов перевода строки
Также можно воспользоваться замечательной программой cutecom: в поле Device введите /dev/rfcomm0, в списке Baud rate поставьте скорость 38400, внизу окна в списке выберите вариант No line end. Теперь жмите Open device и шлите через поле Input символы:
Модуль должен зажигать светодиод L в ответ на символ '1', тушить на '0' и мигать им на '*'.
AT-команды
Чтобы задействовать такие функции модуля, как опрос «соседних» Bluetooth-устройств, установку другой скорости UART и прочие, необходимо использовать AT-команды, описанные в этом .
Сразу предупреждаю: этот даташит очень китайский — многие вещи просто не описаны, для некоторых команд не описано даже их поведение, оформление кривое, куча ошибок из-за невнимательного copy&paste.
Но другие даташиты на этот модуль ещё хуже }:[=]
Все команды имеют вид AT+КОМАНДА, AT+КОМАНДА? или AT+КОМАНДА=ПАРАМЕТРЫ и должны оканчиваться комбинацией CR+LF (символы с кодами 0x0D и 0x0A, '
' и '
'). Примеры команд:
AT+NAME? — спросить у модуля его имя
AT+ROLE=1 — задать роль master
AT+INQ — запустить опрос соседних Bluetooth-устройств
Отвечает модуль так:
- В случае успеха:+КОМАНДА: ОТВЕТOK Строки, начинающейся с '+', может и не быть, если команда не должна ничего возвращать. Например, на команду AT+NAME? модуль ответит так:+NAME:H-C-2010-06-1OKа на команду AT (тест) просто:OK
- В случае ошибки:FAIL илиERROR:(КОД ОШИБКИ)Самый первый код ошибки 0 значит, что формат команды неверен — на команду AT+ЖАХНИ, к примеру, модуль ответит:ERROR:(0) Кстати, зацените грустный смайл 🙁 в этом ответе.Многие команды имеют как форму запроса, так и форму установки параметра. Опять же, команда AT+NAME? возвращает имя модуля, тогда как AT+NAME=ИМЯ его устанавливает.Для того, чтобы модуль мог принимать AT-команды, нужно его перевести в соответствующий режим — для этого нужно установить вывод PIO11 в логическую 1 (подтянув к питанию, например). После этого соединяйтесь с модулем, используя Arduino в качестве переходника USB-UART, аккуратно вытащив из него микроконтроллер (не сломайте ножки МК!)Выставьте в терминалке конец строки CR+LF и попробуйте скормить модулю пару команд. Выглядеть это должно примерно так:Всего команд 36, описаны они все в даташите. Заданные командами настройки модуль сохраняет в своей flash-памяти, так что после его можно использовать без повторной настройки.А вообще, работать напрямую с AT-командами, да ещё на микроконтроллере, довольно сложно и уныло, так что я основательно вкурил ядрёный китайский даташит и накатал библиотеку . В библиотеке я реализовал все функции модуля, документация по библиотеке лежит в директории doc.И напоследок: возможность перепрошивки аналогичного модуля обсуждали , ну и в сообществе easyelectronics есть небольшая .
Источник: http://robocraft.ru/blog/587.html
Bluetooth HC-06 и Arduino
Хотели бы вы организовать беспроводное включение/выключение света в доме? Если да, то для подобного проекта можно использовать Arduino, bluetooth модуль HC-06, реле и знания основ схемотехники.
В этой статье мы рассмотрим основы взаимодействия bluetooth модуля HC-06 с Arduino. Рассмотрим примеры передачи и приема данных через блютуз на примере включения/выключения светодиода.
Для реализации более серьезных автоматизированных систем вроде “умного дома”, эти основы будут как нельзя кстати.
Подключение Bluetooth модуля HC-06 к Arduino
Начать работать с HC-06 достаточно просто. Все, что вам надо знать – расположение контактов для подключения. На HC-06 шесть контактов: wakeup, VCC, GND, TXD, RXD и State. На этапе, используем 4 контакта: VCC, GND, TXD и RXD.
Ниже показано как именно подключается Bluetooth модуль к Arduino.
HC-06>>>Arduino
VCC>>>>3.3v
GND>>>>GND
TXD>>>>RXD
RXD>>>>TXD
HC-06 выступает в роли последовательного порта, через который вы передаете и принимаете данные. То есть, используя окно серийного монитора в Arduino IDE или Bluetooth приложение на вашем компьютере или телефоне, вы можете контролировать и управлять вашим проектом.
Например, в качестве терминала можно использовать Teraterm. Перед загрузкой скетча на Arduino, отключите модуль HC-06. Так как модуль производит обмен данными с помощью контактов tx/rx, загрузить скетч не получится.
После загрузки скетча можете подключать bluetooth модуль.
Echo скетч для Arduino и HC-06
Данный скетч дает вам возможность отсылать строку на Arduino через bluetooth и получать ответ, который отображается в серийном мониторе.
Примечание. Если вы используете Arduino Mega, измените строку кода while(Serial.available()); на while(Serial.available()>0);. В противном случае, скетч не будет отрабатывать.
bluetooth_echo.ino
LED скетч для Arduino и HC-06
Эта программа дает возможность включать/выключать светодиод, отправляя команды на Arduino через Bluetooth.
led_on_off.ino
Взаимодействие HC-06 с компьютером
На видео ниже показано как подключить HC-06 к персональному компьютеру иди другму устройству с поддержкой bluetooth.
Примечание. На видео скачано, что программа, которую вы используете в качестве серийного монитора (Teraterm в данном конкретном случае), подключается к INCOMING (входящему) com порту. Это не правильно. Надо использовать OUTGOING (исходящий) com порт.
После подключения HC-06, откройте Teraterm или другой подходящий терминал. Выберите серийный порт, который отвечает за обмен данными с HC-06 (более детальные пояснения по этому поводу есть на видео).
После успешного подключения HC-06, можете отправлять данные на Arduino и обратно. Если вы загрузили второй скетч, вы сможете включать/выключать светодиод, отправляя символы “n” и “f” соответственно.
Пример Echo
Пример LED
Сфера применения HC-06 по сути безгранична. Можно управлять любыми роботизированными системами и процессами. Надеемся, что приведенные основы работы с bluetooth модулем HC-06 будут вам полезны в проектах на Arduino.
Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!
Источник: http://arduino-diy.com/arduino-bluetooth-HC-06
Как подключить к Arduino модуль Bluetooth
Вам понадобится
- – Arduino;
- – модуль bluetooth;
- – компьютер;
- – соединительные провода.
Инструкция
Существует большое количество реализаций модулей Bluetooth. Каждая имеет свои особенности, но в общем и целом они все очень похожи. Рассмотрим представителя bluetooth модуля семейства HC-06. Данный модуль работает на частоте от 2,40 ГГц до 2,48 ГГц и поддерживает спецификацию bluetooth версии 2.
1+EDR (пониженное потребление энергии, повышенный уровень защиты данных и лёгкое соединение Bluetooth-устройств). Устойчивый приём с модулем гарантирован в пределах 10 метров.
Назначение выводов bluetooth-модуля такое:
– VCC и GND – “плюс” и “минус” питания модуля, поддерживаются напряжения от 3,6 до 6 вольт;
– TX и RX – передатчик и приёмник модуля;
– MCU-INT (Status) – это вывод статуса;
– Clear (Reset) – сброс и перезапуск модуля, в данном случае осуществляется низким логическим уровнем.
Последние два вывода могут быть не задействованы; часто можно встретить модули вообще без этих выводов.
Подключим bluetooth модуль к Arduino по приведённой схеме. Обратите внимание, что передатчик (Tx) Ардуино подключается к приёмнику (Rx) модуля, и наоборот.
На выводе Status появляется высокий уровень, когда модуль сопряжён с другим bluetooth устройством, и низкий – когда не сопряжён.
Можно считывать его значение, подключив к пину Arduino и назначив ему режим работы pinMode(pinStatus, INPUT) и таким образом узнавать состояние модуля. Но не на всех модулях индикатор статуса работает корректно, поэтому мы не будем его использовать в данном примере.
В результате должно получиться примерно как на фотографии.
Напишем такой скетч и загрузим его в память Arduino. Будем считывать данные, приходящие с bluetooth модуля, и обрабатывать их.
В данном случае, при приходе с модуля символа “1” будем зажигать светодиод, а при приходе “0” – гасить.
Включаем собранную схему с Arduino и подключённым к нему bluetooth-модулем.
Правильно подключённый модуль сразу входит в режим ожидания подключения, о чём будет свидетельствовать ритмично мигающий светодиод статуса.
Теперь нужно добавить bluetooth-устройство в список доверенных устройств. Включаем Bluetooth на компьютере, идём в Параметры -> Устройства -> Bluetooth. Убеждаемся, что наш bluetooth-модуль виден компьютеру. Выбираем его из списка и нажимаем кнопку Связать.
В диалоговое окно вводим пароль по умолчанию 1234. При успешном добавлении устройство появится в списке с пометкой Сопряжено.
Если вы хотите подключиться к вашему модулю bluetooth со смартфона, то порядок действий аналогичный: включить bluetooth на смартфоне, обнаружить модуль, подключённый к Arduino, выполнить сопряжение с ним.
Для подключения к bluetooth модулю можно использовать различные программы, которые могут подключаться к COM-порту. Например, такие как HyperTerminal, PuTTY, Tera Term, Termite и другие. Они все бесплатные и свободно распространяются в интернете.
Удобство программы TeraTerm в том, что она автоматически выводит список COM-портов, которые назначены модулю bluetooth вашего компьютера.
Запускаем программу, выбираем подключение Serial, из списка выбираем соответствующий bluetooth COM-порт, нажимаем OK.
В случае ошибки при подключении программа выведет соответствующее оповещение. Если соединение вашего компьютера с bluetooth-модулем произошло успешно, то вы увидите перед собой чёрное поле терминала.
Введите с клавиатуры в это поле число 1 – и светодиод на 13 выводе Arduino загорится, введите 0 – погаснет.
Аналогично можно подключиться к модулю bluetooth со смартфона. Скачайте приложение для работы с bluetooth по терминалу, например Bluetooth Terminal. Подключайтесь к модулю и вводите команды 0 или 1.
Таким образом, мы научились подключаться по bluetooth к Arduino и передавать ему данные.
Источник: https://www.kakprosto.ru/kak-920322-kak-podklyuchit-k-arduino-modul-bluetooth
Подключение bluetooth модуля HC-05 к микроконтроллеру
Где-то около года назад заказал на ali bluetooth module HC-05. На тот момент ещё не знал для чего он мне может понадобиться, но беспроводные технологии манили меня своим таинством.
На момент заказа на рынке была представлена целая линейка bluetooth модулей от HC-03 до HC-09, но некоторые из них могут работать либо в режиме master(HC-04-M), либо в режиме slave (HC-06-S), а HC-05 может работать в обоих режимах, поэтому выбор пал на него.
Давайте кратко рассмотрим его характеристики:
- чип Bluetooth – BC417143 производства CSR company;
- протокол связи – Bluetooth Specification v2.0+EDR;
- радиус действия – до 10 метров, у меня в квартире ловит через 2 бетонные стены;
- совместимость со всеми Bluetooth-адаптерами, которые поддерживают SPP;
- объем flash-памяти (для хранения прошивки и настроек) – 8 Мбит;
- частота радиосигнала – 2.40 .. 2.48 ГГц;
- хост-интерфейс – USB 1.1/2.0 или UART;
- энергопотребление – ток в течение связи составляет 30–40 мА. Среднее значение тока около 25 мА. После установки связи потребляемый ток 8 мА. Режим сна отсутствует.
Обычно модули для DIY продаются в виде двух спаянных плат, меньшая из них — сам bluetooth модуль, большая — переходник, на котором расположен стабилизатор и прочая обвязка, позволяющая использовать модуль для DIY.
Распиновка DIY модуля:
- VCC – питание +5В
- GND – земля
- TXD, RXD – выводы UART интерфейса для общения с МК.
- KEY – вывод для входа в режим AT-команд
- LED – можно подключить светодиод с токоограничивающим резистором, в случае установки соединения между модулями, светодиод загорится.
Сразу после того как модуль пришёл, попробовал его запустить, но попытка не увенчалась успехом. Поэтому было принято решение, снять термоусадку и пропаять его. После пропайки модуль заработал, но после того, как была одета термоусадка снова перестал работать. Думаю читатели уже догадались, что виной тому была термоусадка, одетая на антенну. Проблема была решена удалением термоусадки с антенны.
Для проверки модуля необходимо:
- подать на него питание
- соединить вывод tx с выводом rx переходника usb-uart
- cкачать программку Terminal v1.9b by Bray
- установить соединение с переходником usb-uart на скорости 9600. Эта скорость установлена по умолчанию в bluetooth модуле.
Если программа не видит переходник, то скорее всего ему присвоен номер com порта выше 10, изменить его можно в диспетчере устройств. После этих манипуляций, мы можем принимать и отправлять данные по bluetooth c компа.
Теперь надо сконфигурировать второе устройство для обмена данными, в качестве такого устройства может выступать телефон, ноутбук или планшет. Выбор пал на планшет, с ОС Android, далее опишу как конфигурировать его для обмена данными по bluetooth.
Для нашей задачи качаем с play market приложение bluetooth terminal от Qwerty и устанавливаем его. Включаем bluetooth и ищем среди устройств наш модуль.
Пробуем к нему подключиться, при запросе пароля вводим 1234. После того как мы установили соединение с модулем, символы которые мы будем слать из терминала на планшете будут появляются в терминале на компьютере.
Убедившись, что модуль работает подключил его к Atmega16 и написал программу, которая по приёму определённых символов будет выполнять какие-то действия, например включать светодиод.
#define F_CPU 8000000UL #include #include ISR(USART_RXC_vect) { switch(UDR) { case 'f': //тут можно зажечь светодиод break; case 'r': //а тут погасить break; } } int main(void) { DDRD &= ~(1
Источник: https://hubstub.ru/programming/129-podklyuchenie-bluetooth-modulya-hc-05-k-mikrokontrolleru.html
Как сделать веб-приложение для вашего собственного Bluetooth Low Energy девайса?
Connect Disconnect Send
В div-контейнер будем выводить лог подключения, входящие и исходящие сообщения в следующем виде: Подключение к устройству…
Исходящее сообщение Входящее сообщение
Чтобы не гадать какое сообщение откуда, разделим их по цветам в стилях:styles.css#terminal div { color: gray;
} #terminal div.out { color: red;
} #terminal div.
in { color: blue;
}
Как видите, ничего особенного. Интерфейс готов 🙂
Дальнейшая работа будет происходить в main.js. Получим ссылки на элементы UI, повесим обработчики на клик по кнопкам подключения и отключения и на отправку формы:// Получение ссылок на элементы UI
let connectButton = document.getElementById('connect');
let disconnectButton = document.
getElementById('disconnect');
let terminalContainer = document.getElementById('terminal');
let sendForm = document.getElementById('send-form');
let inputField = document.getElementById('input'); // Подключение к устройству при нажатии на кнопку Connect
connectButton.
addEventListener('click', function() { connect();
}); // Отключение от устройства при нажатии на кнопку Disconnect
disconnectButton.addEventListener('click', function() { disconnect();
}); // Обработка события отправки формы
sendForm.addEventListener('submit', function(event) { event.
preventDefault(); // Предотвратить отправку формы send(inputField.value); // Отправить содержимое текстового поля inputField.value = ''; // Обнулить текстовое поле inputField.
focus(); // Вернуть фокус на текстовое поле
}); // Запустить выбор Bluetooth устройства и подключиться к выбранному
function connect() { //
} // Отключиться от подключенного устройства
function disconnect() { //
} // Отправить данные подключенному устройству
function send(data) { //
}
Полный алгоритм подключения состоит из нескольких этапов:
- Запрос Bluetooth устройства: браузер запускает диалог поиска и выбора ближайшего устройства, пользователь осуществляет выбор, код приложения получает объект.
- Подключение к устройству из кода приложения:
- подключение к серверу профиля общих атрибутов (GATT Server),
- получение нужного сервиса,
- получение нужной характеристики.
- Включение уведомлений об изменении характеристики — необходимо, чтобы получать сообщения от вашего девайса.
Оформим в коде:// Кэш объекта выбранного устройства
let deviceCache = null; // Запустить выбор Bluetooth устройства и подключиться к выбранному
function connect() { return (deviceCache ? Promise.resolve(deviceCache) : requestBluetoothDevice()). then(device => connectDeviceAndCacheCharacteristic(device)).
then(characteristic => startNotifications(characteristic)).
catch(error => log(error));
} // Запрос выбора Bluetooth устройства
function requestBluetoothDevice() { //
} // Подключение к определенному устройству, получение сервиса и характеристики
function connectDeviceAndCacheCharacteristic(device) { //
} // Включение получения уведомлений об изменении характеристики
function startNotifications(characteristic) { //
} // Вывод в терминал
function log(data, type = '') { //
}
Мы реализовали в функции connect() Promise цепочку (цепочку функций, возвращающих Promise объекты), соответствующую этапам подключения.
Также мы ввели переменную deviceCache, в которую в дальнейшем запишем объект выбранного пользователем устройства для того, чтобы знать к чему переподключаться в случае разъединения.
В первой строчке тела функции connect() тернарный оператор немедленно создает выполненный Promise с объектом deviceCache, если тот не равен нулю, или обращается к функции запроса выбора Bluetooth устройства в противном случае. Таким образом, если пользователь уже подключился к устройству, то при последующем нажатии на кнопку «Connect», диалог выбора устройства не появится.
Если происходит ошибка на любом из этапов, мы выводим её в терминал с помощью функции log(), которую также реализуем позднее.
Чтобы запросить выбор Bluetooth устройства, необходимо вызвать функцию navigator.bluetooth.requestDevice() c объектом-конфигурацией в качестве обязательного аргумента, который описывает какие Bluetooth устройства нам интересны.
Можно использовать фильтр по сервисам, по имени, можно принять все устройства, но используемый сервис всё равно необходимо указать, иначе браузер не предоставит доступ к нему.// Запрос выбора Bluetooth устройства
function requestBluetoothDevice() { log('Requesting bluetooth device…'); return navigator.bluetooth.
requestDevice({ filters: [{services: [0xFFE0]}], }). then(device => { log('”' + device.name + '” bluetooth device selected'); deviceCache = device; return deviceCache; });
}
Мы же запрашиваем все устройства, предоставляющие сервис с UUID 0xFFE0, на использование которого конфигурировали BLE модуль.
После выбора устройства пользователем, Promise выполняется с объектом устройства, который мы записываем в вышеупомянутый кэш и возвращаем далее.
// Кэш объекта характеристики
let characteristicCache = null; // Подключение к определенному устройству, получение сервиса и характеристики
function connectDeviceAndCacheCharacteristic(device) { if (device.gatt.connected && characteristicCache) { return Promise.resolve(characteristicCache); } log('Connecting to GATT server…'); return device.gatt.connect().
then(server => { log('GATT server connected, getting service…'); return server.getPrimaryService(0xFFE0); }). then(service => { log('Service found, getting characteristic…'); return service.getCharacteristic(0xFFE1); }).
then(characteristic => { log('Characteristic found'); characteristicCache = characteristic; return characteristicCache; });
}
Выполняем простую Promise цепочку, которая говорит сама за себя.
Переменная characteristicCache — по аналогии с deviceCache — сохраняет полученный объект характеристики, он потребуется для записи в него данных, то есть для отправки сообщения из браузера устройству.
В функциях getPrimaryService() и getCharacteristic() в качестве аргументов используются UUID, на работу с которыми настроен BLE модуль.
// Включение получения уведомлений об изменении характеристики
function startNotifications(characteristic) { log('Starting notifications…'); return characteristic.startNotifications().
then(() => { log('Notifications started'); });
}
Достаточно обратиться к методу startNotifications() объекта характеристики, после чего повесить обработчик на событие изменения характеристики, но об этом позднее.
Реализуем функцию вывода в терминал, чтобы прямо сейчас протестировать подключение к девайсу:// Вывод в терминал
function log(data, type = '') { terminalContainer.
insertAdjacentHTML('beforeend', '' + data + '');
}
С помощью метода insertAdjacentHTML() мы вставляем div с указанным в аргументе type классом в конец div-контейнера терминала — очень просто.
Откройте страницу в браузере, нажмите кнопку «Connect», после чего запустится диалог выбора устройства. Подключитесь к своему девайсу, в терминале появятся сообщения о процессе подключения.
Тут я столкнулся с парой подводных камней, о которых нигде не написано. Вывод сервисных сообщений помог диагностировать и устранить проблемы.
Первый заключается в том, что когда я подключался к устройству с телефона, к которому привязан Mi Band, также работащий по BLE и находящийся в непосредственной близости, подключение устанавливалось крайне редко, а если и устанавливалось, то практически сразу отваливалось. Такое происходило даже в нативных приложениях.
Пробовал отнести Mi Band на расстояние — не помогло. Отвязывать браслет не стал, просто использую другой смартфон. Если у вас возникнут аналогичные проблемы, обратите внимание на устройства, которые параллельно общаются с вашим смартфоном.
Второй камень скорее не камень, а особенность, проявляющаяся обычно при первом подключении: соединение может внезапно потеряться без видимых на то причин, а браузер не обеспечивает его поддержку, именно поэтому функционал переподключения нам необходимо реализовать самостоятельно.
Для отслеживания разъединения, Web Bluetooth предлагает событие gattserverdisconnected, обработчик которого следует повесить на объект устройства. Наиболее логичным местом для этого является функция выбора устройства:// Запрос выбора Bluetooth устройства
function requestBluetoothDevice() { log('Requesting bluetooth device…'); return navigator.bluetooth.
requestDevice({ filters: [{services: [0xFFE0]}], }). then(device => { log('”' + device.name + '” bluetooth device selected'); deviceCache = device; // Добавленная строка deviceCache.addEventListener('gattserverdisconnected', handleDisconnection); return deviceCache; });
} // Обработчик разъединения
function handleDisconnection(event) { let device = event.
target; log('”' + device.name + '” bluetooth device disconnected, trying to reconnect…'); connectDeviceAndCacheCharacteristic(device). then(characteristic => startNotifications(characteristic)).
catch(error => log(error));
}
Теперь, если вы подключитесь к устройству, а затем обесточите его, и Bluetooth соединение потеряется, браузер единоразово попробует подключиться заново:
Перед отключением важно не забыть снять назначенный обработчик с события gattserverdisconnected, иначе браузер просто будет переподключаться:// Отключиться от подключенного устройства
function disconnect() { if (deviceCache) { log('Disconnecting from “' + deviceCache.
name + '” bluetooth device…'); deviceCache.removeEventListener('gattserverdisconnected', handleDisconnection); if (deviceCache.gatt.connected) { deviceCache.gatt.disconnect(); log('”' + deviceCache.
name + '” bluetooth device disconnected'); } else { log('”' + deviceCache.
name + '” bluetooth device is already disconnected'); } } characteristicCache = null; deviceCache = null;
}
Можно не обнулять deviceCache, тогда при последующем нажатии кнопки «Connect» диалог выбора устройства не будет появляться, подключаясь к прошлому устройству вместо этого.
Получение данных от устройства осуществляется асинхронно с помощью механизма уведомлений, которые возникают, когда изменяется значение BLE характеристики. Нам лишь нужно подписаться на соответствующие событие characteristicvaluechanged характеристики. Сделать это следует после включения уведомлений.
Также будет правильно снять обработчик с характеристики при отключении устройства:// Включение получения уведомлений об изменении характеристики
function startNotifications(characteristic) { log('Starting notifications…'); return characteristic.startNotifications(). then(() => { log('Notifications started'); // Добавленная строка characteristic.
addEventListener('characteristicvaluechanged', handleCharacteristicValueChanged); });
} // Отключиться от подключенного устройства
function disconnect() { if (deviceCache) { log('Disconnecting from “' + deviceCache.name + '” bluetooth device…'); deviceCache.
removeEventListener('gattserverdisconnected', handleDisconnection); if (deviceCache.gatt.connected) { deviceCache.gatt.disconnect(); log('”' + deviceCache.
name + '” bluetooth device disconnected'); } else { log('”' + deviceCache.
name + '” bluetooth device is already disconnected'); } } // Добавленное условие if (characteristicCache) { characteristicCache.
removeEventListener('characteristicvaluechanged', handleCharacteristicValueChanged); characteristicCache = null; } deviceCache = null;
} // Получение данных
function handleCharacteristicValueChanged(event) { let value = new TextDecoder().decode(event.target.value); log(value, 'in');
}
event.target.value — это объект DataView, содержащий ArrayBuffer, в котором находится сообщение от вашего девайса. Используя TextDecoder (MDN, in English only), мы перегоняем массив байтов в текст.
Тестирование показывает, что прием сообщений с устройства работает стабильно, с окончанием строки символами CR, LF или без них. Длинные сообщения доходят полностью, но разбиваются кратно 20 байтам.
Возможно, вам не потребуется поддержка сообщений длиной более 20 байт, однако для полноты картины давайте обойдём это ограничение. Идея проста: будем записывать входящие строки в промежуточный буфер до получения символа-разделителя.
При получении символа-разделителя вызовем третью функцию, передав ей данные из буфера, и очистим буфер для последующей записи.
Символом-разделителем будет логично сделать подачу строки (LF,
).
Также может быть нелишним удалить пробельные символы с начала и конца сообщения:
// Промежуточный буфер для входящих данных
let readBuffer = ''; // Получение данных
function handleCharacteristicValueChanged(event) { let value = new TextDecoder().decode(event.target.value); for (let c of value) { if (c === '
') { let data = readBuffer.trim(); readBuffer = ''; if (data) { receive(data); } } else { readBuffer += c; } }
} // Обработка полученных данных
function receive(data) { log(data, 'in');
}
При создании веб-приложения, специфичного для вашего девайса, вы сможете изменить функцию receive() под свои нужды, будучи уверенными в том, что работаете с цельным сообщением от устройства.
Отправка данных девайсу осуществляется путём записи значения в характеристику, а конкретнее вызовом метода writeValue() объекта характеристики с ArrayBuffer в качестве аргумента.
Для преобразования строки в ArrayBuffer проще всего воспользоваться TextEncoder (MDN, in English only):// Отправить данные подключенному устройству
function send(data) { data = String(data); if (!data || !characteristicCache) { return; } writeToCharacteristic(characteristicCache, data); log(data, 'out');
} // Записать значение в характеристику
function writeToCharacteristic(characteristic, data) { characteristic.writeValue(new TextEncoder().encode(data));
}
На всякий случай приводим данные к строковому типу, используя глобальный объект String. В такой реализации также будет действовать ограничение в 20 байт: всё, что выходит за рамки, просто будет обрезано. Поэтому в случае, если сообщение длиннее 20 байт, стоит разбить его на куски и последовательно отправить с некоторой задержкой:// Отправить данные подключенному устройству
function send(data) { data = String(data); if (!data || !characteristicCache) { return; } data += '
'; if (data.length > 20) { let chunks = data.match(/(.|[
]){1,20}/g); writeToCharacteristic(characteristicCache, chunks[0]); for (let i = 1; i < chunks.length; i++) { setTimeout(() => { writeToCharacteristic(characteristicCache, chunks[i]); }, i * 100); } } else { writeToCharacteristic(characteristicCache, data); } log(data, 'out');
}
Чтобы облегчить обработку сообщений на стороне контроллера, добавим в конец отправляемого сообщения символ подачи строки (
).
Далее сообщение разбивается на куски с помощью регулярного выражения, корректно обрабатывающего символы возврата каретки (CR,
) и подачи строки (LF,
), после чего первая часть отправляется сразу, а на отправку других выставляются таймеры с задержкой, кратной 100 миллисекундам.
Работает! Мы получили полнофункциональный двусторонний обмен данными с устройством и на этом с JS всё.
Мы не можем заранее знать в каких условиях окажется ваш девайс, поэтому было бы неплохо иметь возможность работать с созданным веб-приложением без интернета. И здесь нам поможет концепция Progressive Web Apps
Источник: https://habr.com/post/339146/
Arduino UNO + Bluetooth HC-05(06)
К контроллеру необходимо подключить модуль Bluetooth HC-05, HC-06 или совместимый. Смартфон или планшет должен поддерживать Bluetooth.
Примечание: Устройства iOS не поддерживают модули HC-05(06). Вместо них вы можете использовать модуль Bluetooth BLE HM-10.
Войдите в редактор RemoteXY. Установите в поле смартфона одну кнопку. Выделите эту кнопку, затем в правой панели во вкладке «Элемент» выберите свойство «Привязать к выводу» в значение 13(LED).
Шаг 2. Настройте конфигурацию проекта
В правой панели во вкладке «Конфигурация», выберите следующие настройки.
В правой панели во вкладке «Подключение модуля» установите следующие настройки.
Настройки указывают, что модуль HC-05(06) подключается к Arduino через программный последовательный порт SoftwareSerial используя контакты 2 и 3 на скорости 9600. Это стандартная скорость для модулей HC-05(06).
Шаг 3. Сформируйте скетч для Arduino
Нажмите кнопку «Получить исходный код».
В открывшейся странице с исходным кодом скетча загрузите его на свой компьютер (ссылка «Загрузить код») и откройте его в Arduino IDE.
Так же с этой страницы загрузите библиотеку RemoteXY (ссылка «Загрузить библиотеку»).
С правильно установленной библиотекой исходный код скетча должен компилироваться без ошибок.
Подробнее об установке библиотеки RemoteXY для Arduino IDE
Шаг 4. Подключите HC-05(06) к Arduino Uno
Подключите модуль HC-05(06) к Arduino Uno по схеме приведенной ниже. Обратите внимание, что контакты RX-TX соединяются перекрестием.
Шаг 5. Загрузите скетч в Arduino
Скетч загружается в Arduino обычным способом.
Шаг 6. Подключитесь с мобильного приложения
Установите мобильное приложение на ваш смартфон/планшет.
В приложении нажмите кнопку нового подключения «+» в верхней панели. В открывшемся окне выберите подключение «Bluetooth». Если вы используете модуль HM-10, тогда выберите подключение «Bluetooth BLE».
В приложении включите Bluetooth и нажмите кнопку обновления списка доступных устройств. Ваше устройство может иметь одно из следующих имен: «HC-05», «HC-06», «INVOR». Выберите его. Откроется окно для ввода пароля спаривания Bluetooth устройств. Пароль по умолчанию для HC-05(06) может быть 1234 или 0000. Введите пароль, начнется подключение.
Примечание: В приложении для iOS работу Bluetooth необходимо предварительно включить, используя системные настройки операционной системы.
Если нет подключения то вы скорее всего получите ошибку:
Соединение установлено, но устройство не отвечает: Time out error: no response
Это означает, что либо команды запроса не доходят до контроллера, либо ответы контроллера не возвращаются в смартфон/планшет.
Если вы получили именно эту ошибку, проверьте себя по списку, переходя к следующему пункту только проверив предыдущий:
- ваша Arduino не включена;
- нужный скетч не был загружен в Arduino;
- не обновлена библиотека RemoteXY, используется старая версия библиотеки;
- на модуль Bluetooth не подано питание, возможно перепутаны контакты питания;
- контакты RX и TX модуля Bluetooth или один из них не подключены к контроллеру, плохой контакт;
- контакты RX и TX модуля Bluetooth подключены не верно, возможно они перепутаны местами, проверьте по схеме (шаг 4);
- неверно указаны настройки конфигурации или настройки подключения (шаг 2) перед формированием исходного кода;
- скорость передачи данных, на которую настроен модуль HC-05(06), не соответствует выбранной при настройке конфигурации (по умолчанию 9600);
- модуль Bluetooth неисправен.
Источник: http://remotexy.com/ru/help/start/arduino-hc05/