Nrf24l01+

Yurka05
Offline
Зарегистрирован: 02.10.2011

Заказал из китая 2 модуля, получил, подключил. А дальше....?

Погуглил, и облом. Мало инфы сопряжения с ардуинкой. 

Кто имел дело с такими модулями? Помогите пожалуйста. посоветуйте прогу для теста.

Спасибо.

П.С.

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

Diemon
Offline
Зарегистрирован: 18.11.2011

М, я так понял что это беспроводной приемопередатчик. Частота 2.4ГГц. Это по вайфай чтоли? и цена в 3 доллара вкусная. Не в курсе, с вайфай телефона можно связать?

 

З.Ы. первая же ссылка в гугле: www.arduino.cc/playground/InterfacingWithHardware/Nrf24L01

 

Yurka05
Offline
Зарегистрирован: 02.10.2011

 Ну это не вай-фай, но цена действительно вкусная.

Эту прогу пробовал. ни как не могу понять как работает. =((

Yurka05
Offline
Зарегистрирован: 02.10.2011

Нашел неплохую статью, может кому поможет

http://www.elecfreaks.com/480.html

 

 

Если у кого есть рабочая прога передачи байтиков, дайте плиз... 

 

Nixoid
Nixoid аватар
Offline
Зарегистрирован: 16.09.2011

 В даташите на Nrf24l01+ указано что порты толерантны к 5 вольтовым уровням.

Сама микросхема приемлит питание до 3,6 вольт. 

Значит питание даём с 3,3 выхода ардуино, а SPI подключаем без всяких резистивных делителей.

Сейчас попробую. Постараюсь отписаться как прошел опыт с подключением к SPI без делителя.

 

Nixoid
Nixoid аватар
Offline
Зарегистрирован: 16.09.2011

Нормально всё работает.

Подключил к двум Ардуино нано на 328 меге два модуля  Nrf24l01+.

Питание 3,3 вольта. SPI напрямую.

Код привожу ниже - соеденял свой комп с ноутбуком - все передаётся нормально и без ошибок.

Естественно код должен быть различным для приёмопередатчиков.

Просто в одном поставьте Mirf.setRADDR((byte *)"app1");

во втором Mirf.setRADDR((byte *)"app2");

и соответсвенно в первом Mirf.setTADDR((byte *)"app2");

во втором Mirf.setTADDR((byte *)"app1");

 

вот код.

#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
#define MAX_BUFF 32 //Буфер приёма-передачи

void setup(){
  Serial.begin(9600);
  Mirf.spi = &MirfHardwareSpi;
  Mirf.init();
  
  Mirf.setRADDR((byte *)"app2"); //Хдесь задаём адрес
  Mirf.payload = MAX_BUFF; //Здесь задаём буфер
  Mirf.channel = 10; 
//Это канал приёма-передачи - должен 
//быть одинаковым у устройств.
  Mirf.config();
  
  Serial.println("Start.."); 
}

char buff[MAX_BUFF];
int c_count = 0;

void loop(){
  int i;
  //sending  
  if (c_count = Serial.available()) {
    if (c_count <= MAX_BUFF) {
      for (i=0; i<c_count; i++) {
        buff[i] = Serial.read();
      }
    } else {
      for (i=0; i<MAX_BUFF; i++) {
        buff[i] = Serial.read();
      }
    }
    buff[i] = 0;
    Mirf.setTADDR((byte *)"app1"); //Адрес!
    Serial.print(">");
    Mirf.send((uint8_t *)buff);
    while(Mirf.isSending()){
    }
    Serial.println(buff);
  }
  delay(10);
  //receiving  
  if(Mirf.dataReady()) {
    Mirf.getData((uint8_t *)buff);
    Serial.print("<");
    Serial.println(buff);
  }
  delay(100);
}

 

Nixoid
Nixoid аватар
Offline
Зарегистрирован: 16.09.2011

Буфер тоже должен быть одинаковым. 

Adessit
Adessit аватар
Offline
Зарегистрирован: 12.04.2011

И как эти модули? Какова дальность работы? Что за модули, можно картинку? 

Nixoid
Nixoid аватар
Offline
Зарегистрирован: 16.09.2011
ustas
Offline
Зарегистрирован: 12.03.2012

 Nixoid, спасибо за пример - сначала заработал он, потом все остальное из примеров ;)

Nixoid
Nixoid аватар
Offline
Зарегистрирован: 16.09.2011

Завсегда вэлком.. 

Nixoid
Nixoid аватар
Offline
Зарегистрирован: 16.09.2011

Adessit пишет:

И как эти модули? Какова дальность работы? Что за модули, можно картинку?

google.gik-team.com/ 

ustas
Offline
Зарегистрирован: 12.03.2012

 Отличная ссылка, возьму на вооружение ;))))

 

Nixoid
Nixoid аватар
Offline
Зарегистрирован: 16.09.2011

ustas пишет:

 Отличная ссылка, возьму на вооружение ;))))

 

Мне тоже нравится..

ustas
Offline
Зарегистрирован: 12.03.2012

 Вот какая задачка возникла:

есть один "приемник" (для определенности - обзовем его rx00) и есть неколько передатчиков:

tx00 - отправляет свой номер, номер посылки, дату, время, день недели, температуру, влажность, номер посылки (в несколько заходов, размер буфера 32)

tx01 - отправляет свой номер, номер посылки, температуру, влажность (в один заход, размер буфера 32)

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

В скетче для tx00 есть строчки:

  Mirf.setTADDR((byte *)"tx00"); 
  Mirf.setRADDR((byte *)"rx00");

В скетче для tx01:

  Mirf.setTADDR((byte *)"tx01");
  Mirf.setRADDR((byte *)"rx00");

Соответственно, в скетче для приемника (rx00), если есть строки:

  Mirf.setTADDR((byte *)"rx00"); 
  Mirf.setRADDR((byte *)"tx00"); 

То слушаем tx00

если же:

  Mirf.setTADDR((byte *)"rx00"); 
  Mirf.setRADDR((byte *)"tx01"); 

То служаем tx01

А вот теперь задачка.. как можно модифицировать код для приемника, чтобы он принимал как от tx00, так и от tx01?

Сложность (или наоборот, это хорошо?) еще в том, что темп поступления данных - разный, причем, существенно (tx00 шлет данные примерно раз в 1 секунду, а tx00 - раз в 5 минут).

Код "приемника":

#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>

#define MAX_BUFF 32 //Буфер приёма-передачи

void setup(){
  Serial.begin(9600);
  Mirf.csnPin = 9;
  Mirf.cePin = 8;

  Mirf.spi = &MirfHardwareSpi;
  Mirf.init();
  
 
  Mirf.setTADDR((byte *)"rx00"); 
  Mirf.setRADDR((byte *)"tx01"); 
  
  
  Mirf.payload = MAX_BUFF; //Здесь задаём буфер
  Mirf.channel = 10; 
//Это канал приёма-передачи - должен 
//быть одинаковым у устройств.
  Mirf.config();
  
  Serial.println("Start.."); 
}

char buff[MAX_BUFF];

void loop(){

  //receiving  
  if(Mirf.dataReady()) {
    Mirf.getData((uint8_t *)buff);
    Serial.println(buff);
  }

}

P.S. Собственно, используетя эта библиотека: http://arduino.cc/playground/InterfacingWithHardware/Nrf24L01

kui
Offline
Зарегистрирован: 09.10.2012

ustas пишет:

А вот теперь задачка.. как можно модифицировать код для приемника, чтобы он принимал как от tx00, так и от tx01?

пусть tx 00 передаёт в tx 01  а tx 01 уже передаёт пакет в приёмник rx. Одновременно то же довольно просто (и приёмник и передатчик) нужно заюзать питание модуля на лапку микроконтроллера (любую) и дёргать ей (модуль необходимо сбрасывать с питания для смены его ч приёмника на передатчик) и на внешнее событие привязать другогой лапки (диджитал рид ).  Модуль на 13 лапке, полсекунды он Hight полсекунды Low потом опять Hight. паралельно слушаем другой пин 10 например  (он то же на полсекунды завязан, дергаем лапкой вхолостую High или Low).  В скетче же связь если 10 пин High то настройки как у передатчика, если Low то как у приёмника.

maksim
Offline
Зарегистрирован: 12.02.2012

Может я чего не понимаю, но не совсем понятно что вы придумали... зачем подключать питание модуля к МК? зачем передавать данные по цепочке тоже не ясно... но открою секрет - nRF24L01+ поддерживает аппаратно до 6 передатчиков на один приемник.

kui
Offline
Зарегистрирован: 09.10.2012

да верно шесть передатчиков и один приёмник вы мне сами его и посоветовали если я не ошибаюсь. Но модуль настраивается либо как передатчик либо как приёмник,  а для смены его с передатчика на приёмник необходимо его отключить от питания иначе никак. Иначе будет односторонняя связь. Цепочка это я не знаю, просто автор топика просил как сделать так , что бы слить в один канал все данные.

http://avrproject.ru/publ/kak_podkljuchit/radiomoduli_nrf24l01/2-1-0-92 вот тут про его односторонний характер и про смену его с приёмника на передатчик

"При смене нужно сбрасывать "модуль", а Atmega8 сбрасывать не надо.

Просто подключи ножку (+) питания "модуля" к любой ножке (порту) Atmega8.
Например: к PORTD.3 = Output, т.е. появится возможность сбрасывать "модуль" меняя "PORTD.3 = 1" на "PORTD.3 = 0", и обратно на "PORTD.3 = 1".

Принцип работы:
1) выставляем порт в "PORTD.3 = 1" на "модуль" идёт питание, и производим настройку на передачу.
2) сбрасываем "модуль" отключением питания, а после включаем снова, т.е. меняем "PORTD.3 = 1" на "PORTD.3 = 0".
3) подаём питание на "модуль" включением "PORTD.3 = 1", и производим настройку на приём.

У модуля nRF24L01 токовое потребление как у светодиода, поэтому с портом Atmega8 ничего не будет (не зажжёте, проверено). "

maksim
Offline
Зарегистрирован: 12.02.2012

Вы не теми библиотеками пользуетесь. Модуль может работать и как приемник и как передатчик и без отключения питания, более того он сам аппаратно поддерживает подтверждение передачи данных. А за то как настроен модуль - передатчик или приемник отвечает вывод CE. 

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

kui
Offline
Зарегистрирован: 09.10.2012

спасибо буду пробовать

maksim
Offline
Зарегистрирован: 12.02.2012

По какой то причине ссылки криво работают, вот https://github.com/maniacbug/RF24/archive/master.zip

maksim
Offline
Зарегистрирован: 12.02.2012

Что бы долго не разбираться...
Вывод IRQ не подключаю и не использую. Это заливаете в дуину, которая подключена к компу:
 

#include <SPI.h>
#include "RF24.h"
RF24 radio(9, 10);

const uint64_t pipes[2] = {0xF0F0F0F000LL, 0xF0F0F0F0FFLL};
// адреса каналов приема и передачи

void setup(){
  Serial.begin(9600);
  radio.begin();  
  radio.setDataRate(RF24_250KBPS); // Скорость передачи
  radio.setChannel(100); // Номер канала от 0 до 127
  radio.setRetries(15,15); // Кол-во попыток и время между попытками
  radio.openWritingPipe(pipes[1]);  // Открываем канал передачи
  radio.openReadingPipe(1, pipes[0]); // Открываем один из 6-ти каналов приема
  radio.startListening(); // Начинаем слушать эфир
}

void loop(){
  if(Serial.available()){
    char data[32] = "";
    byte i = 0;
    while(Serial.available()){
       data[i] = Serial.read();
       i++;
       delay(2);
    }
    data[i] = 0;
    radio.stopListening();
    radio.write(&data, 32);
    radio.startListening();
  }
  
  if(radio.available()){
    char data[32] = "";
    radio.read(&data, 32);
    Serial.println(data);
  }
}

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

А этот заливаете в дуину которая будет автономна:
 

#include <SPI.h>
#include "RF24.h"
RF24 radio(9, 10);

const uint64_t pipes[2] = {0xF0F0F0F000LL, 0xF0F0F0F0FFLL};
// адреса каналов приема и передачи

void setup(){
  radio.begin();  
  radio.setDataRate(RF24_250KBPS);
  radio.setChannel(100);
  radio.setRetries(15,15);
  radio.openWritingPipe(pipes[0]);
  radio.openReadingPipe(1, pipes[1]);
  radio.startListening();
}

void loop(){
  if(radio.available()){
    char data[32] = "";
    radio.read(&data, 32);
    radio.stopListening();
    radio.write(&data, 32);
    radio.startListening();
  }
}

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

Shuric93
Offline
Зарегистрирован: 15.10.2012

А подскажите, как подключить этот модуль к ардуине? какие ноги куда? Извините, вот только получил и никак не въеду)

kui
Offline
Зарегистрирован: 09.10.2012

http://arduino.cc/playground/InterfacingWithHardware/Nrf24L01 вот тут подключение

Pins:

  • MISO -> 12
  • MOSI -> 11
  • SCK -> 13

Configurable:

  • CE -> 8
  • CSN -> 7

http://i49.tinypic.com/1x1d0.png

ustas
Offline
Зарегистрирован: 12.03.2012

а еще имеет смысл вывод IRQ подключить ко 2 цифровому входу ардуины, тогда можно задействовать спящий режим для экономии энергии и "будить" ардуино по прерыванию

И не забудьте, что для питания модулю нужно 3.3В и если подключить 5В - большой риск спалить. Но с другой стороны никакого согласования по уровню сигналов не требуется - модуль "толерантен" к 5В-сигналам. 

Shuric93
Offline
Зарегистрирован: 15.10.2012

kui пишет:

http://arduino.cc/playground/InterfacingWithHardware/Nrf24L01 вот тут подключение

Pins:

  • MISO -> 12
  • MOSI -> 11
  • SCK -> 13

Configurable:

  • CE -> 8
  • CSN -> 7

http://i49.tinypic.com/1x1d0.png

 

Спасибо большое)

А к компьютеру можно как-нибудь подключить эту штуковину?)

А то пока второй платы нету...вот не знаю как проверить)

maksim
Offline
Зарегистрирован: 12.02.2012

Теоретически можно подключить к LPT порту и написать ПО. Но задание явно не для новичка так что практически никак, но кто знает ,может кто озадачивался таким вопросом, погуглите.

Lihtelf
Offline
Зарегистрирован: 24.12.2012

Здравствуйте, пока не очень разбираюсь в ардуино, помогите советом)

Вот я допустим хочу сделать дистанционно включаемую лампу, мне нужно реле, два таких модуля и ардуино,

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

ustas
Offline
Зарегистрирован: 12.03.2012

Сам модуль ничего не умеет.

Поэтому минимум нужно две ардуины, два радиомодуля, реле (и еще транзистор, чтобы не спалить ардуину, подключив к ней реле напрямую).

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

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

Lihtelf
Offline
Зарегистрирован: 24.12.2012

ИК? Но ведь и в этом случае мне нужно две ардуины?

Корче, если я хочу умный дом, то мне нужно дофига ардуин?

ustas
Offline
Зарегистрирован: 12.03.2012

ардуину ставить в законченное устройство - имхо, неправильно.

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

а по "умному дому" раскидать уже самих микроконтроллеров с минимально необходимой обвязкой для работы (включая всякие ИК, RF, реле и т.п.)

kui
Offline
Зарегистрирован: 09.10.2012

Lihtelf пишет:

Вот я допустим хочу сделать дистанционно включаемую лампу

http://uploads.ru/nuFIp.jpg вот готвые реле для Ваших нужд, цена от 8 до *** долларов с доставкой в Россию из Китая. Поищите в интернет магазинах (ебей или иных) по "Wireless RF  Relay"

kui
Offline
Зарегистрирован: 09.10.2012

ustas пишет:

ардуину ставить в законченное устройство - имхо, неправильно.

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

плюс ардуино в законченном устройстве это зачастую ещё и дорого и по габаритам не всегда вписывается в готовое устройство.

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Если габариты жмут, можно поставить микру или нану. Хотя сам проц в жуковатом корпусе, конечно, меньше, но не все любят его паять. А в ДИПе он не намного меньше места скушает, чем та же МИКРА даже

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

Lihtelf пишет:

ИК? Но ведь и в этом случае мне нужно две ардуины?

Корче, если я хочу умный дом, то мне нужно дофига ардуин?


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

jakob291
Offline
Зарегистрирован: 06.01.2013

maksim пишет:

Что бы долго не разбираться...
Вывод IRQ не подключаю и не использую. Это заливаете в дуину, которая подключена к компу:
 

#include <SPI.h>
#include "RF24.h"
RF24 radio(9, 10);

const uint64_t pipes[2] = {0xF0F0F0F000LL, 0xF0F0F0F0FFLL};
// адреса каналов приема и передачи

void setup(){
  Serial.begin(9600);
  radio.begin();  
  radio.setDataRate(RF24_250KBPS); // Скорость передачи
  radio.setChannel(100); // Номер канала от 0 до 127
  radio.setRetries(15,15); // Кол-во попыток и время между попытками
  radio.openWritingPipe(pipes[1]);  // Открываем канал передачи
  radio.openReadingPipe(1, pipes[0]); // Открываем один из 6-ти каналов приема
  radio.startListening(); // Начинаем слушать эфир
}

void loop(){
  if(Serial.available()){
    char data[32] = "";
    byte i = 0;
    while(Serial.available()){
       data[i] = Serial.read();
       i++;
       delay(2);
    }
    data[i] = 0;
    radio.stopListening();
    radio.write(&data, 32);
    radio.startListening();
  }
  
  if(radio.available()){
    char data[32] = "";
    radio.read(&data, 32);
    Serial.println(data);
  }
}

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

А этот заливаете в дуину которая будет автономна:
 

#include <SPI.h>
#include "RF24.h"
RF24 radio(9, 10);

const uint64_t pipes[2] = {0xF0F0F0F000LL, 0xF0F0F0F0FFLL};
// адреса каналов приема и передачи

void setup(){
  radio.begin();  
  radio.setDataRate(RF24_250KBPS);
  radio.setChannel(100);
  radio.setRetries(15,15);
  radio.openWritingPipe(pipes[0]);
  radio.openReadingPipe(1, pipes[1]);
  radio.startListening();
}

void loop(){
  if(radio.available()){
    char data[32] = "";
    radio.read(&data, 32);
    radio.stopListening();
    radio.write(&data, 32);
    radio.startListening();
  }
}

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

Прошу помощи. Прямая ссылка сдохла, с github нечто скачал, впихнул в скетч и получаю тонны ошибок.

 

Полный список:

nrf_try2.cpp.o: In function `__static_initialization_and_destruction_0':
C:\arduino/nrf_try2.ino:19: undefined reference to `RF24::RF24(unsigned char, unsigned char)'
nrf_try2.cpp.o: In function `loop':
C:\arduino/nrf_try2.ino:112: undefined reference to `RF24::stopListening()'
C:\arduino/nrf_try2.ino:117: undefined reference to `RF24::write(void const*, unsigned char)'
C:\arduino/nrf_try2.ino:125: undefined reference to `RF24::startListening()'
C:\arduino/nrf_try2.ino:130: undefined reference to `RF24::available()'
C:\arduino/nrf_try2.ino:143: undefined reference to `RF24::read(void*, unsigned char)'
C:\arduino/nrf_try2.ino:160: undefined reference to `RF24::available()'
C:\arduino/nrf_try2.ino:168: undefined reference to `RF24::read(void*, unsigned char)'
C:\arduino/nrf_try2.ino:179: undefined reference to `RF24::stopListening()'
C:\arduino/nrf_try2.ino:182: undefined reference to `RF24::write(void const*, unsigned char)'
C:\arduino/nrf_try2.ino:186: undefined reference to `RF24::startListening()'
C:\arduino/nrf_try2.ino:203: undefined reference to `RF24::openWritingPipe(unsigned long long)'
C:\arduino/nrf_try2.ino:212: undefined reference to `RF24::openWritingPipe(unsigned long long)'
C:\arduino/nrf_try2.ino:213: undefined reference to `RF24::openReadingPipe(unsigned char, unsigned long long)'
nrf_try2.cpp.o: In function `setup':
C:\arduino/nrf_try2.ino:61: undefined reference to `RF24::begin()'
C:\arduino/nrf_try2.ino:64: undefined reference to `RF24::setRetries(unsigned char, unsigned char)'
C:\arduino/nrf_try2.ino:68: undefined reference to `RF24::setPayloadSize(unsigned char)'
C:\arduino/nrf_try2.ino:81: undefined reference to `RF24::openWritingPipe(unsigned long long)'
C:\arduino/nrf_try2.ino:86: undefined reference to `RF24::openWritingPipe(unsigned long long)'
C:\arduino/nrf_try2.ino:87: undefined reference to `RF24::openReadingPipe(unsigned char, unsigned long long)'
C:\arduino/nrf_try2.ino:94: undefined reference to `RF24::startListening()'
C:\arduino/nrf_try2.ino:100: undefined reference to `RF24::printDetails()'

Такое ощущение, что проблемно заданы ссылки на включаемые файлы. Делал по-всякому, сейчас так, с полными путями:

#include <SPI.h>
#include "C:/arduino/libraries/NRF/nRF24L01.h"
#include "C:/arduino/libraries/NRF/RF24.h"

Но ошибки одни и те же.

Грешу на то, что сами файлы криво скачались, но визуально с ними все нормально. Может кто-либо приложить архив с нужными файлами, у кого этот самый код работает. А еще лучше и полный скетч.

Спасибо

maksim
Offline
Зарегистрирован: 12.02.2012

Качались файлы от туда же и ссылка работает, переименуйте папку NRF в RF24,
у меня все работает в версии ArduinoIDE 1.0.

jakob291
Offline
Зарегистрирован: 06.01.2013

Нашел в инете решение, если кто-то еще столкнулся с этой проблемой:

Чтобы среда Arduino IDE (1.0.2 у меня) не давала таких косяков, нужно все include из библиотек вставить в файл скетча. В частности, RF24.h подключает RF24_config.h. я добавил второй include в файл скетча, и оно скомпилировалось.

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

Так что, господа, если что-то не работает, проверье, что включили это в розетку (я забыл у автономной ардуино включить серийный порт и ждал диагностических выводов на ноутбуке)

За помощь спасибо, а отдельное спасибо тому, кто сможет мне объяснить, почему у всех все заработало без дополнительных include.

maksim
Offline
Зарегистрирован: 12.02.2012

jakob291 пишет:

Слегка напрягает тот факт, что только здесь я нашел режим программного переключения прием/передача, во всех остальных случаях (в том числе в доках github, на который дана ссылка) режим переключается посредством "управляющего выхода" (земля - прием, +5 - передача)

А вы думаете здесь по другому? так же вывод СЕ при приеме на земле, а при передаче на +5, или может я не правильно вас понимаю и вы говорите, о том что заведомо на схемах этот вывод на земле или на +5в. На ноутбук у вас ничего не выводит по той причине, что вы забыли проинициализировать UART (забыли добавить в setup() строку Serial.begin(9600);).

maksim
Offline
Зарегистрирован: 12.02.2012

jakob291 пишет:

почему у всех все заработало без дополнительных include.

Видать в 1.0.2 не подключаются хэдэры, подключенные в других хэдэрах, так как в 1.0 вроде все хорошо работает. То есть в файле RF24.h объявленны и RF24_config.h и nRF24L01.h, и по какой то причине в 1.0.2 они не подключаются.

jakob291
Offline
Зарегистрирован: 06.01.2013

maksim пишет:

А вы думаете здесь по другому? так же вывод СЕ при приеме на земле, а при передаче на +5, или может я не правильно вас понимаю и вы говорите, о том что заведомо на схемах этот вывод на земле или на +5в. На ноутбук у вас ничего не выводит по той причине, что вы забыли проинициализировать UART (забыли добавить в setup() строку Serial.begin(9600);).

Да, про ноутбук я уже понял) А про переключение, во всех прочих местах я находил код, который для переключения режима модуль перезагружает. И прямо в setup() прописано, в какой режим эта штука перейдет.

Здесь же удалось реализовать режим вопрос-ответ, что мне было очень нужно. Кстати спящий реализовался без проблем.

LincikG
Offline
Зарегистрирован: 15.01.2013

Здравствуйте все

Хочу arduino + nrf24l01 модуль подключить к LiPo 1 чельному акумуляторуб, там 3,7в. Несгорит ли nrf24l01 поскольку в datasheet-е Umax 3,6в. Ставить LM1117 3,3 не хотелось бы, так как там падение 1,2в. Может на питание модуля хватит резистор повесить. Спосибо за ответы.

kui
Offline
Зарегистрирован: 09.10.2012

 Аккамулятор не факт что 3,7 выдавать будет, померьте. но и от 0,1 вольта сверх не сгорит (да же если 3, 7). На форумах ишут и от 5 вольт не сгорает но это на свой страх и риск

maksim
Offline
Зарегистрирован: 12.02.2012

Напряжение на Li-Po в полностью заряженном состоянии составляет 4.0 - 4.2 вольта.
Имел как-то неосторожность запитать nrf24l01+ от 5 вольт, работал он в таком режиме (пока я это не заметил) около минуты, работал нормально и даже не сгорел, потом подлючил 3.3 вольта все хорошо работает по сей день. Но как говорится раз на раз не приходится... Поэтому если не жалко вам спалить для теста один модуль, попробуйте подключить напрямую к аккумулятору. Если у вас не какой-нибудь "энергозависимый датчик", у которого каждый микроампер на счету, а например, робот, у которого двигатели кушают амперы, то не бойтесь ставить LM-ку, те пара-тройка миллиампер никак не повлияют на общую картину. Если важно сохранять каждый миллиампер, то покупайте DC-DC преобразователь с высоким КПД.

LincikG
Offline
Зарегистрирован: 15.01.2013

   Да втом то и дело что важно сохранять каждый миллиампер + малые габариты, долгое время жизни. Вот в нете нащёл саит  http://maniacbug.wordpress.com а конкретно статью http://maniacbug.wordpress.com/2011/10/19/sensor-node/ (Low-power wirelesssensor node). Там автор говорит что изпользует 2 батарейки АА типа  или 1 CR2450, и пашет его устройство с 2хАА  1,5 года с CR2450 около 5 месяцев, но lipo мне всётаки ближе к душе.... А если просто диод последовотельно питанию поставить, устройство в пике жрёт около 14 мА, а подение напряжения на диоде 0,2-0,5в.

Great_BAO
Offline
Зарегистрирован: 25.02.2013

народ, поскажите на каких пинах цеплять этот радиомодуль на Arduino Mega ?

перерыл кучу инфы, но везде описано только подключение к стандартной дуине

leshak
Offline
Зарегистрирован: 29.09.2011

Great_BAO пишет:

народ, поскажите на каких пинах цеплять этот радиомодуль на Arduino Mega ?

перерыл кучу инфы, но везде описано только подключение к стандартной дуине

Общая идея подключение чего-то к меге, когда знаем "как к обычной" - такая. В первую очередь нужно понять "по какому интерфейсу оно работает". Если используется не програмная, а железная реализация - значит велика вероятносто что в меге оно будет на других пинах (признаком этого, как правило является то, что в библиотеке-примере жесткого говорится к каким пинам подключать и их нельзя поменять програмно при объявлении объекта).

Это как раз "ваш случай". В документации видим что 

 

Pins:

  • MISO -> 12
  • MOSI -> 11
  • SCK -> 13

 

Теперь идем в описание платы, скажем Arduino Uno | Аппаратная платформа Arduino

И ищем похожие абревеатуры (и смотрим что у нее именно на этих пинах).

Видим что: 

SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Посредством данных выводов осуществляется связь SPI, для чего используется библиотека SPI.

Вывод - модуль работает по интефейсу SPI. Значит осталось найти на каких ногах он у меги.

Идем в описание меги:

Mega

Нахом что у нее про SPI говорится:

SPI: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS).

В докуменации на наш модуль говорится что "MISO -> 12". Точно у уно 12 это MISO. У меги MISO это 50-тый пин. Вот мы и нашли первую "поправку". Значит MISO выход модуля нужно в 50-ты пин меги подключать.

Аналогично и для других пинов.

P.S. Только будте внимательны, в описаниях плат пины перечислены в разных порядках. Смотрите именно на имена пинов, а не "в каком порядке идут".

Great_BAO
Offline
Зарегистрирован: 25.02.2013

с SPI контактами я разобрался и сам, меня больше интересуют оставшиеся CE и CSN (без учета контакта IRQ который посоветовали не юзать)

пробовал их цеплять на ноги которые оговорены в начале скетча строчкой

RF24 radio(9, 10);

но результата не получил (юзаю пример от maksim из поста 21 этой ветки)

maksim
Offline
Зарегистрирован: 12.02.2012

Great_BAO пишет:

IRQ который посоветовали не юзать

Кто вам такое мог посоветовать?
Great_BAO пишет:

но результата не получил (юзаю пример от maksim из поста 21 этой ветки)

Так а какой должен быть результат?

Great_BAO
Offline
Зарегистрирован: 25.02.2013

ну судя по коду, я все таки должен получать в консоль то, что отправляю

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

хотя в консоль я ничего при этом не отправляю

по поводу не использования порта IRQ цитирую ваш же пост: Вывод IRQ не подключаю и не использую.

 

прошу помочь разобраться... интересуют выходы IRQ, CE и SCN

что из них подразумевает строка RF24 radio(9, 10); ?