Как обеспечить беспроводную передачу данных между arduino?

elenik72
Offline
Зарегистрирован: 23.10.2016

Доброго времени суток вам, господа!



Такой вопрос возник, как осуществить беспроводную передачу данных между ардуино, а именно массивы данных, как, например, g-code.

Чтобы понимать куда и зачем это все.

Поставлена задача реализовать проект, демонстрирующий роевую систему, как у животных. Суть проекта будет заключаться в том, что имеется некий робот-поводырь, который будет проезжать лабиринт, находить кратчайший путь и записывать это все в массив (типа карты). Далее этот массив координат отсылается другим ардуино-роботам и они уже сразу движутся по кратчайшему пути, без всяких алгоритмов (кроме регуляторов, чтобы позиционироваться относительно стен).

ptr
Offline
Зарегистрирован: 28.05.2016

Вроде бы самый бюджетный вариант на 2.4ГГц будет: https://ru.aliexpress.com/item/Similar-NRF24L01-2-4G-Wireless-Data-Trans...

Logik
Offline
Зарегистрирован: 05.08.2014

Вы взялись за потенциально сложную задачу и вероятно столкнетесь с нехваткой ресурсов контроллера. Потому не с каналов надо начинать. Разумный подход - сервер на ПК, хранящий и обрабатывающий все что можно, а роботы обоих типов конектятся к серверу как клиентіы по WiFi. В принципе если представляете четко что функцию сервера может и поводырь потянуть - ну пусть он и WiFi подымает.

Вобще задачу надо сразу отмоделировать на ПК. Много шансов что проект на этой стадии и зависнет.

Бюджетный 2,4ГГц предполагант что проблемы разделения канала между роботами прийдется както решать самому. 

Вобщем я за WiFi , темболее что есть шанс всего робота-рядового просто на esp8266 сделать.

elenik72
Offline
Зарегистрирован: 23.10.2016

На самом деле, этот проект не несет технической ценности и изначально вообще предложили на Lego Mindstorms ev3 сделать, чтобы все просто и быстро. Смысл будет чисто демонстрационный, особо вдаваться в подробности не будут. Но тем не менее хочется сделать довольна-таки хороший проект и тоже думал, что все данный будут иметь посредника - компьютер, т.е сервер, где будет одно приниматься и одно отдаваться. Рассмотрю идею с есп8266 и компьютером-посредником. Спасибо за ответ и толчком в данном направлении.

a5021
Offline
Зарегистрирован: 07.07.2013

Logik пишет:
Бюджетный 2,4ГГц предполагант что проблемы разделения канала между роботами прийдется както решать самому.

Там нечего разделять. У каждого ресивера может быть собственный адрес, плюс встроенная фишка -- multiceiver, с помощью которой можно одновременно "слушать" до пяти логических каналов на рабочей частоте. Только одними встроенными средствами на NRF24L01 можно обеспечить работу множества трансиверов в одном месте на единственном рабочем канале.

Logik
Offline
Зарегистрирован: 05.08.2014

Адрес - хороше, но важно чтоб несколько роботов не начали передавать одновременно. Там есть средства арбитража какие либо?

 

ptr
Offline
Зарегистрирован: 28.05.2016

MultiCeiver как раз позволяет одному приемнику слушать до шести передатчиков на одной частоте.

Но в описанной ТС ситуации это совершенно не требуется. Достаточно одного первичного передатчика у "поводыря", а все остальные будут первичными приемниками. Так как в рамках ShockBurst приемник имеет право отзываться только после запроса передатчика, а на адрес выделяется от 3 до 5 байт, то один первичный передатчик, теоретически, может обслуживать триллион приемников. Практически ему, конечно, и времени на это не хватит, и адреса состоящие только из единиц или нулей для данной технологии не желательны.

Пожертвовав надежностью, от использования механизма подтверждения ShockBurst в этой задаче можно отказаться. Настроить все приемники на один адрес, запретив им вообще что-то вякать. А рассылать информацию о прохождении на этот широковещательный адрес несколько раз, без запроса подверждения (NO_ACK=1). Все же, во-первых, высокой надежности тут явно не требуется, во-вторых, условия тепличные. Даже с подтверждением, повторно посылать все равно будешь ограниченное количество раз, но для каждого приемника. То есть, если 8 приемников и каждому перепосылать надо дважды, то это замет в два раза больше времени, чем всем восьми послать восемь раз одно и то же.