Bluetooth модули HC-05, HC-06 и почие. Советы чайникам от чайника

spbtablo
Offline
Зарегистрирован: 14.04.2018

Мой опыт общения с платками Bluetooth модулей HC-06 , HC-05 и прочих номеров.

Я занялся изучением этих модулей с целью получить двухкнопочный пульт дистанционного управления на базе смартфона. Выбор пал на Bluetooth модули, потому что теретически с ними проще организовать общение чем с WiFi. По описанию эти модули выдают стандартные UART сигналы, значит любая "арудинка" их примет и выдаст на выходах нужные уровни. Подойдет даже тот хрестоматийный пример со светодиодом, который клонирован на безумном количестве "одностраничников".

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

Несколько выводов для тех, кто не хочет глубоко влезать в суть этих продуктов многочисленных заводиков с маркой "Made in China special for Russia" :

1. Входной контроль делается так : на модуль подается питание и больше ничего. Если на нем замигал светодиод - можно двигаться дальше. Если нет - либо проблемы с питанием, либо дохлый модуль. Если тестер показал +3,3 В на дальнем от разъема выводе кнопки как бы сброса (или на площадке куда экономичные китайцы "забыли" поставить кнопку), можете принимать поздавления : вам достался кирпич. Всяческие "дефибрилляторы" на 34 ножку и прочие приемы тут бессильны - ваш кирпич ни под какими пытками не выдаст главной тайны Bluetooth-а и не выйдет на связь под контролем ваших спецслужб. 

2. Если компьютер с нормальным Bluetooth-ом (или ноутбук) не "видит" предложение от модуля соединится - значит модуль его не предлагает. И мучаться с модулем практически бесполезно. Он просто не работает как надо и все! Единственно что можно попробовать - это сбросить его к заводским настройкам. Но это при условии что модуль реагирует на AT команды. На всякий случай можно проверить, вдруг что не так с вашим Bluetooth-ом и попробовать подключиться к смартфону. Если обнаруживаются любые другие устройства кроме модуля - на 99,99 % проблема в модуле. Конечно возможно он использует новейший протокол, который неведом вашим Bluetooth-ам. Даже если это так, то модуль вам бесполезен и надо искать другой.

3. Не все смартфоны "видят" купленные Вами модули. По большей части это не проблема смартфонов а происки изготовителей "клонов клонов". Иногда помогают приложения обеспечиающие работу с Bluetooth LE, но отнюдь не на всех смартфонах, потому что тамошние Bluetooth-ские микросхемы тоже могут быть от изготовителя "Made in China special for Russia". Хотя Andriod и честно пытается обеспечить связь по новым стандартам масимально возможному количеству устройств, изготовители смартфонов лепят собственные версии ОС  и чипов и чихать хотели на все обещания Andriod-а.

4. Совершенно необязательно покупать USB-UART если у вас есть платка Arduino. На этой плате есть группа для 3-х пар шырьков или как минимум отверстия для их установки.  На Uno она назвается ICSP. Так вот : достаточно поставить перемычку между 5 и 6 штырьками и вы получате искомое.  И не надо лепить на кнопку Reset кусок пластика или паять перемычку, замыкающую эту кнопку. Пока стоит эта перемычка основнойра

spbtablo
Offline
Зарегистрирован: 14.04.2018

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

Продолжение п 4. Совершенно необязательно покупать USB-UART : Пока между выводами Reset и Gnd стоит перемычка - вы имеете переходник USB-UART. И можете подключать выводы TX и RX модуля к выводам TX и RX на плате Ардуино. Причем именно TX к  TX и RX к RX.  Это потому что вы замещаете сигналы от чипа платы Ардуино на свои.  На вход RX Bluetooth cоветуют поставить делитель 1 и 2 кОм-а. Хотя все современные чипы вроде как решают проблему совместимости с 5В логикой, но наверное этот делитель хуже не сделает. Но не стоит ставить в него большие резистроы, 47 и 100 кОм, как я видел на одном сайте. На скоростях обмена выше 9600 это может привести к сбоям, так как паразитные емкости перемычек могут сильно "завалить" фронты, если ток делителя будет слишком маленьким.

И ни в коем случае не пытайтесь пользоваться переходниками USB-COM. Там уровни сигналов меняются от +12 до -12 В и модуль этого не перенесет.

spbtablo
Offline
Зарегистрирован: 14.04.2018

5. Выявление особенностей общения модуля по проводам. Для установки связи с тем устройством, которое будет получать электричекие сигналы от модуля (платы Ардуино к примеру) надо найти общий язык с модулем, то есть выяснить какая скорость обмена и какие символы должны быть в конце команды.

Так как продаваны не особенно утруждают себя выдачей нормальной документации и в лучшем случае отделываются ссылками на написанные кем-то datasheet-ами, то тут работает только метод проб и ошибок.  Подавляющее большинство бюджетных модулей Bluetooth используют последовательный интерфейс стандарта RS232, гордо названный UART.  Причем эти модули используют самый распростарненный набор опций : слово из 8 бит, 1 бит стоповый и без контроля четности. Вот поэтому и нужен переходник USB-UART. Ну и надо не забыть о программе для обмена с СОМ-портом. Монитор последовательного порта, что идет в официальном приложении <arduino.exe>  мне показался не слишком удобным, поэтому я пользовался Termite

По моему мнению удобнее использовать аппаратный USB-UART а не программный, скетчи котрого в избытке имеются в интернете. Это потому что программный  переходник может делать перерывы в отсылке команд, а модулям это не всегда нравится. И ответы от модулей тоже могут теряться.  А уж когда подбираешь скорость общения, тут аппаратный USB-UART незаменим, потому что тратить время на написание и отладку прораммного переключателя скоростей просто жалко. (О том, как его сделать из платы ардуины я писал в предыдущем посте.)

Обычно рекомендуется сначала подключать общий провод, а потом уже сигнальные. Ну и крайне жедательно, чтобы провод питания подключался в последнюю очередь. Еще лучше, если вы использутете внешний источник +5 В для питания модуля. Развязка питаний никогда не вредила.

Наиболее часто встречющиеся скорости обмена 9600 и 38400. С них и надо начинать. Насчет того, чем завершается посылка с командой AT, мне попались  два варинта : либо два символа CR LF, либо ничего. После запуска программы обмена  с подключенным к компьютеру устройством USB-UART делаем настройки согласно понравившемуся  datasheet-у и подаем +5В на модуль. Некоторые (не все) модули HC-05  отзываются на команды только при высоком уровне на пресловутом 34 выводе. Иногда этот вывод соединен с кнопкой, а иногда и с выводом ENABLE (что довольно дико, потому что если есть возможность замкнуть управляющий вывод на +3,3, обязательно кто-нибудь это сделает и может запросто спалить выход порта своей микросхемы).

Вежливые модули при включении передают слова приветствия. Дурновоспитанные "клоны клонов" обычно угрюмо молчат. Если вы получили приветствие - значит со скоростью уже угадали. Если привета нет, шлем команду AT (латиницей и заглавными буквами).  Отсылаем команду и ждем реакцию. Причем не всегда на команду АT приходит ответ с первого раза, иногда в UART-е что-то теряется и только со второй попытки устанавливается нормальный обмен. Полезно слать команду AT+VERSION. Тогда сразу получете ответ и на то какая версия Bluetooth у модуля. Здорово помогает AT+HELP - в ответ модуль расскажет, каие команды он понимает. Список может быть неполным, но основные там будут обязательно. Но это если есть хоть какая-то вразумительная реакция.

Если смартфон смог соединится с устройством, то это заметно облегчает определение скорости обмена. Запустив в смартфоне Bluetooth-терминал (как описано в п. 6) начинаеv передавать какие-нибудь. При правильно подобранной скорости на экране программы обмена с UART появлятся сообщения от смартфона.

Если реакции нет, действуем методом тупого перебора, скажем шлем команды с разными настройками завершающих символов. Не добившись ответа меняем скорость и по новой пробуем слать команды с разными концовками. Должно повезти. Когда повезет бывает полезно сделать откат к заводским настройкам командой AT+DEFAULT или ее аналогом из документации. Правда при этом могут быть сюрпризы в виде смены скорости, переименования и замены PIN-кода. Но если связь имеется, то можно будет вернуть полюбившиеся настройки.

Если ответа так и не пришло - это плохо. В моих случаях рекомендации замыкать 34 и другие ноги на землю или на + 3,3 В никак не помогли : "кирпич" так и остался кирпичом. Конечно может быть надо еще раз проверить правильность соединенй и наличие питания, но мы же с вами ученые люди, знаем все лучше других и никогда не ошибаемся...

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

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

Продавцы наши по большей части народ бережливый и не выкинут ваш модуль, а продадут его следующему покупателю (не пропадать же добру, авось прокатит). Возможно и вы были тем самым "следующим".  В том числе и поэтому у тех, кто покупает модули в России шансы получить что-то путное в бюджетном секторе ненамного выше чем у покупателей на Али.

Я обычно стараюсь брать сразу две штуки, ну так, на всякий пожарный.  (В это раз метод сработал : из купленной на Али пары модулей HC-05, которые на деле оказались левой версией HC-10, один умер спустя несколько часов, зато второй, видимо насмотревшись на мучения первого, работает, правда совсем не так как мне надо).

spbtablo
Offline
Зарегистрирован: 14.04.2018

6. Простая проверка связи по эфиру со смартфоном. Если смартфон "увидел" ваше устройство и смог соединится, значит вы почти у цели. Осталость проверить обмен. Для этого проще всего замкнуть между собой ножки TX с RX (естественно отключив от переходника USB-UART. После этого находите на маркете какое-нибудь приложение Bluetooth-терминала, разбиратесь в его интерфейсе и шлете модулю произвольный набор буковок. В ответ должны получить "сам такой". Это будет означать, что модуль принимает и передает символы.

Теперь осталось совсем "чуть-чуть" : научить ваше устройство понимать то, что пришлет ему смартфон и научить смартфон слать то, что надо устройству, ну и соединяться с модулем без танцев с бубном. Но это уже другая история...

Насчет терминалов - масса постов рекламирует самые разные приложения. Выбирайте то, где нет рекламы. Мне понравился тот, что с разъемом - Serial Bluetooth Terminal. Там вроде как есть платный контент, но с меня никаких денег не ребовали. Приложение  ищет и старые Bluetooth и Bluetooth LE. Интрефейс бедноват, но нам с ним не жить.

Если модуль с Bluetooth LE не виден на смартфоне, а он точно работает и соединялся при вас с другими устройствами, значит смартфон не работает с  Bluetooth LE и неважно какая версия Андроид на нем стоит.  Скорее всего вам так и не удастся соеднится с такими смартфоном, поэтому либо ищите модуль с менее продвинутым Bluetooth , либо меняйте смартфон. В последнем случае полезно проверить при покупке, а будет ли новый гаджет понимать Bluetooth LE?

Я пошел по первому пути и вроде как нашел приемлемые варианты модулей. Итог малоутешительный  : из 5-ти модулей четырех разных типов нормально заработали только два. Один из убогих, купленный в России вообще ничего не шлет в эфир. Другой, тот что с Али, работает по какой-то странной версии Bluetooth LE, что ничего путного от него не добился.