Беспроводная связь с 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