Прошивка ардуино по bluetooth
В один прекрасный день я заинтересовался, можно ли зашивать новые скетчи в ардуину через имеющийся у меня Bluetooth модуль HC-06. Поиск информации в русскоязычном сегменте интернета успехов не дал. Поэтому хочу заполнить этот пробел.
*подразумевается, что вы уже подключили HC-06 к вашему компьютеру, и у вас в системе появились 2 com порта. Ком порт нужно выбрать меньший по номеру.
Что нам понадобится:
— Arduino
— HC-06
— любой NPN транзистор
— провод, флюс, припой, паяльник и т.д.
1. Узнаем, какая скорость используется для обмена с bootloader`ом:
Открываем WordPad`ом файл boards.txt, который лежит в Arduino\hardware\arduino
Ищем там свою плату, и смотрим для неё значение upload.speed. Например для Uno значение uno.upload.speed=115200.
Есть другой вариант изменить скорость модуля — через SoftwareSerial. Идея в том, чтобы подключить модуль, например, к пинам 2 и 3; используя пример SoftwareSerialExample (стандартная скорость HC-06 9600 бит/с). При этом замыкать пины RESET и GND не требуется.
Дабы эта доделка не мешала комфортной работе с ардуиной, я reset взял с RESET EN, gnd со светодиода, а управляющим сделал аналоговый пин A5 (он может работать как цифровой.) Потом приклеить транзистор к плате термопистолетом.
В интернетах пишут, что вместо описанного выше достаточно соединить ваш управляющий пин и пин RESET проводом. (There is a reset pin in Arduino UNO. You don't have to solder the transistor. Just connect it to reset pin via jump wire, it works fine.)
4. Самое главное: добавить функцию reset к вашей программе
Упрощенно говоря ардуина слушает Serial, и если найдет сигнал от компьютера, что тот хочет залить новый скетч то перезагрузит ардуину. Единственный минус этого решения — в обмене данными не должно быть нуля («0»), иначе ардуина перезагрузится(например от такой строки «0 „).
В качестве одного из решений было предложено ограничить время, на протяжении которого возможна загрузка скетчей 60 секундами:
То есть вам нужно сбросить ардуину или выключить/включить её для загрузки нового скетча.
Другое решение — перед загрузкой слать в Serial какую-то комбинацию, по которой будет возводиться внутренняя переменная serial_upload. Тогда условие будет выглядеть так:
В общем полет вашей фантазии…
5. Готово. Прикрепите HC-06 к ардуине на тот-же термоклей, и заливайте скетчи по воздуху :)
Программируя Arduino, иногда желательно обойтись без физического соединения через USB к компьютеру, например:
- Силовые цепи — коммутирование 220В. Одна ошибка в соединении и прощай USB-контроллер любимого ситемного блока.
- Радиочастотные цепи — много наводок по питанию.
- Собранные и где-то закрепленные устройства, которые желательно перепрошивать, но неудобно к ним подлезать.
Я использовал наиболее дешёвые Bluetooth-модули с незамысловатым названием «Bluetooth-модуль HC-05(HC-06)». На ebay их можно найти от 200 руб. за штуку, в отечественных магазинах — от 500 руб. Советую брать модуль уже распаянный на переходнике «для Arduino», разница в деньгах минимальная, а экономит время на сборке схемы сопряжения.
Нам нужен именно HC-05, но так как визуально отличить их крайне сложно, велик шанс, что в руках окажется HC-06, даже если на упаковке написано «HC-05», как это произошло со мной:
Можно попробовать отличить по внешнему виду, если не все ножки Bluetooth-модуля запаяны или есть под рукой мультиметр. У HC-05 к светодиоду, распаянному на самом модуле, идет проводник от ноги 31, а у НС-06 от ноги 24.
На фото видно, что на всём ряду запаяна единственная 24-я нога, это стопроцентно модуль HC-06.
К счастью, HC-06 можно перепрошить в HC-05, но придётся найти компьютер с LPT-портом и потратить несколько часов. Инструкцию по перепрошивке можно прочесть здесь. От себя хочу добавить, что под Windows7 прошивка не состоялась, пришлось устанавливать Windows XP, а также в BIOS сменить режим порта LPT на EPP 1.7.
Особенно утомило переключение режимов LPT-порта и настроек в диспетчере утройств, поэтому сразу приведу правильные скриншоты. BIOS:
В диспетчере:
Итак, имеем на руках модуль HC-05. Теперь нужно задать ему параметры работы. Для перевода в режим установки параметров нужно подпаять последнюю, 34-ю ногу к питанию 3.3в.
Затем подключаем к компьютеру через любой переходник 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.
Для автоматического сброса Arduino при установке соединения необходимо вывести 32-ю ногу на разъём, для этого я отрезал ненужный мне вывод «WAKE-UP» и обозначил его как «RESET». Схема переходника получилась такой:
Зажигание светодиода будет показывать установленное соединение.
На этом с пайкой всё, но заливка всё равно пока не заработает. Дело в том, что Arduino IDE при каждой попытке заливки скетчка делает очистку буферов COM-порта, что приводит к закрытию BlueTooth соединения и отмене загрузки.
pro5v328.upload.disable_flushing=true
Не забываем менять первое слово в строке, например, для Arduino Uno это будет:
uno.upload.disable_flushing=true
Теперь заливка должна заработать. Осталось маленькая досаждающая деталь — когда заходим в меню Arduino IDE и выбираем пункт «Tools», программа «морозится» на несколько секунд. Дело в том, что при каждом обращении к данному пункту меню, программа перебирает все доступные в системе, COM-порты, но, неоптимальным способом, что приводит к большим задержкам. Чтобы убрать эту задержку, нужно заменить библиотеку rxtxSerial.dll на доработанную версию, которую можно взять здесь. Кому интересны подробности проблемы, могут ознакомиться с веткой на форуме ардуино.
Вот другой вариант с кнопкой отключения питания и вывода TX от Arduino:
Схема второго варианта (Bluetooth-модуль другой, поэтому пины расположены по другому и Pro Mini не оригинальный, а «Deek-Robot», распиновка зеркальная):
Схема занимает минимум места, подключается быстро, настройки не требует. Также остаётся работоспособной возможность в Arduino IDE включить Serial Monitor и получать данные от устройства как при соединении через USB.
Плата Arduino Uno является чрезвычайно удобным инструментом для тех, кто хочет попробовать свои силы в изучении и программировании микроконтроллеров. Но одним из ее недостатков является то, что для ее программирования необходимо подключение платы к компьютеру по USB кабелю, а это не всегда представляется возможным, например, в случаях, когда плата уже "упакована" внутрь какого-нибудь устройства в закрытом корпусе. Единственно возможным решением в данном случае является беспроводное программирование или, как его еще называют – "программирование по воздуху" (OTA – Over the Air). Подобный вид программирования достаточно легко реализуется в таких микроконтроллерах как ESP8266 и ESP32 поскольку они имеют встроенный контроллер Wi-Fi. Но в Arduino для реализации беспроводного программирования нам необходимо будет задействовать Bluetooth модуль – рассмотрением данных вопросов мы и займемся в данной статье.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- Bluetooth модуль HC05 (купить на AliExpress).
- Резисторы 1 кОм, 2,2 кОм (купить на AliExpress).
- Конденсатор 0,1 мкФ (купить на AliExpress).
- Адаптер питания.
- Макетная плата.
- Соединительные провода.
Bluetooth модуль HC05
Модуль HC05 представляет собой модуль Bluetooth связи, передающий принятую информацию по последовательному порту, специально спроектированный для осуществления беспроводной связи между микроконтроллерами. Bluetooth модуль HC05 позволяет работать как в режиме ведущего (master), так и в режиме ведомого устройства (slave), и переключаться между этими режимами. Его можно подключить с использованием последовательного порта, работающего со скоростью 9600 бод, что позволяет без проблем подключать его к большинству современных микроконтроллеров. Модуль HC05 работает от питающего напряжения 3.3V, но мы можем непосредственно подключать его к напряжению 5V, поскольку в его составе есть встроенный понижающий регулятор напряжения с 5V до 3.3V.
Технология Bluetooth является одним из самых простых способов организации беспроводной связи между электронными устройствами и на нашем сайте она использовалась во многих проектах, полный список которых можно посмотреть по следующей ссылке.
Программирование платы Arduino с помощью технологии Bluetooth
Для беспроводного программирования платы Arduino первым делом мы должны написать программу чтобы плата Arduino отвечала на AT команды. Для этого подключите плату Arduino к компьютеру с помощью USB кабеля и загрузите в нее следующий код программы:
Сегодня мы научимся программировать Arduino и загружать в него эскизы с помощью устройства на Android через Bluetooth HC05.
О проекте
В данном проекте мы хотим показать вам, как запрограммировать ваш Arduino Uno через ваше устройство на Android через Bluetooth. Это очень просто и довольно дешево. Также проект даст понимание того, как программировать Arduino, где бы мы не находились по беспроводному Bluetooth.
Комплектующие
Оборудование:
-
;
- Модуль Bluetooth HC-05;
- Мини-макетка;
- Конденсатор 1 микрофарад / 16В;
- Резистор 100 Ом;
- Перемычки - 5 шт.;
- USB-кабель;
- Android-устройство с Android 4.0.0+ (доступно Bluetooth);
- Ноутбук / PC.
Программное обеспечение:
Программируем Ардуино используя Ноутбук или PC
Начните с того, что скопируйте код, который приведен ниже. Затем, вставьте его в Arduino IDE. Скомпилируйте. Загрузите.
Этот код содержит несколько функций для изменения параметров модуля Bluetooth HC-05:
Дополнительно вы можете сменить пароль, чтобы использовать не стандартный пароль при спаривании, AT+PSWD=xxxx.
Схема соединения
Для соединения всех комплектующих следуйте приведенному выше изображению. Макет относительно прост.
Если вы хотите, вы можете заменить макет PCB-прототипом печатной платы с некоторыми пайками, тогда вы получите небольшой размер, похожий на шилд для Arduino.
Собираем детали вместе
В реальности это должно выглядеть примерно так, как на картинках ниже. Конденсатор и резистор используются для автоматической перезагрузки Arduino при загрузке скетча через Bluetooth.
Настраиваем Bluetooth HC-05
В основном на этом шаге говорим о том как настроить HC-05 через команду AT, после этого шага вы установите для HC-05 некоторые параметры.
Далее вы загружаете эскиз в Arduino, в этом коде есть последовательная функция для связи через pin RX / TX (D0 / D1), который при подключении к выходу HC-05 RX / TX заставит настроить HC-05 на AT командный режим. Просто выполните шаг, как на фотографиях.
• Нажмите и удерживайте кнопку KEY.
• Подключите USB-кабель для питания Arduino.
• Подождите около 5 секунд (удерживайте кнопку KEY).
• Отключите и снова подключите USB для сброса из режима AT-команды.
Установка приложения Bluino Loader
Далее нам нужно установить приложение Bluino Loader из Google Play Store.
Первое приложение, которое вам нужно знать - это «Bluino Loader» для Andorid 4.0 или выше с доступным соединением Bluetooth. Вы можете скачать или установить его из магазина Google Play:
Bluino Loader - версия для Arduino IDE
Pro-версия для поддержки разработчика Bluino Loader Pro для Arduino IDE
Это приложение предназначено для работы с Arduino Uno, вы можете писать, редактировать и загружать эскизы в Arduino uno по bluetooth HC-05. Приложение легкое для понимания, как Arduino IDE, есть много примеров эскиза, а также вы можете добавить некоторые библиотеки, просто скопируйте папку библиотеки в папку BluinoLoader / libraries.
Загрузка эскиза работает очень хорошо по Bluetooth. Так что можно поставить этому приложению оценку 4 из 5.
Загружаем простейший скетч
После завершения установки вы можете открыть пример простого скетча:
BluinoLoader/examples/02.Basic/Blink/Blink.ino
После всех шагов ваш Arduino будет мигать светодиодом led 13, а вы дальше можете повторить все шаги, чтобы загрузить другой эскиз.
Читайте также: