Hc 05 bluetooth подключение
Trema-модуль Bluetooth HC-05 - это модуль беспроводной связи позволяющий передавать и принимать данные по радиоканалу на разрешённом ISM (Industry, Science and Medicine) диапазоне частот, от 2.4 ГГц до 2.5 ГГц, предназначенном для использования в индустриальных, научных и медицинских целях, используя метод AFH (Adaptive Frequency Hopping Feature) - адаптивной скачкообразной перестройки несущей частоты.
Видео:
Спецификация:
Все модули линейки "Trema" выполнены в одном формате
Подключение:
Trema Bluetooth модуль HC-05 подключается к Arduino по шине UART (можно использовать как аппаратную так и программную шину).
- Вывод модуля TX подключается к аппаратному (фиксированному) или программному (назначенному) выводу RX Arduino. Это линия шины UART для передачи данных от модуля к Arduino.
- Вывод модуля RX подключается к аппаратному (фиксированному) или программному (назначенному) выводу TX Arduino. Это линия шины UART для передачи данных в модуль от Arduino.
- Вывод модуля K подключается к любому выводу Arduino номер которого указывается в скетче. Это линия перевода модуля в режим AT-команд. Модуль в обычном режиме будет воспринимать AT-команды, только после того как на этот вывод кратковременно подать высокий уровень. Модуль перейдёт в режим AT-команд (на скорости 38400 бит/с и не будет соединяться с другими модулями) если на нём будет установлен высокий логический уровень при подаче питания или перезагрузке.
Модуль удобно подключать 3 способами, в зависимости от ситуации:
Способ - 1 : Используя проводной шлейф и Piranha UNO
Используя провода «Папа — Мама», подключаем напрямую к контроллеру Piranha UNO.
Способ - 2 : Используя Trema Set Shield
Модуль можно подключить к UART входу Trema Set Shield.
Способ - 3 : Используя проводной шлейф и Shield
Используя 2-х и 3-х проводные шлейфы, к Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд.
Trema Bluetooth модуль HC-05 можно подключить и непосредственно к компьютеру (через адаптер USB-UART), передавая AT-команды из программ терминалов, о том как это сделать описано в разделе Wiki AT-команды Bluetooth .
Питание:
Подробнее о модуле:
В ISM диапазоне частот работают и радио модули nRF24L01+, но в отличии от этих модулей, которые работают на определённой частоте диапазона, Trema-модуль Bluetooth HC-05 используют метод AFH (Adaptive Frequency Hopping Feature) адаптивной скачкообразной перестройки несущей частоты (он меняет свою частоту 1600 раз в секунду). Несущая частота меняется псевдослучайным образом и заранее известна только паре «ведущий - ведомый», что обеспечивает не только устойчивость к помехам (занят канал? не беда, перейдём на другой) но и сохранение конфиденциальности передаваемых данных.
Преимуществом Bluetooth модулей перед другими модулями беспроводной передачи данных заключается в простоте работы (Вам не нужно знать протоколы, работать с регистрами, отслеживать сигналы и т.д.) и широкой распространённости данного типа передачи данных (Вы можете управлять Вашими устройствами, или получать их показания, практически с любого телефона, планшета, ноутбука).
Модуль не требует подключения антенны, т.к. она встроена (присутствует на ПП модуля).
В роли ведомого, Trema Bluetooth модуль HC-05 поддерживает метод автоматического сопряжения (создания пары) с другими Bluetooth устройствами выступающими в роли ведущих и инициировавших сопряжение.
Trema Bluetooth модуль HC-05 поддерживает автоматическое переподключение к последнему устройству (если информация о сопряжении с ним не была стёрта пользователем из списка пар). Если Вы установили подключение к другому Bluetooth устройству и связь с ним пропала (отключилось питание, увеличилось расстояние и т.д.), то после устранения причины пропадания связи, устройства вновь будут готовы передавать/принимать данные, без Вашего вмешательства.
Trema Bluetooth модуль HC-05, в отличие от Bluetooth модулей HC-06, может работать не только в роли ведомого (slave), ожидая подключение, но и в роли ведущего (Master), инициируя поиск (обнаружение), сопряжение и подключение к другим Bluetooth модулям находящимся в радиусе действия. Модуль способен принимать и отправлять данные как в роли ведущего (master), так и в роли ведомого (slave).
Используя Trema Bluetooth модули HC-05 можно создавать связь между двумя Arduino, или между Arduino и другими устройствами, как ведущими (телефон, планшет, компьютер, . ), так и ведомыми (гарнитуры, клавиатуры, мышки, . ).
Специально для Trema Bluetooth модуль HC-05 нами разработана библиотека iarduino_Bluetooth_HC05 которая значительно упрощает процесс поиска любых Bluetooth устройств, создания ролей (master/slave) и сопряжения. Поиск и подключение к другим модулям Bluetooth осуществляется по их именам а не адресам. При использовании библиотеки для связи двух Trema Bluetooth модулей HC-05 можно передавать строки, значения и массивы любых типов, при этом библиотека осуществляет проверку доставки данных используя циклически избыточный код, так что Trema Bluetooth модуль HC-05 передавший данные получает подтверждение приёма, а Trema Bluetooth модуль HC-05 получивший данные может оперировать информацией о количестве элементов массива и его размере.
Подробнее про установку библиотеки читайте в нашей инструкции..
Примеры:
Trema Bluetooth модуль в роли ведомого (Slave) принимает данные:
Связь осуществляется между двумя Trema Bluetooth модулями HC-05 использующими библиотеку iarduino_Bluetooth_HC05. Скетч модуля исполняющего роль master приведён в следующем примере.
Инициализация модуля hc05.begin(); и создание ведомой роли hc05.createSlave(); может занять несколько секунд.
В этом примере модуль подключается через программный UART используя библиотеку SoftwareSerial, а при инициализации работы с модулем hc05.begin() указывается объект softSerial. Но модуль можно подключать и к аппаратному UART, тогда при инициализации работы с модулем hc05.begin() нужно указать Serial или Serial1, Serial2, Serial3, см. пример подключения к Arduino Mega.
При использовании Trema Bluetooth модуля HC-05 в качестве ведомого можно однократно вызвать функцию createSlave() с указанием имени и pin кода, после чего навсегда исключить эту функцию из кода. Тогда, при подаче питания, Trema Bluetooth модуля HC-05 будет стартовать в режиме ведомого и соединяться с первым ведущим который правильно укажет имя и pin ведомого.
Функция createSlave() объекта hc05 позволяет создать ведомую роль Trema Bluetooth модулю HC-05 при подключении к любым Bluetooth модулям, но функции available() и read() объекта hc05 работают только при организации связи между двумя Trema Bluetooth модулями HC-05 использующими библиотеку iarduino_Bluetooth_HC05! Если данные принимаются от другого Bluetooth модуля, то их нужно читать посимвольно из UART, тогда код loop будет выглядеть так:
Строки кода до функции loop остаются без изменений. Все данные отправленные внешним Bluetooth модулем принимаются как строки.
Trema Bluetooth модуль в роли ведущего (Master) передаёт данные:
Связь осуществляется между двумя Trema Bluetooth модулями HC-05 использующими библиотеку iarduino_Bluetooth_HC05. Скетч модуля исполняющего роль slave приведён в предыдущем примере.
Инициализация модуля hc05.begin(); и создание ведущей роли с подключением к ведомому hc05.createMaster(); может занять до минуты.
В этом примере модуль подключается через программный UART используя библиотеку SoftwareSerial, а при инициализации работы с модулем hc05.begin() указывается объект softSerial. Но модуль можно подключать и к аппаратному UART, тогда при инициализации работы с модулем hc05.begin() нужно указать Serial или Serial1, Serial2, Serial3, см. пример подключения к Arduino Mega.
Строки кода до функции loop остаются без изменений. Все данные передаются символами (байтами) или строками. По этому элементы массива отправляются по отдельности.
Скетч поиска любых Bluetooth устройств в радиусе действия:
Инициализация модуля hc05.begin(); может занять несколько секунд.
В этом примере модуль подключается через программный UART используя библиотеку SoftwareSerial, а при инициализации работы с модулем hc05.begin() указывается объект softSerial. Но модуль можно подключать и к аппаратному UART, тогда при инициализации работы с модулем hc05.begin() нужно указать Serial или Serial1, Serial2, Serial3, см. пример подключения к Arduino Mega.
Скетч поиска любых Bluetooth устройств при подключении модуля к аппаратной шине UART1 платы Arduino Mega:
Инициализация модуля hc05.begin(); может занять несколько секунд.
В этом примере модуль подключается к Arduino MEGA через аппаратный UART1, а при инициализации работы с модулем hc05.begin() указывается объект Serial1. Подключение дополнительных библиотек и инициализация шины UART1 не нужна Serial1.begin(38400); . У платы Arduino MEGA имеется 4 аппаратных шины UART с которыми работают классы: Serial, Serial1, Serial2, Serial3, любой из них можно использовать при инициализации модуля для работы с ним.
Описание основных функций библиотеки:
Подключение библиотеки:
Функция begin();
- Назначение: Инициализация работы с модулем по шине UART.
- Синтаксис: begin( ОБЪЕКТ_UART );
- Параметры:
- ОБЪЕКТ - класс или объект который используется для работы с шиной UART к которой подключён модуль.
- Функция вызывается 1 раз в коде setup.
- Используемый ОБЪЕКТ_UART не нуждается в предварительной инициализации ( Serial.begin( СКОРОСТЬ ); )
- Можно указать объект программной шины UART или класс Serial, Serial1, Serial2, Serial3 и т.д. в зависимости от используемой платы Arduino. Если указать класс Serial, то при загрузке скетча потребуется отключать модуль от Arduino, а все выводы данных в монитор последовательного порта будут восприниматься модулем как команды.
- Пример:
Функция createSlave();
- Назначение: Создания ведомого Bluetooth устройства (Slave) ожидающего подключение.
- Синтаксис: createSlave( ИМЯ , PIN-КОД );
- Параметры:
- ИМЯ - строка содержащая имя назначаемое данному Bluetooth модулю.
- PIN-КОД - строка содержащая код доступа к данному Bluetooth модулю.
- ИМЯ не должно превышать 32 символа.
- PIN-КОД не должен превышать 16 символов.
- Ранее установленные соединения (если они были) будут разорваны.
- Если функция вернула true, то её дальнейший вызов не обязателен (даже после отключения питания).
Модуль будет соединяться с любыми ведущими (Master) Bluetooth устройствами, которые правильно введут Имя и PIN.
Функция createMaster();
- Назначение: Создания ведущего Bluetooth устройства (Master) с подключением к ведомому устройству.
- Синтаксис: createMaster( ИМЯ , PIN-КОД );
- Параметры:
- ИМЯ - строка содержащая имя ведомого Bluetooth устройства к которому требуется подключиться.
- PIN-КОД - строка содержащая код доступа ведомого Bluetooth устройства к которому требуется подключиться.
- ИМЯ не должно превышать 32 символа.
- PIN-КОД не должен превышать 16 символов.
- Ранее установленные соединения (если они были) будут разорваны.
- Ведомое устройство (Slave) должно находиться в радиусе действия и ожидать подключения.
- Если функция вернула true, то её дальнейший вызов не обязателен (даже после отключения питания).
Модуль будет автоматически соединяться с указанным ведомым (Slave) Bluetooth устройством, пока не будет вызвана функция библиотеки разрывающая данное соединение, как на ведущем (Master), так и на ведомом (Slave) Bluetooth устройстве.
Функция find();
- Назначение: Поиск любых устройств Bluetooth в радиусе действия.
- Синтаксис: find( ВРЕМЯ , [ ФЛАГ ] );
- Параметры:
- ВРЕМЯ - число от 1 до 48 определяющее максимальное время поиска Bluetooth устройств.
- ФЛАГ - значение (true или false) разрешающее поиск по уровню сигнала.
- Время поиска рассчитывается умножением числа ВРЕМЯ на 1,28 секунд.
- Необязательный параметр ФЛАГ по умолчанию сброшен (поиск ведётся в стандартном режиме).
- Функция прекращает поиск при обнаружении 5 устройств или по достижении указанного времени.
- Ранее установленные соединения (если они были) будут разорваны.
- Функция только находит Bluetooth устройства, но не сопрягает и не соединяет модуль с ними.
- Имена и адреса найденных устройств доступны в строковых массивах findName и findAddr.
Функция end();
- Назначение: Разрыв подключения к внешнему Bluetooth устройству.
- Синтаксис: end();
- Параметры: Нет.
- Возвращаемые значения: Нет.
- Примечание:
- Функция работает вне зависимости от роли модуля и того было подключение или нет.
- После выполнения функции, роль модуля сохраняется.
- После выполнения функции, автоматическое переподключение к последнему Bluetooth устройству будет недоступно.
Функция checkConnect();
- Назначение: Проверка подключения к внешнему Bluetooth устройству.
- Синтаксис: checkConnect();
- Параметры: Нет.
- Возвращаемые значения: bool - наличие соединения (true или false).
- Примечание: Функция работает вне зависимости от роли модуля.
- Пример:
Функция send();
Функция available();
- Назначение: Проверка наличия принятых данных от внешнего Trema Bluetooth модуля, так же использующего эту библиотеку.
- Синтаксис: available( [ &ЭЛЕМЕНТЫ [ ,& БАЙТЫ ] );
- Параметры:
- ЭЛЕМЕНТЫ - необязательная ссылка на переменную в которую вернётся количество элементов в принятом массиве. Если принята переменная, а не массив, то вернётся 0.
- БАЙТЫ - необязательная ссылка на переменную в которую вернётся количество байт в принятом массиве или переменной.
- Функция работает только при организации связи между двумя Trema Bluetooth модулями использующими эту библиотеку.
- Если нет принятых данных, то функция вернёт false, а переменные на которые указывают ссылки останутся без изменений.
- Если есть принятые данные доступные для чтения, то функция вернет true, а сами данные можно прочитать функцией read().
- Если данные приняты с ошибкой (не совпал CRC16) то функция поведёт себя так, как будто нет принятых данных.
- Принимать данные модуль может вне зависимости от установленной роли (как Master, так и Slave).
- Функцию нельзя использовать для проверки получения данных от Bluetooth модулей не использующих эту библиотеку, так как в их данных не будет присутствовать CRC16.
Функция read();
- Назначение: Чтение данных пришедших от внешнего Trema Bluetooth модуля, так же использующего эту библиотеку.
- Синтаксис: read( ПЕРЕМЕННАЯ );
- Параметры:
- ПЕРЕМЕННАЯ - в которую будут записаны принятые данные (строки, числа, массивы).
- Функция работает только при организации связи между двумя Trema Bluetooth модулями использующими эту библиотеку.
- До приёма данных необходимо проверить их наличие функцией available().
- Тип переменной в которую читаются данные должен совпадать с типом передаваемых данных.
Чтение произойдёт даже если типы не совпадают, но принятые данные могут отличаться от переданных. - Принимать данные модуль может вне зависимости от установленной роли (как Master, так и Slave).
- Если после функции available() и до функции read() выполнить любые другие функции библиотеки, то принятые данные будут потеряны.
- Функцию нельзя использовать для получения данных от Bluetooth модулей не использующих эту библиотеку, так как перед данной функцией требуется обратиться к функции available().
- Пример:
Функция runAT();
- Назначение: Выполнение AT-команд и вывод результата.
- Синтаксис: runAT( КОМАНДА [ , ВРЕМЯ [ , ВЫХОД ]] );
- Параметры:
- КОМАНДА - строка содержащая AT-команду которую требуется выполнить.
- ВРЕМЯ - положительное целое число миллисекунд которое отводится на выполнение команды (по умолчанию 500 мс).
- ВЫХОД - флаг (true или false) разрешающий досрочный выход при успешном выполнении команды (по умолчанию true).
- Данная функция позволяет выполнять операции с модулем которые не вошли в функционал библиотеки.
- Результат выполнения AT-команды можно анализировать как по строке ответа модуля, так и по значению переменной flgResult.
- Пример:
Переменная flgResult:
Содержит результат выполнения последней AT-команды (тип int8_t), -1: Error(*), 0: Неизвестно, 1: OK.
Массив findName:
Содержит пять строк с именами (или адресами) найденных Bluetooth устройств (тип char*).
Массив findAddr:
Содержит пять строк с адресами найденных Bluetooth устройств (тип char*).
Если требуется принять или передать данные Bluetooth устройству которое не является Trema-модулем, или не использует данную библиотеку, то соединение с этим устройством выполняется функциями createMaster() или createSlave(), а передача и приём данных осуществляется через стандартные функции объекта UART через который осуществляется связь с модулем, см. дополнение к первым двум примерам.
Сегодня мы познакомимся с недорогим модулем для беспроводной пердачи данных по Bluetooth.
Данные модули позволяют передавать данные без проводов, не задумываясь о том, как вообще устроен протокол Bluetooth, о его полях и прочих тонкостях. Эти модули при правильных настройках обеспечивают передачу данных таким образом, что программист, сочиняющий код, пишет алгоритм так, будто он работает с проводным интерфейсом UART. Поэтому писать код становится максимально удобно и поэтому данная линейка модулей снискала такую огромную популярность среди начинающих программистов и не только.
Вот и мы с вами давайте тоже не будем от них отставать и немного отдохнём от сетевых протоколов и изучим такой модуль. Также было очень много просьб личного характера, а также и в публичных чатах, чтобы я не обошёл стороной такие модули и написал какие-либо уроки с их использованием.
Модули имеют следующие основные характеристики:
Также наряду с данными характеристиками стоит отметить то, что модуль имеет на борту очень много ножек, что позволяет использовать его в более широком спкетре. Давайте посмотрим схему выводов модуля
Мы видим зедесь ножки GPIO, SPI, USB, PCM.
Правда мы пока будем работать только с интерфейсом USART, с помощью которого мы будем не только передавать какие-то полезные данные, а также и настраивать наш модуль.
Мы так поступим во-первых потому, что модули у нас будут одного типа (у меня их аж 4 штуки!), в которых модуль HC-05 напаян ещё на одну плату, на которой наружу разведены только 6 контактов. Вот такие вот они все у меня приблизительно (вид сверху и вид снизу)
Снизу платы нанесено назначение ножек, с ними мы разберёмся, когда будем подключать модуль.
Во-вторых, мы не будем работать с остальными многочисленными контактами потому, что не каждая прошивка этим позволяет заниматься.
Вообще, выбор пал именно на HC-05 ещё потому, что данный модуль прекрасно настраивается для работы как ведущего, так и ведомого устройства.
Настраивается для дальнейшей работы с данными модуль с помощью AT-команд. Мы, я думаю, все в той или иной мере знакомы, что это за команды такие, мы с ними немного знакомились, когда работали с модулем Wi-Fi. Конечно, данные команды у всех устройств разные и поэтому я приложу внизу страницы документ с полным перечнем команд. Также в интернете немудрено найти ресурсы, где описание данных команд переведено на русский язык, и даже есть некоторые примеры их использования. Мы же не будем здесь заниматься полным переводом команд, мы будем изучать только те команды, которыми нам прийдётся воспользоваться. Пока их перечень будет не столь широк, но впоследствии мы к данным модулям ещё вернёмся, надеюсь, и не раз, и тогда мы уже расширим свой кругозор в знании данного модуля. А пока же мы проведём только краткий экскурс по модулю. Конечно, мы попробуем его и в работе, не без этого.
А пока давайте подключим наш модуль к переходнику TTL-USB, который в свою очередь мы подключим к ПК.
Соединим мы по следующей схеме
Переходник TTL-USB Модуль HC-05
VCC VCC
GND GND
TXD RXD
RXD TXD
На практике это будет выглядеть примерно вот так
Подключим переходник к компьютеру, как работать с переходниками такого плана, рассказывать не буду, мы и так с ними постоянно работаем. Запустим терминальную программу, я воспользуюсь программой CoolTerm, так как у неё более гибкие настройки для пердачи данных с клавиатуры, а нам для ввода команд необходимо, чтобы каждая строка при передаче заканчивалась кодом перевода строки и возврата каретки.
Зайдём в настройки программы и настроим сначала порт
Данная скорость 38400 была выбрана потому, что модуль в режиме приёма AT-команд работает именно на такой скорости.
Теперь слева выберем пункт Receive и переключим там одну кнопку, а другую включим
Первая кнопка для окончания переданных команд символами перевода строки и возврата каретки, а вторая для того, чтобы мы свои введённые команды видели также после ввода в терминальном окне приёма.
Сохраним настройки и попробуем соединиться. Если всё удачно, то разъединяеся, так как сейчас у нас модуль находится в режиме передачи данных, и, если он ещё не настраивался, то скорей всего, мы даже не знаем его адреса, его настроек. О нахождении модуля в данном режиме свидетельствует быстрые мигания голубого светодиода Поэтому нам надо как-то перевести модуль в состояние передачи AT-команд.
Для этого мы пока отсоединим переходник от USB-порта и подклюим провод на ножку модуля HC-05 KEY. У кого-то она может иметь другое название, но, думаю, не перепутаете. Провод подключим вот такой и вот таким образом
Соединим данный провод с плюсом питания (с ножкой VCC)
И, не отпуская контакта, соединим перходник с портом USB компьютера и через некоторое время (через секунду или две) разъединим наш контакт KEY с контактом VCC, убрав провод. Модуль должен будет перейти в режим приёма AT-команд, о чём будет свидетельствовать очень медленная скорость мигания светодиода.
Модуль ответил, значит всё правильно.
- Device type: 0
- Inquire code: 0x009e8b33
- Module work mode: Slave Mode
- Connection mode: Connect to the Bluetooth device specified
- Serial parameter: Baud rate: 38400 bits/s; Stop bit: 1 bit; Parity bit: None.
- Passkey: “1234”
- Device name: “H-C-2010-06-01”
Проверим теперь некоторые параметры нашего модуля.
Если прошивка не ниже данной версии, то мы можем быть уверены, что данный модуль с такой прошивкой способен работать в режиме ведущего устройства (Мастера).
По данному адресу мы и будем определять наше устройство на ведущем устройстве. В качестве ведущего устройства мы возьмём самый обыкновенный смартфон, но это чуть позже. Надо ещё как следует наиграться с командами.
Проверим, что имя изменилось, только не забываем про высокий уровень на ножке KEY
Имя прекрасно применено.
Аналогичным образом, как и имя, можно поменять и пароль.
Эти настройки означают: скорость 38400 кбпс, 1 стоповый бит и отсутствие контроля чётности.
В данной таблице находятся возможные варианты настроек USART
Только данные настройки вступят в силу после перезагрузки модуля и будут актуальны только для режима передачи данных, для режима передачи AT-команд в модуль останутся настройки прежние со скоростью 38400.
Настроим порт в терминальной программе на данную скорость и соединимся с ним
Попробуем ввести команду, на что модуль наш не прореагирует, так как режим не тот
Но не будем отчаиваться. Оказывается, чтобы отправлять команды модулю, необязательно переводить его в этот режим. Можно включить поддержку передачи AT-команд в режиме передачи данных. На короткое время (достаточно менее секунды) коснёмся проводом, который подключен к контакту KEY плюсовой шины модуля и модуль перейдёт в режим поддержки AT-команд. Правда, по характеру мигания светодиода мы это не определим, он будет мигать также быстро. Также в режиме поддержки команд мы с нами не сможет соединиться ведущее устройство. Но тем не менее, нам не потребуется для каких-то настроек постоянно вынимать провод из разъёма USB и перенастраивать порт в терминальной программе. Это уже хорошо. Сделаем данное действие и убедимся в том, что модуль также будет принимать команды, как и в режиме приёма команд
Отлично! Мы уже кое-что умеем. В принципе, мы настроили модуль для передачи данных в режиме ведущего устройства.
Теперь смартфон, который у нас сегодня выступит в роли ведущего устройства. Подойдёт любой с андроидом, лишь бы встала какая-нибудь терминальная программа под Bluetooth. Я установил вот такую. Мне она показалась удобной
Во-первых, она бесплатная, не требует создания подключения заранее, а также имеет несколько кнопок с заранее сохранёнными нами строками.
Скачаем и установим программу и запустим её. Нажмём кнопку SCAN и наш модуль должен будет отобразиться в списке найденных устройств
Устройство появится в списке спаренных устройств
Также наши устройства создадут между собой соединение, о чём нам укажет намного медленнее мигающий светодиод на модуле. Причём мигать он будет двойными короткими вспышками.
Выберем наше устройство и попадём в диалог терминального обмена строками
Наш текст переместится в поле чата
Также если всё нормально со связью, мы этот же текст увидим в терминальной программе на ПК
Теперь попробуем, наоборот, послать строку из терминальной программы ПК в терминальную программу смартфона
Посмотрим, пришла ли наша команда
То есть связь у нас работает.
Bluetooth — один из самых распространённых протоколов беспроводной связи на малом расстоянии для персональных электронных устройств. С его помощью работают различные устройства ввода и управления, аудиоустройства.
На фоне остальных протоколов Bluetooth выделяется прежде всего помехоустойчивостью и простотой. От не менее распространённого Wi-Fi Bluetooth отличается в первую очередь низким энергопотреблением, что делает его доступным для автономных устройств. Благодаря этому BT получил повсеместное распространение.
Оба модуля основаны на одинаковом чипе и поддерживают BT версии 2.0. Их максимальная скорость работы – 3 Мегабита в секунду.
Небольшой обзор модулей HC-05 и HC-06
Чаще всего HC-05 и HC-06 представляют собой две спаянные платы. Верхняя – заводская плата с микросхемой BC417. Нижняя – специальная плата для самодельных устройств, содержащая самые нужные ножки GPIO с шагом 2.54 мм, стабилизатор напряжения и кнопку сброса. На фотографии ниже плата с BC417:
А это — модули HC-05 и HC-06 вместе с подложкой:
Также встречаются немного другие версии модулей. Вместо вывода EN на них выведен KEY.
Распиновка модулей
- EN — управление питанием;
- VCC — питание от 3,6 до 6 В;
- GND — земля;
- RX, TX — интерфейс UART;
- STATE — индикация работы;
- KEY — активация режима управления с помощью AT-команд.
Настройка модулей производится при помощи AT-команд. Но пин KEY есть не на всех модулях. И что с этим делать?
Пин KEY конечно же присутствует на малой плате с большим числом контактов, но не разведён на большой. Причины такого странного решения китайцев неизвестны.
Этот контакт находится здесь:
Подключение HC-05 и HC-06 к Arduino
Подключение к Arduino выполняется следующими контактами:
- GND – GND;
- VCC – +5V;
- TXD – 10;
- RXD – 11;
- KEY при обычной работе модуля не используется. Для перехода в режим AT-команд его надо соединить с +3.3V.
TXD и RXD соединены с пинами 10 и 11, потому, что аппаратный UART будет использоваться для связи с компьютером.
Согласование логических уровней
Bluetooth-модули работают с логическими уровнями 3.3 В, и использование пятивольтовой логики может вывести их из строя. Но чаще всего на плате имеется всё необходимое для согласования уровней.
Бывают ситуации, в которых между Arduino TXD — Bluetooth RXD необходимо согласование напряжения. Использование делителя – гарантия надёжной работы.
Справа приведена схема простейшего делителя:
Скетч для подключения к Arduino
Для настройки модулей можно использовать USB-UART конвертер, если вы воспользуетесь им – следующий пункт можно пропустить. Для начала нам потребуется прошить Arduino.
Скетч просто отправляет данные, полученные с компьютера, на настраиваемый модуль.
Bluetooth в Arduino проектах
Нередко в проектах возникает необходимость дистанционного управления или передачи данных с телефона или другого устройства. Одним из самых популярных и удобных способов является обмен данных через Bluetooth. Для связи платы Ардуино и компьютера используется интерфейс UART (Serial). Так как любая плата Ардуино имеет хотя бы 1 последовательный порт UART, для подключения Bluetooth модуля не требуются специализированные библиотеки и схемы.
Самыми популярными модулями являются устройства на основе чипа BC417. Эта серия называется HC. Модули HC-03 и HC-05 могут быть и сервером соединения, и клиентом, они обладают широким набором АТ команд.
Для подключения к ПК потребуются модуль Bluetooth, плата Ардуино, соединительные провода и компьютер. Скетч для управления платой Ардуино через смартфон и компьютер будет одинаковым, так как в обоих случаях данные в микроконтроллер буду поступать по протоколу UART. Схема подключения Bluetooth-модуля к плате представлена на рисунке. Пин RX на ардуино подключается к TDX, TX – к RDX, GND – к GND, 5V – к VCC.
При загрузке скетча нужно отключить Bluetooth-модуль, иначе будет появляться ошибка доступа к Ардуино. Также нужно установить на смартфон или планшет, поддерживающий ОС Android, приложение для отправки данных на модуль. После установки приложения нужно загрузить скетч и подключить модуль к плате Ардуино. Пример кода мигания светодиода:
Теперь нужно настроить соединение телефона и модуля. Для установки соединения нужно зайти в настройки телефона и включить Bluetooth. Как только устройство будет найдено, нужно ввести пароль – обычно это «1234» или «0000». После этого нужно зайти в приложение, нажать на кнопку «подключить Bluetooth» и выбрать нужное устройство. При успешном сопряжении на модуле светодиод начнет мигать медленнее, примерно 1 раз в 2 секунды.
В скетче светодиод включается и выключается при получении цифр «1» и «0». Кроме цифр также можно использовать буквы латинского алфавита с учетом регистра.
Аналогичным образом можно подключаться к модулю при помощи компьютера. Для этого существуют различные программы, которые подключатся к COM-порту. При запуске программы запрашивают номер порта, скорость и тип подключения. При успешном подключении на экране появится поле терминала, в которое нужно ввести с клавиатуры цифры/буквы, включающие светодиод.
Описание модуля Bluetooth HC 06
Все существующие типы модулей Bluetooth имеют свои особенности, но по функциям и действию они похожи. Одним из видов модулей является Bluetooth HC 06. Со стороны Ардуино модуль выглядит как обычный последовательный интерфейс, поэтому можно сразу наладить взаимодействие с устройством на компьютере.
Основные характеристики модуля:
- Питание 3,3В – 6 В;
- Максимальное входное напряжение 5 В;
- Максимальный ток 45 мА;
- Скорость передачи данных 1200–1382400 бод;
- Рабочие частоты 2,40 ГГц – 2,48ГГц;
- Поддержка спецификации bluetooth версии 2.1;
- Малое потребление энергии;
- Высокий уровень защиты данных;
- Дальность связи 30 м;
- Для подключения к смартфону используются следующие данные – пароль «1234», скорость передачи данных 9600, имя модуля HС-06.
Модуль имеет следующие контакты:
Модуль HC-06 используется только в режиме slave, то есть он не может самостоятельно подключаться к другим устройствам Bluetooth. Все настройки для подключения «пароль, скорость передачи данных» можно изменить при помощи АТ-команд.
В комплектацию модуля не входят соединительные провода.
Сравнение модулей Bluetooth HC 05 и HC 06
Модули HC 05 и HC 06 являются наиболее используемыми, их чаще остальных можно найти в продаже. Принцип действия этих модулей схож, оба модуля основаны на одинаковом чипе, но есть и важные отличия. В первую очередь, модуль HC 05 может работать в двух режимах работы – и в качестве ведущего (master), и в качестве ведомого (slave).
Оба модуля представляют собой две спаянные платы. Одна из них – заводская с микросхемой, другая нужна для самодельных устройств, она оснащена ножками GPIO со стандартным шагом 2,54 мм и стабилизатором напряжения.
Модуль HC-05 стоит несколько дороже, но он имеет большее количество полезных рабочих функций.
Распиновка модуля HC-05:
- EN – управление питанием;
- Питание VCC;
- GND;
- RX, TX;
- STATE – индикация;
- KEY – активирует режим управления при помощи АТ-команд. При KEY=0 – передача данных, при KEY=1 – АТ-команды.
Скорость передачи АТ команд по умолчанию для HC-05 равна 38400, для HC-06 – 9600. Важным моментом является то, что в конце АТ команд для HC-05 должны быть символы CRLF.
Основные характеристики HC-05:
- Рабочие частоты 2,4 – 2,48 ГГц;
- Мощность передачи 0,25 – 2,5мВт;
- Дальность 10 м;
- Максимальная скорость обмена данными 115200 бод;
- Питание 3,3В;
- Ток 30-40 мА;
- Рабочие температуры от -25С до 75С.
Подключение обоих модулей к плате Ардуино одинаково.
Вариант подключение модуля с использованием делителя.Представлен вариант для Arduino Nano, но он подойдет и к плате Uno.
Заключение
Подключение Bluetooth к вашему Arduino-проекту может существенно увеличить ваши возможности по взаимодействию с другими устройствами. Вы сможете контролировать состояния датчиков и изменять параметры системы без перезагрузки контроллера. И. конечно же, вы сможете без проблем создать роботы и машинки на ардуино, управляемые через bluetooth со смартфона. Будем надеяться, что вы сможете сделать свой первый проект после прочтения этой статьи.
Читайте также: