В один прекрасный день я заинтересовался, можно ли зашивать новые скетчи в ардуину через имеющийся у меня 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; i<100; i++ ) // повторить проверку { if( Serial.read()=='0' && Serial.read()==' ' ) { Serial.write(0x14); // ответить avrdude.exe Serial.write(0x10); // для синхронизации digitalWrite(uploadpin,HIGH); // подтянуть ресет к земле } delay(10); // небольшая задержка } } ///////////////////////////////////////// }
Упрощенно говоря ардуина слушает Serial, и если найдет сигнал от компьютера, что тот хочет залить новый скетч то перезагрузит ардуину. Единственный минус этого решения - в обмене данными не должно быть нуля ("0"), иначе ардуина перезагрузится(например от такой строки "0 ").
В качестве одного из решений было предложено ограничить время, на протяжении которого возможна загрузка скетчей 60 секундами:
if( Serial.peek()=='0' && millis()<60000)
То есть вам нужно сбросить ардуину или выключить/включить её для загрузки нового скетча.
Другое решение - перед загрузкой слать в 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 на свой.
0 комментариев на «“Заливка скетчей через Bluetooth”»
У меня вопрос к автору статьи. Почему IDE видит только порт не меньший по номеру а больший по номеру? Не могу выбрать нужный мне порт. В чем может быть причина?