Технический форум по робототехнике.
dimamichev » 24 окт 2020, 11:11
При конструировании мобильных платформ (в моём случае игрушек на Ардуино) как то задумался о дистанционном варианте взаимодействия с платами.Готовых доступных вариантов почему-то не нашёл. Захотелось придумать вариант платы-расширения под про мини или нано. На данный момент задача не решена полностью, но выделены три подзадачи: дистанционное включение-выключение платы, дистанционная загрузка скетчей из IDE, дистанционное управление работой загруженного варианта.
В данной теме предлагаю делиться соображениями по оптимальному решению. Сам пока вразумительно научился заливать скетчи по воздуху, этим умением и поделюсь...
Сначала ознакомился с несколькими вариантами решений из "интернетов"
https://www.drive2.ru/c/2749401/https://www.pvsm.ru/arduino/69006http://robocraft.ru/blog/3089.htmlhttps://yandex.ru/video/preview?text=загрузка%20скетчей%20по%20блютуз&path=wizard&parent-reqid=1603514788456649-147199760590468659800107-production-app-host-man-web-yp-353&wiz_type=v4thumbs&filmId=4660038959776800802
Все они используют модуль HC-05 и требуют его перенастройки с использованием АТ команд. Поэтому вначале, следуя рекомендациям
https://kolotushkin.com/article.php?id=30научился менять скорость обмена данными...
Добавлено спустя 1 час 33 минуты 24 секунды:Далее действовал по алгоритму:
1. Добавил строчку в файл Arduino IDE чтоб HC-05 не сбрасывал соединение при перезагрузке
2. Загрузил проводным способом тест-скетч блинка
3. Собрал схему
4. Подключил модуль связи на ПК
5. Настроил порт, плату и монитор для связи
6. Стал передавать данные- паузы между вспышками светодиода
7. Залил по воздуху этот же скетч в плату
8. Послал "0"- перезагрузил плату
далее повторял пункты 6-8 несколько раз.
- Код: Выделить всё • Развернуть
//тест "блинк" для дистанционной загрузки скетчей в плату ардуино уно
long Y=0;//пременная хранения моментов времени
int t=1000;// переменная хранения длительностей пауз между переключениями светодиода
void setup()
{
Serial.begin(115200); // скорость 115200 для Arduino UNO,
// может быть разная для разных моделей плат
////////////
pinMode(13,OUTPUT);
digitalWrite(13,LOW);
}
void loop()
{
if(millis()-Y>t){Y=millis();digitalWrite(13,!digitalRead(13));}//мигаем светодиодом как угодно с паузой
t=CheckSerial();//по поступившей команде выставляем паузу
}
основной и добавочный ino. в папку основного
- Код: Выделить всё • Развернуть
//
int uploadpin=7;// вывод платы для осуществления аппаратной перезагрузки, соединён с RES
String inputString;// строки данных
int n=1000;//переменная хранения команды-числа
/////////////////////////////////////////////////////////////////////////////////////////////////
//ФУНКЦИИ ПРИЁМА И ОБРАБОТКИ КОМАНД-ДАННЫХ
int CheckSerial()
{
//////////////////////////////////////////////////////////////////////////////
while (Serial.available())//считываем строку данных пока они поступают
{
char inChar = (char)Serial.read();
if (inChar == '\n'||inChar == ' ') //если окончание строки или запрос на загрузку
{
MakeCmd();//обрабатываем её данной функцией
break;
}
else inputString += inChar;// иначе удлиняем строку на один символ
}
return n;// возвращаем значение переменной как значение всей функции
}
/////////////////////////////////////////////////////////////////////////////////
void MakeCmd()
{
int y = inputString.length(); // присваиваем переменной у число символов в строке
if (y < 1 || y > 4){inputString = "";return;} //если их меньше 1 или больше 4, выходим из функции
String cmd = inputString; // передаём строку другой переменной
inputString = "";//"обнуляем переменную"
//////
if (cmd == "0") { //если получили ноль
Serial.write(0x14); // ответить avrdude.exe
Serial.write(0x10); // для синхронизации
delay(10);
pinMode(uploadpin,OUTPUT); //ЭТО ВЫЗОВЕТ аппаратный РЕСЕТ
}
if (cmd != "0"){ n=cmd.toInt();} // преобразуем строку в номер команды-число
//////
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
Добавлено спустя 3 минуты 7 секунд:Для связи с пк использую модуль такой: Bluetooth 4.0 адаптер DEXP AT-BT401
- Вложения
-
![рис.6.jpg (259.74 КиБ) Просмотров: 2474 рис.6.jpg](./download/file.php?id=50135&t=1&style=9&sid=ca7accf0b0867c4b49256692ed507e62)
-
![настройки — копия.jpg (64.58 КиБ) Просмотров: 2476 настройки — копия.jpg](./download/file.php?id=50134&t=1&style=9&sid=ca7accf0b0867c4b49256692ed507e62)
-
![настройки.jpg (237.35 КиБ) Просмотров: 2477 настройки.jpg](./download/file.php?id=50133&t=1&style=9&sid=ca7accf0b0867c4b49256692ed507e62)
-
![схема заливки скетча.jpg (36.53 КиБ) Просмотров: 2482 схема заливки скетча.jpg](./download/file.php?id=50132&t=1&style=9&sid=ca7accf0b0867c4b49256692ed507e62)
-
![ВСТАВКА строки.jpg (246.8 КиБ) Просмотров: 2474 ВСТАВКА строки.jpg](./download/file.php?id=50131&t=1&style=9&sid=ca7accf0b0867c4b49256692ed507e62)
setar » 25 окт 2020, 22:35
не очень понял что значит не нашли готовых вариантов , они есть во всех примерах arduino IDE, называется Arduino OTA
ну а сама технология пришла вместе с ESP8266
https://radioprog.ru/post/885ну а когда на связке с ESP8266 находится любая ардуина, то и прошивается спокойно по сериалу
dimamichev » 26 окт 2020, 08:08
Имелось в виду с встроенным блютуз модулем, на алиэкспресс, с множеством описаний использования)))
Есть такой вариант:
https://www.arduino.cc/en/Main/ArduinoB ... dBluetooth, но в широкой продаже не нашёл совсем
Есть ещё такой вариант, дорогой по сравнению с дискретной ардуино и блютуз модулем, но разжёванной информации тоже не нашёл.
https://aliexpress.ru/item/400023634444 ... web201603_ESP8266 ни разу не использовал, темно для меня это пока. И нужна ли ей ардуина?
Добавлено спустя 10 минут 40 секунд:ESP-01 пробовал для сравнения связи с HC-05 по смартфону. Связь была капризнее, дистанция устойчивая в связи не многим больше чем с блютуз, платка всегда теплая. Как то не понравилось, валяется в ящике пока. Может конечно смартфон виноват)))
setar » 26 окт 2020, 11:15
ESP-01 это и есть вариант компоновки чипа ESP8266 в модуль.
dimamichev писал(а):И нужна ли ей ардуина?
для маленьких схем - нет, а если требуется много ног с хорошим ЦАП/АЦП или нормальным аппаратным срабатыванием по прерываниям то ардуина логична как модуль расширения.
Я применял такую связку для модулей умного дома.
Если просто датчик температуры/влажности + пара реле то просто модуля на базе ESP8266 достаточно.
А вот для такого варианта ног уже не хватает : датчик движения + температура/влажность + кнопка + датчик дыма + датчик огня + датчик освещения + трехцветный светодиод + пищалка
HarryStar » 28 окт 2020, 09:33
Разок попробовав 8266 как самостоятельную ардуину, "выкинул" все свои наны и меги.
Это ОЧЕНЬ удобно
1) Все тоже самое (софт, интерфейс, большинство библиотек)
2) Встроенный вайфай - а это удаленная отладка (терминалка рулит), управление, расширение ф-ла
3) Прошивка по воздуху встроенная в IDE - вообще супер. Я теплицу в саду так постоянно обновляю.
4) МНОГО оперативки. На порядок, про память можно вообще не думать после наны.
5) Можно питать платы напрямую от лития и они долго и нормально работают даже при полном разряде (нана при этом глючит по полной, а часть 5в периферии отрубается в самом начале).
Из минусов setar уже озвучил - мало портов. Но! Для большинства проектов хватает, есть I2C платы расширения, ну и на крайняк наны-меги в качестве расширения.
Рекомендую платы WEMOS - мелкие типа наны, куча дешевых шилдов, возможно изготовление шилдов из дешевых макеток.
На фотке WEMOS с тройником-базой и 5 шилдами (2 экрана, термодатчик, дат.влажности, кнопка)
- Вложения
-
![wemos.jpg (56.54 КиБ) Просмотров: 2313 wemos.jpg](./download/file.php?id=50141&t=1&style=9&sid=ca7accf0b0867c4b49256692ed507e62)
Angel71 » 28 окт 2020, 10:57
32я чуть лучше иногда - 2+1 ядра, памяти приятно и двухрежимный блютуз иногда очень полезная штука. но есп82/32, стм32, авр,... к сожалению не идеальные для всего. так что даже если в основном на есп или ещё чём делать, завалявшаяся ардуинка на авр периодически тоже может быть полезна (с 5в дружит, для быстрой проверки новых модуле/деталек иногда самое то).
setar » 28 окт 2020, 12:22
у ESP8266 есть еще одна проблема - нестабильный ШИМ и негарантированная задержка в обработке прерываний.
Высокоскоростная передача данных и обработка затруднена.
ESP32 лишена этих недостатков, ее основная проблема - высокая (надеюсь пока) стоимость.
dimamichev » 28 окт 2020, 14:16
Ну вот с практической точки зрения для меня:
https://aliexpress.ru/item/32822012864. ... web201603_такой вариант безпроводной заливки скетчей? По цене доступнее чем ардуино и блютуз модуль почти в 2 раза. Но!, 3.3 Вольта - что делать?, гексапода, квадропода так просто не перенести с одной платы на другую, светодиодный куб на умных пикселях тоже. Мелкие ходуны - 2-4 сервы легко ходят от 1 аккумулятора на 3,7 В.
Angel71 » 28 окт 2020, 14:42
esp32 ни на одном из пинов с 5в не дружит. если сравнивать с 8266, периферия получше. а если с стм32, переферия уже немного печатльно выглядит.
![Pardon :pardon:](http://roboforum.ru/images/smilies/pardon.gif)
кто как, а себе взял немного разных платок с авр/есп8266/есп32/стм32 и в зависимости от того, что сделать нужно, использую более подходящую.
uno подобные платки немного громоздкие. если подходит, кроме esp8266 есть и с eps32 (к примеру
такой, есть и другие). есть очень удобная lolin32 light (из плюшек это зарядка лития). много других ещё есть, спешить покупать первую попавшуюся не стоит.
dimamichev » 28 окт 2020, 15:29
Платы громоздкие, но я для самообучения хочу взять. Просто на уно с горкой проводов создаю скетч, а в конструкцию идёт про мини 168 чаще всего, если уно жалко. Esp32 в плане программирования аналогична 8266? Управляющие импульсы на сервы можно и 3,3 Вольта, а питать 5 (правда я не проверял ни разу).
Angel71 » 28 окт 2020, 16:23
у всех ардуино совместимых плат есть свои небольшие нюансы, но в общем в плане программирования разницы не особо. если цена примерно одинаковая, имхо лучше взять есп32.
есп от 5в поплохеет или сразу или со временем, так что поакуратней и не подавай на vin 5в или больше. на самом модуле ldo/dc-dc обычно нет, а на платах очень даже часто. и про не толерантность к 5в не забывай. что-то на прямую можно подключать, но иногда резистор, конвертер уровней,... или приветствуется или обязательно.
п.с. чуть не забыл. обращай внимание на то, какой юсб разъём запаян. в есп32 нет юсб/юсб-уарта, так что если на плате есть, это сильно приятней.
dimamichev » 28 окт 2020, 18:12
Заказать решил такую, по идее, должна через юсб от 5 вольт работать, на выходах 3,3 давать. В настройках переключаться в ОТА режим. Примеров с сервами и без не нашёл, только блинк промелькнул на одном из сайтов.
- Вложения
-
![WeMos-D1-R32-ESP32-CH340G---ESP-32-Arduino-Uno-WiFi-IoT-Board-(2).jpg (284.68 КиБ) Просмотров: 2207 WeMos-D1-R32-ESP32-CH340G---ESP-32-Arduino-Uno-WiFi-IoT-Board-(2).jpg](./download/file.php?id=50142&t=1&style=9&sid=ca7accf0b0867c4b49256692ed507e62)
Angel71 » 28 окт 2020, 18:54
и про сервы и про многое другое, мягко говоря всего валом.
![Pardon :pardon:](http://roboforum.ru/images/smilies/pardon.gif)
как можно не найти, когда и яндекс и гугля (всё более и более невменяемая) даже по запросу "esp32 servo" сходу кучу всего выдают...
dimamichev » 28 окт 2020, 19:00
Точно, не то запрашивал, надо брать плату.
dimamichev » 30 окт 2020, 19:56
Купил плату, ради интереса глянул как реализуется ОТА.
http://digitrode.ru/computing-devices/m ... e-air.html Совсем не проще, скетч добавочный огромен ))) Через блютуз надо будет пробовать.
(финал статьи) - Вот как ESP32 может быть запрограммирован по воздуху методом OTA без использования последовательной проводной связи.