Bluetooth модули HC-05, HC-06 и почие. Советы чайникам от чайника
- Войдите на сайт для отправки комментариев
Мой опыт общения с платками 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 кусок пластика или паять перемычку, замыкающую эту кнопку. Пока стоит эта перемычка основнойра
Прошу пардона, что-то не так нажалось и пост отправился без моего ведома. А как его редактировать еще не разобрался.
Продолжение п 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 В и модуль этого не перенесет.
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, один умер спустя несколько часов, зато второй, видимо насмотревшись на мучения первого, работает, правда совсем не так как мне надо).
6. Простая проверка связи по эфиру со смартфоном. Если смартфон "увидел" ваше устройство и смог соединится, значит вы почти у цели. Осталость проверить обмен. Для этого проще всего замкнуть между собой ножки TX с RX (естественно отключив от переходника USB-UART. После этого находите на маркете какое-нибудь приложение Bluetooth-терминала, разбиратесь в его интерфейсе и шлете модулю произвольный набор буковок. В ответ должны получить "сам такой". Это будет означать, что модуль принимает и передает символы.
Теперь осталось совсем "чуть-чуть" : научить ваше устройство понимать то, что пришлет ему смартфон и научить смартфон слать то, что надо устройству, ну и соединяться с модулем без танцев с бубном. Но это уже другая история...
Насчет терминалов - масса постов рекламирует самые разные приложения. Выбирайте то, где нет рекламы. Мне понравился тот, что с разъемом - Serial Bluetooth Terminal. Там вроде как есть платный контент, но с меня никаких денег не ребовали. Приложение ищет и старые Bluetooth и Bluetooth LE. Интрефейс бедноват, но нам с ним не жить.
Если модуль с Bluetooth LE не виден на смартфоне, а он точно работает и соединялся при вас с другими устройствами, значит смартфон не работает с Bluetooth LE и неважно какая версия Андроид на нем стоит. Скорее всего вам так и не удастся соеднится с такими смартфоном, поэтому либо ищите модуль с менее продвинутым Bluetooth , либо меняйте смартфон. В последнем случае полезно проверить при покупке, а будет ли новый гаджет понимать Bluetooth LE?
Я пошел по первому пути и вроде как нашел приемлемые варианты модулей. Итог малоутешительный : из 5-ти модулей четырех разных типов нормально заработали только два. Один из убогих, купленный в России вообще ничего не шлет в эфир. Другой, тот что с Али, работает по какой-то странной версии Bluetooth LE, что ничего путного от него не добился.