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

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

  1. necroman

    necroman Нерд

    а что значит летают процентов на 80? ) и почем брали, если не секрет
     
  2. zaynus

    zaynus Нерд

    8.13 баков за 10 шт
    аск пайлоад плохо работает
    и по питанию огораживать частоколом приходится и все равно иногда затыки, раз в 3 дня бывает
    ссылку в личку кинул
     
  3. ИгорьК

    ИгорьК Гуру

    Вот оно, объяснение в картинках: http://forum.mysensors.org/topic/1664/which-are-the-best-nrf24l01-modules/36

    И чуть ниже - на словах:
    A given module may have
    • genuine Nordic nRF24L01+
    • genuine Nordic nRF24L01 (no ESB, no 250Kbps) - possibly marked as +
    • quality clone of either, possibly even out-performing Nordic in some way
      (some have higher RF power output)
    • clone with inverted OTA ack bit (ESB OK between same, incompatible with Nordic)
    • clone with reduced sensitivity and/or increased power usage
    • any of the above with missing passive components compared to Nordic reference design
    Meanwhile:
    • We cannot count on visual inspection (Nordic is fabless, some genuine chips may differ over time) or date codes.
    • We do not know of register tests to distinguish differences (except L01 vs L01+)
    • The inverted NoAck bit could be easily tested OTA using ESB mode to a known-good module.
     
    Последнее редактирование: 10 ноя 2015
  4. necroman

    necroman Нерд

    на самом деле информация либо не актуальна, либо не совсем корректна. У меня все модули черные, и все они спокойно работают на 250 кбит. Опять же они могут не коннектится между собою, но режим поддерживают. Хотя кто его знает, но дальность передачи увеличивается если менять с 1мбит на 250
     
  5. ИгорьК

    ИгорьК Гуру

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

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

    Теперь проблема выясняется. Или перепрограммировать три старых устройства (что тоже ничего не гарантирует) или искать новый подходящий модуль - связать их просто не удастся.
     
  6. necroman

    necroman Нерд

    Может быть я не совсем корректно понял вот эту фразу: "I know that because it won't do 250kbps using the exact same code that I can make this common module do 250kbps:" У меня получалось сконнектить плохие клоны и оригинальные(хорошие клоны) и именно на 250кбит, только без автоматического подтверждения доставки.
     
  7. ИгорьК

    ИгорьК Гуру

    Что касается автоматического подтверждения доставки, то там в сообщениях говорится что у некоторых модулей бит управления этим инвертирован.
     
    BGreen нравится это.
  8. zaynus

    zaynus Нерд

    не все вроде 256 поддерживают
     

    Вложения:

  9. ИгорьК

    ИгорьК Гуру

    Не поддерживают те, старые, которые без плюса, но выдаются за плюсовые.
     
  10. romannn

    romannn Нуб

    Здравствуйте, не могу победить модуль. Имеется 2 модуля nrf24l01+ надпись на чипе NRF M и 2 arduino nano.
    Не получается организовать передачу в две стороны. В одну сторону все хорошо работает. Менял модули местами, перепробовал все библиотеки из темы.
     
  11. necroman

    necroman Нерд

    А что имеется ввиду в две стороны? принять получает сообщение от одного к другому получается?
     
  12. romannn

    romannn Нуб

    Хочу сделать измерение температуры по запросу. 1 отсылает 2му команду, 2ой отвечает сообщением с температурой
     
  13. necroman

    necroman Нерд

    т.е. второй получает команду, но обратно уже не отправляет, так?
     
  14. romannn

    romannn Нуб

    вот тут не знаю либо он не отвечает , либо первый не может получить ответ
     
  15. zaynus

    zaynus Нерд

    если аск пайлоад работает делайте на нем
    передатчик получив посылку отправляет в аск пайлоад нужные данные(у него всего 3 попытки)
     
  16. necroman

    necroman Нерд

    ну так это нужно выяснить, не знаю как на arduino это делает, может есть более простой способ, но проще всего подвесить диод и в код приемника, там, где принимается сообщение, добавить включение светодиода. Узнаешь, пришла команда или нет. Скорее всего проблема в настройках или адресах модулей, либо в соединениях... Проверьте сначала все это.
     
  17. romannn

    romannn Нуб

    можно ли принимать и передавать в одной трубе?
     
  18. necroman

    necroman Нерд

    да, можно, без проблем, главное переключать режимы RX TX. Адреса у Вас правильные на передатчике и приемнике? TX на передатчике должно совпадать с RX приемника. Пр этом, если используете autoACK, то на передатчике еще и один из RX должен совпадать с RX приемника!
     
  19. romannn

    romannn Нуб

    Код передатчика, сейчас проверил если в ком порт оправляю 1 то на приемнике включается диод, но в порт данные не выдает
    Код (C++):
    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h> // https://github.com/maniacbug/RF24

    const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба"
    const uint64_t pipe2 = 0xF0F1F2F3F3LL;
    RF24 radio(9, 10); // CE, CSN

    void setup(){
      Serial.begin(9600);
     
      radio.begin();
      delay(2);
      radio.setChannel(45); // канал (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,pipe2); // открываем первую трубу с индитификатором "pipe"
      radio.startListening(); // включаем приемник, начинаем слушать трубу
    }
    //
    // для ПроМини

    void loop()  
    {
      int data[2];

      if (Serial.available() > 0){ // если чтото пришло в сериал
        int val = Serial.parseInt(); // читаем в переменную
        if (val == 1){ // если это 1
          radio.stopListening(); // останавливает приём (нужно перед началом передачи)
          radio.openWritingPipe(pipe); // открываем трубу на передачу.
          radio.write(&val, sizeof(val)); // отправляем val и указываем сколько байт пакет
          radio.startListening(); // включаем приемник, начинаем слушать трубу
        }
        Serial.flush(); // очищаем буфер
      }
     
      if (radio.available()){ // проверяем не пришло ли чего в буфер.
        radio.read(&data, sizeof(data)); // читаем данные и указываем сколько байт читать
       
          Serial.print("Humidity (%): ");
          Serial.println(data[1]);
          Serial.print("Temperature (oC): ");
          Serial.println(data[0]);
        }
       
    }
     
    Код приемника
    Код (C++):
    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h> // https://github.com/maniacbug/RF24

    #include <dht11.h>
     
    const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба"
    const uint64_t pipe2 = 0xF0F1F2F3F3LL;
    dht11 sensor;
    RF24 radio(9, 10); // CE, CSN
    void setup(){
    //  Serial.begin(9600);
    pinMode(5, OUTPUT);
      radio.begin();
      delay(2);
      radio.setChannel(45); // канал (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.openWritingPipe(pipe); // открываем трубу на передачу.

    }

    ////// для UNO
    void loop()  
    {
      int data[2];  
     
      if (radio.available()){ // проверяем не пришло ли чего в буфер.
        int val;
        radio.read(&val, sizeof(val)); // читаем данные и указываем сколько байт читать
       
        if (val == 1){ // если пришло 1,
          radio.stopListening(); // останавливает приём (нужно перед началом передачи)
          digitalWrite(5,1);
         // sensor.read(8);  // читаем градусник
          delay(1000);
          data[0] = 100; // заполняем массив
          data[1] = 200;
         
             //отправляем данные    
          radio.openWritingPipe(pipe2); // открываем трубу на передачу.
          radio.write(&data, sizeof(data)); // отправляем данные и указываем сколько байт пакет
          radio.startListening(); // включаем приемник, начинаем слушать трубу
          digitalWrite(5,0);
        }
      }  
    }
     
  20. romannn

    romannn Нуб

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