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

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

  1. ИгорьК

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

    Эта библиотека самая первая. Она самая старая и абсолютно правильная, но, подозреваю (по сути явления), написана для первых, неподдельных модулей. Лучше пробовать другие, более поздние библиотеки.

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

    Проблема AutoAck в том, что в о многих модулях его инициализация происходит по-разному, де-то нулем, где-то единицей. Поэтому формальная установка здесь одинаковых значений может как раз вносить проблему. Так что есть 4 варианта для пары модулей.

    Почему у Вас раньше работало, а теперь нет? Наряду с изменением электрических параметров, дело могло быть в том, что старые скетчи просто устанавливали какой-то необязательный параметр одинаковым, на который Вы и внимания не обращали.

    В том что Вы привели в своем первом посте - не устанавливается ничего, кроме труб.
    Для настоящих модулей это нормально. Для поддельных, кои все, - практически неработспособно.
     
  2. sergey-fedor

    sergey-fedor Нерд

    чтобы не пересказывать все снова и вам не читать опять всю тему , вот вам ссылка, она очень понятна и наглядна, и как подключить, и есть ссылка на библиотеку которая рабочая, и даны два очень простых примера для приемника и передатчика , воспользуйтесь ей http://istarik.ru/blog/arduino/40.html
    только правильно для меги поправьте пины и все
     
  3. ИгорьК

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

    Только не забудьте сюда написать, что получится. Особливо с этими примерами.
    За одно узнаете, зачем библиотеку Маньячного Жука (пятилетней давности) скопипастили на сайт и раздают с него.
     
  4. forfrends

    forfrends Нерд

    Проблема в том, что у меня не осталось ни библиотек, ни описания того что и как я делал... Все что осталось от предыдущей работы это 2 файла (все те же примеры из библиотеки, только чуть урезанные) , один из них - передатчик (для DUE) второй - приемник для МЕГИ. В прикрепленном файле эти примеры. Тогда они работали. Сейчас я не могу с DUE ничего отправить, только принять. ИгорьК, первая библиотека устанавливается и примеры с нее работают, но, опять таки, с DUE ничего не отправляется, только принимает. С МЕГИ передает, но прием проверить нечем (DUE не передает).
    Открыл ссылку которую дал sergey-fedor установил либу (предыдущую удалил), попробовал примеры - та же история.
     

    Вложения:

    Последнее редактирование: 17 авг 2016
  5. forfrends

    forfrends Нерд

    Немного не дописал: библиотека взятая здесь (ссылка от sergey-fedor) компилировалась с ошибками как для МЕГИ так и для ДУЕ. IDE предложила обновить библиотеку, я обновил. В результате ошибки компиляции для МЕГИ пропали, но ДУЕ остались (при этом Ардуино всеравно прошивается). Результат: примеры, из вышеприведенной ссылки, работают если МЕГА передатчик - ДУЕ приемник. Но наоборот нет - ДУЕ не передает.
    Вот лог ошибок во время компиляции для ДУЕ:
    In file included from C:\Users\Игорь\Documents\Arduino\libraries\arduino_556014/RF24.h:18:0,

    from C:\Users\Р?РіРѕСЂСЊ\Desktop\sketch_aug15a\sketch_aug15a.ino:2:

    C:\Users\Игорь\Documents\Arduino\libraries\arduino_556014/RF24_config.h:146:0: warning: "PSTR" redefined [enabled by default]

    #define PSTR(x) (x)

    ^

    In file included from C:\Users\Игорь\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.9\cores\arduino/Arduino.h:31:0,

    from sketch\sketch_aug15a.ino.cpp:1:

    C:\Users\Игорь\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.9\cores\arduino/avr/pgmspace.h:34:0: note: this is the location of the previous definition

    #define PSTR(str) (str)

    ^

    In file included from C:\Users\Игорь\Documents\Arduino\libraries\arduino_556014/RF24.h:18:0,

    from C:\Users\Р?РіРѕСЂСЊ\Desktop\sketch_aug15a\sketch_aug15a.ino:2:

    C:\Users\Игорь\Documents\Arduino\libraries\arduino_556014/RF24_config.h:148:0: warning: "strlen_P" redefined [enabled by default]

    #define strlen_P strlen

    ^

    In file included from C:\Users\Игорь\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.9\cores\arduino/Arduino.h:31:0,

    from sketch\sketch_aug15a.ino.cpp:1:

    C:\Users\Игорь\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.9\cores\arduino/avr/pgmspace.h:69:0: note: this is the location of the previous definition

    #define strlen_P(a) strlen((a))

    ^

    In file included from C:\Users\Игорь\Documents\Arduino\libraries\arduino_556014/RF24.h:18:0,

    from C:\Users\Р?РіРѕСЂСЊ\Desktop\sketch_aug15a\sketch_aug15a.ino:2:

    C:\Users\Игорь\Documents\Arduino\libraries\arduino_556014/RF24_config.h:150:0: warning: "pgm_read_word" redefined [enabled by default]

    #define pgm_read_word(p) (*(p))

    ^

    In file included from C:\Users\Игорь\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.9\cores\arduino/Arduino.h:31:0,

    from sketch\sketch_aug15a.ino.cpp:1:

    C:\Users\Игорь\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.9\cores\arduino/avr/pgmspace.h:103:0: note: this is the location of the previous definition

    #define pgm_read_word(addr) (*(const unsigned short *)(addr))

    ^

    In file included from C:\Users\Игорь\Documents\Arduino\libraries\arduino_556014\RF24.cpp:10:0:

    C:\Users\Игорь\Documents\Arduino\libraries\arduino_556014\RF24_config.h:146:0: warning: "PSTR" redefined [enabled by default]

    #define PSTR(x) (x)

    ^

    In file included from C:\Users\Игорь\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.9\cores\arduino/Arduino.h:31:0,

    from C:\Users\Игорь\Documents\Arduino\libraries\arduino_556014\RF24_config.h:63,

    from C:\Users\Игорь\Documents\Arduino\libraries\arduino_556014\RF24.cpp:10:

    C:\Users\Игорь\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.9\cores\arduino/avr/pgmspace.h:34:0: note: this is the location of the previous definition

    #define PSTR(str) (str)

    ^

    In file included from C:\Users\Игорь\Documents\Arduino\libraries\arduino_556014\RF24.cpp:10:0:

    C:\Users\Игорь\Documents\Arduino\libraries\arduino_556014\RF24_config.h:148:0: warning: "strlen_P" redefined [enabled by default]

    #define strlen_P strlen

    ^

    In file included from C:\Users\Игорь\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.9\cores\arduino/Arduino.h:31:0,

    from C:\Users\Игорь\Documents\Arduino\libraries\arduino_556014\RF24_config.h:63,

    from C:\Users\Игорь\Documents\Arduino\libraries\arduino_556014\RF24.cpp:10:

    C:\Users\Игорь\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.9\cores\arduino/avr/pgmspace.h:69:0: note: this is the location of the previous definition

    #define strlen_P(a) strlen((a))

    ^

    In file included from C:\Users\Игорь\Documents\Arduino\libraries\arduino_556014\RF24.cpp:10:0:

    C:\Users\Игорь\Documents\Arduino\libraries\arduino_556014\RF24_config.h:150:0: warning: "pgm_read_word" redefined [enabled by default]

    #define pgm_read_word(p) (*(p))

    ^

    In file included from C:\Users\Игорь\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.9\cores\arduino/Arduino.h:31:0,

    from C:\Users\Игорь\Documents\Arduino\libraries\arduino_556014\RF24_config.h:63,

    from C:\Users\Игорь\Documents\Arduino\libraries\arduino_556014\RF24.cpp:10:

    C:\Users\Игорь\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.9\cores\arduino/avr/pgmspace.h:103:0: note: this is the location of the previous definition

    #define pgm_read_word(addr) (*(const unsigned short *)(addr))

    ^

    C:\Users\Игорь\Documents\Arduino\libraries\arduino_556014\RF24.cpp:14:0: warning: "_BV" redefined [enabled by default]

    #define _BV(bit) (1 << (bit))

    ^

    In file included from C:\Users\Игорь\Documents\Arduino\libraries\arduino_556014\RF24.cpp:10:0:

    C:\Users\Игорь\Documents\Arduino\libraries\arduino_556014\RF24_config.h:97:0: note: this is the location of the previous definition

    #define _BV(x) (1<<(x))

    ^


    Скетч использует 24 084 байт (4%) памяти устройства. Всего доступно 524 288 байт.
     
  6. sergey-fedor

    sergey-fedor Нерд

    тут скорей всего с версиями плат не совместимость , мне пришлось откатится до версии 1.6.8 на версии 1.6.12 тоже постоянные ошибки , вплоть до того что китайские ардуины - просто не прошивались
    ps кстати - к сайту отношения никакого не имею - просто нашел простые примеры сам проверил - работают, но еще раз повторяюсь в менеджере плат надо выбрать версию 1.6.8
     
  7. ИгорьК

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

    Я не настолько хорошо знаю железо Дуе.
    Пойдем от обратного. Модуль работает от SPI и еще немного ножек.
    Попробуйте поменять все ножки на Дуе, кроме обязательно необходимых MISO, MOSI и SK.
     
  8. Henry_Ford

    Henry_Ford Нуб

    Спасибо огромное!!! Я 4 бессонных ночи провел перепаивая и меняя модули так и не поняв, как определить рабочий он или нет. Всего то надо было Ваши посты почитать, припаять кондер и загрузить скетч. Ура! Я могу поспать))) (Выключив свет с только что изготовленного пульта))) Спасибо:)!
     
  9. sergey-fedor

    sergey-fedor Нерд

    :))) все как обычно - питание, соединения и внимательность при правке скетча - ничего нового !!! Опять же стабильность тоже хорошо Избавится бы от этих модулей капризных и перейти на есп, но порог вхождения повыше для освоения ее
     
  10. ИгорьК

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

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

    Сейчас делаю устройство вот на этих.
    [​IMG]

    Вот после NRF я и перешел на ESP8266. Преодолел этот порог. Уже много проектов на нем - очень нарвится.
    Перешел, как только они появились и чуть начали работать. Тогда в Ардуино IDE они отсутствовали, поэтому пришлось изучать Lua. За это ESP8266 отдельное спасибо.
     
  11. sergey-fedor

    sergey-fedor Нерд

    вот из за LUA и не хочется :) не вникая в язык сложно будет копи пастом чтото создать для себя ,а на изучения языка нужно время которого не хватает на все... Но долгими зимними вечерами... :)) я обращусь к вашим постам по ESP . Я все жду когда на нем заработает микропитон :) и когда кто нибудь опишет начало работы на есп под микропитоном
     
  12. ИгорьК

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

    Микропитон работает и достаточно стабильно.
    Однако модулей под железо на микропитон очень и очень мало, поэтому я его даже не устанавливал.
    А в чем проблема то начинать работать (и на микропитоне в том числе): залил и вперед тыкать кнопки. :)

    В ESPlorer в его папке лежит прошивка Микропитона.
    Заливаем прошивку через https://github.com/nodemcu/nodemcu-flasher
    И вперед, ветер попутный :)

    В некоторой части JS и Lua очень похожи. Время зря не потратите.
    А МК, ИМХО, будут стремится переползти на что-то такое. Работать с регистрами STM очень уж лениво для домашних проектов типа: сработал датчик - зажглась лампочка.
    Кстати, Ардуино тоже можно программировать на JS: http://johnny-five.io/
    Железа поддерживается достаточно: http://johnny-five.io/api/
     
    Последнее редактирование: 18 авг 2016
  13. sergey-fedor

    sergey-fedor Нерд

    Да согласен чем дальше интернет вещей проникает тем больше будут использоваться языки программирования и для микроконтроллеров скоро новый есп32 на подходе например , интересно все это еще время в сутках было бы на несколько часов побольше :))) чтобы успевать все! обязуюсь заняться все равно ЕСП в ближайщем будущемю Спасибо вам за ссылки ,флуд прекращаю !
     
  14. Haradnur

    Haradnur Нуб

    Специально зарегистрировался, что бы оставить ответ в этой ветке =)
    Модули заработали после месяца напряженного копания в железе и коде.
    Как результат:
    1) конденсаторы на питании модуля крайне желательны (у меня это 25в 1000мкф электролит и 25в 100мкф тантал, напаянные на модуль nrf24l01)
    2) в коде для приемника и передатчика желательно прописывать максимальное количество переменных, настройка которых допускается в библиотеке - библиотеку использовал RF24, из прописанных настроек:
    radio.setAutoAck(true);
    radio.setPALevel(RF24_PA_MIN);
    radio.setDataRate(RF24_1MBPS);

    Без этих строк у меня лично не запускались даже стандартные примеры из библиотеки.
    Возможно есть еще нюансы, но пока что радуюсь и этому, буду дальше копаться =)
    Надеюсь кому то смог помочь и спасибо этому форуму и ИгорьК лично за обширное количество информации и советов =)
     
    Последнее редактирование: 18 авг 2016
  15. Oleg_7

    Oleg_7 Гик

    Добрый Всем день! Наладил радиообмен между Due ми через nrf24l01, все работает ок ! Но вот возникла необходимость записывать на внутрению память мк важные параметры, но нигде не могу найти библиотеку "eeprom.h", подскажите, может у кого такая имеется???......
     
  16. ИгорьК

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

    Это стандартная библиотека. В комплекте к Ардуино IDE идет.
     
  17. Oleg_7

    Oleg_7 Гик

    Игорь, Вы не поверите: нет в 1.6.5. Скачал новый редактор 1.6.10 с оф сайта,, там тоже нет....... (((((((
     
  18. ИгорьК

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

    Не верю. Плохо ищете:
    https://www.arduino.cc/en/Reference/Libraries - она в стандартных находится.
    eee.jpg
     
  19. Oleg_7

    Oleg_7 Гик

    проверял, в списке и в папке нет. а при компиляции выдает "fatal error: EEPROM.h: No such file or directory". Игорь, ума не приложу куды он делся, сможете мне zip файл переслать?
     
  20. Denis_

    Denis_ Нуб

    Приветствую!
    Столкнулся с проблемой при работе с модулем. Модуль на отрез отказывается уходить в спящий режим.
    Контроллер atmega88v, библиотека http://tmrh20.github.io/RF24/. Кроме проблем со сном, других проблем при работе модуля нет. Прошу помощи, как заставить модуль спать?

    [​IMG]

    Код (C++):
    #include <avr/sleep.h>
    #include <avr/power.h>
    #include <avr/wdt.h>
    #include <SPI.h>
    #include <Wire.h>
    #include <nRF24L01.h>
    #include <RF24.h>
    #include <stdint.h>
    #include <SparkFunBME280.h>

    #define chclient 1
    #define sleep_bod_disable()

    BME280 bme;

    volatile int f_wdt = 1;
    int counter = 0;

        RF24 radio(9,10);


    typedef struct{        
        byte identifier;
        int temperature_Sensor;
    }

        B_t;
        B_t clientnf;

    void counterHandler()
    {

      counter++;
     
      if(counter == 1) {  
          counter = 0;
          power_all_enable();
          radio.powerUp();
         
          delay(3);
     
      } else {
       
        enterSleep();
     
      }

    }

    void enterSleep()
    {

        radio.powerDown();

        f_wdt = 0;
        sleep_enable();
        sleep_mode();
        sleep_disable();
        counterHandler();
    }

        ISR(WDT_vect)

    {

          f_wdt = 1;

    }

    void setupWDT()
    {
        MCUSR &= ~(1<<WDRF);
        WDTCSR |= (1<<WDCE) | (1<<WDE);
        WDTCSR = 1<<WDP0 | 1<<WDP3;
        WDTCSR |= _BV(WDIE);
    }

    void setupRadio()
    {

    radio.begin();

        radio.setDataRate(RF24_2MBPS);
        radio.setPALevel (RF24_PA_HIGH);
        radio.setAutoAck(false);
        radio.setCRCLength(RF24_CRC_16);
        radio.setChannel(1);
        radio.setRetries(15,15);
       
        clientnf.identifier = chclient;
       
        radio.openWritingPipe(1);

    }

    void setup()
    {

          sleep_bod_disable();
          set_sleep_mode(SLEEP_MODE_PWR_DOWN);
          setupWDT();
          setupRadio();

        ADCSRA = 0;
      }

    void loop()
    {

      bme.begin();
     
          bme.settings.commInterface = I2C_MODE;
          bme.settings.I2CAddress = 0x76;
          bme.settings.runMode = 1;
          bme.settings.tStandby = 0;
          bme.settings.filter = 0;
          bme.settings.tempOverSample = 1;
          bme.settings.pressOverSample = 0;
          bme.settings.humidOverSample = 0;
     
      int t = bme.readTempC()*10;

      delay(20);

          clientnf.identifier = 1;
          clientnf.temperature_Sensor = t;
          radio.openWritingPipe(0xF0F0F0F0E1LL);
          radio.write(&clientnf, sizeof(clientnf));
     
      enterSleep();

    }