Ардуино прошивка через блютуз

Arduino.ru

Возникло желание не только дистанционно управлять мобильной платформой игрушки-робота через блютуз с пк, но и перезаливать скетчи на неё. Писать приложения-пульты для пк смог, а вот со скетчами вопрос.

А там нюанс — при перезагрузке ардуино соединение с блютуз модулем разрывается и надо редактировать файлы «ИДЕ» для преодоления проблемы. Вопрос кто так делал и каков конечный результат? Ещё вопрос зачем транзистор для сброса ардуино, почему нельзя LOW подавать на ресет с любого пина? Почему на HC-05 соединяют проводком 34 вывод с 12 если есть кнопка для входа в АТ режим?

hc-05 подключаем как беспроводной uart, предварительно на нём скорость 115200, на дуне optiboot с той же скоростью, в иде выбираем соответственно. При отправке скетча приходится нажимать ресет руками, когда по диоду визуально виден коннект, готово. Авторесет не победил, не напрягает

Ещё вопрос зачем транзистор для сброса ардуино, почему нельзя LOW подавать на ресет с любого пина?

Делал без блютуза, по TX/RX только, без нажатия кнопки.
В скетче резидент нужно держать для старта загрузчика.
Можно без транзистора.

Вот получилось как в статьях написано, напрямую ресет соединяю с А5 проводом. Но!, после загрузки светодиод начинает мигать как надо только после физического кратковременного разрыва связи между A5 и выводом res. Почему так?

//тест "блинк" для дистанционной загрузки скетчей в плату ардуино уно int uploadpin=A5; long Y=0; void setup() < Serial.begin(115200); // скорость 115200 для Arduino UNO, // может быть разная для разных моделей pinMode(uploadpin,OUTPUT); digitalWrite(uploadpin,HIGH); //////////// pinMode(13,OUTPUT); digitalWrite(13,LOW); >void loop() < if(millis()-Y>1000)//мигаем светодиодом как угодно с паузой zagruzka();//запрашиваем функцию о загрузки нового скетча > ///////////////////////////////////////// //функция проверки на загрузку нового скетча void zagruzka() < if( Serial.peek()=='0' ) < for( int i=0; idelay(10); // небольшая задержка > > ///////////////////////////////////////// >

8 с 9 поменять местами. В 24 переименовать в serialEvent.
19 удалить. До чего ж коряво вы пишете.

////////////////////////////////////////////////////// // int uploadpin=8; void setup() < Serial.begin(115200); // baudrate 115200 corresponds Arduino UNO, // it can be different for different boards pinMode(uploadpin,OUTPUT); >void loop() < // your codes here. ///////////////////////////////////////// // Upload checking if( Serial.peek()=='0' ) < for( int i=0; idelay(10); // cannot repeat too fast here > > ///////////////////////////////////////// > // //////////////////////////////////////////////////////

Я лишь слегка исправил исходник и убрал транзистор между ресет и А5 (в исходнике вывод 8).

/тест "блинк" для дистанционной загрузки скетчей в плату ардуино уно int uploadpin=7; long Y=0; bool zagr=false; String inputString;// строки данных int n=2000; void setup() < Serial.begin(115200); // скорость 115200 для Arduino UNO, // может быть разная для разных моделей //////////// pinMode(13,OUTPUT); digitalWrite(13,LOW); >void loop() < if(millis()-Y>n)//мигаем светодиодом как угодно с паузой if(zagr==true)//запрашиваем функцию о загрузке нового скетча if(zagr==false)//ЖДЁМ ПОСТУПЛЕНИЯ КОМАНДЫ В РАМКАХ ТЕКУЩЕГО СКЕТЧА > ///////////////////////////////////////// //функция проверки на загрузку нового скетча void EventSerial() < ////////////////////////////////////////// if( Serial.peek()=='0' ) < for( int i=0; idelay(10); // небольшая задержка > > ///////////////////////////////////////// > ///////////////////////////////////////////////////////////////////////////////////////////////// //ФУНКЦИИ ПРИЁМА И ОБРАБОТКИ КОМАНД-ДАННЫХ void CheckSerial() < ////////////////////////////////////////////////////////////////////////////// while (Serial.available())//считываем строку данных пока они поступают < char inChar = (char)Serial.read(); if (inChar == '\n'||inChar == ',') //если окончание строки < MakeCmd();//обрабатываем её данной функцией break; >else inputString += inChar;// иначе удлиняем строку на один символ > > ///////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////// void MakeCmd() < int y = inputString.length(); // присваиваем переменной у число символов в строке if (y < 1 || y >4) //если их меньше 1 или больше 4, выходим из функции String cmd = inputString; // передаём строку другой переменной inputString = "";//"обнуляем переменную" if (cmd == "Z") < zagr=true;//ПЕРЕХОДИМ В РЕЖИМ ОЖИДАНИЯ ЗАГРУЗКИ СКЕТЧА >else < n=cmd.toInt();>// МЕНЯЕМ ДЛИТЕЛЬНОСТЬ ПАУЗ-СВЕЧЕНИЯ СВЕТОДИОДА ПО ДАННЫМ-КОМАНДАМ > ///////////////////////////////////////////////////////////////////////////////////////////////////////

Чуть улучшил скетч. Оказывается для ресета ардуино надо просто писать pinMode(uploadpin,OUTPUT); — т.е. «антаматически» выставляется низкий уровень при объявлении (ясно зачем был нужен транзистор). Теперь через монитор порта можно управлять мобильной платформой и перезаливать управляющие скетчи в неё дистанционно. Но всё очень зыбко. Для перехода из одного режима в другой приходиться посылать в плату предварительно символ Z. Если забыл и нажал загрузку- IDE «ломается». Приходиться выключать-включать платформу, блютуз-модуль на ПК и закрывать-открывать скетч. Аналогично, если послал Z, а потом ещё какой нибудь символ.

Читайте также:  Лучшие проводные bluetooth наушники

Тренируюсь пока на блинке для 13 пина. Как сделать скетч устойчивым к ошибочным действиям оператора?

Источник

Прошивка 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

Источник

Заливка скетчей через Bluetooth

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

Читайте также:  Sony колонка bluetooth srs xb43

*подразумевается, что вы уже подключили 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 на свой.

Источник

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