Вопросы по NRF24L01

GABOCHEK

✩✩✩✩✩✩✩
2 Сен 2021
1
0
Всем привет, осваиваю модули NRF24L01. Использую пару NRF24 + arduino nano через спаяные шилды, все в целом понятно, но есть проблема: когда в стандартной прошивке из видео AlexGyver (циклическая отправка чисел от 0 до 255 с выводом в монитор порта) добавляю задержку в коде или вообще отправляю по одному числу, приемник игнорирует данные события и монитор порта пуст. Весь день уже сижу с этим делом, и только стоит убрать задержку или занизить ее до предела (1-5 миллисекунд), приемник сразу принимает весь поток чисел, причем можно разглядеть все числа от 0 до 255 в быстром потоке без пропусков, а значит дело вряд ли в качестве связи. В наличии есть 3 модуля с антеннами, пробовал по разному их комбинировать - не помогло. Может кто с таким сталкивался?
C++:
#include <SPI.h>          // библиотека для работы с шиной SPI
#include "nRF24L01.h"     // библиотека радиомодуля
#include "RF24.h"         // ещё библиотека радиомодуля

RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно
//RF24 radio(9,53); // для Меги

byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб

byte counter;

void setup() {
  Serial.begin(9600);         // открываем порт для связи с ПК

  radio.begin();              // активировать модуль
  radio.setAutoAck(1);        // режим подтверждения приёма, 1 вкл 0 выкл
  radio.setRetries(0, 15);    // (время между попыткой достучаться, число попыток)
  radio.enableAckPayload();   // разрешить отсылку данных в ответ на входящий сигнал
  radio.setPayloadSize(32);   // размер пакета, в байтах

  radio.openWritingPipe(address[0]);  // мы - труба 0, открываем канал для передачи данных
  radio.setChannel(0x60);             // выбираем канал (в котором нет шумов!)

  radio.setPALevel (RF24_PA_MAX);   // уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
  radio.setDataRate (RF24_250KBPS); // скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
  //должна быть одинакова на приёмнике и передатчике!
  //при самой низкой скорости имеем самую высокую чувствительность и дальность!!

  radio.powerUp();        // начать работу
  radio.stopListening();  // не слушаем радиоэфир, мы передатчик
}

void loop() {
  Serial.print("Sent: ");
  Serial.println(counter);
  radio.write(&counter, sizeof(counter));
  counter++;
  //delay(200); //если убрать эту задержку - работает
}
1706212672307.jpeg
1706212680663.jpeg
 

Bobur

✩✩✩✩✩✩✩
27 Янв 2024
1
0
Оформи код соответствующим тэгом, см. Правила
Подключил ардуино и nrf24l01, когда пишу коп принт работает тяжело, запросы задерживаются, в чем может быть причина?

@bort707,


#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define buttonPin1 3
#define buttonPin2 4
int buttonState1 = 0;
int buttonState2 = 0;
RF24 radio(9, 8); // CE, CSN
int SpeedControll1 = A2;
int leftJoyX = A7;
int leftJoyY = A6;
int rightJoyX = A5;
int rightJoyY = A4;
const byte address[6] = "00002";
int MotorSpeed1 = 0;
int leftX = 0;
int leftY = 0;
int rightX = 0;
int rightY = 0;
byte transmition_data[6];
void setup() {
pinMode(buttonPin1, INPUT_PULLUP);
pinMode(buttonPin2, INPUT_PULLUP);
Serial.begin(9600);
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MIN);
radio.stopListening();
}
void loop() {
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);
leftX = map(analogRead(leftJoyX), 0, 1023, 0, 255);
leftY = map(analogRead(leftJoyY), 0, 1023, 0, 255);
rightX = map(analogRead(rightJoyX), 0, 1023, 0, 255);
rightY = map(analogRead(rightJoyY), 0, 1023, 0, 255);
// Serial.print(analogRead(SpeedControll1));
Serial.print("\t");
Serial.print(buttonState1);
Serial.print("\t");
Serial.println(buttonState2);
// Serial.print("\t");
// Serial.print(leftX);
// Serial.print("\t");
// Serial.print(leftY);
// Serial.print("\t");
// Serial.print(rightX);
// Serial.print("\t");
// Serial.println(rightY);
transmition_data[0] = buttonState1;
transmition_data[1] = buttonState2;
transmition_data[2] = map(analogRead(leftJoyX), 0, 1023, 0, 255);
transmition_data[3] = map(analogRead(leftJoyY), 0, 1023, 0, 255);
transmition_data[4] = map(analogRead(rightJoyX), 0, 1023, 0, 255);
transmition_data[5] = map(analogRead(rightJoyY), 0, 1023, 0, 255);
radio.write(&transmition_data, sizeof(transmition_data));
}
 

ngn

✩✩✩✩✩✩✩
28 Фев 2024
1
0
Всем привет, недавно начал осваивать ардуинку и вместе с ней nrf24l01+pa+lna, по началу всё было прекрасно - подключил пару модулей к ардуинкам, добавил конденсаторы и всё отлично, на тестовом сканере обе завелись и шумы были видны. Затем на одной ардуинке ставлю код передатчика из примера, на сканере второй на нужной частоте, как и ожидалось, появился шум. Казалось бы, всё круто, но стоило поставить на вторую вместо сканера приёмник, как всё полетело, он просто ничего не принимает. Уже всё проверил: эфир на выбранной частоте пуст(кроме передатчика), все провода подключены верно, питание есть 3.3В(пробовал и с конденсатором и напрямую), все настройки одинаковые, частота нужная, разве что китайцы ещё адаптер не привезли. Вот код:
передатчик:
#include <SPI.h>
#include <RF24.h>
RF24 radio(9, 10);
const uint32_t pipe = 111156789; // адрес рабочей трубы;

byte data;

void setup() {
  Serial.begin(115200);
  Serial.println("TransmitterTester ON");

  radio.begin();                // инициализация
  delay(2000);
  radio.setDataRate(RF24_1MBPS); // скорость обмена данными RF24_1MBPS или RF24_2MBPS
  radio.setCRCLength(RF24_CRC_8); // размер контрольной суммы 8 bit или 16 bit
  radio.setPALevel(RF24_PA_MAX); // уровень питания усилителя RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH and RF24_PA_MAX
  radio.setChannel(0x6f);         // установка канала
  radio.setAutoAck(false);       // автоответ
  radio.powerUp();               // включение или пониженное потребление powerDown - powerUp
  radio.stopListening();  //радиоэфир не слушаем, только передача
  radio.openWritingPipe(pipe);   // открыть трубу на отправку
}

void loop() {
  data = 109;
  radio.write(&data, sizeof(data));
  Serial.println("data= " + String(data));
}
приёмник:
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"

RF24 radio(9, 10); // порты D9, D10: CSN CE

const uint32_t pipe = 111156789; // адрес рабочей трубы;
byte data[1];
int scn;  //счетчик циклов прослушивания эфира
int sg;  //счетчик числа принятых пакетов с передатчика

void setup() {
  Serial.begin(9600);
  Serial.println("ReceiverTester ON");

  radio.begin();  // инициализация
  delay(2000);
  radio.setDataRate(RF24_1MBPS); // скорость обмена данными RF24_1MBPS или RF24_2MBPS
  radio.setCRCLength(RF24_CRC_8); // размер контрольной суммы 8 bit или 16 bit
  radio.setChannel(0x6f);         // установка канала
  radio.setAutoAck(false);       // автоответ
  radio.openReadingPipe(1, pipe); // открыть трубу на приём
  radio.startListening();        // приём
}

void loop() {
  if (scn < 1000)
  {
    if (radio.available())
    {
      radio.read(&data, sizeof(data));
      //Serial.println(data[0]);
      if (data[0] == 109)
      {
        sg++;
      }
    }
  }
  else
  {
    Serial.println("Принято: " + String(sg) + " пакетов");
    sg = 0;
    scn = 0;
  }
  scn++;
  delay(20);

  if (scn >= 1000) scn = 1000; //защита от переполнения счетчика
}
Поменять местами приёмник и передатчик тоже пробовал - не помогло. Что не так не ясно, остаётся разве что грешить либо на модуль, либо на собственное косоглазие.
Поначалу ещё были сомнения по поводу отсутствия чего-то на плате nrf-ки, но при правильной работе сканера и они отпали, на всякий случай добавлю фото:
VZV_uddjqFI.jpg
 

ViDi79

✩✩✩✩✩✩✩
1 Окт 2023
31
0
Ребят, подскажите. Наткнулся на такой эффект, что с этим делать не знаю. Меня интересует, решения, или может кто-то подскажет какой-то свой лайфхак.
На передатчике, какой бы NRF24L01+PA+LNA 1100м не был. Не всегда идет передача сигнала, если можно так выразиться. Точнее не всегда приемный модуль принимает от передатчика. Эффект о котором у меня вопрос. Как только при касаюсь основания(земли) антенны, сразу все начинает правильно работать. Иногда помогает, повертеть антенну, чтоб получить стабильные сигнал передачи. Естественно выкручивал сигнал на Максимум, а скорость на минимум, чтоб достичь максимальной дальности. По началу и Модули менял, и антенны(антенны которые идут в комплекте с nrf24) менял, и пробовал паять напрямую избегая дребезг контактов. Ребят, кто решил проблему с стабильной работы передатчика, подскажите. За год, проект уже модернизировал несколько раз :) А проблему с стабильной передачей так и не смог решить, и не смог найти решений в интернете. Даже в видео Алекса, он пробовал обмотать один модуль проволокой, наверно тот же эффект. Я с nrf24 обычными не пользовался, не знаю.
 

Николай-лай

✩✩✩✩✩✩✩
13 Мар 2024
1
0
Всем привет. Решил попробовать себя в работе с Ардуино. Хочу построить радиоуправляемую модель на nrf24l01 и Ардуино нано.
Хочу...,но чёт ничего не получается... Вроде всё по инструкции делал... Помогите разобраться, пожалуйста.
 

Вложения

Randy

✩✩✩✩✩✩✩
9 Фев 2024
2
0
@GABOCHEK,
Всем привет! Для тех, у кого модули не видят друг друга без маленькой задержки в передатчике. У меня была такая же проблема, бился над ней два дня, решил следующим образом:
в скетче передатчика создал объект RF24 radio на пинах (7,10) (несмотря на то, что физически модуль подключен к пинам 9 и 10 !!!), а на приемнике объект radio оставляем на 9 и 10 пинах (физически, разумеется, так же подключаем модуль на 9 и 10). только в таком режиме у меня получилось передавать информацию хоть с задержкой, хоть без задержки, хоть с millis() вместо delay.
Я не знаю, как это объяснить, ведь на передатчике модуль так же подключен на 9 и 10 пины. Но тем не менее.
Надеюсь, кому-нибудь поможет, как и мне.
 

Randy

✩✩✩✩✩✩✩
9 Фев 2024
2
0
Столкнулся с еще одной неясной ситуацией. При работе с ардуино уно модуль nRF работает на передачу как часы. Стоит подключить модуль к ардуино нано (проверял на нескольких платах, результат одинаковый) - как всё глохнет, но начинает работать только после прикосновения пальцем сразу двух контактов на ардуине - D9 и D10, подключенных к контактам CE и CSN на модуле. Проверял на нескольких платах NANO - результат один и тот же. Может кто подсказать, что за напасть?
 

valik.sht

✩✩✩✩✩✩✩
23 Сен 2024
3
0
Всем привет. Помогите в решении одной проблемы! Пишу проект с двумя аркадными кнопками. у меня две платы ардуино нано и два модуля nrf24l01. подключил по документации. пины на 9 и 10 канал. в итоге одна кнопка работает как положено, у второй следующая проблема которая выявилась опытным путем.
проще говоря передатчик не выходит из режима прослушивания в режим передатчика.
развернуто: если я делаю программу передачи сообщения, то оно доходит успешно. с командой stoplistaning перед кодом тоже всё усппешно. добавив команду startlistaning после пода (даже с задержками) передатчик далее может только принимать сигналы, но не отправлять...
Всю голову сломал... ПОчему на одном работает, на втором нет.
Для надежности припаял все контакты на прямую, что бы исключить плохой контакт. Почему он не может выйти из прослушки, или не может включить режим передачи... помогите с решением, или направьте в нужную сторону...
 

valik.sht

✩✩✩✩✩✩✩
23 Сен 2024
3
0
@valik.sht, Вопрос решиля... по ходу бывает такое. заказал второй модуль.в итоге всё заработало... Видимо брак какой то...
 

vaca

✩✩✩✩✩✩✩
25 Окт 2024
2
0
Всем привет приобрел 2 датчика nRF24L01 со стабилизатором на 3.3, имею ардуино уно и нано, использую скет от аликса для определения свободного канала, подключил по схемам к уно все работает в мониторе порта отображается помех и значения не нули, а на нано все нули и датчик не видит не каких помех, оба нрф датчика рабочие проверил на уно, нечего не помогает, кто чем может помочь
 

valik.sht

✩✩✩✩✩✩✩
23 Сен 2024
3
0
@vaca, у меня было что то подобное. попробуй проверить контакт. Почле того как я припаял провода,(до этого на макетной плате делал) у меня помехи пропали...
 

boboka

✩✩✩✩✩✩✩
30 Окт 2024
1
0
всем привет помогите с проблемой хочу создать машинку на радио управлении на NRF и ардуино нано только одна проблема сколько бы раз не менял модули NrF менял два раза ардуино проблема одна и та же ли они не видят друг друга или что при загрузке скетча простой прием передача, приемник начинает есть жить своей жизнью там будто передачу отсылает числа в 0 до 255 а приемник принимает -505 0 0 0 0 33 550 0 0 3005 , пробовал менять местами приемник и передачу не помогает пробовал запаять модули к ардуино тоже ничего пробовал купить новые модули уже 4 раз абсолютный 0 я уже не знаю что делать у меня никак не получается их соединить что уж говорить о машинке на радиоуправлении

@boboka,и еще при загрузке скетча NRF listen air бывает что на всех каналах даже цифр нет сами буквы вроде бы смог побороть это что он начал показывать пустые каналы но соединить ее не смог

@boboka,вот фото
 

Вложения

vaca

✩✩✩✩✩✩✩
25 Окт 2024
2
0
valik.sht дело в том что что ардуино в принципе не видит не каких помех, попробую припаять, потому что я поменял нанку на другую ничего не изменилось
 

Denis57

✩✩✩✩✩✩✩
10 Ноя 2024
1
0
Всем привет. Столкнулся с такой проблемой при настройке nRF ,что одна ардуинка передаёт значение (скетч Tx - простой приём передача) передаёт значение только 1 раз. Это видно на другой ардуинке которая проверяет помехи (скетч - nrf_listen_air ), если перезагружать ардуинку Тх то отсылается последний пакет перед перезагрузкой и после включения первый пакет приходит. Пробовал другие примеры связать никак пока не получается две ардуинки с помощью nRF. Завтра попробую припаять кондюки на питание посмотрим поможет или нет. Провода все припаяны от ардуинки и брал питание с неё 5в и модули nRF подключены через плату стабилизатора 3.3в. Проверял всё это с 3 модулями nRF никаких изменений не увидел. Может кто то с этим уже сталкивался ?
Screenshot_235.png