Беспроводная связь с NRF24L01+

Я решил использовать NRF24L01+ в своем проекте Arduino для беспроводной связи. Я использую библиотеку RF24 от TMRh20 для общения.

Ссылка на Github: https://github.com/nRF24/RF24

Я хочу иметь возможность как можно быстрее отправлять и получать данные между пультом и получателем. Прочитав библиотеку, я смог создать простой код, который позволял пульту передавать ~600 32-байтовых сообщений в секунду, а получатель мог читать ~490 сообщений в секунду.

Код контура передатчика:

if (radio.available()) { radio.read(&myData, sizeof(myData));

Код получателя:

radio.write( &myData, sizeof(myData), 1);

Однако с помощью этого кода пульт дистанционного управления не может получать данные телеметрии обратно от приемника. Это только односторонняя связь без каких-либо подтверждений.

У меня есть несколько вопросов о беспроводной связи с NRF24L01+. Во-первых, что такое признание? Я понимаю, что это способ узнать, что получатель получил сообщение, но что отправляется в подтверждении?

В чем разница между такими командами, как radio.write, radio.writefast, radio.startwrite и radio.startwritefast. В файле RF24.h есть пояснения к этим командам, но их описание не имеет для меня особого смысла.

Проведя небольшое исследование, я обнаружил, что для того, чтобы написать, мне нужно перестать слушать, написать сообщение, а затем снова начать прослушивать сообщения. Проблема с этим кодом заключается в том, что NRF никогда не прослушивает достаточно долго, чтобы получить сообщение (если я не добавляю задержку, когда он остается в режиме RX). Можно ли как-нибудь оставить канал чтения открытым во время записи, а затем забрать его из FIFO, когда я буду готов к чтению?

Похоже, что можно написать полезную нагрузку ACK, и это позволяет NRF передавать сообщение, не выходя из режима RX. Возможно ли это и что такое полезная нагрузка ACK?

Каков наилучший способ достижения максимальной скорости двусторонней связи. Является ли обычной практикой иметь два NRF, один из которых предназначен для прослушивания, а другой - для записи на каждом Arduino? Есть ли хороший способ добиться высокой скорости двусторонней связи с помощью одного NRF?

, 👍0

Обсуждение

Я бы посоветовал прочитать техническое описание NRF24. Посмотрите внимательно на диаграмму состояний в нем. ACK предназначен для подтверждения того, что пакет был получен, а не потерян из-за помех или слабого сигнала. Вы действительно можете отправить некоторые данные вместе с пакетом ACK. Для увеличения скорости; NRF имеет три скорости. Установите максимальное значение. Также посмотрите, какой канал работает лучше всего, чтобы у вас было наименьшее количество потерянных пакетов. Вы не можете отправлять и получать одновременно. Write будет ждать отправки сообщения, прежде чем вернуться. WriteStart не блокируется, поэтому вы можете запускать код во время его отправки., @Gerben

Я второй раз читаю таблицу данных. Будьте готовы использовать команды SPI и записывать непосредственно в регистры nRF24L01+. Вы можете сделать это в «void setup» после остальной настройки радио., @MichaelT

Я очень рекомендую вам прочитать [документацию](https://www.nordicsemi.com/eng/nordic/download_resource/8041/1/50496589/2730) nRF24L01+ от nordicsemi. В нем подробно описаны его возможности и режимы работы., @Kwasmich


1 ответ


3

Во-первых, команда radio.write используется для проверки подтверждения от RX после того, как FIFO заполнены для одной записи. Но radio.writefast не будет ждать подтверждения от RX и будет непрерывно передавать полезную нагрузку для одной записи. Аналогично для radio.startwrite и radio.startwritefast команды.

Что касается сохранения NRF в режиме прослушивания, даже я не пробовал этого раньше, поэтому не могу предложить точное решение этой проблемы. Но насколько мне известно, вы можете использовать команду writestart, чтобы держать каналы чтения открытыми во время отправки. Но я бы лично рекомендовал вам еще раз подтвердить это в техническом описании, прежде чем экспериментировать.

Для полезной нагрузки ACK это зависит от главного блока, управляющего связью SPI с чипом NRF, и, таким образом, поддерживая взаимопонимание между блоками RX и TX, вы также можете определить полезную нагрузку для сигнала подтверждения.

Что касается наилучшей скорости, для увеличения скорости NRF имеет три скорости, из которых вы можете выбрать наивысшее доступное значение. Также посмотрите, какой pipe/channel работает лучше всего для вас, чтобы вы могли достичь наименьшего количества потерянных пакетов.

,