Nrf24l01+

sdvdio
Offline
Зарегистрирован: 15.04.2014

я не могу понять где ошибка что делаю не так ?

вы можете поправить ?

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Вы посылает единицу, целое число, а на приёме сравнивает с символом 1.
Т.е. на выходе код 1, а на входе почему то ждете 49 - это код символьной 1.
Уберите кавычки и по читайте чем отличается целое число 1 от символа '1'.

sdvdio
Offline
Зарегистрирован: 15.04.2014

я понимаю разницу между числом и  символом.

я прошу помочь исправить код так как сам не особо силен в этом !

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Внимательно прочитайте мои оба сообщения, я уже написал как исправить

gmurvs
Offline
Зарегистрирован: 15.04.2014

Уважаемые участники форума, помогите разобраться с проблемой, может, кто сталкивался с ней.

Есть пара дуин, которые общаются просредством радиомодулей nrf24l01+.

Схема:  1. Mega & nrf24l01+pa+lna -(запрос параметра)> 2. Nano & nrf24l01+ - (передача параметра)>  1. Mega & nrf24l01+pa+lna

Логика взаимодействия - Mega отправляет запрос в Nano на передачу параметра, Nano принимает запрос и отправляет в Mega его значение.

Все работает, за исключением такого момента.

Передача не выполняется до тех пор, пока до какой-либо части Mega, или радиомодуля nrf24l01+pa+lna не коснуться рукой.

Если заменить радиомодуль nrf24l01+pa+lna на nrf24l01+, то такой проблемы нет.

Проблема отмечена и в случае использования nrf24l01+pa+lna с Nano, т.е. от МК по идее, зависимости нет. Тестировалось три штуки nrf24l01+pa+lna.

Питание радиомодулей отдельное от LiPo 4,0V (не сгорело пока ни одного), на разъем питания радиомодуля припаян конденсатор.

 

 

lee
Offline
Зарегистрирован: 13.03.2014

Приветствую.

Подскажите..

ВСЕ РАЗОБРАЛСЯ :)

lee
Offline
Зарегистрирован: 13.03.2014
gmurvs
Похоже или земля непропаена или неподсоединена или антенна несогласована неподключена нормально.
gmurvs
Offline
Зарегистрирован: 15.04.2014

Провел серию экспериментов:

- Mega заменил на Nano, питание от акб 4,5 В 700 mah

- NRF24 PA + LA - перепаял кондеры возле кварца, организовал отдельное питание от стабилизатора AMS1117 2,5 В, на питание впаял пару кондеров по 470 мкФ, на крепление антены припаял медный провод длинной десь 30 см.

Результат.

Проблема, описанная ранее (Передача не выполняется до тех пор, пока до какой-либо части Mega, или радиомодуля nrf24l01+pa+lna не коснуться рукой.) ушла. Теперь все работает, как надо.

Возможно, истоки проблемы в схемотехнике NRF24 + PA + LA.

Попробую организовать экранирование радиомодуля, посмотрю, как будет работать.

 

 

gmurvs
Offline
Зарегистрирован: 15.04.2014

Последние наблюдения показали, что если запитать Nano (Vin) от 4,7 .. 5 В, то радиомодуль NRF24 + PA + LA работает стабильно, от 6..12 В передача не работает.

toc
Offline
Зарегистрирован: 09.02.2013

в гугле есть ссылки на свежие материалы по теме nrf24l01 bootloader

art100
Offline
Зарегистрирован: 09.03.2014

получил модулей парочку

через 4 часа лампочки моргают

Почему у меня все работает?

Что я делаю не так?

дебило-картинку подправил конечно

 

 

 http://yadi.sk/d/HbkmL8cCR8EFn

код взял от товарища 

" урок от Дмитрия Осипова. http://www.youtube.com/user/d36073?feature=watch

 v.01 передатчик Arduino NRF24L01 радиомодуль связь двух Arduino
 Version 0.1 2013/07/13
"

Прекрасная работа.

Этот товарищ сюда заглядывает?

 

serfer89
Offline
Зарегистрирован: 28.06.2014

Добрый вечер, столкнулся с такой проблемой, схема пара nano+NRF24L01 подключены к USB портам компа запускаю стандартные примеры из библиотеки http://github.com/maniacbug/RF24, но обмена между ними совсем нет запросы отсылаються но не принимаються, менял их ролями таже беда, замеря напряжение на ножках модуля  3.2 В, может ли ему не хватать что бы осуществлять нормально прием-передачу. Пробовал еще питание подавать на vin с usb результат тот же.

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

а кондер ставили по питанию?

serfer89
Offline
Зарегистрирован: 28.06.2014

Пока еще нет, надеялся что не будет такой необходимости, оставил на ночь, оказываеться они таки общаются но, из наверное милиона запросов было только 2-3 удачных судя по логу монитора порта. Таки кондер? А какие его ориентировочные параметры должны быть?

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Половина НРФ-ок кое-как работает без кондёра, а половина -не работает. Ставьте что найдёте- 47, 100, 220.....

serfer89
Offline
Зарегистрирован: 28.06.2014

2200 мкФ на 16 В нормально будет? или надо поменьше?

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Можно, только зачем ( там 3.3 Вольта), да и  мелкие очень удачно паяются  .

Похоже на это, только ножки надо  согнуть и положить кондёр на разъём (торчком бысто отломается ).

http://arduino.ru/forum/programmirovanie/nrf24l01?page=2#comment-31054

http://forum.arduino.cc/index.php?PHPSESSID=lk7r6uqtbhnppru3f4kk1akh44&t...

serfer89
Offline
Зарегистрирован: 28.06.2014

Добрый вечер) Таки кондер)) припаял  470 мкФ 10 В на питание модуля как на картинке и все ок. Спасибо огромное!!

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

керамику 0805 или 1206 купите 10-20 в китае на 1-10мкф и все. я ставлю 1206 10мкф прозапас

curat0r
Offline
Зарегистрирован: 28.08.2014

Добрый день,

не нашел ветку по NRF24LE1, ее здесь обсуждают?

 

art100
Offline
Зарегистрирован: 09.03.2014

curat0r пишет:

Добрый день,

не нашел ветку по NRF24LE1, ее здесь обсуждают?

 

а чего их обсуждать?

они работают

а их пользуют

MaksMS
Offline
Зарегистрирован: 11.03.2013

NRF24LE1 ну просто никак не относится к ардуино , там свой микроконтроллер встроенный..

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

All, определяют ли функции установки адреса режим работы? Т. е. если я собираюсь по очереди принимать/передавать, надо ли делать каждый раз setRAddr перед приёмом и setTAddr перед передачей, или достаточно один раз оба адреса установить в setup()?

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

возник вопрос. есть код, может из примеров, чтобы проверить что радиомодуль подключен верно?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

jeka_tm пишет:

возник вопрос. есть код, может из примеров, чтобы проверить что радиомодуль подключен верно?


Там в примерах есть пыыынг

sav13
sav13 аватар
Offline
Зарегистрирован: 17.06.2013

std пишет:

All, определяют ли функции установки адреса режим работы? Т. е. если я собираюсь по очереди принимать/передавать, надо ли делать каждый раз setRAddr перед приёмом и setTAddr перед передачей, или достаточно один раз оба адреса установить в setup()?

Библиотеки какие?

Я работаю с NRF24Network
В setup() собственный адрес устройства.
 
При передаче использую структуру RF24NetworkHeader  для заголовка.
Прием заголовка тоже в нее осуществляется
Их можно хоть сотню насоздовать на передачу и работать без всяких передергиваний.
 
 
 

 

toc
Offline
Зарегистрирован: 09.02.2013

> надо ли делать каждый раз setRAddr перед приёмом и setTAddr перед передачей, или достаточно один раз оба адреса установить в setup()?

При работе с библиотекой RF24 мне показалось, что адреса пайпов запоминаются во встроенной в радиочип флешпамяти. То есть адреса можно устанавливать однократно, а не при каждом включении. Извините, если ответ не по теме вопроса.

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

Puhlyaviy пишет:
jeka_tm пишет:

возник вопрос. есть код, может из примеров, чтобы проверить что радиомодуль подключен верно?

Там в примерах есть пыыынг

из всех примеров в мегу 8 влез только сканер. но этого достаточно. можно легко проверить работает или нет

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

Гуд. Спасибо, могучий all.

derver
Offline
Зарегистрирован: 11.05.2014

jeka_tm

помогите пожалуйста



на меге подключаю sd card и nrf24l01 по шине spi начинает конфликтовать nrf24l01 а отдельно все работает



что надо при этом сделать
derver
Offline
Зарегистрирован: 11.05.2014

Puhlyaviy

может быть вы поможете
jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

есть такая плата. называется iboard. на ней nrf24l01 висит на софтварном spi. это первый вариант

второй вариант sd вешать на софтварный

третий использовать chip select и работать с одним spi. но тут скорее всего придется библиотеки править. а может и нет

проще всего 1

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

.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

jeka_tm пишет:

есть такая плата. называется iboard. на ней nrf24l01 висит на софтварном spi. это первый вариант

второй вариант sd вешать на софтварный

третий использовать chip select и работать с одним spi. но тут скорее всего придется библиотеки править. а может и нет

проще всего 1


Эк тебя понесло. Не нужно там ничего править. Хорошо все работает. Просто нужно всегда помнить. Что шина одна а устройств много на ней. И не работать одновременно.

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

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

MaksMS
Offline
Зарегистрирован: 11.03.2013

toc пишет:
> надо ли делать каждый раз setRAddr перед приёмом и setTAddr перед передачей, или достаточно один раз оба адреса установить в setup()? При работе с библиотекой RF24 мне показалось, что адреса пайпов запоминаются во встроенной в радиочип флешпамяти. То есть адреса можно устанавливать однократно, а не при каждом включении. Извините, если ответ не по теме вопроса.

Настройки там сохраняются , если не было отключено питание радиомодуля. Если микроконтроллер не менял настройки, то они остаются прежними

На счёт одновременной работы - работать могут без проблем любые устройства SPI .если они опрашиваются не обновременно ! Если ,например, имеется вызов события работы внутри прерывания через вывод IRQ, то при использовании SPI другими устройствами будут глюки..

derver
Offline
Зарегистрирован: 11.05.2014

Puhlyaviy
может подскажешь  как сделать

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

derver пишет:

Puhlyaviy
может подскажешь  как сделать


Амммм что сделать? У меня нет настроения играть в угадайку.
Если бы я хотел чтобы мне помогли. Я бы начал с того чтоь я хочу получить в итоге. Потом приложил схему того что я собрал. Потом прикрутил бы код который я накорябал. Дальше бы оформил все ошибки что вылазят и особо отметил что именно беспокоит.
Потому что я не вижу проблемы в работе двух хреновин на одной шине. Главное что бы памяти хватало на временное хранение той чухни что вы перекидываете между сд и радио. И не забывать выключать пин cs радио после того как с ним закончили.

serfer89
Offline
Зарегистрирован: 28.06.2014

Это и есть пример софтового SPI?

#include <SPI.h>

/*
 * This sketch will list all files in the root directory and 
 * then do a recursive list of all directories on the SD card.
 *
 */

#include <SdFat.h>
#include <SdFatUtil.h>
#include <Ethernet.h>

/************ ETHERNET STUFF ************/
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 0, 177 };
Server server(80);

/************ SDCARD STUFF ************/
Sd2Card card;
SdVolume volume;
SdFile root;

// store error strings in flash to save RAM
#define error(s) error_P(PSTR(s))

void error_P(const char* str) {
  PgmPrint("error: ");
  SerialPrintln_P(str);
  if (card.errorCode()) {
    PgmPrint("SD error: ");
    Serial.print(card.errorCode(), HEX);
    Serial.print(',');
    Serial.println(card.errorData(), HEX);
  }
  while(1);
}

void setup() {
  Serial.begin(9600);
 
  PgmPrint("Free RAM: ");
  Serial.println(FreeRam());  
  
  // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with
  // breadboards.  use SPI_FULL_SPEED for better performance.
  pinMode(10, OUTPUT);                       // set the SS pin as an output (necessary!)
  digitalWrite(10, HIGH);                    // but turn off the W5100 chip!

  if (!card.init(SPI_HALF_SPEED, 4)) error("card.init failed!");
  
  // initialize a FAT volume
  if (!volume.init(&card)) error("vol.init failed!");

  PgmPrint("Volume is FAT");
  Serial.println(volume.fatType(),DEC);
  Serial.println();
  
  if (!root.openRoot(&volume)) error("openRoot failed");

  // list file in root with date and size
  PgmPrintln("Files found in root:");
  root.ls(LS_DATE | LS_SIZE);
  Serial.println();
  
  // Recursive list of all directories
  PgmPrintln("Files found in all dirs:");
  root.ls(LS_R);
  
  Serial.println();
  PgmPrintln("Done");
  
  // Debugging complete, we start the server!
  Ethernet.begin(mac, ip);
  server.begin();
}

void loop()
{
  Client client = server.available();
  if (client) {
    // an http request ends with a blank line
    boolean current_line_is_blank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        // if we've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so we can send a reply
        if (c == '\n' && current_line_is_blank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          
          // print all the files, use a helper to keep it clean
          //ListFiles(client, 0);
          client.println("<h2>Files:</h2>");
          ListFiles(client, 0);
          
          break;
        }
        if (c == '\n') {
          // we're starting a new line
          current_line_is_blank = true;
        } else if (c != '\r') {
          // we've gotten a character on the current line
          current_line_is_blank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    client.stop();
  }
}


void ListFiles(Client client, uint8_t flags) {
  // This code is just copied from SdFile.cpp in the SDFat library
  // and tweaked to print to the client output in html!
  dir_t p;
  
  root.rewind();
  while (root.readDir(p) > 0) {
    // done if past last used entry
    if (p.name[0] == DIR_NAME_FREE) break;

    // skip deleted entry and entries for . and  ..
    if (p.name[0] == DIR_NAME_DELETED || p.name[0] == '.') continue;

    // only list subdirectories and files
    if (!DIR_IS_FILE_OR_SUBDIR(&p)) continue;
   

    // print file name with possible blank fill
    //root.printDirName(*p, flags & (LS_DATE | LS_SIZE) ? 14 : 0);


    for (uint8_t i = 0; i < 11; i++) {
      if (p.name[i] == ' ') continue;
      if (i == 8) {
        client.print('.');
      }
      client.print(p.name[i]);
    }
    if (DIR_IS_SUBDIR(&p)) {
      client.print('/');
    }

    // print modify date/time if requested
    if (flags & LS_DATE) {
       root.printFatDate(p.lastWriteDate);
       client.print(' ');
       root.printFatTime(p.lastWriteTime);
    }
    // print size if requested
    if (!DIR_IS_SUBDIR(&p) && (flags & LS_SIZE)) {
      client.print(' ');
      client.print(p.fileSize);
    }
    client.println("<br>");
  }
}

 

derver
Offline
Зарегистрирован: 11.05.2014

я пытаюсь програмно включать на ардуино нано реле для включения лампочки с меги 2560. при нажатии на кнопку все работает но когда в программ сую dht11 ,nrf2401 не хочет работать . при sd card тоже самое было.

// передатчик
#include <SPI.h>
#include "RF24.h"
#include <nRF24L01.h>
#include "DHT.h"

int msg[1];
RF24 radio(48,49);
// адреса каналов приема и передачи
const uint64_t pipe = 0xE8E8F0F0E1LL; // адрес канала передачи
//кнопки подключены к этим пинам
int buttonPin1 = 2;
int buttonPin2 = 3;

#define DHTPIN 22     // what pin we're connected to
#define DHTTYPE DHT11   // DHT 11 
DHT dht(DHTPIN, DHTTYPE);
float h = 0;
float t = 0;

void setup(void){ 
  Serial.begin(9600); 
  Serial.println("DHTxx test!");
  dht.begin();
  
  radio.begin();
  radio.openReadingPipe(1,pipe); // Открываем один из 6-ти каналов приема
  radio.startListening(); // Начинаем слушать эфир  
  
  pinMode(buttonPin1, OUTPUT);
  pinMode(buttonPin2, OUTPUT); 
 
} 
void loop(void){
  // t = dht.readTemperature();
 //if (t >=28){
 //Serial.print(t);
  //пока кнопка 

 
 if (digitalRead(buttonPin1) == HIGH){ 
    msg[0] = 111;
    radio.stopListening(); 
    radio.write(msg, 1);
    radio.startListening();
    Serial.print("ok");
  }  
 
 
  if (digitalRead(buttonPin2) == HIGH){ 
    msg[0] = 112; 
    radio.stopListening(); 
    radio.write(msg, 1);
    radio.startListening();
  }
//float h = dht.readHumidity();
//float t = dht.readTemperature();
 
// }
}

 

//приемник
#include <SPI.h>
#include "RF24.h"
#include <nRF24L01.h>

int msg[1];

RF24 radio(9,10);
//светодиоды подключены к этим пинам
int LEDpin1 = 2;
int LEDpin2 = 3;
// адреса каналов приема и передачи
const uint64_t pipe = 0xE8E8F0F0E1LL; // адрес канала передачи

void setup(void){
  radio.begin();
  radio.openReadingPipe(1,pipe); // Открываем один из 6-ти каналов приема
  radio.startListening(); // Начинаем слушать эфир

  pinMode(LEDpin1, OUTPUT);
  pinMode(LEDpin2, OUTPUT); 

}

void loop(void){
  if (radio.available()){
    bool done = false;    
    while (!done){
      done = radio.read(msg, 1);      
      //если пришел пакет от Arduino №1 (111) вКлючается светодиод (горит)LEDpin1, HIGH
      if (msg[0] == 111){
        delay(10);
        digitalWrite(LEDpin1, HIGH);
      }
      else {
        digitalWrite(LEDpin1, LOW);
      }
      delay(10);
      if (msg[0] == 112){
        delay(10);
        digitalWrite(LEDpin2, HIGH);
      }
      else {
        digitalWrite(LEDpin2, LOW);
      }
      delay(10);
    }
  }
}

-----------------------------------------------

 
derver
Offline
Зарегистрирован: 11.05.2014

в передатчике не могу запустить код

35  // t = dht.readTemperature();
36 //if (t >=28){
37 //Serial.print(t);
38  //пока кнопка

при температуре больше или равно включить тумблер

помогите пожалуста

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Мыши плакали, кололись но продолжали жрать кактус. Я так понимаю что обьяснения о том что нужно выключать одно устройство прежде чем общаться с другим. Это вообще ни о чем для вас.

28 radio.startListening(); // Начинаем слушать эфир

derver
Offline
Зарегистрирован: 11.05.2014

nrlf24 я неделю только разбираюсь. Puhlyaviy подмогни пожалуста в проге

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

derver пишет:

nrlf24 я неделю только разбираюсь. Puhlyaviy подмогни пожалуста в проге


Шина spi это не только nrfl24. Это довольно развитая штука. Так что разбирайтесь дальше. Пригодится.

derver
Offline
Зарегистрирован: 11.05.2014

radio.startListening() и radio.stopListening() пробовал везде сувать эффект такой же 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

derver пишет:

radio.startListening() и radio.stopListening() пробовал везде сувать эффект такой же 


А не нужно его везде сувать. Слушать нужно тольк когда нужно. Гыы масло масляное.
Старый пример с трубой. Вы можете с соседом перекрикиваться через канализационую трубу. И все будет прекрасно пока не решите смыть по этой же трубе какашки. Что будет если вы всегда слушаете трубу , вдруг сосед позовет, а он в это время смоет унитаз. :) поэтому слушать нужно только когда к вам обращаются. Как узнать что вас зовут к трубе? Можно по батарее постучать. В данном случае это прерывания

derver
Offline
Зарегистрирован: 11.05.2014

ну вы как мой физик смысл то понял как это в коде сделать

derver
Offline
Зарегистрирован: 11.05.2014
pinMode(2, INPUT);
  digitalWrite(2, HIGH);

 

типа так

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Нужно убрать прослушку эфира. И все сразу заработает. :) и даже sd

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

derver пишет:

ну вы как мой физик смысл то понял как это в коде сделать


Кстати у due есть 3 spi и они могут одновременно работать :)