Вопросы по NRF24L01

sasha320v

✩✩✩✩✩✩✩
2 Ноя 2018
4
0
Попробовал подключить беспроводной модуль nrf24l01с усилителем к arduino nano, при его подключении компьютер теряет связь с ардуино, потом попробовал подвести питание к модулю от двух пальчиковых батареек соединенных последовательно, провода нагрелись прилично, а на концах V+ и GND теперь сопротивления почти нет 0,6 ома. Вопрос можно ли было питать от пальчиковых батареек со стороны и если есть у кого такой модуль, какое должно быть сопротивление на концах V+ и GND??
 
Изменено:

Гидрогель

✩✩✩✩✩✩✩
Команда форума
1 Авг 2018
15
6
Я что-то не пойму где ты измеряешь тут сопротивление. Если между входами на питание nrf, то поздравляю: такое значание - это, фактически, КЗ, модуль сгорел, возмжно, из-за высокого напряжения или переполюсовки...
Вообще нужно подать питание 3.3 Вольта на модуль. У меня от компьютера вполне нормально работает. По началу подключал в выход 3.3В Дуины, параллельно в питание подключал конденсаторы - всё работало вполне нормально. Сейчас подключаю через кренку (ams1117 3.3), ибо всё же выход дуины на такое не рассчитан.
 
  • Лойс +1
Реакции: sasha320v

sasha320v

✩✩✩✩✩✩✩
2 Ноя 2018
4
0
Я что-то не пойму где ты измеряешь тут сопротивление. Если между входами на питание nrf, то поздравляю: такое значание - это, фактически, КЗ, модуль сгорел, возмжно, из-за высокого напряжения или переполюсовки...
Вообще нужно подать питание 3.3 Вольта на модуль. У меня от компьютера вполне нормально работает. По началу подключал в выход 3.3В Дуины, параллельно в питание подключал конденсаторы - всё работало вполне нормально. Сейчас подключаю через кренку (ams1117 3.3), ибо всё же выход дуины на такое не рассчитан.
Да, сопротивление замерял между входами на питание nrf. Высокого напряжения не могло быть, ведь две батарейки дают 3 вольта, за плюсом и минусом следил что-бы не перепутать... А ты подключал модуль к ардуине с усилителем(антенкой) или без? С усилителем по идее ток больший потребляет чем без, может с модулем без усилителя ещё худо-бедно справляется, а с услилителем уже нет. Но по ходу в любом случаем этот модуль на выкидание, судя по сопротивлению
 

Гидрогель

✩✩✩✩✩✩✩
Команда форума
1 Авг 2018
15
6
Из опыта без усилителя можно и напрямую в arduino, только не забыть про дополнительные конденсаторы, а вот с усилителем лучше только через кренку
 
  • Лойс +1
Реакции: sasha320v

sasha320v

✩✩✩✩✩✩✩
2 Ноя 2018
4
0
Есть две платы ардуино, одна UNO от WAVGAT, другая NANO от GREAT WALL , и два модуля nrf24l01. Запускаю программу для прослушки радиоканалов(nrf_listen_air.ino). Скетч взял отсюда https://github.com/AlexGyver/nRF24L01/blob/master/nRF24L01 tests/nrf_listen_air/nrf_listen_air.ino
C-like:
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"

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

const uint8_t num_channels = 128;
uint8_t values[num_channels];
void setup(void)
{
  Serial.begin(9600);
  printf_begin();
  radio.begin();
  radio.setAutoAck(false);
  radio.startListening();

  radio.printDetails();  // Вот эта строка напечатает нам что-то, если все правильно соединили.
  delay(5000);              // И посмотрим на это пять секунд.

  radio.stopListening();
  int i = 0;    // А это напечатает нам заголовки всех 127 каналов
  while ( i < num_channels )  {
    printf("%x",i>>4);
    ++i;
  }
  printf("\n\r");
  i = 0;
  while ( i < num_channels ) {
    printf("%x",i&0xf);
    ++i;
  }
  printf("\n\r");
}
const int num_reps = 100;

void loop(void)
{
  memset(values,0,sizeof(values));
  int rep_counter = num_reps;
  while (rep_counter--) {
    int i = num_channels;
    while (i--) {
      radio.setChannel(i);
      radio.startListening();
      delayMicroseconds(128);
      radio.stopListening();
      if ( radio.testCarrier() )
        ++values[i];
    }
  }
  int i = 0;
  while ( i < num_channels ) {
    printf("%x",min(0xf,values[i]&0xf));
    ++i;
  }
  printf("\n\r");
}
int serial_putc( char c, FILE * ) {
  Serial.write( c );
  return c;
}

void printf_begin(void) {
  fdevopen( &serial_putc, 0 );
}
И почему то UNO радиомодули определяет, но не видит никаких шумов по радиоканалам, везде нули, как будто всё чисто. Проверял на двух модулях nrf24l01 один с усилителем другой нет, результат один и тот же
Screenshot_1.png
Но если подключить к NANO и загрузить этот же самый скетч, то там уже не нули, на некоторых каналах видны шумы.

Вопрос, почему UNO ничего не видит, плата с дефектом или я что-то не так делаю ?
 

kostya1306

✩✩✩✩✩✩✩
9 Дек 2018
3
0
Добрый день. Если проблема еще актуальна, могу предложить решение. Думаю, все знают, что NRF требовательна к качеству питания. Припаяйте конденсатор параллельно питанию модуля NRF. Если конденсатор уже есть, значит нужент бОльшей емкости. Я как-то поймал такой глюк. Pro mini + NRF. Модуль определяется корректно, но в эфире видит только нули.Конденсатор в 10мкф решил проблему.
 

kostya1306

✩✩✩✩✩✩✩
9 Дек 2018
3
0
Напрямую. У меня Pro mini 3.3в. Если использовать 5в ардуинки, то тоже напрямую нормально работает, только питание от 3.3в ноги надо взять.
 

kotbiker

✩✩✩✩✩✩✩
10 Ноя 2018
1
0
Добрый день. Есть тест GettingStarted_CallResponse для радиомодуля nRF27L01+ от Alex Gyver. Собрал две одинаковых схемы: Arduino Nano с кварцем 12 мГц - модуль питания nRF24L01+ - сам радиомодуль. В скетче написано, что подключение CE идет на 9 пин (ШИМ пин). Подключаю все правильно RF24 radio(9,10);, загружаю скетч в обе схемы - делаю передающий порт COM 3, монитор порта выдает : первая строка
Now sending 1 as payload. Got blank response. round-trip delay: 796 microseconds
вторая и последующие строки
Now sending 1 as payload. Sending failed.
Затем lделаю передающий порт COM 4, монитор порта пишет: первая строка
Now sending 1 as payload. Got blank response. round-trip delay: 796 microseconds

вторая и последующие строки
Now sending 1 as payload. Sending failed.
Затем переключил CE обоих радиомодулей с 9 на 8 пин Ардуино. COM 3 передающий:
Now sending 1 as payload. Got blank response. round-trip delay: 1576 microseconds
Now sending 1 as payload. Sending failed.
Now sending 1 as payload. Sending failed.
Now sending 1 as payload. Sending failed.
Затем прикасаюсь пальцем к проводу СЕ СОМ 3 - пишет:
Now sending 1 as payload. Got blank response. round-trip delay: 412628 microseconds
Now sending 1 as payload. Got blank response. round-trip delay: 10424 microseconds
Now sending 1 as payload. Got blank response. round-trip delay: 13988 microseconds
Now sending 1 as payload. Got blank response. round-trip delay: 8912 microseconds
Now sending 1 as payload. Got blank response. round-trip delay: 9808 microseconds
Now sending 1 as payload. Got blank response. round-trip delay: 8936 microseconds

Теперь передающий COM 4:

Now sending 1 as payload. Got blank response. round-trip delay: 796 microseconds
Now sending 1 as payload. Got blank response. round-trip delay: 1620 microseconds
Now sending 1 as payload. Got blank response. round-trip delay: 2124 microseconds
Now sending 1 as payload. Got blank response. round-trip delay: 1668 microseconds
Now sending 1 as payload. Got blank response. round-trip delay: 1668 microseconds
Now sending 1 as payload. Got blank response. round-trip delay: 1188 microseconds
Now sending 1 as payload. Got blank response. round-trip delay: 1236 microseconds
Now sending 1 as payload. Got blank response. round-trip delay: 1188 microseconds

И почему в мониторе порта теста nrf_listen_air у обоих моих радиомодулей
RX_ADDR_P0-1 = 0xe7e7e7e7e7 0xc2c2c2c2c2
а в мониторе порта теста GettingStarted_CallResponse у обоих радиомодулей
RX_ADDR_P0-1 = 0x0000000106 0x0000000100

Пробовал ставить Ардуино Нано другого образца на которой стоят сразу два кварца - на 12 и 16 мГц, результат тот же.
В чем может быть причина?
 

HELP

✩✩✩✩✩✩✩
13 Мар 2019
5
0
Решил использовать этот модуль для связи двух ардуинок. Так получилось, что на ардуинке нано не работает 11 пин. Решил вместо него использовать аналогичный(чтоб был шим сигнал) и так ещё несколько пинов заменил. Таким образом теперь 6 пин на ардуино связан с miso на нрф; 7 пин -с mosi; 8 пин -с sck; 9 пин -с ce; 10 пин -с csn;
Раз я поменял пины то их надо и поменять в скетче(использую скетч алекса для проверки работы 1 модуля) но там я не нашёл место, где он прописывал что к каким пинам подключал(кроме 9 и 10). Подскажите пожалуйста, могу я вместо 11, 12 и 13 пинов использовать 6, 7 и 8? И где мне прописать то что я вместе тех пинов использую другие?( сам в программировании на самом низком уровне и разобраться в скете, где вместо переменных используются указатели на них и другие фичи си++, не могу)
 

Alveolar

✩✩✩✩✩✩✩
6 Май 2019
1
0
Подключил к Arduino nano модуль nrf, взял скетч listen_air с гитхаба.Прошилось все без проблем, но в ком-порте под списком каналов выводит, что в каждом шумы. Подскажите, как бороться? Подключен модуль через конденсаторы на 25v 10mkF, а так же керамический на 0,1 mkF. а во второй такой же системе, которые я хочу связать после каналов показывает все каналы 4...Посмотреть вложение 3259Посмотреть вложение 3257
 

maks665

✩✩✩✩✩✩✩
29 Май 2019
5
1
очень нужна помощь в прошивки. У меня есть два модуль nrf24l01 и две реле, хочу сделать так, при нажатии на кнопку одно реле открылось и при отпускании кнопки реле закрылось, это у меня получилось но вторая кнопка должна работать так, при нажатии и отпускании кнопки второе реле должно открыться и при нажатии и отпускании кнопки реле должно закрыться. Помогите пожалуйста два дня не могу сделать очень нужно.

это передатчик
как я понял кнопку надо делать через флажок


#include <SPI.h>
#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"}; //возможные номера труб
boolean butt_flag = 0;
byte butt = 6;
byte button1 = 3; // кнопка на 3 цифровом
byte potent = 0; // потенциометр на 0 аналоговом
byte slider = 1; // движковый потенциометр на 1 аналоговом пине

byte transmit_data[4]; // массив, хранящий передаваемые данные
byte latest_data[4]; // массив, хранящий последние переданные данные
boolean flag; // флажок отправки данных



void setup() {

pinMode(3, INPUT); // настроить пин кнопки

pinMode(6, INPUT);
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() {


transmit_data[0] = digitalRead(3); // инвертированный (!) сигнал с кнопки

transmit_data[1] = digitalRead(6);
if (butt == 1 && butt_flag == 0) {
butt_flag = 1;
}
if (butt == 0 && butt_flag == 1) {
butt_flag = 0;
}
transmit_data[2] = map(analogRead(potent), 0, 1023, 0, 180); // получить значение
// в диапазоне 0..1023, перевести в 0..180, и записать на 1 место в массиве
transmit_data[3] = map(analogRead(slider), 0, 1023, 0, 255);





for (int i = 0; i < 3; i++) { // в цикле от 0 до числа каналов
if (transmit_data != latest_data) { // если есть изменения в transmit_data
flag = 1; // поднять флаг отправки по радио
latest_data = transmit_data; // запомнить последнее изменение
}
}


if (flag == 1) {
radio.powerUp(); // включить передатчик
radio.write(&transmit_data, sizeof(transmit_data)); // отправить по радио
flag = 0; //опустить флаг
radio.powerDown(); // выключить передатчик
}


}



а это приемник
здесь я ваще не догоняю как делать
или в приемнике не надо не чего изменять тока в передатчике
аааа как все сложно
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include <Servo.h>

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

byte recieved_data[4]; // массив принятых данных
byte relay = 2;
byte relay1 = 6;
byte servo = 7;
byte mosfet = 5;
Servo myservo;

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

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

pinMode(2, OUTPUT); // настроить пин реле как выход
pinMode(6, OUTPUT);
pinMode(mosfet, OUTPUT); // настроить пин мосфета как выход

myservo.attach(servo);

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

radio.openReadingPipe(1, 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.startListening(); //начинаем слушать эфир, мы приёмный модуль
}

void loop() {
byte pipeNo;
while ( radio.available(&pipeNo)) { // слушаем эфир со всех труб
radio.read( &recieved_data, sizeof(recieved_data) ); // чиатем входящий сигнал
digitalWrite(2, recieved_data[0]); // подать на реле сигнал с 0 места массива

digitalWrite(6, recieved_data[1]);

myservo.write(recieved_data[1]); // повернуть серво на угол 0..180
// значение получено с 1 элемента массива
analogWrite(mosfet, recieved_data[2]); // подать на мосфет ШИМ сигнал
// в соответствии с принятыми данными со 2 места массива, диапазон 0...255
}
}
 

maks665

✩✩✩✩✩✩✩
29 Май 2019
5
1
просто очень нужно сделать
и походу пьесы разбираюсь
застрял на какой-то гребаной кнопки
получается мне на одну кнопку надо сделать флажок типа что бы нажал отпустил реле открылось но не хрена не получается в этом nrf
 
  • Лойс +1
Реакции: te238s

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
207
Пересмотри ещё раз урок №6, твой случай. И три раза сравни код в уроке со своим. И определись, где у тебя будет логика отработки нажатий, в приёмники, или в передатчике.
 
  • Лойс +1
Реакции: Тоха

maks665

✩✩✩✩✩✩✩
29 Май 2019
5
1
я этот урок раз 30 буду смотреть ну это ладно там еще в чем фишка там идет управление светодиодом а у меня управление реле
и у меня еще там две кнопки

ну вот допустим в уроке там led_flag = !led_flag; а у меня что должно на приемнике быть relay_flag = !relay_flag или не в том направлении думаю

получается в передатчик я должен поместить дополнительно вот это?

boolean butt_flag = 0;


boolean butt;

void loop() {
butt = digitalRead(6);

if (butt == 1 && butt_flag == 0) {
butt_flag = 1;
Serial.println("Button pressed");
led_flag = !led_flag;
digitalWrite(13, led_flag);

}

if (butt == 0 && butt_flag == 1) {
butt_flag = 0;
Serial.println("Button released");
}
}
 

maks665

✩✩✩✩✩✩✩
29 Май 2019
5
1
да антидребезг подождет надо как то сначала эту этот код в приемник вместить а как? я его уже как не вставлял все бестолку
 

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
207
Лучше код обработки кнопок в передатчик засунь, и передавай уже желаемое состояние первого и второго реле вместо состояния пинов кнопок.

И не спрашивай как. Если ты элементарный кусок кода не можешь в свой скетч внедрить, то возвращайся к изучению основ: что такое переменная, массив, функция, цифровые входы/выходы.
 
  • Лойс +1
Реакции: neonid

Oleksandr Rozumenko

✩✩✩✩✩✩✩
25 Дек 2018
3
1
Тоже столкнулся с такой проблемой, потом вспомнил, что при раздельном питании, GND Arduino и GND модуля необходимо соединять. После соединения все заработало как надо.
 

puhloschiok

✩✩✩✩✩✩✩
8 Окт 2018
22
0
Всем привет! Пытаюсь создать модуль управления освещением на приусадебном участке.
Есть острая необходимость в обмене данными между радио модулями nrf24l0.
На сколько я понял из видео Alex'a про работу этих модулей: лишь один из них может быть TX, а другой RX (предатчик/приёмник).
Правильно ли я понимаю, что для обратной связи между двумя Ардуинками мне потребуется целых два модуля nrf24l01 на каждой из них?

Пример: нажимаю на кнопку на основном щитке (в доме). Блок управления (Главный) с Ардуино с TX отправляет команду (дочернему) на Ардуинку с RX и там включается свет.
А если надо, чтобы с дочернего на главный блок отправлялась нужная мне команда, то на дочерней надо так же реализовать TX модуль?
И как быть, если главная Ардуинка должна слушать команды с нескольких дочерних модулей с nrf24l01?

Столько вопросов, и ничего пока не понимаю. :unsure:
Заранее благодарю всех за помощь!
 

Fleshdeck

★★★✩✩✩✩
19 Янв 2019
349
174
Киев
У меня такая же проблема была с освещением по двору, я использовал библиотеку rf24network, тогда каждое устройство принимает и передаёт пакеты, а сеть строится по типу дерева. В сети может быть около 3тыс устройств, точно не помню.
Вот ссылка на статью хорошую по этой теме https://howtomechatronics.com/tutor...eless-network-with-multiple-nrf24l01-modules/
Единственная проблема это заставить эту библиотеку работать, очень много проблем у меня было с этим
 
Изменено:
  • Лойс +1
Реакции: puhloschiok