Nrf24l01+

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

 

К теме передатчика на 50 см- купите две пары, будет Вам двухсторонняя передача. Лучше далеко не выкидывать, сантиметров 30, я полагаю, максимум, да и то экранировать надо.

std
Offline
Зарегистрирован: 05.01.2012

All, как правильно отключать трансивер, когда я работаю, скажем, со сдвиговым регистром? 

Допустимо ли просто сделать на CS единицу, а потом вернуть на место ноль? Или там может быть не ноль, и надо как-то выяснять состояние до того как? Вообще, все библиотечные функции заканчиваются командой, делающей на CS лог. 1. Можно ли просто забить на CS трансивера и работать с регистром? типа:

- CS регистра в ноль

- передача

- назад в единицу

Ессно, в то время пока не делается приём или передача трансивером.

pilnikov
pilnikov аватар
Offline
Зарегистрирован: 28.08.2015

Народ подскажите плиз (киньтесь ссылочкой) как передать через nrf четыре различных пакета последовательно, с сервера клиенту, как организовать связь с сервером по запросу? (Сервер спросил - клиент ответил)

Спасибо. 

pav2000
Offline
Зарегистрирован: 15.12.2014

Задам свой вопрос сюда -))

Модуль  nrf24 может работать на прием с 6 передатчиками. Буфер приемника 32 байта для каждого передатчика (т.е. общий буфер в чипе 6х32 байта). Каждый буфер можно читать , например:

int in;               //Переменная для приема информации;
uint8_t pipe_num;     //Переменная, которая покажет нам из какой трубы достали информацию;
bool done = false;    //Вспомогательная переменная;
if ( radio.available(&pipe_num) ) { //Скармливаем функции адрес переменной, которая покажет нам номер трубы;
    while (!done) {   // Упираемся и
        done = radio.read( &in, sizeof(in) );   // по адресу переменной in функция записывает принятые данные;
    }
}

Постоянный вызов указанного выше кода позволяет последовательно прочитывать содержимое буферов, если там что-то есть, то есть в переменной in будет полезная информация, а в переменной pipe_num - номер трубы, из которой она поступила.

Что будет если я установлю все адреса труб приемников одинаковыми в чипе.  И буду последовательно посылать три посылки по 32 байта, при этом не разгребая очередь на приемнике. 

Вариантов видится 2

1. При приеме второй посылки возникнет переполнение буфера и данные будут потеряны

2. Первая посылка попадет в первую "трубу" вторая во вторую трубу и т.д (адреса одинаковые установлены).  т.е. данные не потеряются. И получается что есть буфер на 6 посылок.

Какой вариант верен??????

pav2000
Offline
Зарегистрирован: 15.12.2014

Разобрался  самостоятельно.

Чип имеет три буфера для приема первых трех посылок (вне зависимости от труб) при чтении можно прочитать какая труба приняла.

Код чтения следующий:

   byte pipe = 0;
  while(radio.available(&pipe) ) // читаем весь буфер до 3 посылок 
 {
   radio.read(&buf, sizeof(buf));  // Читаем в промежуточный буффер
    . . .
 
 } 

Код выгребает всю очередь (до 3 посылок) pipe в цикле принимает номер трубы в массиве адресов (от 0 до 5)

ErRRoR
Offline
Зарегистрирован: 03.12.2015

Друзья, решил изучить модули и столкнулся с проблемой. Модули общаются нормально, только если отключить у передающего CE и просто оставить висеть в воздухе. Как только подключаю обратно - посылки перестают идти. Использую библиотеку RF24. В чем может быть причина такого поведения? Модули питаются от отдельных стабилизаторов, конденсатор на платы припаял.

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

ErRRoR, здесь читали?

http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo

NOTE: These units VCC connection must go to 3.3V not 5.0V, although the Arduino itself may run at 5.0V and the signals will be OK. The NRF24L01+ IC is a 3.3V device

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а зачем вообще отключать?

tika
Offline
Зарегистрирован: 22.07.2015

Думаю , что оптимальная работа в использование NRF24L01+ это возможность двухсторонней связи-возможность приема  и передачи модуля. В  чем я и нуждаюсь. Задача передача с модуля 3х команд(кнопок) прием с выводом на светодиоды 3х команд с 1секундной свечением. Все три модуля одинаковы и дублируют друг друга.  Есть рабочий скеч передатчика и приемника рабочие– но не могу соединить в одно целое - не получается. Нужна ваша помощь. 

smesharik
Offline
Зарегистрирован: 31.01.2016

Народ. Подскажите куда копать или сразу выбрасить

Купил на али 2 модуля NRF24L01 + spf-pa мшу 

один модуль подключил отдельно 3.3в от лабораторного БП ставил на УНО и НАНО но не как не мог запустить

первый модель выдавал ток 1А и грелся неимоверно, выяснилось что у него короткое VCC и земля

второй вроде норм но ничего с ним сделать не могу менял пины местами библеотека https://github.com/maniacbug/RF24 и много разных пробовал

это получается что чип дохлый?!?!

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

https://yadi.sk/d/CXjuENmaEEwun

архив rf24

сnарую либу удали. примеры из этой либы используй. для одного модуля status

фото модулей приложи

smesharik
Offline
Зарегистрирован: 31.01.2016

ничего особо не изменилось

подключаю

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а в коде пины менял?

smesharik
Offline
Зарегистрирован: 31.01.2016

9 и 10? нет

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

может у тебя 10 и 9 должно быть

smesharik
Offline
Зарегистрирован: 31.01.2016

возможно, но нет

попробывал сейчас всяко, и 9,10 и 10,9 и на уно местами и .....

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а конденсатор по питанию прямо на модуль? и почему напрямую от модуля 3.3В берешь. там стабилизатор используется от ch340, а ток вообще не держит. на уно проверяй если там отдельный стабилизатор есть на 3.3В, если нет и уно 3.3В питания достаточно не дает

smesharik
Offline
Зарегистрирован: 31.01.2016

я питание беру от лабораторного блока питания, 3,3v , ток потребления модуля 20-50мА, кондер ставить не стал т.к. он ставится если идут сбои, а у меня вообще не видит ее, на уно стоит не ch340 а atmega16u

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а земли блока питания и ардуины объеденил?

smesharik
Offline
Зарегистрирован: 31.01.2016

Да объяденил земли, реакции ноль

как проверить работоспособность выходов ардуино 9-13?!?!

Зажигание светодиодов пойдет?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

конечно пойдет

модуль без усилителя есть?

smesharik
Offline
Зарегистрирован: 31.01.2016

пока нет, заказал жду, придет хз когда

вот отсюда проверил ардуинку, все норм

http://arduino.ru/forum/apparatnye-voprosy/szheg-arduino-nano-est-smysl-chinit#comment-22427

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

были бы обычные модули можно было бы понять. а так хз

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

У меня эти самые NRF24l01+ PA LNA отвечають...

smesharik
Offline
Зарегистрирован: 31.01.2016

что за библиотека, как подключал, фотку если можно подключения

Megawollt
Offline
Зарегистрирован: 06.12.2015

Ребят, а кто пробовал двухстороннюю связь? У меня ничего не получается

tika
Offline
Зарегистрирован: 22.07.2015

Думаю , что оптимальная работа в использование NRF24L01+ это возможность двухсторонней связи-возможность приема  и передачи . Тоже проблема в двухсторонней передаче. Работает передатчик и приемник - а соеденить в 1 целое не получяется.

Megawollt
Offline
Зарегистрирован: 06.12.2015

У меня еще и передача массива свалилась. Перестала передавать. У кого такое было?

tika
Offline
Зарегистрирован: 22.07.2015

Что гадать скинь скеч.

Megawollt
Offline
Зарегистрирован: 06.12.2015

Там скетч на 3 страницы :) вроде начало получаться.
В другой теме советовали передавать не массив, а структуру, но структура не передается

smesharik
Offline
Зарегистрирован: 31.01.2016

всем спасибо разобрался с модулем

Все оказало намного проще, как и предполагалось они дохлые сразу 2 модуля

Заказал пришло 10шт(заказ был от 10шт), поставил на теже панельки с тойже платой и прогой, завелась с пол оборота

tika
Offline
Зарегистрирован: 22.07.2015

А самое интересное- что ни где и не кто не показал работу в скетче обмена NRF24L01+  между собой не команд ни информации именно между 2х блоков-(обмена). Я не прав? Только прием и передачу.

Megawollt
Offline
Зарегистрирован: 06.12.2015

Прав. Мне это удалось, хотя эту информацию почему то все держат в секрете. Позже скину код

tika
Offline
Зарегистрирован: 22.07.2015

Я Вам очень буду благодарен за такую - конкретную помощь.

Megawollt
Offline
Зарегистрирован: 06.12.2015

Какая именно информация интересует?

tika
Offline
Зарегистрирован: 22.07.2015

Хотя-бы кусок где указана настройка с задачей приема и передачи и первые шаги к выполнению - чтобы понять кокая передача , прием выполняется. Как пример

 
Megawollt
Offline
Зарегистрирован: 06.12.2015

Две недели я копал этот модуль на предмет приемопередачи, но больше не было времени, так как на днях уже сдаю проект.

Что я смог понять: Пытаться организовать приемопередачу просто командами start stop, read write было глупо. Не работает никак. В лучшем случае в одну сторону. 

Единственное чего мне удалолсь добиться, так это отсыла ОДНОЙ переменной (любого типа. я шлю float) обратно от приемника к передатчику. Только переменная. Массив и структура не передается. ХЗ почему. Может кто разгадает

Делается это командой ACKpayload. Мы получаем две переменные, эта та, что отослали и 1-0 статуса соединения. Последнюю я применил как индикатор связи. Если пакеты передаются, то экран пишет  Connected, если нет, но наоборот и сбрасываются все переменные (управление мотором все таки)

Ну вот как то так. Код длинный, могу скинуть в личку

tika
Offline
Зарегистрирован: 22.07.2015

Спасибо буду благодарен. 

tika
Offline
Зарегистрирован: 22.07.2015

Спасибо буду рыть. В моем случие есть скетч рабочий на прием передачу - но написан древние года и я не могу решить простую как может для многох проблему.

001  

 

anth2222
Offline
Зарегистрирован: 17.02.2016

Никак не получается заставить работать модуль.

Что сделал:

1. Взял два комплекта: клон Uno + NRF24l01+

2. Установил библиотеку https://github.com/maniacbug/RF24

3. Прошил пример https://github.com/maniacbug/RF24/tree/master/examples/GettingStarted

4. Один комплект запускаю на передачу, другой на прием

тишина в эфире, передающая сторона пишет ошибки передачи:

 Now sending 12456... failed.
Failed, response timed out.

Проверял десять раз правильность подключения, менял модули (всего в наличии 4 штуки) - не работает.

Что интересно, при отключении GND на передающей стороне, ошибка передачи пропадает, приходит некий ответ непонятно откуда (т.е. работает при выключенном приемнике).

Куда дальше рыть? Что проверить?

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

керамические конденсаторы по питанию прямо на модуль припаять 1-10 мКф

smesharik
Offline
Зарегистрирован: 31.01.2016

anth2222 пишет:

Никак не получается заставить работать модуль.

Что сделал:

1. Взял два комплекта: клон Uno + NRF24l01+

2. Установил библиотеку https://github.com/maniacbug/RF24

3. Прошил пример https://github.com/maniacbug/RF24/tree/master/examples/GettingStarted

4. Один комплект запускаю на передачу, другой на прием

тишина в эфире, передающая сторона пишет ошибки передачи:

 Now sending 12456... failed.
Failed, response timed out.

Проверял десять раз правильность подключения, менял модули (всего в наличии 4 штуки) - не работает.

Что интересно, при отключении GND на передающей стороне, ошибка передачи пропадает, приходит некий ответ непонятно откуда (т.е. работает при выключенном приемнике).

Куда дальше рыть? Что проверить?

А статусы модулей что показывают?

anth2222
Offline
Зарегистрирован: 17.02.2016

smesharik пишет:

А статусы модулей что показывают?

Имеется в виду это?

RF24/examples/GettingStarted/
ROLE: Pong back
*** PRESS 'T' to begin transmitting to the other node
STATUS		 = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
RX_ADDR_P0-1	 = 0xe7e7e7e7e7 0xf0f0f0f0d2
RX_ADDR_P2-5	 = 0xc3 0xc4 0xc5 0xc6
TX_ADDR		 = 0xe7e7e7e7e7
RX_PW_P0-6	 = 0x00 0x20 0x00 0x00 0x00 0x00
EN_AA		 = 0x3f
EN_RXADDR	 = 0x03
RF_CH		 = 0x4c
RF_SETUP	 = 0x07
CONFIG		 = 0x0f
DYNPD/FEATURE	 = 0x00 0x00
Data Rate	 = 1MBPS
Model		 = nRF24L01+
CRC Length	 = 16 bits
PA Power	 = PA_HIGH

Failed, response timed out.
*** CHANGING TO RECEIVE ROLE -- PRESS 'T' TO SWITCH BACK

 

anth2222
Offline
Зарегистрирован: 17.02.2016

Valera19701 пишет:

керамические конденсаторы по питанию прямо на модуль припаять 1-10 мКф

Попробовал керамические и электролиты. Результат тот же :(

smesharik
Offline
Зарегистрирован: 31.01.2016

anth2222 пишет:

 

 Now sending 12456... failed.
Failed, response timed out.

 

согласно http://forum.amperka.ru/threads/nrf24l01-%D0%BF%D0%BE%D0%B1%D0%B5%D0%B6%D0%B4%D0%B0%D0%B5%D0%BC-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C.3205/page-34#post-63283

это еще не показатель не работы модулей

1. для начала удали свою старую библиотеку поставь http://arduino.ru/forum/programmirovanie/nrf24l01?page=12#comment-165781 от сюда

2. передача данных с аналогового входа. Приемник

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h> // https://github.com/maniacbug/RF24

const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба"

RF24 radio(9, 10); // CE, CSN
  
void setup(){
  Serial.begin(9600);
  
  radio.begin();  
  delay(2);
  radio.setChannel(9); // канал (0-127)
  
      // скорость, RF24_250KBPS, RF24_1MBPS или RF24_2MBPS
      // RF24_250KBPS на nRF24L01 (без +) неработает.
      // меньше скорость, выше чувствительность приемника.
  radio.setDataRate(RF24_1MBPS);     
  
      // мощьность передатчика RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM,
  radio.setPALevel(RF24_PA_HIGH);   
    
  radio.openReadingPipe(1,pipe); // открываем первую трубу с индитификатором "pipe"
  radio.startListening(); // включаем приемник, начинаем слушать трубу
}
 
//  radio.stopListening(); // останавливает приём (нужно перед началом передачи) 


void loop()   
{  
  int data; 
  
  if (radio.available()){ // проверяем не пришло ли чего в буфер.
    radio.read(&data, sizeof(data)); // читаем данные, указываем сколько байт читать
    
    Serial.print("data: ");
    Serial.println(data); 
  } 
} 

передача данных с аналогового входа. Передетчик

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h> // https://github.com/maniacbug/RF24
 
  
const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба"
 
RF24 radio(9, 10); // CE, CSN
 

void setup(){
  Serial.begin(9600);

  radio.begin();
  delay(2);
  radio.setChannel(9); // канал (0-127)
    
      // скорость, RF24_250KBPS, RF24_1MBPS или RF24_2MBPS
      // RF24_250KBPS на nRF24L01 (без +) неработает.
      // меньше скорость, выше чувствительность приемника.
  radio.setDataRate(RF24_1MBPS); 
   
      // мощьность передатчика, RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM,
  radio.setPALevel(RF24_PA_HIGH);   

  radio.openWritingPipe(pipe); // открываем трубу на передачу.
} 


void loop()   
{
  
  int data = analogRead(0); // читаем значение
  
  radio.write(&data, sizeof(data)); // отправляем данные и указываем сколько байт пакет
  
  Serial.print("data: ");
  Serial.println(data);
 
//  delay(1000);
}

у меня так заработало и видно что происходит

anth2222
Offline
Зарегистрирован: 17.02.2016

smesharik пишет:

1. для начала удали свою старую библиотеку поставь http://arduino.ru/forum/programmirovanie/nrf24l01?page=12#comment-165781 от сюда

Почему старую? Я брал свежайшую из первоисточника (https://github.com/maniacbug/RF24).

 

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

я пользуюсь этой библиотекой

https://github.com/TMRh20/RF24

anth2222
Offline
Зарегистрирован: 17.02.2016

Припаял конденсатор 2.2uF, до этого просто подключал через разъемы.

Модули пишут об успешной отправке.

Первый: Отправка ok, ответ timeout

Второй: Отправка ok, получен ответ (непонятно откуда)

Первый:

ROLE: Pong back
*** PRESS 'T' to begin transmitting to the other node
STATUS		 = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
RX_ADDR_P0-1	 = 0xf0f0f0f0e1 0xf0f0f0f0d2
RX_ADDR_P2-5	 = 0xc3 0xc4 0xc5 0xc6
TX_ADDR		 = 0xf0f0f0f0e1
RX_PW_P0-6	 = 0x20 0x20 0x00 0x00 0x00 0x00
EN_AA		 = 0x00
EN_RXADDR	 = 0x03
RF_CH		 = 0x4c
RF_SETUP	 = 0x07
CONFIG		 = 0x0f
DYNPD/FEATURE	 = 0x00 0x00
Data Rate	 = 1MBPS
Model		 = nRF24L01+
CRC Length	 = 16 bits
PA Power	 = PA_HIGH
*** CHANGING TO TRANSMIT ROLE -- PRESS 'R' TO SWITCH BACK
Now sending 5003...ok...Failed, response timed out.

Второй:

RX_ADDR_P0-1	= 0xa1f1f0a0e0 0xb1f1f0f0f0
RX_ADDR_P2-5	= 0x80 0x80 0x80 0x80
TX_ADDR		 = 0xf082f180a1
RX_PW_P0-6	= 0xe0 0x80 0xc0 0xf0 0x80 0x80
EN_AA		 = 0xc0
EN_RXADDR	= 0xe0
RF_CH		 = 0xc0
RF_SETUP	= 0x80
CONFIG		 = 0xc3
DYNPD/FEATURE	= 0xe0 0x00
Data Rate	 = 1MBPS
Model		 = nRF24L01
CRC Length	 = Disabled
PA Power	 = PA_MIN
Got payload 2155905152...
Sent response.

*** CHANGING TO TRANSMIT ROLE -- PRESS 'R' TO SWITCH BACK

Now sending 28217...ok...Got response 2155905152, round-trip delay: 2139090386

Now sending 29299...ok...Got response 3766485184, round-trip delay: 528511414

Now sending 30314...ok...Got response 4034978182, round-trip delay: 260019430

Now sending 31329...ok...Got response 2155905152, round-trip delay: 2139093475

 

smesharik
Offline
Зарегистрирован: 31.01.2016

anth2222 пишет:

Припаял конденсатор 2.2uF, до этого просто подключал через разъемы.

Модули пишут об успешной отправке.

попробуй из моего примера, там доложно число идти до 1000 в зависимости от прикосновения пальцем к А0 контакта

может эти примеры не совсем подходят, или что еще с ними не так

anth2222
Offline
Зарегистрирован: 17.02.2016

smesharik пишет:

попробуй из моего примера, там доложно число идти до 1000 в зависимости от прикосновения пальцем к А0 контакта

может эти примеры не совсем подходят, или что еще с ними не так

Не помогает. Пробовал заменить конденсаторы на керамические - результат тот же.

Как правильно проинтерпретировать статусы девайсов? Там видна проблема?