Общение модулей nRF24L01+

Lictor
Offline
Зарегистрирован: 01.10.2015

Доброго времени суток.

Приобрел россыпью десяток модулей nRF24L01+. Запускал тестовый скетч из библиотеки. Работает. Ардуины кидаются сообщениями. Конденсаторы напаял (и электролит, и  керамику). На меге у передатчика отдельное питание со стабилизатора на 0,5А 3,3В. На Atmega328 питание идет с самой платы (она у меня самодельная).  А вот собственный код не работает( 328 мега должна раз в 2 секунды скидывать значение переменной на Мегу, которая после приемки его должна вывести в порт. Но Мега ничего не выводит.

передатчик

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"      //подключаем библиотеки

RF24 radio(9, 10); // UNO передатчик
int out = 19641; //то, что будем передавать
const uint64_t pipe01 = 0xE8E8F0F0E2LL;  //адрес

void setup() {
  Serial.begin(57600);
  delay(200);
  radio.begin(); //запускаем радиомодуль
  radio.setChannel(0x22);  //выбор канала для передачи
  radio.setDataRate(RF24_250KBPS);
  radio.setPALevel(RF24_PA_MAX); //уровень сигнала
   radio.openWritingPipe(pipe01);
}

void loop() {

  radio.write(&out, sizeof(out));
  delay(5000);
  Serial.print(out);
  out++;
  
}


  /*
    RF24 radio(7, 6); // MEGA приемник
    RadioVybor = 1;
    const uint64_t pipe00 = 0xE8E8F0F0E1LL;
  */

Приемник

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"      //подключаем библиотеки

RF24 radio(7, 6); // MEGA приемник
int in;
const uint64_t pipe01 = 0xE8E8F0F0E2LL;

void setup() {
  delay(2000);
  Serial.begin(57600);
  radio.begin(); //запускаем радиомодуль
  radio.setChannel(0x22);  //выбор канала для передачи
  radio.setDataRate(RF24_250KBPS);
  radio.setPALevel(RF24_PA_MAX); //уровень сигнала
  radio.openReadingPipe(1, pipe01);
   radio.startListening();   
}

void loop() {


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


/*
RF24 radio(9, 10); // UNO передатчик
const uint64_t pipe01 = 0xE8E8F0F0E2LL;  //адрес
*/

Пробовал запускать сканер с Амперки. Мега. Децимия.

 

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

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"      //подключаем библиотеки

RF24 radio(7, 6); // MEGA приемник
int in;
const uint64_t pipe01 = 0xE8E8F0F0E2LL;

void setup() {
  delay(2000);
  Serial.begin(57600);
  radio.begin(); //запускаем радиомодуль
  radio.setChannel(0x22);  //выбор канала для передачи
  radio.setDataRate(RF24_250KBPS);
  radio.setPALevel(RF24_PA_MAX); //уровень сигнала
  radio.openReadingPipe(1, pipe01);
   radio.startListening();   
}

void loop() {
  if ( radio.available() ) {
     radio.read( &in, sizeof(in) );  // по адресу переменной in функция записывает принятые данные;
          }
           Serial.print(in);
 }


/*
RF24 radio(9, 10); // UNO передатчик
const uint64_t pipe01 = 0xE8E8F0F0E2LL;  //адрес
*/

и в приемник и передатчик добавить код после radio.begin(); вот этот код

radio.setAutoAck(true);

 

Lictor
Offline
Зарегистрирован: 01.10.2015

Valera19701 пишет:

а если так

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"      //подключаем библиотеки

RF24 radio(7, 6); // MEGA приемник
int in;
const uint64_t pipe01 = 0xE8E8F0F0E2LL;

void setup() {
  delay(2000);
  Serial.begin(57600);
  radio.begin(); //запускаем радиомодуль
  radio.setChannel(0x22);  //выбор канала для передачи
  radio.setDataRate(RF24_250KBPS);
  radio.setPALevel(RF24_PA_MAX); //уровень сигнала
  radio.openReadingPipe(1, pipe01);
   radio.startListening();   
}

void loop() {
  if ( radio.available() ) {
     radio.read( &in, sizeof(in) );  // по адресу переменной in функция записывает принятые данные;
          }
           Serial.print(in);
 }


/*
RF24 radio(9, 10); // UNO передатчик
const uint64_t pipe01 = 0xE8E8F0F0E2LL;  //адрес
*/

и в приемник и передатчик добавить код после radio.begin(); вот этот код

radio.setAutoAck(true);

 

 

Нет, это не помогло.

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

в передатчик в 20 строке добавить

radio.stopListening(); 

 

Lictor
Offline
Зарегистрирован: 01.10.2015

Valera19701 пишет:

в передатчик в 20 строке добавить

radio.stopListening(); 

 

 

И это, к сожалению, не помогло.

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

а библиотека новая

https://github.com/TMRh20/RF24

а тут читали?

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

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015
Для тестирования двусторонней передачи написал такой скетч.
Замечания:
1. У меня идентичные модули и потому частичная инициализация.
2. Пришлось припаять конденсатор 220Мф, а то без него UNO не хотел работать на прием.
3. Две линии перенес на А0 и А1.
Слушать через COM порт
 
Этот скетч надо залить без изменений на две Ардуинки.
#include<SPI.h>
#include<nRF24L01.h>
#include<RF24.h>
const uint64_t pipe= {0xF0F0F0F0E1LL};
RF24 radio(A0,A1); //Обратите внимание тут другое подключение
byte message = 1;
byte red;
unsigned long CTime01;
unsigned long LTime01;
void setup()
{
  Serial.begin(9600);
  radio.begin();
  delay(100);
  radio.enableDynamicPayloads();
  radio.openReadingPipe(1,pipe);
  radio.openWritingPipe(pipe); //Открывем трубу для отправки
  radio.startListening();

}
void loop()
{
  if ( radio.available() ) {
       radio.read( &red,sizeof(red) );
       Serial.println(String(red));
      };

    CTime01 = millis();
    if (CTime01 >= (LTime01 +100)) //Периодичность отправки пакетов
    {
       Serial.println("----------write------------");
       radio.stopListening();  //Перестаем слушать
       radio.write(&message, sizeof(message)); // Отправляем ответ
       radio.startListening();
       LTime01 = CTime01;
       message++;
    }
}

 

 

Lictor
Offline
Зарегистрирован: 01.10.2015

Okmor пишет:

Для тестирования двусторонней передачи написал такой скетч.
Замечания:
1. У меня идентичные модули и потому частичная инициализация.
2. Пришлось припаять конденсатор 220Мф, а то без него UNO не хотел работать на прием.
3. Две линии перенес на А0 и А1.
Слушать через COM порт
 
Этот скетч надо залить без изменений на две Ардуинки.
#include<SPI.h>
#include<nRF24L01.h>
#include<RF24.h>
const uint64_t pipe= {0xF0F0F0F0E1LL};
RF24 radio(A0,A1); //Обратите внимание тут другое подключение
byte message = 1;
byte red;
unsigned long CTime01;
unsigned long LTime01;
void setup()
{
  Serial.begin(9600);
  radio.begin();
  delay(100);
  radio.enableDynamicPayloads();
  radio.openReadingPipe(1,pipe);
  radio.openWritingPipe(pipe); //Открывем трубу для отправки
  radio.startListening();

}
void loop()
{
  if ( radio.available() ) {
       radio.read( &red,sizeof(red) );
       Serial.println(String(red));
      };

    CTime01 = millis();
    if (CTime01 >= (LTime01 +100)) //Периодичность отправки пакетов
    {
       Serial.println("----------write------------");
       radio.stopListening();  //Перестаем слушать
       radio.write(&message, sizeof(message)); // Отправляем ответ
       radio.startListening();
       LTime01 = CTime01;
       message++;
    }
}

 

 

 

Ваш скетч работает

91
----------write------------
92
----------write------------
93
----------write------------
94
----------write------------
95
----------write------------
96
----------write------------
97
----------write------------
98
----------write------------
99
----------write------------
100
----------write------------
101
----------write------------
102
----------write------------
103
----------write------------
104
----------write------------
105
----------write------------
106
----------write------------
107
----------write------------
108
----------write------------
109

/*тут я отключил вторую ардуину, что бы посмотреть, что будет*/
----------write------------
----------write------------
----------write------------
----------write------------
----------write------------
----------write------------
----------write------------
----------write------------
----------write------------
----------write------------
----------write------------
----------write------------
----------write------------
----------write------------
----------write------------
----------write------------
----------write------------

Осталось понять, что с моим не так(

Lictor
Offline
Зарегистрирован: 01.10.2015

Valera19701 пишет:

а библиотека новая

https://github.com/TMRh20/RF24

а тут читали?

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

 

Библиотека новая, там не читал, но сейчас прочел, вроде бы ничего нового не нашел.