Как обеспечить беспроводную передачу данных между arduino?
- Войдите на сайт для отправки комментариев
Вс, 23/10/2016 - 10:37
Доброго времени суток вам, господа!
Такой вопрос возник, как осуществить беспроводную передачу данных между ардуино, а именно массивы данных, как, например, g-code.
Чтобы понимать куда и зачем это все.
Поставлена задача реализовать проект, демонстрирующий роевую систему, как у животных. Суть проекта будет заключаться в том, что имеется некий робот-поводырь, который будет проезжать лабиринт, находить кратчайший путь и записывать это все в массив (типа карты). Далее этот массив координат отсылается другим ардуино-роботам и они уже сразу движутся по кратчайшему пути, без всяких алгоритмов (кроме регуляторов, чтобы позиционироваться относительно стен).
Вроде бы самый бюджетный вариант на 2.4ГГц будет: https://ru.aliexpress.com/item/Similar-NRF24L01-2-4G-Wireless-Data-Trans...
Вы взялись за потенциально сложную задачу и вероятно столкнетесь с нехваткой ресурсов контроллера. Потому не с каналов надо начинать. Разумный подход - сервер на ПК, хранящий и обрабатывающий все что можно, а роботы обоих типов конектятся к серверу как клиентіы по WiFi. В принципе если представляете четко что функцию сервера может и поводырь потянуть - ну пусть он и WiFi подымает.
Вобще задачу надо сразу отмоделировать на ПК. Много шансов что проект на этой стадии и зависнет.
Бюджетный 2,4ГГц предполагант что проблемы разделения канала между роботами прийдется както решать самому.
Вобщем я за WiFi , темболее что есть шанс всего робота-рядового просто на esp8266 сделать.
На самом деле, этот проект не несет технической ценности и изначально вообще предложили на Lego Mindstorms ev3 сделать, чтобы все просто и быстро. Смысл будет чисто демонстрационный, особо вдаваться в подробности не будут. Но тем не менее хочется сделать довольна-таки хороший проект и тоже думал, что все данный будут иметь посредника - компьютер, т.е сервер, где будет одно приниматься и одно отдаваться. Рассмотрю идею с есп8266 и компьютером-посредником. Спасибо за ответ и толчком в данном направлении.
Там нечего разделять. У каждого ресивера может быть собственный адрес, плюс встроенная фишка -- multiceiver, с помощью которой можно одновременно "слушать" до пяти логических каналов на рабочей частоте. Только одними встроенными средствами на NRF24L01 можно обеспечить работу множества трансиверов в одном месте на единственном рабочем канале.
Адрес - хороше, но важно чтоб несколько роботов не начали передавать одновременно. Там есть средства арбитража какие либо?
MultiCeiver как раз позволяет одному приемнику слушать до шести передатчиков на одной частоте.
Но в описанной ТС ситуации это совершенно не требуется. Достаточно одного первичного передатчика у "поводыря", а все остальные будут первичными приемниками. Так как в рамках ShockBurst приемник имеет право отзываться только после запроса передатчика, а на адрес выделяется от 3 до 5 байт, то один первичный передатчик, теоретически, может обслуживать триллион приемников. Практически ему, конечно, и времени на это не хватит, и адреса состоящие только из единиц или нулей для данной технологии не желательны.
Пожертвовав надежностью, от использования механизма подтверждения ShockBurst в этой задаче можно отказаться. Настроить все приемники на один адрес, запретив им вообще что-то вякать. А рассылать информацию о прохождении на этот широковещательный адрес несколько раз, без запроса подверждения (NO_ACK=1). Все же, во-первых, высокой надежности тут явно не требуется, во-вторых, условия тепличные. Даже с подтверждением, повторно посылать все равно будешь ограниченное количество раз, но для каждого приемника. То есть, если 8 приемников и каждому перепосылать надо дважды, то это замет в два раза больше времени, чем всем восьми послать восемь раз одно и то же.