2-полосная радиочастота с виртуальным проводом / 315 / 433 МГц
Я пытаюсь понять, как заставить 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 отправляли или когда оба пытались получить, так что это было также очень ненадежно.
Есть ли надежный способ двусторонней связи с таким оборудованием или мне понадобятся приемопередатчики для реализации такого проекта?
@Sean, 👍-1
Обсуждение2 ответа
Если упомянутые вами РЧ-модули — это те, о которых я думаю, то они кажутся очень особенными элементами комплекта. Я пробовал Bluetooth, вы можете получить дешевые модули HM05 (возможно, это неправильный номер, который вам нужен, который может быть ведущим или ведомым). Они были немного лучше, но у них меньше радиус действия.
Моим личным фаворитом на данный момент был бы ESP8266, нет, я никогда не подключал его к Arduino, но это можно сделать довольно легко. Вы должны получить дальность 100 м (в идеальных условиях), и вы можете увеличить это с помощью антенн. Вы также можете настроить его в качестве повторителя между двумя сегментами Wi-Fi.
Что бы вы ни решили, вы можете немного изменить свой код, чтобы один Arduino отправлял сигнал времени, а другой не отправлял свои данные до своей очереди. Или дайте им GPS-приемники и извлеките оттуда время.
С VirtualWire Arduino может только отправлять или только получать. Он не может делать и то, и другое одновременно. По сути, это похоже на software serial, но с манчестерской кодировкой сообщения.
Напишите свой код, чтобы отправитель отправил его один раз, а затем дождитесь ответа. Если после некоторого интервала нет ответа, попробуйте отправить еще раз, а затем вернитесь к прослушиванию. Возможно, попробуйте еще раз.
Напишите свой код, чтобы получатель всегда слушал и не отвечал, пока сообщение не будет получено. Добавьте код, указывающий, когда получено правильное сообщение, в качестве помощи при отладке.
Вы должны иметь возможность подключить Tx к Rx и Rx к Tx (и Gnds) между двумя Arduino и заставить последовательность работать туда и обратно, а затем подключить радиочастотные модули, и они тоже будут работать.
Я думаю, что кодирование, выполненное Virtual wire, добавляет к сообщению 37 байтов, о которых заботится библиотека, поэтому конечным результатом являются только отправленные данные.
Вы также можете попробовать библиотеку RadioHead, частью которой теперь является VirtualWire.
- В чем разница между вариантами RF (wifi, xbee, NRF24L01)
- Радиочастотное дистанционное управление с использованием VirtualWire на ATtiny85, работающем на частоте 8 МГц на внутреннем генераторе
- Декодирование 2.4G RF пульта дистанционного управления?
- Питание Arduino Mini Pro с использованием батареи CR2032 в качестве пульта дистанционного управления
- SIM800C, CPIN: НЕ ГОТОВ (КОД ОШИБКИ: +CME ОШИБКА: 10)
- nRF24L01 + потеря пакетов, вызванная считыванием Arduino и связью с датчиками
- Как использовать get_properties для получения RSSI в RF24?
- Как подключить модуль RF433Mhz (WL101-341 /WL102-341)
Какой битрейт вы используете? И какой размер сообщения? Я бы начал с увеличения периода приема и добавил логику прослушивания перед отправкой., @Mikael Patel
Вы должны синхронизировать общение, а не полагаться только на время. Например, отправить через 250 мс после получения сообщения., @Gerben
@MikaelPatel 2000 бит/с и размер сообщения 4 байта. Я попытался увеличить период получения, когда у меня был обмен с моей первой попыткой. В итоге я отправил его один раз на каждые ~ 2000-4000 раз, когда он будет прочитан. Это был минимум, который мне потребовался, чтобы на самом деле получить что-либо, но это не работает, потому что, когда я заставляю другую Arduino делать то же самое, они отправляют недостаточно часто, чтобы надежно получать сообщения., @Sean