Pull to refresh

Загрузка скетчей в Arduino через Bluetooth

Developing for Arduino *
Sandbox
Программируя Arduino, иногда желательно обойтись без физического соединения через USB к компьютеру, например:

  • Силовые цепи — коммутирование 220В. Одна ошибка в соединении и прощай USB-контроллер любимого ситемного блока.
  • Радиочастотные цепи — много наводок по питанию.
  • Собранные и где-то закрепленные устройства, которые желательно перепрошивать, но неудобно к ним подлезать.

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

Плата Arduino подключена к Bluetooth модулю для беспроводной заливки

Я использовал наиболее дешёвые Bluetooth-модули с незамысловатым названием «Bluetooth-модуль HC-05(HC-06)». На ebay их можно найти от 200 руб. за штуку, в отечественных магазинах — от 500 руб. Советую брать модуль уже распаянный на переходнике «для Arduino», разница в деньгах минимальная, а экономит время на сборке схемы сопряжения.

image

А если попался модуль без платы-адаптера?
В таком случае придётся собрать схему адаптера самому. Инструкция находится здесь


Нам нужен именно HC-05, но так как визуально отличить их крайне сложно, велик шанс, что в руках окажется HC-06, даже если на упаковке написано «HC-05», как это произошло со мной:

image

Можно ли отличить HC-05 от HC-06?
Можно попробовать отличить по внешнему виду, если не все ножки Bluetooth-модуля запаяны или есть под рукой мультиметр. У HC-05 к светодиоду, распаянному на самом модуле, идет проводник от ноги 31, а у НС-06 от ноги 24.

image

На фото видно, что на всём ряду запаяна единственная 24-я нога, это стопроцентно модуль HC-06.


К счастью, HC-06 можно перепрошить в HC-05, но придётся найти компьютер с LPT-портом и потратить несколько часов. Инструкцию по перепрошивке можно прочесть здесь. От себя хочу добавить, что под Windows7 прошивка не состоялась, пришлось устанавливать Windows XP, а также в BIOS сменить режим порта LPT на EPP 1.7.

Подробные настройки LPT-порта
Особенно утомило переключение режимов LPT-порта и настроек в диспетчере утройств, поэтому сразу приведу правильные скриншоты. BIOS:
image

В диспетчере:
image

Зачем перепрошивать?
Прошивка HC-05, в отличие от HC-06, при установке соединения меняет сигнал на 32 выводе — это нужно чтобы хардварно сбросить программируемый Arduino и начать процесс заливки. Можно не перепрошивать, а нажимать кнопку RESET на плате каждый раз перед заливкой, причем нужно ловить нужный момент, что крайне неудобно. Выглядит это примерно так


Итак, имеем на руках модуль HC-05. Теперь нужно задать ему параметры работы. Для перевода в режим установки параметров нужно подпаять последнюю, 34-ю ногу к питанию 3.3в.

image

Затем подключаем к компьютеру через любой переходник USB-UART-TTL и в терминале даём следующую последовательность команд:

AT
AT+RESET
AT+ORGL
AT+ROLE=0
AT+POLAR=1,0
AT+UART=57600,0,0
AT+INIT
AT+INQ

Если есть желание поменять стандартный пароль на спаривание, то дополнительно:
AT+PSWD=5678

Если есть желание поменять название устройства, то дополнительно:
AT+NAME=RemoteArduino

После этого модуль отключаем, перемычку с 34 ноги убираем и приступаем финальной доработке модуля. Это можно сделать прямо на плате HC-05, мне же показалось удобнее сделать это в виде платы-переходника для прямого подключения к Mini Pro.

image

Для автоматического сброса Arduino при установке соединения необходимо вывести 32-ю ногу на разъём, для этого я отрезал ненужный мне вывод «WAKE-UP» и обозначил его как «RESET». Схема переходника получилась такой:

image

Зажигание светодиода будет показывать установленное соединение.

На этом с пайкой всё, но заливка всё равно пока не заработает. Дело в том, что Arduino IDE при каждой попытке заливки скетчка делает очистку буферов COM-порта, что приводит к закрытию BlueTooth соединения и отмене загрузки.

Чтобы избежать этого, нужно поправить конфигурацию Arduino IDE, который находится в файле C:\arduino\hardware\arduino\boards.txt. Отрываем этот файл в текстовом редакторе, ищем секцию, соответствующую плате, с которой работаем (у меня это Pro Mini 5V) и добавляем следующую строку:

pro5v328.upload.disable_flushing=true

Не забываем менять первое слово в строке, например, для Arduino Uno это будет:

uno.upload.disable_flushing=true

Теперь заливка должна заработать. Осталось маленькая досаждающая деталь — когда заходим в меню Arduino IDE и выбираем пункт «Tools», программа «морозится» на несколько секунд. Дело в том, что при каждом обращении к данному пункту меню, программа перебирает все доступные в системе, COM-порты, но, неоптимальным способом, что приводит к большим задержкам. Чтобы убрать эту задержку, нужно заменить библиотеку rxtxSerial.dll на доработанную версию, которую можно взять здесь. Кому интересны подробности проблемы, могут ознакомиться с веткой на форуме ардуино.

Вот другой вариант с кнопкой отключения питания и вывода TX от Arduino:

image

Схема второго варианта (Bluetooth-модуль другой, поэтому пины расположены по другому и Pro Mini не оригинальный, а «Deek-Robot», распиновка зеркальная):

image

Схема занимает минимум места, подключается быстро, настройки не требует. Также остаётся работоспособной возможность в Arduino IDE включить Serial Monitor и получать данные от устройства как при соединении через USB.

P.S.
Оказалось, что есть уже готовые такие переделанные модули, и возможно когда-нибудь мы увидим их в продаже в нашей стране.
Tags:
Hubs:
Total votes 32: ↑28 and ↓4 +24
Views 57K
Comments Comments 32