Вопросы по 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
10
0
Ребят, подскажите. Наткнулся на такой эффект, что с этим делать не знаю. Меня интересует, решения, или может кто-то подскажет какой-то свой лайфхак.
На передатчике, какой бы NRF24L01+PA+LNA 1100м не был. Не всегда идет передача сигнала, если можно так выразиться. Точнее не всегда приемный модуль принимает от передатчика. Эффект о котором у меня вопрос. Как только при касаюсь основания(земли) антенны, сразу все начинает правильно работать. Иногда помогает, повертеть антенну, чтоб получить стабильные сигнал передачи. Естественно выкручивал сигнал на Максимум, а скорость на минимум, чтоб достичь максимальной дальности. По началу и Модули менял, и антенны(антенны которые идут в комплекте с nrf24) менял, и пробовал паять напрямую избегая дребезг контактов. Ребят, кто решил проблему с стабильной работы передатчика, подскажите. За год, проект уже модернизировал несколько раз :) А проблему с стабильной передачей так и не смог решить, и не смог найти решений в интернете. Даже в видео Алекса, он пробовал обмотать один модуль проволокой, наверно тот же эффект. Я с nrf24 обычными не пользовался, не знаю.
 

Николай-лай

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

Вложения

Randy

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