Avr как работает bluetooth

Обновлено: 06.07.2024

Сегодня мы познакомимся с недорогим модулем для беспроводной пердачи данных по Bluetooth.

Данные модули позволяют передавать данные без проводов, не задумываясь о том, как вообще устроен протокол Bluetooth, о его полях и прочих тонкостях. Эти модули при правильных настройках обеспечивают передачу данных таким образом, что программист, сочиняющий код, пишет алгоритм так, будто он работает с проводным интерфейсом UART. Поэтому писать код становится максимально удобно и поэтому данная линейка модулей снискала такую огромную популярность среди начинающих программистов и не только.

Вот и мы с вами давайте тоже не будем от них отставать и немного отдохнём от сетевых протоколов и изучим такой модуль. Также было очень много просьб личного характера, а также и в публичных чатах, чтобы я не обошёл стороной такие модули и написал какие-либо уроки с их использованием.

Модули имеют следующие основные характеристики:

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

Image00

Мы видим зедесь ножки 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

На практике это будет выглядеть примерно вот так

Image03

Подключим переходник к компьютеру, как работать с переходниками такого плана, рассказывать не буду, мы и так с ними постоянно работаем. Запустим терминальную программу, я воспользуюсь программой CoolTerm, так как у неё более гибкие настройки для пердачи данных с клавиатуры, а нам для ввода команд необходимо, чтобы каждая строка при передаче заканчивалась кодом перевода строки и возврата каретки.

Зайдём в настройки программы и настроим сначала порт

Image04

Данная скорость 38400 была выбрана потому, что модуль в режиме приёма AT-команд работает именно на такой скорости.

Теперь слева выберем пункт Receive и переключим там одну кнопку, а другую включим

Image10

Первая кнопка для окончания переданных команд символами перевода строки и возврата каретки, а вторая для того, чтобы мы свои введённые команды видели также после ввода в терминальном окне приёма.

Сохраним настройки и попробуем соединиться. Если всё удачно, то разъединяеся, так как сейчас у нас модуль находится в режиме передачи данных, и, если он ещё не настраивался, то скорей всего, мы даже не знаем его адреса, его настроек. О нахождении модуля в данном режиме свидетельствует быстрые мигания голубого светодиода Поэтому нам надо как-то перевести модуль в состояние передачи AT-команд.

Для этого мы пока отсоединим переходник от USB-порта и подклюим провод на ножку модуля HC-05 KEY. У кого-то она может иметь другое название, но, думаю, не перепутаете. Провод подключим вот такой и вот таким образом

Соединим данный провод с плюсом питания (с ножкой VCC)

Image09

И, не отпуская контакта, соединим перходник с портом 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

Image21

Только данные настройки вступят в силу после перезагрузки модуля и будут актуальны только для режима передачи данных, для режима передачи AT-команд в модуль останутся настройки прежние со скоростью 38400.

Настроим порт в терминальной программе на данную скорость и соединимся с ним

Image23

Попробуем ввести команду, на что модуль наш не прореагирует, так как режим не тот

Но не будем отчаиваться. Оказывается, чтобы отправлять команды модулю, необязательно переводить его в этот режим. Можно включить поддержку передачи AT-команд в режиме передачи данных. На короткое время (достаточно менее секунды) коснёмся проводом, который подключен к контакту KEY плюсовой шины модуля и модуль перейдёт в режим поддержки AT-команд. Правда, по характеру мигания светодиода мы это не определим, он будет мигать также быстро. Также в режиме поддержки команд мы с нами не сможет соединиться ведущее устройство. Но тем не менее, нам не потребуется для каких-то настроек постоянно вынимать провод из разъёма USB и перенастраивать порт в терминальной программе. Это уже хорошо. Сделаем данное действие и убедимся в том, что модуль также будет принимать команды, как и в режиме приёма команд

Отлично! Мы уже кое-что умеем. В принципе, мы настроили модуль для передачи данных в режиме ведущего устройства.

Теперь смартфон, который у нас сегодня выступит в роли ведущего устройства. Подойдёт любой с андроидом, лишь бы встала какая-нибудь терминальная программа под Bluetooth. Я установил вот такую. Мне она показалась удобной

Image26

Во-первых, она бесплатная, не требует создания подключения заранее, а также имеет несколько кнопок с заранее сохранёнными нами строками.

Скачаем и установим программу и запустим её. Нажмём кнопку SCAN и наш модуль должен будет отобразиться в списке найденных устройств

Image27

Устройство появится в списке спаренных устройств

Image30

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

Выберем наше устройство и попадём в диалог терминального обмена строками

Image31

Image33

Наш текст переместится в поле чата

Image32

Также если всё нормально со связью, мы этот же текст увидим в терминальной программе на ПК

Теперь попробуем, наоборот, послать строку из терминальной программы ПК в терминальную программу смартфона

Посмотрим, пришла ли наша команда

Image36

То есть связь у нас работает.

ну если купить в китае, то может быть если что - следующих ждать дооолго, поэтому всех и везде предупреждаю - не берите hc-06 если есть другие варианты (04 не щупал - не знаю)

если уже прошивал - все просто, но вот так взять и превратить 06 в 05 (скачав нужное ПО, подключившись к специальным ногам и разобравшись что и как там запускать [хотя если повезет - попадется архив с готовым .bat'ником]), да еще не имея LPT в компе. да их в 10 раз проще к AVR подключить и научиться с ними работать, чем так шить

Во, блин, вы говорите о вещах, которых я пока что руками не трогал Это я про прошивание через ЛПТ, USB-LPT и прочие дела Это к слову о том, что я только осваиваю UART и BT Поэтому мне проще щас сделать платку с МК и индикатором и пообщаться с BT на ней

_________________
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.

JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

да проще через терминал с компом сначала пообщаться - попереключать там всякое, а вообще там на борту свой мк есть и даже I/O pin'ы свободные имеются, с помощью того ПО можно простые управляемые устройства делать непосредственно на этом модуле безо всяких AVR ( но не проще, наверное )

советую попробовать сконфигурить как в статье на изиэлектроник, если эти команды проходят - значит модуль может быть и мастером и слейвом, добиваемся коннекта между запитанными модулями (контролируется на отдельном пине, можно светодиод туда повесить, один из модулей можно сконфигурировать и никуда не подключать потом, только питание подать), устанавливаем нужную скорость обмена по uart и вешаем модули уже на AVR, зная, что они работают на нужной нам скорости (а разные прошивки по умолчанию на разных скоростях работают) и сами устанавливают соединение - усе, двустороннее радиоуправление готово

если что не получится - могу глянуть как на HC-05 выглядит, у меня они в ящике валяются, побаловался и отложил, правда те, с которыми баловался, прилеплены на платку уже со светодиодами и ногами "под макетку с ардуиной", есть и такие вот голые hc-05, но их не трогал еще

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Я так понимаю, PIOx - это и есть местные I/O порты? Было бы круто использовать этот модуль для опроса датчиков А в какую сторону вообще копать, чтобы написать в него какую-нибудь программу?

_________________
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.

Приглашаем всех желающих 25/11/2021 г. принять участие в вебинаре, посвященном антеннам Molex. Готовые к использованию антенны Molex являются компактными, высокопроизводительными и доступны в различных форм-факторах для всех стандартных антенных протоколов и частот. На вебинаре будет проведен обзор готовых решений и перспектив развития продуктовой линейки. Разработчики смогут получить рекомендации по выбору антенны, работе с документацией и поддержкой, заказу образцов.

называется это дело Blue Lab, у меня 4.1 и оно как бы платное. по идее, но скачать не проблема (гуглить torrent 110720CSR_CASIRA_BLUELAB_SDK_v4.1 кстати там пара pdf'ов именно по HC-04)

"xIDE for BlueLab 4.1-Release
Based on xIDE version 3.37.5 (Multi-processor support enabled)
Kalimba, 3.19
VM, 3.17
© CSR, 2003-2008
© Cambridge Consultants Limited, 2003-2008"

не ковырялся в нем, скачал ради перепрошивки в HC-05 только

Навигационные модули позволяют существенно сократить время разработки оборудования. На вебинаре 17 ноября вы сможете познакомиться с новыми семействами Teseo-LIV3x, Teseo-VIC3x и Teseo-LIV4F. Вы узнаете, насколько просто добавить функцию определения местоположения с повышенной точностью благодаря использованию двухдиапазонного приемника и функции навигации по сигналам от MEMS-датчиков. Поработаем в программе Teseo Suite и рассмотрим результаты полевого тестирования.

_________________
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.

но там тоже проскакивает программатор на LPT порту

а эти ребяты другого варианта не предусмотрели это для AVR куча программаторов, а для блютусов на CSR только такой и вариант с ардуино + самопальная dll, но с ней иногда вываливается ошибка "адрес NNNN записано AAA, прочитано BBB", у меня такое было по 1 или 2м адресам вроде и я в исходнике dll сделал "обход", т.е. значения так и не поменялись, но дошилось до конца и работает (там какими то блоками небольшими шьется прошивка и прерывается при ошибке в процессе)

я даже шил ардуинку через такой блютус прям с Arduino IDE (т.е. прям в устройство можно заливать прошивку без проводов), только ресет до конца не победил, приходилось нажимать кнопку руками как только скомпилится - тоже может пригодится как идея

попозже выложу пару картинок на тему "блютус - это просто"


Хм, беспроводная прошивка - это интересно можно себе собрать плату-программатор и забыть о проводулях))

подскажите микросхемку, для преобразования логических уровней

_________________
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.

там не нужно чего то такого страшного, достаточно что то типа

AVR поймет логические уровни с блютуса, а чтобы не подать с AVR на блютус 5 в можно поставить просто делитель

совсем правильно - это как то так вроде, но это когда в обе стороны нужно

Mika - для освоения UART проще использовать переходник UART-USB и терминальную программу на компе.

А касательно беспроводной связи - использовать BT/BLE для связи с сенсорами в сети с фиксированной архитектурой типа звезда (один дисплей и несколько сенсоров с одно- или двусторонней связью с базовой станцией) - это стрельба из пушки по воробьям. К тому-же диапазон 2.4 Ггц совсем не лучший для связи с сенсорами, особенно находящимися вне помещения, где установлена приемная станция. Гораздо лучше обстоит дело с субгигагерцовым диапазоном.

По поводу микросхем - преобразователей уровня рекомендую TXS0102. Еще лучше просто питать МК от 3.3В. А совсем хорошо, особенно для снижения токопотребления при работе с трансивером - это использовать понижающий DC-DC конвертер типа TPS62730.

Эксперименты с блютусами.

берем макетку, светодиодики (в данном случае двухцветные)

пару кабелей usb-uart (ttl)

и превращаем зеленую платку в DIP-микросхему в соответствии с вышеприведенной (постом выше) схемой

залуживаем нужные пины и припаеваем детали / ножки

Последний раз редактировалось Morroc Вт мар 25, 2014 00:20:21, всего редактировалось 2 раз(а).

ставим на макетку нашу измученную многоножку (точнее две многоножки), красная хреновина сбоку - модуль питания, с которого берем 3.3 в ( на дальней стороне, на ближней 5 в - не берем никуда, нам оно не надо )

зеленый - tx с usb-uart кабеля (через делитель 1к/1.3к, см. схему выше постом), белый - rx с usb-uart кабеля (напрямую), остальное с этих кабелей не используется (земля у нас общая с компом, пришла с питанием 3.3 в)

красный проводок - ресет (соединен через

400 ом с пином модуля RESET), синий - управление режимом (соединен через

8.2к с пином 34 модуля, так уж вышло)

синие втыкаем в + 3.3 питания, красные на общий, включаем и видим. ничего не видим - все ок, ресет на земле, готовимся конфигурить

синие не трогаем, отрываем ресеты от земли, светодиоды начинают мигать с частотой около 1 гц (медленно в общем, вне командного режима мигают быстро)

запускаем терминал, включаем скорость командного режима по умолчанию - 38400 (в нормальном режиме по умолчанию 9600)
смотрим адреса устройств, слева включаем мастер, справа слэйв (ROLE), режим коннекта к определенному адресу (CMODE=0) и BIND друг на друга по адресам:

все сконфигурилось, теперь синенькие проводочки цепляем на общий и даем ресет обоим модулям, через несколько секунд перемаргивания гаснет, мигавший до того, светодиод (иногда он подмигивает) и зажигается другой - соединение установлено !

в терминале меняем скорость на 9600 и проверяем наш канал, отправляя сначала ABCDE с мастера на слэйв, а потом 12345 со слэйва на мастер

вот так быстро дешево и сердито мы проверили модули и настроили их на автоматическое поднятие канала, приводим модули в божеский вид и подключаем их к ардуинам и прочим AVR'ам (тем же путем - т.е. 3.3 питание, пара резисторов на делитель и не забыть 0.1mF на питание, остальные лампочки по вкусу, можно вместо светодиодов эти пины в AVR завести напрямую для контроля), в которых. просто шлем байтики через uart по воздуху

Morroc, а делитель напряжения нормально справится со своей задачей на высокой частоте работы?

Кстати, Morroc рисует вполне себе мануал, к которому я обязательно вернусь, когда дойду до общения с компом по UART

_________________
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.

лично я был бы признателен за полезный диалог по поводу нормального программирования самого контроллера этого модуля, чтобы возлагать на него некоторые свои задачи, отказавшись от внешнего МК. к сожалению, имеющаяся в свободном доступе инфа не позволяет мне разобраться в этом процессе. если кто занимался этими вещами - было бы здорово побеседовать.
в частности, интересует реализация следующего процесса:
1. модуль измеряет длительность импульсов на одном из своих пинов (от 100 до 1000 мкс) и передает результат замера по bluetooth. точность замера достаточно 20-50 мкс
2. модуль принимает по радиоканалу команды и формирует по ним импульсы нужной длительности (в тех же пределах и с той же точностью) на другом пине.
3. кроме этого просто обмен кое-какой информацией, влияющей на описанные процессы.

вроде бы все просто, но на счет того, как измерить длительность внешних сигналов, я инфы не нашел.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется.

Morroc, а делитель напряжения нормально справится со своей задачей на высокой частоте работы?

высокая может быть на spi, а тут очень даже скромная, можно вообще не париться (да и в принципе аккуратный делитель на smd резюках будет работать нормально в диапазонах частот "мег", можно сопротивление поменьше сделать для надежности, но не для uart - тут пофиг, я бы не стал лишний корпус ставить, хотя из той серии и если есть под рукой. это же 6ти ножки мелкие вроде ?)

схема схемой, а в BT придется какие то команды давать и проще настроить их один раз с компа с проверкой, чем давать эти команды в BT с МК (видимо вслепую), но можно конечно и с МК ( и как люди живут без COM-порта ? я с МК постоянно что то выдаю по uart для отладки/настройки, обычный "COM" конечно тоже можно подцепить, но понадобится собрать уже честный преобразователь уровней из 3 в 12 )

Насчёт того, что BT в данном случае - это стрельба из пушки по воробьям - это я полностью согласен. Когда я почитал характеристики этого BT модуля я понял, что он гораздо мощнее, чем МК, который должен был им управлять. Отсюда у меня вытекает вопрос: можете посоветовать, что искать, как альтернативу BT, которая не будет уступать по размерам?
Далее, питать МК от 3.3 В очень хотелось бы, но я планировал использовать ATmega48, которая от 3.3 не питается. (И тут я полез в даташит, чтобы уточнить, и увидел, что: ATmega48/88/168: 0 - 10MHz @ 2.7V - 5.5V, 0 - 20MHz @ 4.5V - 5.5V. То есть при частоте до 10 МГц, её вполне можно питать от 3.3 В О_о. Эм, ловлю себя на том, что я это уже читал раньше, тк хотел питать от 3.3 В, но что-то как-то не правильно читал. Или правильно? Оо).

для собственных единичных конструкций оно все попроще, одна не заработала - ткнул другую у меня вообще все меги заводились на 3.3, правда я люблю внутренним генератором пользоваться на низких частотах (но у меня мег и не много - в основном 8/328 в разных корпусах)

". понижающий DC-DC конвертер типа TPS62730" Щас надо узнать, что это такое

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

вот тут прилеплен сверху один из готовых понижающих, из 5 делает

2 для микродвигателей, маленький и жрет мало на холостом ходу, звуков не издает

Кстати, Morroc рисует вполне себе мануал, к которому я обязательно вернусь, когда дойду до общения с компом по UART

у меня есть модули на NRF24L01, но я не готов такой по ним сделать - возни больше будет хоть они и оформлены уже под макетку с ногами если что то и сделаю - это будет под ардуинку, но там понятно все обычно

лично я был бы признателен за полезный диалог по поводу нормального программирования самого контроллера этого модуля
если бы оно хоть шилось как AVR в 5 сек, а то 2.5 часа заливать прошивку через ардуино не очень Я вот щас взвесил объём ковыряний для того, чтобы приделать к МК кнопки, дисплей, написать программу и т.п, чтобы просто сконфигурировать BT и мне стало понятно, что через PC это будет гораздо веселее. У меня вопрос, для того, чтобы сделать переходник USB-UART, достаточно ли отрезать нафиг одну сторону кабеля и обжать провода? И несёт ли какую-то смысловую нагрузку та коробочка, в которую USB втыкаются?

_________________
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.

если бы оно хоть шилось как AVR в 5 сек, а то 2.5 часа заливать прошивку через ардуино не очень а сделать нормальный вариант прошивальщика без ардуино нельзя, что ли? если я не ошибаюсь, то IDE ардуино использует AVR-GCC и его библиотеки, т.е. можно просто написать программку без ардуиновских библиотек - она должна работать намного быстрее.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется.

если бы оно хоть шилось как AVR в 5 сек, а то 2.5 часа заливать прошивку через ардуино не очень а сделать нормальный вариант прошивальщика без ардуино нельзя, что ли? если я не ошибаюсь, то IDE ардуино использует AVR-GCC и его библиотеки, т.е. можно просто написать программку без ардуиновских библиотек - она должна работать намного быстрее.

скорость не упирается во что то ардуиновское, там то, что называется bitbang программатор - просто дрыгает ногами по команде с PC, почему именно с такой скоростью и можно ли поменять - не наю, в самой ардуине почти пусто, но исходник dll'ки под вижуал студио есть, в меру загадочный

не факт, что он и по LPT шьет быстро, автор ардуинской dll расковырял LPT'шную и попытался повторить ее на базе ардуино

Я вот щас взвесил объём ковыряний для того, чтобы приделать к МК кнопки, дисплей, написать программу и т.п, чтобы просто сконфигурировать BT и мне стало понятно, что через PC это будет гораздо веселее. У меня вопрос, для того, чтобы сделать переходник USB-UART, достаточно ли отрезать нафиг одну сторону кабеля и обжать провода? И несёт ли какую-то смысловую нагрузку та коробочка, в которую USB втыкаются?

в переходниках специальная микруха (в данном случае были на CP2102, есть на FT232 - вроде получше и чуть дороже), без нее никак, если есть обычный "COM порт" - цепляй к нему через преобразователь уровней, два сразу не обязательно же - это я для наглядности

можно такой собрать если заняться нечем и микрухи такие есть

UPD: поигрался со скоростью передачи, на разных скоростях он отвечает рызные кракозябры на команду ATN?, которая запрашивает его имя. По дефолту у модуля:

The factory settings of UART are as follows:
Baud rate: 19200 bps
Data bit: 8
Parity: none
Stop bit: 1

На этой скорости он возвращает эхо.

UPD: Продолжаю эксперименты. Соединился через планшет с BT182, и через MMusbMCP220 с компьютером. Девайсы общаются, нормально всё принимают и передают, но вот команды в блютус передать пока не получилось

_________________
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.

Часовой пояс: UTC + 3 часа

Кто сейчас на форуме

Мне довелось застать момент, когда Bluetooth только начал появляться в телефонах. После IRDA это был прорыв, но также было много минусов: в памяти отложилось то, что конски жрется акум, файлы передаются долго, постоянные дисконнекты, тупо bt отваливался до следующей перезагрузки девайса. С тех пор прошло много лет.

Ждал своего часа этот модуль долго, судя по заметкам подключение слишком простое, чтобы посвящать этому отдельную статью. Внезапно у меня появилась задача, разобраться с технологией в принципе и ее возможностях, в частности с Low energy, поэтому я начну с простого.

На практике, в наличии было 2 телефона, 1 ноут, 1 донгл(усб флешка) с BT4.0 на борту. Все прекрасно видели девайсину, которая поддерживает только BT4.0LE. При этом совместимость ранних версий сохранена, ибо труба с BT2.0, видит трубу с блютузом 4 и наоборот.

Почему последовательный порт? Потому что это наиболее простой способ передачи данных. Для этого вам нужно просто кидать байты в уарт, никаких библиотек и прочего гемора. Но не все так просто, ваш модуль может не уметь работать как COM порт. Все зависит от того, какие профили реализованы внутри модуля/микросхемы. Если модуль не поддерживает профиль SPP(serial port protocol), то у вас не будет интерфейса куда подключиться. Причем оба соединяющихся девайса должны поддерживать SPP. Это значит, что нельзя взять рандомную bt гарнитуру, которая поддерживает профиль передачи звука A2DP и ожидать от нее последовательного порта. Я очень надеюсь, что у меня дойдут руки разобраться во всех хитросплетениях других профилей.

ble_bee

Итак, считаем что нам пока достаточно ком порта, ищите модуль который поддерживает этот профиль. Как уже было сказано выше, самый распространенный вариант это HC-05 или ему подобный, но имейте в виду HC не одинаковые. Мой шилд назывался Bluetooth Bee V2.0+EDR 3Mbps Modulation.

По сути брать именно его нет никакого смысла. Хитрые китайцы взяли готовый модуль фирмы CSR и припаяли его к другой платке со штрырьками. Для меня беда оказалась в том, что штыри тонкие с шагом 2мм, которые я не юзаю, поэтому все равно пришлось паять провода. По сути переплата на не нужный кусок текстолита.

Подключил модуль он радостно замигал, поискал его телефоном, компом, он не нашелся. В моем понимании он должен был сразу быть доступен и после подключения стать Com портом, ну или хотя бы по какому нить уровню на GPIO. Ну думаю беда, говно подсунули. Пришлось открывать даташит и читать))) Оказалось что проверить модуль можно AT командами, т.е. просто подключаешься по UART к нему и шлешь нужные байты, но чтобы я не слал он отвечал ERROR. Пришлось внимательно читать даташит. Оказалось что начало посылки начинать должно обязательно с 0x0D 0x0A, а затем уже нужные команды. В итоге завелся.

Модуль может работать как мастер так и слейв. Далеко не каждый модуль может быть мастером. В чем разница? Мастер может искать устройства и подключаться к ним, слейв сам не может. К слейву можно подключиться, только если мастер его найдет и запросит подключение. АТ команды для разных модулей разные, поэтому если у вас другой модуль, то ищите свои AT команды на него.

Выбор быть мастером или слейвом
\r\n+STWMOD=0\r\n слейв
\r\n+STWMOD=1\r\n мастер

Честно говоря работа в режиме мастера меня не сильно интересовала, ибо конечная задача подключиться либо к компику, либо к мобилке.

Можно настроить скорость, по дефолту для моего модуля 38400, для вашего она может быть другой, гуглите
\r\n+STBD=115200\r\n Переключить на 115200
Поддерживаемые скорости: 9600, 19200,38400,57600,115200,230400,460800.

Обнаружение
\r\n+INQ=1\r\n Включено
\r\n+INQ=0\r\n Выключено

Авто подключение к последнему спаренному устройству
\r\n+STAUTO=0\r\n Запрещено
\r\n+STAUTO=1\r\n Разрешено

Разрешить спаренному устройству подключение. Если разрешить то достаточно 1 раз спарить устройства.
\r\n+STOAUT=0\r\n Запретить
\r\n+STOAUT=1\r\n Разрешить

Авто подключение когда мастер в доступном радиусе, слейв подключается автоматом в течение 30 минут
\r\n+LOSSRECONN=0\r\n Запретить
\r\n+LOSSRECONN=1\r\n Разрешить

Установка имени устройства
\r\n+STNA=MyModule\r\n

Установка пин кода
\r\n+RTPIN=0000\r\n

Прочитать адрес устройства
\r\n+RTADDR\r\n

bluetooth_term

После каждой правильной команды модуль отвечает OK и возвращает статус. Пример ответа модуля.

Ищем трубой или компом, спариваемся 🙂 Вводим пин. Усе. На компе появляется новый Com порт. К нему цепляемся и только после этого(!) мы подключены. Когда подключились по ком порту, модуль из режима AT команд переходит в режим виртуального COM порта, т.е. чтобы мы ему не слали, он будет гнать по юарту, даже ат команды.

Про цифры. Токопотребление измерялось так: включил последовательно пину VCC мультиметр, измерения по постоянному току. Когда модуль был уже спарен, но данные не передавались модуль жрал 3-5 мА. В моменты передачи данных 35-40мА.

hc-08

Наконец то мне попал в руки HC-08, так что инфа проверена.

Думаю общее представление о технологии понять можно. Будет ли продолжение темы пока не понятно. Надеюсь да.

22 комментария: Подключение Bluetooth модуля

Подскажи уважаемый как ты подружил hc-08 и телефон? В моём случае телефон видит его в списке но при нажатии согласования тупит некоторое время и выдаёт невозможно подключить неверный пароль или пин код. При этом пароль не установлен на модуле. На ат команды реагирует адекватно. Помоги советом что делать?

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

Блин! Вот именно ат команды на установку или смену пароля на этом модуле нет. Ладно спасибо что подсказал. Буду копать.

насколько я знаю у этих модулей пароль обязателен. проверьте с другим девайсом. может проблема конкретного телефона

void main(void)
// initsializatsia UART
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;
// initsializatsia UART

UDR=temper; // port PD0(RXD) PD1(TXD)

вместо UDR=temper;
пишите printf("temperature = %f\r\n", temper);
и проверьте чтобы скорости уарта на модуле и на микроконтроллере совпадали

Не на терминал, а в поток. Если используется codevision, то там по умолчанию поток выводится в уарт.

Что значит в поток? Это шина данных микроконтроллера откуда передается сигнал ко всем комплектующим (в том числе UART) ?

А скажите пожалуйста по идее должно же выводиться на терминал в протеусе все то что записывается в переменной temper?

В конце прошлой статьи писал о том, что получилось создать интерфейс для Android и в этой статье попробую описать этот процесс. Почему попробую, потому что опыта в создании приложений под Android у меня практически нет и на самом деле, мало что смогу доступно объяснить. Ну всё довольно отмазываться пора переходить к делу.

Для начала качаем и устанавливаем Android Studio, о том как это сделать в интернете достаточно материала. После того как среда разработки установлена, создаём новый проект согласно скриншотам.

Как связать микроконтроллер AVR c планшетом на Android, с помощью bluetooth модуля HC-05.

Как связать микроконтроллер AVR c планшетом на Android, с помощью bluetooth модуля HC-05.

Как связать микроконтроллер AVR c планшетом на Android, с помощью bluetooth модуля HC-05.

Как связать микроконтроллер AVR c планшетом на Android, с помощью bluetooth модуля HC-05.

После того как проект создан, первым делом изменяем AndroidManifest, добавив в него две строчки, запрашивающие разрешение.

Далее, в activity_my создаём несколько кнопок, присваиваем им id и назначаем методы, которые будут вызываться при нажатии.

Вот как это выглядит на экране.

Как связать микроконтроллер AVR c планшетом на Android, с помощью bluetooth модуля HC-05.

Кнопки можно назвать как угодно.

Осталось самое интересное — научиться устанавливать соединение по bluetooth и обрабатывать нажатие кнопок.

В начале прошлой статьи писал о том, что когда покупал bluetooth модуль еще не знал куда его применить, но точно знал, что такая вещь в хозяйстве пригодиться. Прошло чуть времени и применение ему нашлось. В общем, есть у меня один проект, в котором МК управляет шаговыми двигателями, находиться всё это добро на балконе. Зимой на балконе холодно и неинтересно, поэтому отлаживать его удобнее из теплой комнаты, вот для этих целей и применил данный модуль.

Читайте также: