Вопросы по 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
23
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
1
0
Всем привет. Помогите в решении одной проблемы! Пишу проект с двумя аркадными кнопками. у меня две платы ардуино нано и два модуля nrf24l01. подключил по документации. пины на 9 и 10 канал. в итоге одна кнопка работает как положено, у второй следующая проблема которая выявилась опытным путем.
проще говоря передатчик не выходит из режима прослушивания в режим передатчика.
развернуто: если я делаю программу передачи сообщения, то оно доходит успешно. с командой stoplistaning перед кодом тоже всё усппешно. добавив команду startlistaning после пода (даже с задержками) передатчик далее может только принимать сигналы, но не отправлять...
Всю голову сломал... ПОчему на одном работает, на втором нет.
Для надежности припаял все контакты на прямую, что бы исключить плохой контакт. Почему он не может выйти из прослушки, или не может включить режим передачи... помогите с решением, или направьте в нужную сторону...