Как написать программу на Arduino, которая соединяет один Rx с несколькими модулями Tx?

attiny85 virtualwire

У меня есть два Attiny85, которые обмениваются данными по радио 433 МГц (Rx и Tx на обоих концах) с помощью библиотеки виртуальных проводов, как будет программироваться их сопряжение нажатием кнопки на любом модуле ? до сих пор мне удавалось соединить их оба с помощью программы (исключить любые внешние устройства, указав идентификатор узла для прослушивания в моем Rx) или подумать о добавлении DIP-переключателей (но у меня закончились контакты и комбинации раньше). Я ожидаю чего-то похожего на коммерческий продукт, в котором я могу подключить/соединить несколько модулей Tx с одной базовой станцией Rx одним нажатием кнопки на стороне Tx. поэтому я ищу некоторую техническую экспертизу идеи, чтобы понять такую технику/методы программирования.

Независимо от использования 433 МГц или модуля NRF24L01 или чего-либо еще, я хочу знать, как выполняется эта функция сопряжения модулей вместе.

------ Изменить 22 июля 2021 года: Это добавлено здесь в ответ на комментарий Крисла

вы правильно поняли мой вопрос, да, я хочу узнать, как реализован такой протокол сопряжения, меня не слишком волнует устройство для шлюза связи.

этот вопрос касается протокола, а не конкретной схемы

------ Я инженер-механик по профессии, увлекаюсь программированием и электроникой, поэтому, пожалуйста, проявите немного терпения/подробностей в объяснении этой концепции/техники.

, 👍1

Обсуждение

пожалуйста, добавьте схему системы, которую вы пытаетесь построить, @jsotola

Если вы говорите об этих простых модулях 433 МГц, которые также используются, например, в открывалках гаражей, то обычно сопряжения нет. Отправитель просто отправляет некоторые данные (статический код, скользящий код или другое измерение безопасности), а получатель получает эти данные и действует соответственно. Обычно они не имеют представления о том, с какого устройства отправляются данные. Это был бы вышележащий протокол. Не могли бы вы, пожалуйста, описать, чего вы хотите достичь? В настоящее время он довольно широк, так что мы действительно не можем дать совет о том, что было бы лучшим вариантом., @chrisl

@chrisl.....да, я хочу изучить реализацию протокола, я не знаю, как изучить такой протокол, может быть, дайте мне какую-нибудь ссылку, чтобы узнать, что также поможет, @phoenix99


1 ответ


1

Если достаточно различать два (или несколько) передатчика и вам не нужно исключать вторжения, случайные или иные, "протокол" может быть таким простым, как:

БАЙТ БАЙТОВОГО СЧЕТА XMTRID[0] БАЙТ[1] ... БАЙТ[КОЛИЧЕСТВО-1]

, где каждое из вышеперечисленных значений представляет один байт. Включает ли библиотека проверку целостности сообщений, например контрольную сумму? Если нет, и физические условия гарантируют, вы также можете добавить это в свой протокол и включить ожидание передатчиком, что он получит подтверждение или отклонение правильного приема (ACK или NAK) в течение короткого времени и повторно передаст то же самое сообщение, если он не получил ACK. Затем вам понадобится байт идентификатора сообщения, который увеличивается для каждого нового сообщения (но не для повторной передачи), чтобы получатель мог отклонить повторную передачу (если, скажем, его попытка подтверждения была потеряна).

Тогда ваш протокол может выглядеть примерно так:

XMTRID MSGID CHKSUM БАЙТ-СЧЕТ БАЙТА[0] БАЙТ[1] ... БАЙТ[КОЛИЧЕСТВО-1]

. и с этого момента он становится все лучше по мере того, как вы добавляете функции для обеспечения надежности, безопасности и всего остального, что вам может понадобиться для выполнения. Но я предполагаю, что этого уже достаточно.

Обновление: Чтобы уточнить:

XMTRID    - ID of sending 433MHz radio (any value you like, as long as each device has its own).
MSGID     - An incrementing number (rollover allowed), a new one for each *new* message
            (enables the receiver to distinguish new messages from resent ones).
CHKSUM    - A sum of bytes in the message to let the receiver check the message integrity.
BYTECOUNT - The number of message bytes to follow.
BYTE[0] ... BYTE[BYTECOUNT-1] - The actual message data.
,

Спасибо, я понимаю вашу логику. это вызвало некоторые новые размышления о новых темах для изучения и экспериментов. и я полагаю, вы имеете в виду идентификатор Tx как "XMTRID"?, и в чем разница между БАЙТОМ БАЙТОВОГО СЧЕТА CHKSUM[0] БАЙТОМ[1] ... БАЙТ[КОЛИЧЕСТВО-1], @phoenix99