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

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

  1. Подскажите пожалуйста, можно ли работать с несколькими трубами как с одной? Т.е. передатчик отправляет сигнал по адресу, а этот адрес у всех труб одинаковый. и они передатчику тоже что нибудь отправляют.
     
  2. Gurf

    Gurf Нуб

    Моя описанная ранее проблема (зависание приема-передачи несколько раз в день) немного прояснилась - в момент очередного зависона заметил, что сильно разогрелся модуль питания энерэфки-приемника -палец не терпит. Измерил ток, идущий через модуль питания и через nrf- получилось около 0.7 А идет на модуль питания. Это выходит, что приемник почему-то потребляет во много раз больше, чем ему полагается в режиме прослушивания эфира! Пошевелил немного провода, после чего модуль питания остыл и, главное- прием восстановился без ресета! Это что-у меня nrf такой глючный, что вдруг начинает ни с того ни с сего ток жрать большими глотками, но при этом настройки инициализации у него не слетают, или я что-то еще не учитываю? Но дело не в контактах проводов-это точно. Использую 'дальнобойный' модуль с внешней антенной, конденсаторы припаяны. Уже руки опускаются...
     
  3. ИгорьК

    ИгорьК Оракул Модератор

    Это, скорее всего, поддельный модуль с хакнутой прошивкой. Я уже давно не этих модулях ничего не делаю.
    Пора переходить на 433 мГц. Все никак руки не дойдут... А пока - ESP8266. Там все стабильно и просто.
     
  4. BGreen

    BGreen Нерд

    Вроде у него есть дополнительный усилитель сигнала - вот он и жрет, скорее всего.
    Причин может быть много: непропай, холодная пайка, коротыши внутри микросхем, пробитый усилитель, неконтакт в антенне - КСВ уплывает, весь пар уходит на нагрев усилителя.
    В недорогих модулях экономят на согласовании антенн, каскадов. Могут сделать PCB-антенну + разъем для внешней без всякого согласования.
     
  5. BGreen

    BGreen Нерд

    На 433МГц антенны большие, а скорости маленькие. И эфир давят мощные сигнализации машин, телеметрия.
    ESP для пересылки пары байтов - как из пушки по воробьям. Если делать много устройств на ESP через домашний роутер, то он вешается от одновременного подключения множества wifi-устройств. Точно известно, что около 15 одновременных подключений вешают роутер: телефоны, ТВ, пара планшетов, ноуты + пяток ESP.
    Вот если бы через ESP организовать настройку самодельного устройства с телефона\планшета - это удобно.
     
  6. ИгорьК

    ИгорьК Оракул Модератор

    Не вешают. Это зависит от качества роутера.
    В реальном времени на них работать не стоит, конечно, но передать информацию о температуре с балкона - сгодится. Или что-то включить/выключить.
    Вот хорошая группа, ИМХО: http://www.hoperf.com/rf_transceiver/
     
  7. BGreen

    BGreen Нерд

    Недорогие DLink, TPlink вешаются от чиха, вплоть до "несовместимого" модуля в USB-свистке. У меня старый Zyxel и Dlink 320 зависали от довольно свежего ПК с i3, на материнке модуль wifi почему-то валил сеть.
     
  8. ИгорьК

    ИгорьК Оракул Модератор

    Рекомендую. Не вешается ни от чего. Если и вешается, то есть к нему таблетка.
    Понимаете, мы живем уже в среде Интернета. Роутеры приходится выбирать соответствующие. У меня к этому роутеру еще 2(!) ретранслятора один за одним прикручено, поскольку он висит под потолком на втором этаже деревянного дома. А датчики присутствуют в том числе и в отдельно стоящей бане. И ее надо контролировать. И вся эта телеметрия работает.
    0001.jpg
    0002.jpg
    0003.jpg
     
    Последнее редактирование: 21 янв 2016
    MickNich и BGreen нравится это.
  9. Gurf

    Gurf Нуб

    1. 433 мГц - это речь типа о таком вот железе?: http://ru.aliexpress.com/item/SI443....100005.1.KG1A2M&isOrig=true&isOrigTitle=true
    2. А с ESP8266 может посоветуете как прокачаться с оптимальной затратой времени, сил и получения конечного результата?- в частности, в какой среде лучше начинать освоение этого модуля и работать дальше - Arduino Ide пойдет, или же лучше победить Eclipse или что-то еще?
     
  10. ИгорьК

    ИгорьК Оракул Модератор

    1. Не работал с этим железом. Постом выше давал ссылку на HopeRf.
    2. Я начинал работать с ESP8266 когда проект Arduino IDE для модуля был в зачаточном состоянии, поэтому слегка освоил NodeMCU (Lua). Сейчас вроде и Ардуино среда вполне работает.
     
  11. Securbond

    Securbond Гуру

    Пока готовлюсь покорять ), читаю все подряд. Ветку прочитал полностью, решил что кому то будет интересна информация про регистры этих модулей. (Для меня это пока, как ворота для барана) - http://we.easyelectronics.ru/Radio/radiomodul-nrf24l01-bystryy-start.html

    Ну и эта ссылка пригодится для новичков (таких как я)-
    http://www.avislab.com/blog/nrf24l01_ru/
     
    Последнее редактирование: 21 янв 2016
  12. Да статья не плохая если учесть что вы IT-шник ,а не Ардуинщик так как код в статье написан на С++ и для некоторых это темный лес с дровами!!!! Я считаю что такие ссылки публиковать не корректно, так как они мало чему научат. А новичков только запутают!!!
     
  13. WASP

    WASP Нерд

    Всем привет!
    Сразу скажу - прочел все странички форума. Вероятность что пропустил что то 7%.
    И так! Спасибо всем кто вообще тут что то пишет, очень познавательно!
    Мого для себя вынес.

    Имеется 2-е NRF+ и 2-е Arduino Pro Mini?
    Одно устройство передатчик с 3-мя кнопками, второе - приемник.
    В передатчике кнопки замыкают цепь на землю, в паралель с кнопками кондеры, другие концы кнопок через сопротивление на "+" и "единичка" подается на инверсный триггер Шммитта и с него уже на аналог ардуины (аналог потому что вся цифра уже будет занята).

    Обе ардуины про мини и оба модуля NRF+ рабочие. Оба NRFа выдают инфу о себе и даже выдают правильно после того как им что то поменяешь и запросишь снова инфу. Связь есть. НО КАК?

    включаем оба устройства. После инициализации начинают выводиться 3 принятых "слова".
    data1: 0 data2: 0 data3: 0
    data1: 0 data2: 0 data3: 0
    data1: 0 data2: 0 data3: 0

    Идут нули. Ибо на передатчике 3 кнопки и ни одна из них не нажата. Нажимаем на одну из - ОПА!
    "No radio available"
    "No radio available"
    "No radio available"
    "No radio available"
    и проскакивает иногда
    data1: 1023 data2: 0 data3: 0
    "No radio available"
    "No radio available"
    "No radio available"

    Так. Отпускаем кнопку
    data1: 0 data2: 0 data3: 0
    data1: 0 data2: 0 data3: 0
    data1: 0 data2: 0 data3: 0
    data1: 0 data2: 0 data3: 0

    Если опять нажать - ситуация повторяется
    "No radio available"
    "No radio available"
    "No radio available"
    и проскакивает иногда
    data1: 1023 data2: 0 data3: 0
    "No radio available"
    "No radio available"
    "No radio available"

    Отпускаем кнопку снова и (случайно обнаружил!) ничего не троая ждем примерно сек 10. При этом явно видно как на ардуине горит диодик рядом с 9ой ногой (PRO MINI!!!) (скорее всего 13я нога просто расположение такое). Горит слабенько. После примерно 7-10 сек оп! Диодин становится ярче и о чудо!!!
    Нажимаем кнопку и:
    data1: 1023 data2: 0 data3: 0
    data1: 1023 data2: 0 data3: 0
    data1: 1023 data2: 0 data3: 0
    data1: 1023 data2: 0 data3: 0
    data1: 1023 data2: 0 data3: 0
    data1: 1023 data2: 0 data3: 0
    data1: 1023 data2: 0 data3: 0
    Нажимаем другую
    data1: 0 data2: 1023 data3: 0
    data1: 0 data2: 1023 data3: 0
    data1: 0 data2: 1023 data3: 0
    data1: 0 data2: 1023 data3: 0
    data1: 0 data2: 1023 data3: 0
    data1: 0 data2: 1023 data3: 0
    data1: 0 data2: 1023 data3: 0
    и так далее с вариациямию Хоть так:
    data1: 1023 data2: 1023 data3: 1023
    data1: 1023 data2: 1023 data3: 1023
    data1: 1023 data2: 1023 data3: 1023

    ...... в какой то момент, я так и не понял, но походу стоит только отвести передатчик подальше от приемника что бы потерялась связь (за стену занести), короче как только появляется первое сообщение
    "No radio available", подносим приемник к передатчику, получаем
    data1: 0 data2: 0 data3: 0
    data1: 0 data2: 0 data3: 0
    data1: 0 data2: 0 data3: 0
    опять жмем на кнопку и получаем ситуацию что писал в начале... опять разрывы.
    и надо ждать волшебного уярчения светодиода 13 ноги
    ипатькопать простите за мой французский....
    Ну не при чем тут кондеи на NRFах. Связь то есть. Питание тоже - 3.3 вольта через модули к которым идет по 9 вольт с крон. Отключал нафиг кроны и питал уже со стационарного блока!!
    Что это может быть? Что мне еще проверить? Я уже убицо ап стену готоффф....

    Код для приемника с этого форума чуть изменил:
    Код (C++):
    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>

    const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба"

    RF24 radio(3, 5); // CE, CSN

    int data;
    int recieved[3];
     
    void setup(){
      Serial.begin(57600);
      printf_begin();

      delay(3000);
      radio.begin();                          // Включение модуля;
      radio.printDetails();  // Вот эта строка напечатает нам что-то, если все правильно соединили.
      delay(1000);

      radio.setChannel(0);                    // Установка канала вещания;
      radio.setRetries(15,15);                // Установка интервала и количества попыток "дозвона" до приемника;
      radio.setDataRate(RF24_2MBPS);          // Установка минимальной скорости; RF24_2MBPS, RF24_250KBPS
      radio.setPALevel(RF24_PA_MAX);          // Установка максимальной мощности; RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
      radio.setAutoAck(1);                    // Установка режима подтверждения приема;
    //  radio.openWritingPipe(pipe);            // Активация данных для отправки
      radio.openReadingPipe(1,pipe);          // Активация данных для чтения
      radio.startListening();                 // Слушаем эфир.
      radio.stopListening();
       
      radio.startListening();

      Serial.println("Settings after setup");
      radio.printDetails();  // Вот эта строка напечатает нам что-то, если все правильно соединили.
    }

    void loop()  
    {
     
      if (radio.available())
      { // проверяем не пришло ли чего в буфер.
        bool is_ok = false;
        while (!is_ok)
        {
          is_ok = radio.read(recieved, sizeof(recieved)); // читаем данные, указываем сколько байт читать
          Serial.print("data1: ");  Serial.print(recieved[0]); Serial.print("      data2: ");  Serial.print(recieved[1]); Serial.print("      data3: ");  Serial.print(recieved[2]);
          Serial.println();
        }
        Serial.println("Stop reading.");
      } else {  
          Serial.println("No radio available");
      }
    }


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

    void printf_begin(void) {
      fdevopen( &serial_putc, 0 );
    }
     
  14. Securbond

    Securbond Гуру

    По вашему в Arduino IDE вы на каком языке программируете ???? Я очень даже начинающий и мне эта статья была очень интересна.
     
    BGreen нравится это.
  15. BGreen

    BGreen Нерд

    Какие номиналы кондеров и резисторов?
    Берете мультиметр и измеряете ток потребления во всех режимах. Еще лучше осцилл и напряжение (или падение напряжения на малом резисторе (менее Ома) в разрыв цепи питания ~ ток).
     
  16. WASP

    WASP Нерд

    Где мерить не понял? Резисторы 4.7 К, ёмкости по 22пФ керамика. Напряг смотрел на NRF и там 3.3 вольта. Не падает. Вот на ногах арды не мерял. А что? Есть мнение что что то просаживает саму ардуину?
     
    BGreen нравится это.
  17. BGreen

    BGreen Нерд

    Измерить напряжение на NRF и ATmega ногах во всех режимах. Может, просадка.
    Ток можно измерить мультиметром или в разрыв питания поставить резистор на несколько Вт и сопротивлением доли Ома. Тогда падение напряжения на этом резисторе будет зависеть от тока в цепи - можно осцилл подцепить на резистор (в некоторых осциллах есть возможность перегнать напряжение в ток, задав коэффициент I = U\Rconst).

    Кстати. резисторы можно и 10к, и более, если хотите lowPower, чтобы батарейку не высасывало. Я ставлю 10к, а для делителей мегаомы с отмывкой и лакировкой.
     
  18. WASP

    WASP Нерд

    Ок, попробую сегодня померить. Но все таки - почему сразу такой совет? Что то Вам подсказывает что просадка идет?
    (Осцилограф есть но очень плохо умею с ним. С мультиметром не вопрос но разрывать цепь не очень хочется, ну очень уж там запяно и все маленькое, хотя если менять сопротивления все равно выпаивать....)
     
  19. BGreen

    BGreen Нерд

    Тогда не рвите цепи на плате.
    Измеряйте напряжение на АТмега и на NRF. А в разрыв Кроне или БП поставьте мультиметр по току.
    Еще вариант для АТмега: в секции begin сделать мигание диодиком или вывод в Serial. Если АТмега перезагружается, вы узнаете.
     
  20. WASP

    WASP Нерд

    Когда она перезагружается это и так видно. Посмотрите код в сетапе. Она 2 раза выводит состояние модуля NRF. Вопрос не в ПЕРЕзагрузке а в ее странном поведении.
    Вообще 13я нога юзается NRF-ом... вот и странно, почему после перезагрузке ардуины или потери связи между двумя NRF-ами этот светодиод "просаживается". По той ноге вроде как раз данные иду обмена и ардуиной. Но связь то есть! Хоть и плохая (по примерам видно) Не ужели просаживается именно Арда изза возможно сильного тока? Тогда какого она в таком состоянии и не остается? Почему подождав секунд 10 она оживает и дальше работает и данные передаются но вот стоит потерять связь - ВСЕ! опять 10 сек ждем ничего при этом не трогая! Как только кнопку нажмешь - считай 10 сек от этого нажатия... Я чую что близок к пониманию но пока что то никак:))))