NRF24L01 PA+LNA с Arduino

Я использую модуль NRF для удаленной связи. Я много исследовал nrf, но мой модуль nrf не работает. Это мой код передатчика:

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(7, 8,4000000); // CE, CSN

const byte address[6] = "00001";

void setup() {
  Serial.begin(115200);
  radio.begin();
  radio.openWritingPipe(address);
  radio.setRetries(15,15);
  radio.setPALevel(RF24_PA_HIGH);
 
}

void loop() {
  radio.stopListening();
  const char text[32]="Hello world";
  if(radio.write(&text,sizeof(text))){
    Serial.println("Mesaj gönderildi");
  }
  delay(1000);

Это мой код получателя:

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(7, 8,4000000); // CE, CSN

const byte address[6] = "00001";

void setup() {
  Serial.begin(9600);
  radio.begin();
  delay(400);
  radio.openReadingPipe(1, address);
  radio.setPALevel(RF24_PA_MAX);
//  radio.startListening();
   pinMode(10,OUTPUT);

}

void loop() {
 const char text[32]="";
  radio.startListening();
  if(radio.available())
  {
    while(radio.available()){
    radio.read(&text[0],sizeof(text[0]));
    Serial.println(text);
    delay(1000);
    }
  }
  delay(5);
   
  
  
}

Я попробовал setPAlevel min, но изменений нет. На стороне передатчика функция записи возвращает true, но на стороне приемника я ничего не могу получить. Кроме того, если я заменю кабель, подключенный к мисо, кабелем, подключенным к mosi на стороне передатчика, функция записи все равно вернет true. Я также использовал адаптер ams1117

, 👍2

Обсуждение

Из кода вашего приемника: radio.read(&text[0],sizeof(text[0])); Это выглядит странно. sizeof(text[0]) занимает всего один байт., @6v6gt

Я попробовал эту покупку сейчас, я пытаюсь запустить примеры в Arduino. Контакты Mosi и Miso не подключаются к микроконтроллеру, но вывод, который я получаю, следующий: Передача успешна., @koraysonal

Кроме того, я получаю сообщение об ошибке радиооборудования, которое не отвечает, когда Mosi подключен к контакту Mosi Arduino на адаптере, а Miso на адаптере подключен к контакту Miso на Arduino. Когда я меняю местами кабели и подключаю их, передача и происходит прием., @koraysonal

const char text[32]=""; от получателя также выглядит странно, поскольку предполагается, что этот буфер доступен для записи. В любом случае, используйте код из этой темы: https://forum.arduino.cc/t/simple-nrf24l01-2-4ghz-transceiver-demo/405123, чтобы проверить свои устройства nrf24L01. Большинство проблем с этими устройствами nrf24L01 связаны с неадекватными источниками питания., @6v6gt

«Когда я меняю кабели и подключаю их, происходит передача и прием». Означает ли это, что если вы перекрестите MISO и MOSI на плате адаптера nrf24L01, все будет работать как положено? Я был бы удивлен, учитывая другие ошибки, но я полагаю, что это может быть где-то ошибка в маркировке., @6v6gt

Да. Но это происходит только в самом начале. Я загрузил программу в Arduino, затем получил сообщение об ошибке «Радиооборудование не отвечает». Затем я подключаю кабель Mosi на плате NRF к мисо на Arduino. Ошибка «Радиооборудование не отвечает» исчезнет. Возникает ошибка тайм-аута передачи. Затем, после подключения mosi в модуле nrf к mosi на Arduino и мисо к мисо на Arduino, передача становится успешной., @koraysonal


1 ответ


1

В коде получателя вы читаете только один байт, как указано в 6v6gt. Проверьте библиотеку, чтобы узнать, как работает read().

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

char text[32];

if (radio.available()) 
{
  uint8_t bytes = radio.getPayloadSize();  // получаем размер полезной нагрузки
  radio.read(&text, bytes);                // извлекаем полезную нагрузку из FIFO
}

Не используйте const для text в получателе. Кроме того, вам не нужно использовать st opListening и startListening в loop(). Им нужно просто перейти к setup().

,

Ошибка передачи или истекло время ожидания. Я пробовал много вещей, но эта ошибка все еще сохраняется., @koraysonal

Обновите код вопроса, который вы пробовали последним., @Fahad