5 сентября 2014 в 11:30

Загрузка скетчей в Arduino через Bluetooth из песочницы

Программируя 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.
Оказалось, что есть уже готовые такие переделанные модули, и возможно когда-нибудь мы увидим их в продаже в нашей стране.
@Z80A
карма
14,2
рейтинг 0,1
Похожие публикации
Самое читаемое

Комментарии (32)

  • 0
    С безопасностью проблемы… это же каждый в радиусе действия блютуза может взять и прошить платку, если она будет использоваться где-нибудь на улице. Нужен какой-то диалоговый код авторизации.
    • 0
      Для этого второй вариант модуля — с кнопкой отключения. Пришёл, включил, перепрошил, отключил, проверил, ушёл. Или совсем снял модуль после перепрошивки — я так и делаю. Ну и модуля есть стандартная процедура «спаривания» с паролем, по дефолту «1234», при настройке можно изменять командой AT+PSWD=1234.
      • 0
        Пароль подбирается, а если модуль можно отключить… так ведь туда можно и подключиться обычным UART-ом… т.е. для внешнего применения «без присмотра» такое решение держится только на своей уникальности, а когда их будет море — проблема безопасной прошивки станет во весь рост.
        Надо уже сейчас думать о том чтобы стандартный бутлоадер поддерживал шифрование или по меньшей мере цифровую подпись.
        • +1
          Мне кажется мы выходим за рамки статьи, т.к. ничто не мешает и без этого модуля подсоединиться к ISP-интерфейсу любой атмеги.
          • –1
            Отключенный ISP-интерфейс помешает. Темболее что для этого надо будет разбирать сам девайс, расцарапывать лаковое покрытие и т.д.

            Где-то я уже видел тут на хабре такое же применение блютуз-модуля для дистанционного обновления бегущей строки. Вот в таких случаях не помешает безопасное обновление прошивки с отключенным штатным интерфейсом программирования, чтобы усложнить нежелательное использование девайса посторонними в своих целях.
  • 0
    Спасибо! Идея заменить шнурок USB на Bluetooth c сохранением возможности программирования и Serial Monitor в IDE выглядит очень заманчиво.

    Зачем нужна кнопка в последнем варианте? Дополните пожалуйста статью его схемой.
    • +2
      Схему добавил. Кнопка (вернее переключатель) отключает питание Blutooth-модуля и линию TX от Arduino, что практически равносильно полному отсоединению модуля. У меня один модуль переносной, а второй — стационарный, с переключателем.
  • –13
    Зачем писать такие банальные статьи? Простой беспроводной uart. Я такой делал год-полтора назад, чтобы дистанционно прошивать гексакоптер, а не тянуть шнурок.
    • +6
      Вы безусловно большой молодец. Кому-то очевидно, кому-то нет. Кто-то вообще не знал что есть такие модули.
      Всегда найдется человек который из статьи не найдет для себя ничего нового. И что теперь? Не будем публиковать никакие посты?
      • –8
        ИМХО, на портале, где уровень подготовки читателей выше среднего, не должны появляться посты из разряда «помигать светодиодом».
        Я имел ввиду не конкретно эти модули, а в принципе любой радиомодуль с интерфейсом UART
        • +3
          То-есть вы считаете что у всех читателей по всем тематикам ресурса должны быть подготовка выше среднего, а все что ниже в любой из кучи областей тут публиковать не стоит, а также вы являетесь подготовленным по всем хабам выше среднего? На данный момент статью в избранное добавили 72 человека, включая меня, вы можете сказать что все ваши статьи были столь-же полезны или всем что имеют меньше добавлений в избранное не место на ресурсе? Если вы знаете в электронике больше, то это не значит что статей для начинающих быть не должно, как по мне отвратительная позиция: «Если я знаю по какой-то теме больше, то статей проще не должно существовать».
  • +2
    Спасибо за толковую инструкцию — все «грабли» отражены.

    Дополните, пожалуйста, блок про AT-команды упоминаниями «AT+NAME» и «AT+PSWD» — переименовать модуль во что-то более удобное и задать PIN — востребованные задачи.
    • 0
      Хорошо, добавлю под спойлер.
  • +2
    А еще можно COM по WIFI пробросить — Hi-Link HLK-RM04.
    • 0
      Спасибо, когда искал как можно пробросить СОМ по воздуху, не нашел этого модуля. Но что-то мне подсказывает что купить его будет сложнее и нужно будет два модуля или какой-то специальный драйвер, а в случае с BlueTooth хватает одного модуля, а с компьютера соединение проходит через стандартный встроенный модуль.
      • 0
        Одного будет достаточно. А купить — от 15 до 20 $. Ваше решение сложнее но дешевле.
  • 0
    Спасибо за инструкцию! У меня самостоятельно подключиться по блютуз так и не получилось. Надеюсь что с Вашей помощью всё получится.
  • 0
    Лежит у меня BT модуль, но все руки не доходят. Начитался что есть разные грабли.
    Вот подскажите а почему нельзя использовать HC-06?
    И вообще существует какой то метод однозначной идентификации BT модуля?
    • +1
      Прошивка HC-05, в отличие от HC-06, при установке соединения меняет сигнал на 32 выводе — это нужно чтобы хардварно сбросить программируемый Arduino и начать процесс заливки. Можно не перепрошивать, а нажимать кнопку RESET на плате каждый раз перед заливкой, но это утомляет.

      Идентификацию по внешнему виду можно произвести, если не все ножки Bluetooth-модуля запаяны или есть под рукой мультиметр. У HC-05 к светодиоду, распаянному на самом модуле, идет проводник от ноги 31, а у НС-06 от ноги 24. Кстати, после перепрошивки светодиод на модуле перестанет работать, чтобы вернуть его к жизни, нужно перебросить его с ноги 24 на ногу 31.
  • 0
    • Силовые цепи — коммутирование 220В. Одна ошибка в соединении и прощай USB-контроллер любимого ситемного блока.
    • Радиочастотные цепи — много наводок по питанию.

    Только не говорите мне, что в подобных проектах Вы действительно используете Arduino. Пожалуйста.
    • 0
      Хорошо, я постараюсь не проболтаться, что первая фотка в статье — это 433МГц приемник сигнала с датчика температуры, который не работает при питании от компа из-за наводок по питанию, а второй модуль у меня коммутирует светодиодное табло с довольно мощным блоком питания, и соединенять его с компьютером как-то нет желания. И в обоих случаях прототипирование на беспаечной макетке — самый быстрый и дешевый способ.
      • 0
        Я имел ввиду более сложные устройства и более надежные компоненты.
        • 0
          Боюсь Вас разочаровать, но моя квалификация не позволяет мне собирать что-то более серьёзное, для меня это просто хобби.
  • 0
    «Не выходит каменный цветок»…

    У меня Pro Mini и модуль JY-MCU HC-05 — ровно как у вас на первой картинке. Модуль настроен на скорость 57600, при открытии Serial monitor частое мерцание LED на BT-модуле сменяется редким, по экрану бегут отправляемые Ардуиной данные. Т.е. всё подключено верно.

    Но вот при попытке прошить получаю ошибку

    avrdude.exe: ser_open(): can't open device "\\.\COM4"

    Скорость в boards.txt указана верная, те же 57600, провод к 32 ноге припаян аккуратно, конденсатор-резистор-LED спаяны правильно (светодиод загорается).

    Что может быть не так, как думаете?
    • 0
      Строчку *.upload.disable_flushing не забыли добавить?
      • 0
        Не забыл.

        Единственное подозрение — BT настроен с параметром «AT+UART=57600,1,0» (1 stop bit, no parity bit) а не «AT+UART=57600,0,0», как в вашей инструкции (это я уже посимвольно всё сверяю). Приду домой, поправлю, посмотрю, поможет ли.
        • 0
          стоп-биты отсутствовать не могут(иначе никак не понять где конец а где начало передачи следующего байта), выбор идет между 1-1.5-2 стоп-бита. «0» соответствует скорей всего одинарному стоп-биту и к проблеме врятли приводить будет.
          • 0
            Прочитал документацию на команду

            AT+UART=<Param1>,<Param2>,<Param3>
            Param1: baud rate (bits/s)
            Param2: stop bit
            0 — 1 bit
            1 — 2 bits
            Param3: parity bit
            0 — None
            1 — Odd
            2 — Even


            Т.е. у автора — 1 стоп-бит, у меня — два. Надо будет проверить, не в этом ли засада.
            • 0
              если компьютер выдаёт один бит, то модуль вполне может паниковать из-за ошибки «framing error» и не пущать данные дальше. А ведь информация об ошибке остается сугубо внутри модуля…
            • 0
              Проверил. Проблема была именно в стоп-битах.
  • 0
    Спасибо за статью. У меня как раз на даче метеостанция в которую каждый раз для обновления прошивки лазить не удобно.
  • 0
    C Pro Mini срослось, скетч грузится. А вот с UNO -нифига, т.к. скорость загрузки для нее 115200, если ставишь 57600, то загрузка не идет.
    Надо попробовать установить AT+UART=115200,0,0

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