nRF24L01+ : побеждаем модуль.

Тема в разделе "Проводная и беспроводная связь", создана пользователем ИгорьК, 19 июн 2014.

  1. Oleg_7

    Oleg_7 Гик

    Добрый день! ..вот раздобыл Мегу, и попробовал на ней SOFTSPI NRF.....не работает softspi, причем тот же скетч заливаю в UNO - все отлично работает и прием и передача, наверное я очень тупой, но не понимаю уже в чем дело.... подскажите пожалуйста, в чем может быть проблема? инициализация такая:
    const uint8_t SOFT_SPI_MISO_PIN = 7;
    const uint8_t SOFT_SPI_MOSI_PIN = 6;
    const uint8_t SOFT_SPI_SCK_PIN = 5;

    RF24 radio(3, 8); // mega
     
  2. Oleg_7

    Oleg_7 Гик

    Прошу прощения, запитал от отдельного питания 3,3 в, и все заработало!!!.... Мега - есть Мега..... )
     
  3. MaratKh

    MaratKh Нуб

    Всем привет! Очень нужен хелп!
    Радио модуль работает с про мини, пр получении сигнала включает холодный неон.
    Холодный неон управлЯется симистором, он в свою очередь управляется оптроном который управляется ардуино. Рядом со всем этим делом стоит инвентрор который из 12 постоНного делает 110 в высокочастотный для неона.
    Все отлично работает! Но если в нагрузку подключается больше неона чем 50-100 см в радио отключается и перестает принимать сигналы, при этом ардуино жива.
    Что это? Наводки от высокочастотного инвентора? Помехи от питания ( инвентора и питание ардуино в одном аккумуляторе)? Что можно сделать?
    Спасибо!!
     
  4. Пашка

    Пашка Нуб

    Кто-то пробовал подключать две nrf24l01+ к одной ардуине? Как правильно подключить?
     
  5. Tomasina

    Tomasina Сушитель лампочек Модератор

    а зачем? Имеющихся 126 каналов уже не хватает?
     
  6. Пашка

    Пашка Нуб

    Хочу сделать ретранслятор! Один модуль подключен по кабелю к антенне, которая выведена на крышу, а второй по дому будет распределять. Один на приём, другой на передачу.
     
  7. Добрый день, начал работать с этими модулями всё получается (хоть и не сразу), но у меня вот такой вопрос как работать с прерываниями, кто пробовал передавать и принимать данные с помощью прерываний? Я пробовал, но получается только принимать с помощью прерываний, а вот с отправкой сложнее
     
  8. Tomasina

    Tomasina Сушитель лампочек Модератор

    для отправки прерывания не нужны.
     
  9. Aler

    Aler Нерд

    С помощью прерывания сообщения не принимаются и не отправляются, с помощью них на передатчике можно зафиксировать факт удачной или не удачной отправки, не тратя на ожидание время МК. И да, библиотечный пример у меня работает отлично как на приемнике, так и на передатчике.
     
  10. Karabas

    Karabas Гик

    Я вот тоже напоролся на этот модуль. Нет, работает отлично, дальность- то что нужно, все просто и понятно, но...
    Библиотека RF24.h инструкции



    Есть два глюка, первый- в тестовом скетче, в loop-е все время отсылается переменная (все время увеличивается на 8, чтоб в мониторе циферки бегали). Но если поставить delay, чтоб приемник не бомбили данными, а просто щелкал раз в секунду- ничего не работает. Но тут я не пойму, либо передатчик тупо мрет, либо какой рассинхрон с приемником (чего вроде бы не должно быть).

    И второе- совсем уж странно, умер 10й пин (на видео на нем CSN но я переназначил его на 4), на нем все время HIGH, даже если указать LOW. На остальных ШИМ пинах все в порядке.
    Как бы остались еще два ШИМ-пина, но они будут нужны для подключения инфракрасного приемника (библиотека IRremote работает на втором таймере и ШИМ на них с ней не работает).
     
  11. wadamir

    wadamir Нуб

    Здравствуйте!
    Не пойму почему так: ставлю модуль nrf24l01, заливаю скетч из этой темы http://forum.amperka.ru/threads/nrf24l01-побеждаем-модуль.3205/#post-25289
    тот, который статусы выдаёт и прочую фигню.
    Так вот, на arduino uno один результат, а на arduino nano другой! Подчеркиваю модуль просто перетыкаю.
    Вот результаты: arduino-тка.png смущают несовпадения:
    model - это вообще непонятно, как так?
    CRC Length
    PA Power

    Помогите прояснить ситуацию...

    UPD: Было неправильное соединение на arduino Uno :( проблема
    (по крайней мере, эта проблема) решена.
     
    Последнее редактирование: 22 мар 2016
  12. joman

    joman Гик

    Добрый день всем!
    Уже неделю бьюсь с модулями. сейчас имею:
    Отправка:
    Код (C++):
    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>
    #include <stdint.h>


    #define CE_PIN 9      
    #define CSN_PIN 10
    const uint64_t readingPipe = 0xE8E8F0F0AALL;
    const uint64_t writingPipe = 0xE8E8F0F0ABLL;
    int out = 556;

    RF24 radio(CE_PIN, CSN_PIN);

    void setup() {
      Serial.begin(9600);
      delay(1000);                  
      radio.begin();                  
      radio.setChannel(5);              
      radio.setRetries(15,15);
      radio.setPayloadSize(12);
      //radio.enableAckPayload();
      radio.powerUp();
      radio.setDataRate(RF24_1MBPS);
      radio.setPALevel(RF24_PA_LOW);
      //radio.setCRCLength(RF24_CRC_16);
      radio.setCRCLength(RF24_CRC_DISABLED);
      radio.setAutoAck(1);

      //radio.openReadingPipe(1,readingPipe);
      radio.openWritingPipe(writingPipe);
      printf_begin();
      radio.printDetails();
      pinMode(13, OUTPUT);
    }

    void loop()
    {
      radio.powerUp();
      radio.setChannel(5);              
      radio.setRetries(15,15);
      radio.setPayloadSize(12);
      radio.setDataRate(RF24_1MBPS);
      radio.setPALevel(RF24_PA_LOW);
      radio.setCRCLength(RF24_CRC_DISABLED);
      delay(5);
      Serial.print("Sending");
      radio.write( &out, sizeof(out) );
      delay(100);
    }

    int serial_putc( char c, FILE * ) {
      Serial.write( c );
      return c;
    }

    void printf_begin(void) {
      fdevopen( &serial_putc, 0 );
    }
    Вертится на ардуино UNO (без radio.powerUp(); в loop в эфире молчание).
    Скетч сканер (первой страницы) - вертится на Pro Mini показывает следующее:
    upload_2016-3-25_13-54-28.png
    (Как я понимаю это значит что первый модуль что то передаёт (если выключить питание на уно или убрать radio.powerUp() из loop, сканер кажет одни нули)

    После этого на pro mini заливаю скетч чтения:
    Код (C++):
    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>
    #include <stdint.h>

    #define CE_PIN 9    
    #define CSN_PIN 10
    const uint64_t writingPipe = 0xE8E8F0F0AALL;
    const uint64_t readingPipe = 0xE8E8F0F0ABLL;
    int in;

    RF24 radio(CE_PIN, CSN_PIN);

    void setup() {


      delay(2000);              
      Serial.begin(9600);
      radio.begin();                
      radio.setChannel(5);            
      radio.setRetries(15,15);
      //radio.setPayloadSize(12);
      //radio.enableAckPayload();
      radio.powerUp();
      radio.setDataRate(RF24_1MBPS);
      radio.setPALevel(RF24_PA_LOW);
      radio.setCRCLength(RF24_CRC_DISABLED);
      radio.setAutoAck(1);            

      radio.openReadingPipe(1,readingPipe);
      radio.openWritingPipe(writingPipe);
      printf_begin();
      radio.printDetails();
      radio.startListening();          
    }

    void loop()
    {
      radio.read( &in, sizeof(in) );
      delay(500);
      Serial.println(in);
    }
    int serial_putc( char c, FILE * ) {
      Serial.write( c );
      return c;
    }

    void printf_begin(void) {
      fdevopen( &serial_putc, 0 );
    }
    В итоге в сериал получаю одни нули.
    Вопрос 1: а)Смущает то, что сканер показывает передачу возле канала 30 (при условии что передача идёт на 5) это нормально?
    б) При изменении канала передачи картинка смещается. Это наводит на мысль, что всё работает верно. Верно ли это утверждение?
    Вопрос 2: При чтении идут нули. как бы это поправить?

    UPD. Не много поэкспериментировав с каналами, выяснил, что при установке на передатчике каналов с 0x03 по 0x47, приёмник в сканере показывает наличие несущих (как на картинке, только при увеличении канала она сдвигается вправо).
    При установке других каналов, сканер показывает полную тишину.
     
    Последнее редактирование: 25 мар 2016
  13. sergey-fedor

    sergey-fedor Нерд

    подскажите в чем может быть дело 2 модуля nrf2401 шлют один другому простенькие команды "1" или "2" , и все бы хорошо но команда проходит только если запущен IDE arduino и включен монитор порта ! как только закрываю монитор порта - не проходят и мои команды. У меня одно предположение было : расставить паузы, но и это не помагает
     
  14. joman

    joman Гик

    Я почти уверен, что у Вас в коде есть что то вроде
    Код (Text):
    while (!Serial.avalible())
    Закоментируйте эту часть и все заработает.
    Если такого не нашли, то выложите сюда текст скетча.
     
  15. sergey-fedor

    sergey-fedor Нерд

    Спасибо что откликнулись, я сделал скетч без этой команды. Разобрался все было дело в Python-е.! Вообще организована работа так : Малина через последовательный порт связана с Ардуино Уно на которой nrf2401, вторая ардуина метрах в 7 установлена тоже с nrf2401 и управляет двумя прожекторами на улице. на малине крутится программа на Python3 , с обработчиком бота Telegramm. И вот в итоге можно через Telegram удаленно с любого телефона управлять этими прожекторами (ну в последствии конечно много еще чем и не только через Телеграмм). А все дело было в самом Python3 он как то кривенько инициализирует последовательный порт. Нашел в чем дело поправил проблема отпала.
    P.S. при запуске IDE и открытии терминала порта, он видимо переинициализировался верно и все начинало работать.
     
    Последнее редактирование: 26 мар 2016
  16. TheDeadStone

    TheDeadStone Нуб

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

    Модули из одной партии у меня заработали сразу. Использую библиотеку https://github.com/TMRh20/RF24
    Проверяю работоспособность на примере GettingStarted_HandlingData

    Но у меня проблема с дальностью работы этих модулей. На расстоянии 1-2 метров работают идеально. А вот если унести в другую комнату (10-12 метров) уже доходит только где-то 50% сообщений. Если выхожу на лестничную площадку (15-20 метров) и закрываю входную дверь, вообще 100% сообщений теряются.

    Модули с антеной http://ru.aliexpress.com/item/2PCS-...07,searchweb201560_8,searchweb1451318400_6151

    Подскажите, напайка конденсаторов поможет увеличить дальность приема? Или такая штука http://ru.aliexpress.com/item/New-S...4.10010208.100007.5.Uq5MCX&isOrig=true#extend

    Спасибо.

    PS. Попробовал на открытом пространстве. Около 300 метров берет.
     
    Последнее редактирование: 27 мар 2016
  17. Karabas

    Karabas Гик

    Попробуйте другие каналы и уменьшите скорость передачи.
     
  18. shved86

    shved86 Нуб

    Добрый день! подскажите а нет ли у кого нибудь примера работы модуля с 3-мя и более трубами (на чтение). желательно с комментариями. Заранее признателен!
     
  19. Tomasina

    Tomasina Сушитель лампочек Модератор

    ИгорьК нравится это.
  20. Aler

    Aler Нерд

    1) Включите подтверждение доставки - это облегчит дебаг, размер CRC можно выставить 8.
    2) radio.powerUp() нужно добавить в конец конфигурирования в setup.
    3) Перестаньте в лупе конфигурировать передатчик (скорее всего из-за этого он и не работает).
    4) Пользуйтесь radio.available() - команда возвращает истину, если в FIFO модуля есть данные.

    Вполне может быть нормальная ситуация. Волны данного диапазона сильно поглощаются преградами, а особенно водой.

    Сам сейчас пытаюсь поднять FHSS-подобную систему и заметил одну особенность: приемнику при смене канала нужно дать команду stopListening(), а затем startListening(). Иначе смены канала не произойдет где-то с 90% вероятностью.