Программирование arduino через bluetooth

Заливка скетчей через 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.

2. Нужно настроить Bluetooth модуль на эту скорость.
Для этого подсоединим его к ардуине со следующей распиновкой:
VCC -> 5V
TX -> TX(pin1)
RX -> RX(pin0)
GND -> GND
Соединим проводом пин RESET и GND, подключим ардуину к компьютеру.
Откроем Arduino IDE -> Serial monitor. Сейчас мы можем посылать модулю АТ команды(http://www.micro4you.com/files/ElecFreaks/Bluetooth%20HC-06.pdf). Для начала напишите «АТ», модуль должен ответить «ОК». Если ответил — значит всё подключено правильно. Затем вам нужно написать команду «AT+BAUDX», где Х — номер, в зависимости от нужной скорости. Для Uno нужна скорость 115200, значит я пошлю команду «AT+BAUD8». Модуль должен ответить «OK115200».

Есть другой вариант изменить скорость модуля — через SoftwareSerial. Идея в том, чтобы подключить модуль, например, к пинам 2 и 3; используя пример SoftwareSerialExample (стандартная скорость HC-06 9600 бит/с). При этом замыкать пины RESET и GND не требуется.

3. Добавить reset. Для этого нам потребуется любой NPN транзистор(у меня завалялся S9014, http://www.stabilizatornapryjeniy.ru/article-s9014_tranzistor.html).
Коллектор нужно соединить с пином 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 к вашей программе

int uploadpin=A5; void setup() < Serial.begin(115200); // скорость 115200 для Arduino UNO, // может быть разная для разных моделей pinMode(uploadpin,OUTPUT); >void loop() < // ваша программа тут. ///////////////////////////////////////// // проверка на загрузку нового скетча if( Serial.peek()=='0' ) < for( int i=0; idelay(10); // небольшая задержка > > ///////////////////////////////////////// >

Упрощенно говоря ардуина слушает Serial, и если найдет сигнал от компьютера, что тот хочет залить новый скетч то перезагрузит ардуину. Единственный минус этого решения — в обмене данными не должно быть нуля («0»), иначе ардуина перезагрузится(например от такой строки «0 «).
В качестве одного из решений было предложено ограничить время, на протяжении которого возможна загрузка скетчей 60 секундами:

Читайте также:  Потолочный блютуз динамик встраиваемый

То есть вам нужно сбросить ардуину или выключить/включить её для загрузки нового скетча.
Другое решение — перед загрузкой слать в Serial какую-то комбинацию, по которой будет возводиться внутренняя переменная serial_upload. Тогда условие будет выглядеть так:

if( Serial.peek()=='0' && serial_upload=1)

В общем полет вашей фантазии.

5. Готово. Прикрепите HC-06 к ардуине на тот-же термоклей, и заливайте скетчи по воздуху 🙂

Ссылки:
http://forum.arduino.cc/index.php?topic=128115.0
http://ame2.asu.edu/staff/kidane/ArdWilessBtProg.pdf
http://atroshin.ru/ru/content/avtomaticheskaya-perezagruzka-arduino-pri-podklyuchenii-terminala

Update:
для того, чтобы при открытии Arduino IDE сразу открывался скетч с прошивкой по воздуху замените файл BareMinimum.ino по пути Arduino\examples\01.Basics\BareMinimum на свой.

Источник

Беспроводное программирование платы Arduino Uno по Bluetooth

Плата Arduino Uno является чрезвычайно удобным инструментом для тех, кто хочет попробовать свои силы в изучении и программировании микроконтроллеров. Но одним из ее недостатков является то, что для ее программирования необходимо подключение платы к компьютеру по USB кабелю, а это не всегда представляется возможным, например, в случаях, когда плата уже «упакована» внутрь какого-нибудь устройства в закрытом корпусе. Единственно возможным решением в данном случае является беспроводное программирование или, как его еще называют – «программирование по воздуху» (OTA – Over the Air). Подобный вид программирования достаточно легко реализуется в таких микроконтроллерах как ESP8266 и ESP32 поскольку они имеют встроенный контроллер Wi-Fi. Но в Arduino для реализации беспроводного программирования нам необходимо будет задействовать Bluetooth модуль – рассмотрением данных вопросов мы и займемся в данной статье.

Внешний вид беспроводного программирования платы Arduino Uno по Bluetooth

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. Bluetooth модуль HC05 (купить на AliExpress).
  3. Резисторы 1 кОм, 2,2 кОм (купить на AliExpress).
  4. Конденсатор 0,1 мкФ (купить на AliExpress).
  5. Адаптер питания.
  6. Макетная плата.
  7. Соединительные провода.

Bluetooth модуль HC05

Модуль HC05 представляет собой модуль Bluetooth связи, передающий принятую информацию по последовательному порту, специально спроектированный для осуществления беспроводной связи между микроконтроллерами. Bluetooth модуль HC05 позволяет работать как в режиме ведущего (master), так и в режиме ведомого устройства (slave), и переключаться между этими режимами. Его можно подключить с использованием последовательного порта, работающего со скоростью 9600 бод, что позволяет без проблем подключать его к большинству современных микроконтроллеров. Модуль HC05 работает от питающего напряжения 3.3V, но мы можем непосредственно подключать его к напряжению 5V, поскольку в его составе есть встроенный понижающий регулятор напряжения с 5V до 3.3V.

Читайте также:  Solar powered handsfree bluetooth

Внешний вид Bluetooth модуля HC05

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

Программирование платы Arduino с помощью технологии Bluetooth

Для беспроводного программирования платы Arduino первым делом мы должны написать программу чтобы плата Arduino отвечала на AT команды. Для этого подключите плату Arduino к компьютеру с помощью USB кабеля и загрузите в нее следующий код программы:

Источник

Загрузка скетчей в 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

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

image

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

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

image

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

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.
Оказалось, что есть уже готовые такие переделанные модули, и возможно когда-нибудь мы увидим их в продаже в нашей стране.

Источник

Оцените статью
Adblock
detector