Прошивка Arduino по Bluetooth (HC-05)
Имеется модуль HC-05.
Нужно реализовать с его помощью передачу данных и прошивку между arduino и ПК либо Смартфоном.
Пробовал по этому мануалу (добавил делитель напряжения для согласования уровней), но при прошивке выскакивает ошибка, каждый раз разная.
Подскажите решение.
Заранее благодарю!
P.S. Если использовать эту схему но заменить bluetooth модуль на usbuart то прошивка идет нормально.
P.P.S. прошивка на bluetooth модуле левая какая-то (+VERSION:hc01.comV2.1).
ПК с LPT портом у меня нет, так что прошить модуль наверное никак.
Добавлено через 9 минут
Пример ошибки:
avrdude: Version 6.3-20171130
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch
System wide configuration file is «C:\Program Files USER\Arduino\hardware\tools\avr/etc/avrdude.conf»
Using Port : COM4
Using Programmer : arduino
Overriding Baud Rate : 57600
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xa4
Добавлено через 5 минут
resp=0x каждый раз разный.
Добавлено через 10 минут
Если записать на чип заранее такой скетч то кое как по блютузу будет присылаться . TEST.
void setup() { Serial.begin(57600); } void loop() { Serial.println(". TEST. "); }
Кое как потому что очень медлено, хотя задержек в скетче нет.
Добавлено через 13 минут
Пробовал менять чипы (dip корпус), на всех одна проблема.
Добавлено через 3 минуты
Пробовал заменять конденсатор (reset) на перемычку.
Заливка скетчей через 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 по BLE
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно.
Вам необходимо обновить браузер или попробовать использовать другой.
Leencore
Всем привет.
Речь пойдёт о способе прошивки Arduino по Bluetooth Low Energy из Arduino IDE. Данный способ подойдёт для любого микроконтроллера.
Подробнее об этой технологии можно почитать, например, на Википедии
Поиски в Интернет на тему прошивки через BLE не увенчались успехом, по-этому было решено начать разработку в этом направлении.
Хочу поделиться с вами результатом.
Для реализации потребовалось создать программный мост из эмулятора нуль-модемного кабеля и программного соединения его с BLE.
В качестве эмулятора нуль-модемного кабеля используется com0com, в качестве программного соединения мною была написана программа ble2com
Аппаратная часть, по сути, состоит всего из двух компонент Arduino Pro Mini на трёх вольтовой логике и JDY-19 — BLE платы китайского происхождения.
Схему их подключения между собой можно посмотреть на EasyEDA
Видео с примером прошивки можно посмотреть на YouTube
На качество приёма-передачи данных кроме JDY-19 мною были протестированы JDY-08 и Arduino BLE. Результаты не порадовали. В них была замечена потеря передаваемы данных. Хотелось бы протестировать другие BLE модули.
Если вы будете прошивать Arduino через BLE, то, пожалуйста, пишите о результатах и с помощью какой платы BLE выполнялась прошивка.
Задавайте вопросы, если они возникнут, по возможности на них отвечу.
P.S.:Актуальные datasheet по этой и другим платам серии JDY можно найти только у китайцев на BaiDu
Загрузка скетчей в Arduino через Bluetooth
Программируя 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, в отличие от HC-06, при установке соединения меняет сигнал на 32 выводе — это нужно чтобы хардварно сбросить программируемый Arduino и начать процесс заливки. Можно не перепрошивать, а нажимать кнопку RESET на плате каждый раз перед заливкой, причем нужно ловить нужный момент, что крайне неудобно. Выглядит это примерно так
Итак, имеем на руках модуль 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 соединения и отмене загрузки.
Чтобы избежать этого, нужно поправить конфигурацию 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:
Схема второго варианта (Bluetooth-модуль другой, поэтому пины расположены по другому и Pro Mini не оригинальный, а «Deek-Robot», распиновка зеркальная):
Схема занимает минимум места, подключается быстро, настройки не требует. Также остаётся работоспособной возможность в Arduino IDE включить Serial Monitor и получать данные от устройства как при соединении через USB.
P.S.
Оказалось, что есть уже готовые такие переделанные модули, и возможно когда-нибудь мы увидим их в продаже в нашей стране.