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

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

  1. Господа хорошие, кто паял антенну на NRF, который без антенны идет ??????
     
  2. ИгорьК

    ИгорьК Гуру

    magic21 нравится это.
  3. а можно фоту этого модуля?
     
  4. вот вотта желтая спиралька справа и есть антенна
     
    Последнее редактирование: 8 дек 2014
    magic21 нравится это.
  5. Вопрос был кто паял к этой спиральке внешнюю антенну? Удачно попадали?
     
  6. ИгорьК

    ИгорьК Гуру

    Давайте уточним - зачем Вы хотите паять? Ранее никто к такой мысли не приходил. Цель пайки то в чем?
    Антенны - это отдельная сложная тема. Очень сложная.
     
  7. Просто в Москве датчиков в наличии с антеннами практически нету. А внутренней антенны боюсь не хватит.........................................................................
     
  8. ИгорьК

    ИгорьК Гуру

    То есть, вы хотите... разобраться вот с этим? Оставьте. Или заказывайте более мощные модули. Вы ничего не улучшите, максимум - добьетесь того же результата.
    Я как-то коптерами увлекался, так вот тема антенн там наиболее проблеммная, если хочешь что-то улучшить. А такую малявку Вы запросто можете сжечь неудачной антенной.
     
    Последнее редактирование: 8 дек 2014
  9. Спасибо, за более подробный ответ...
     
  10. к антенне припаять антенну неполучится, надо отключить эту Jку, а на её место както умудрится подпаять RS-SMA, да так чтобы еще всё было согласованно..
    еще как вариант использовать модуль как облучатель параболы или посчитать ягу и прилепить его за место вибратора.
    но да, проще взять с услом на 100мвт и не парится.
     
  11. Andy-K

    Andy-K Нуб

    Пару дней читал гостем эту темку, потом решил что надо зарегистрироваться и поблагодарить автора. Вспомнил, что зарегистрирован тут. В общем, огромная благодарность автору этой познавательной темы! В интернете много разрозненной инфы по этим, скажем так, не простым для новичков модулям. А тут все по-человечески, развернуто и в одной теме. Раньше XBee пользовал, но удорожание доллара окончательно убедило меня отказаться от этих неплохих, но ооооочень дорогих модулей и сделать выбор в пользу чего то более дешевого. У меня все сходу запустилось, точнее почти сходу запустилось. А с вашим форумом вопросов почти не осталось.

    Одно жалко, что библиотека не поддерживает более 6 устройств, реально есть такая нужда, но хотя бы так.

    Ещё такой вопрос, ни у кого не удавалось создать автоматическую систему выбора менее зашумленного канала перед началом работы? Так чтобы и приемник и передатчики настраивались на него автоматом?

    И ещё попутно вопрос. Если приемник общается с 5 передатчиками и сам им иногда шлет команды и при этом включены параметры setAutoAct и setRetries, то режим подтверждения передачи работает везде? Ну то есть, будут ли повторные попытки при отсутствии подтверждения?
     
    Последнее редактирование: 10 дек 2014
  12. magic21 нравится это.
  13. ИгорьК

    ИгорьК Гуру

    Без плясок с бубном при приеме-передаче одному ведущему контроллеру можно слушать практически лишь 5, устройств. Действительно, это "железное" ограничение. Обходить или хитрыми алгоритмами вызова-ответа, или, действительно, библиотекой, указанной вше.

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

    Если включены параметры setAutoAct и setRetries, то устройства работают в режиме подтверждения приема. Но надо помнить, что подтверждение приходит не только после удачного соединения, но и после исчерпания попыток такого соединения. Конечно, этот режим повышает вероятность успеха, но не гарантирует его.
     
    Последнее редактирование: 10 дек 2014
    magic21 нравится это.
  14. Уважаемые борцы!!! При тестировании NRF обнаружились новые проблемы.

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

    Алгоритм таков.

    1. Если датчик "HIGH", то счетчик=счетчик+ 1 или счетчик++, кто как любит
    2. Останавливаем прослушку
    3. Выбираем главаря
    4. Врайтим
    5. Открываем трубоприемник
    5. Включаем прослушку

    Но в какой-то момент счетчик висит, и скорее он висит из-за того что NRF передает. Нельзя ли ее как нибудь в отдельный процесс....????????

    Код в UNO 22 кб из 30 + 4 кб бутлоадер. Может ардуише не хватает процика? Либо в библиотеке делей где нибудь висит при передаче.


    PS. Кстати http://tmrh20.github.io/RF24Network_Dev/Tuning.html удалось подключить больше 5 устройств но через ЖнольПа.
     
  15. ИгорьК

    ИгорьК Гуру

    "Смотрю в волшебный шар и вижу код..." как тут кто-то написал...
     
  16. Код (Text):

    //---------------------------------------------------------------------------------------------
    //Функция отправки команды передатчику
    //---------------------------------------------------------------------------------------------
    void send_answer(unsigned long svalue,uint64_t spipe)
      {
                radio.stopListening();  //Перестаем слушать
                radio.openWritingPipe(spipe); //Открывем трубу для отправки
                radio.write(&svalue, sizeof(svalue)); // Отправляем ответ
                radio.openReadingPipe(1,NRF1); //Открываем трубу для приёма
                radio.startListening();
      }
     
    Сама отправка, в цикле считаем каунтер и сендим

    Код (Text):


    //-------------------------------------------------------------------------------------------------
    //Функция обработки сенсора для других устройств
    //-------------------------------------------------------------------------------------------------
    void UpdateSensor()
    {
      boolean changed = debouncer1.update();
      if (changed)
      {
        int value = debouncer1.read();
        if (value == HIGH)
        {
          buttonState1 = 0;
          ButtonCounter=ButtonCounter+1;

    String CMD="50";
    String CNT=String(ButtonCounter);
    String NRT=String(defaultRouter);
    String ANS=NRT+CMD+CNT;
         
    send_answer(ANS.toInt(),NRF);

        }
        else {      
          buttonState1 = 1;
          buttonPressTimeStamp1 = millis();
        }
      }
    }





     
    const uint64_t NRF = 0xE8E8F0F0E1LL;
    const uint64_t NRF1 = 0xE8E8F0F0A2LL;

    Вот таким методом все передается

    Мы не подключали пин IRQ может его нужно использовать ?
     
    Последнее редактирование: 12 дек 2014
  17. ИгорьК

    ИгорьК Гуру

    По первой функции - отправка команды передатчику.
    radio.openReadingPipe(1,NRF1); //Открываем трубу для приёма
    Это зачем вынесено в функцию? Это делается один раз в сетапе.
    Функция должна быть проще:
    Код (Text):
     void send_answer(unsigned long svalue,uint64_t spipe)
      {
                radio.stopListening();  //Перестаем слушать
                radio.openWritingPipe(spipe); //Открывем трубу для отправки
                radio.write(&svalue, sizeof(svalue)); // Отправляем ответ
                radio.startListening();
      }
      }
    Посмотрите все библиотеки - не задействуются ли там прерывания. Если да - запрещайте прерывания на время отправки сообщения. Подозреваю, что функция проверки нажатия работает на прерываниях.

    еще: попробуйте поменять местами в передаче:
    Код (Text):
     radio.openWritingPipe(spipe); //Открывем трубу для отправки
    radio.stopListening();  //Перестаем слушать
    еще:
    перед отправкой пробуйте сделать flush_rx
     
  18. flush_rx в новой библиотеке не надо же использовать ??????
     
  19. ИгорьК

    ИгорьК Гуру

    В новой библиотеке она сделана публичной, пробуйте.