2-полосная радиочастота с виртуальным проводом / 315 / 433 МГц

rf

Я пытаюсь понять, как заставить 2 Arduino общаться друг с другом, используя дешевые простые радиочастотные модули. Всего у меня 4 радиочастотных модуля (2 приемника и 2 передатчика) и 2 Arduino. Мне нужно, чтобы Arduino A отправил около 3 переменных в Arduino B, и мне нужно, чтобы Arduino B отправил 1 переменную обратно в Arduino A.

Когда я пытался установить двухстороннюю связь, я запрограммировал Arduino A на постоянную трансляцию, в то время как Arduino B переключался между однократным приемом и однократной отправкой в каждом втором цикле. Это привело к тому, что Arduino B также только транслировал и не получал никакого сигнала от Arduino A.

Моя другая попытка состояла в том, чтобы Arduino B отправлял примерно 250 мс, затем получал в течение 250 мс и повторял. Это работало до тех пор, пока Arduino A только вещала, но как только Arduino A делала то же самое, часы на каждом из них, казалось, немного сбивались, и были периоды, когда оба Arduino отправляли или когда оба пытались получить, так что это было также очень ненадежно.

Есть ли надежный способ двусторонней связи с таким оборудованием или мне понадобятся приемопередатчики для реализации такого проекта?

, 👍-1

Обсуждение

Какой битрейт вы используете? И какой размер сообщения? Я бы начал с увеличения периода приема и добавил логику прослушивания перед отправкой., @Mikael Patel

Вы должны синхронизировать общение, а не полагаться только на время. Например, отправить через 250 мс после получения сообщения., @Gerben

@MikaelPatel 2000 бит/с и размер сообщения 4 байта. Я попытался увеличить период получения, когда у меня был обмен с моей первой попыткой. В итоге я отправил его один раз на каждые ~ 2000-4000 раз, когда он будет прочитан. Это был минимум, который мне потребовался, чтобы на самом деле получить что-либо, но это не работает, потому что, когда я заставляю другую Arduino делать то же самое, они отправляют недостаточно часто, чтобы надежно получать сообщения., @Sean


2 ответа


1

Если упомянутые вами РЧ-модули — это те, о которых я думаю, то они кажутся очень особенными элементами комплекта. Я пробовал Bluetooth, вы можете получить дешевые модули HM05 (возможно, это неправильный номер, который вам нужен, который может быть ведущим или ведомым). Они были немного лучше, но у них меньше радиус действия.
Моим личным фаворитом на данный момент был бы ESP8266, нет, я никогда не подключал его к Arduino, но это можно сделать довольно легко. Вы должны получить дальность 100 м (в идеальных условиях), и вы можете увеличить это с помощью антенн. Вы также можете настроить его в качестве повторителя между двумя сегментами Wi-Fi.

Что бы вы ни решили, вы можете немного изменить свой код, чтобы один Arduino отправлял сигнал времени, а другой не отправлял свои данные до своей очереди. Или дайте им GPS-приемники и извлеките оттуда время.

,

0

С VirtualWire Arduino может только отправлять или только получать. Он не может делать и то, и другое одновременно. По сути, это похоже на software serial, но с манчестерской кодировкой сообщения.

Напишите свой код, чтобы отправитель отправил его один раз, а затем дождитесь ответа. Если после некоторого интервала нет ответа, попробуйте отправить еще раз, а затем вернитесь к прослушиванию. Возможно, попробуйте еще раз.

Напишите свой код, чтобы получатель всегда слушал и не отвечал, пока сообщение не будет получено. Добавьте код, указывающий, когда получено правильное сообщение, в качестве помощи при отладке.

Вы должны иметь возможность подключить Tx к Rx и Rx к Tx (и Gnds) между двумя Arduino и заставить последовательность работать туда и обратно, а затем подключить радиочастотные модули, и они тоже будут работать.

Я думаю, что кодирование, выполненное Virtual wire, добавляет к сообщению 37 байтов, о которых заботится библиотека, поэтому конечным результатом являются только отправленные данные.

Вы также можете попробовать библиотеку RadioHead, частью которой теперь является VirtualWire.

,