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

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

  1. Oleg_7

    Oleg_7 Гик

    Плата отличается от ардуиновских, SPI там конечно есть, а библиотеки <nRF24L01.h> <RF24.h>точно подходят по данную плату ?, что-то я сомневаюсь. Я бы использовал встроенный wifi для связи и на уно-приемник повесть ESP8266.
     
  2. DiaSan

    DiaSan Нуб

    На странице библиотеки RF24 by TMRh20 (установленной у меня) указано: "ESP8266 support via Arduino IDE":
    http://tmrh20.github.io/RF24/

    В моем понимании, если бы не было соместимости с библиотекой, оно бы вообще не работало.
     
  3. gr_jay

    gr_jay Нуб

    спасибо за быстрый ответ =)
    да, как раз нашел эту идею сегодня, хоть и пропала нужность уменьшать количество проводов, но тема интересная, может все таки доберусь до этого. спасибо за совет:)
     
  4. sergey-fedor

    sergey-fedor Нерд

    не получилось на wemos d1 mini pro задействовать все 16Мб памяти? я пока не нашел решения используется только 4Мб
     
  5. Oleg_7

    Oleg_7 Гик

    никогда не имел дело с такой платой, 16Мбайт -это для WIFI только? а сколько там памяти под скетч выделяется?
     
  6. DiaSan

    DiaSan Нуб

    Прошу меня извинить за дезинформацию, у меня плата без приставки pro (4 МБ памяти).
    Люди вроде смогли использовать 16 МБ путем внесения изменений в файл "boards.txt":
    https://forum.wemos.cc/post/3072
    А Вы уже нашли, чем занять 16 МБ? ;)
     
  7. sergey-fedor

    sergey-fedor Нерд

    wemos d1 mini pro 16Мб памяти , вот и хотелось бы узнать флеш есть, но он не работает больше 4Мб, вроде бы обещает espressif поддержку обеспечить и для флеша больше 4 Мб, было не плохо если использовать например micropython или JS. Есть такая платка у меня - очень не плохая, в ней керамическая антенна и есть еще разъем для внешней...
     
  8. ИгорьК

    ИгорьК Гуру

    Не поделитесь, чем Вы уже 4 мб заполнили, что не хватает?
     
  9. yden

    yden Гик

    Здравствуйте.
    Возможно ли для обмена информацией через nrf24l01 использовать протокол modbus rtu ?
     
  10. Oleg_7

    Oleg_7 Гик

    Проще свой протокол написать: быстрее, и главное под свою задачу подойдет на 100%. Или есть желание использовать интеграцию с имеющимися приборами на рынке ?
     
  11. rkit

    rkit Гуру

    Не работает ESP8266 с флеш-чипами больше 4мб. Всё что больше - китайские разводы. Я кое-где даже видел такую цифру, как 8gb.
     
  12. yden

    yden Гик

    Леплю свою систему "безумного дома". Блоки внутри дома будут разговаривать через провода по rs485 + modbus rtu. Есть необходимость подключить к разговору удаленные блоки. Вот и подумал про единый готовый протокол для проводов и по воздуху.
    Если заморочек много, то не критично и по проводу пустить. Но интересно же и по воздуху попробовать, в целях повышения образованности :)
     
  13. sslobodyan

    sslobodyan Гик

    Нужен шлюз Modbus<>Nrf24. Должен:
    1. По сериал-порту получать modbus-поток, декодировать его, формировать запросную посылку и слать через радиоканал другому шлюзу.
    2. По радиоканалу от Nrf24 получать ответ (или запрос), кодировать его в modbus и выдавать в сериал.

    Основная проблема в том, что модбас сильно ограничен по времени - задержки между байтами в одном пакете не допустимы (почти). Так что напрямую без кодера-декодера модбас-потока можно делать только для коротких команд типа читать/писать регистр, потому что у радиомодуля всего 32 байта буфер и вся модбас-посылка должна в него вместиться.
     
  14. VO_Trigun

    VO_Trigun Нуб

    Здравствуйте, помогите разобраться с радиомодулями. Если данные пришли на порт загорается светодиод-1, если данные отправлены загорается светодиот-2. Если приёмник принял данные на нём загорается светодиод. Данные приходят на порт но не отправляется диод-2 не загорается
    Подключение:
    GND -> земля
    VCC -> 3.3V
    CE -> 9
    CSN -> 10
    SCK -> 13
    MOSI -> 11
    MISO -> 12
    IRQ - > неподключён

    Код для передатчика
    Код (C++):

    #include <RF24.h>
    #include <nRF24L01.h>
    #include <SPI.h>

    const uint64_t pipe=0xE8E8F0F0E1LL;
    RF24 radio(9,10);


    void setup()
    {
    Serial.begin(9600);
    pinMode(2, OUTPUT);
    pinMode(4, OUTPUT);
    radio.begin();//Включение модуля
    delay(1000);
    radio.setChannel(5); //установка канала вещания
    //radio.setRetries(15,15); //интервал и количество попыток дозвона до приёмника
    radio.setDataRate(RF24_250KBPS);//установка скорости
    radio.setPALevel(RF24_PA_HIGH);//Установка мощности
    radio.setAutoAck(1);//Режим подтверждения приёма
    radio.openWritingPipe(pipe);//Активация данных для отправки
    }

    void loop()
    {
      int incomingByte ;
        if (Serial.available())
        {
        incomingByte = Serial.read() ;
        digitalWrite(2,HIGH);
        if (radio.write(&incomingByte, sizeof(incomingByte)))
        digitalWrite(4,HIGH);
        }
    }
    Код для приёмника
    Код (C++):
    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>
    RF24 radio(9,10); // Определяем рабочие ножки;
    const uint64_t pipe = 0xE8E8F0F0E1LL; // Определяем адрес рабочей трубы;


    void setup() {
    //Setup Channel A
    pinMode(2, OUTPUT);
    radio.begin();//Включение модуля
    delay(1000);
    radio.setChannel(5); //установка канала вещания
    //radio.setRetries(15,15); //интервал и количество попыток дозвона до приёмника
    radio.setDataRate(RF24_250KBPS);//установка скорости
    radio.setPALevel(RF24_PA_HIGH);//Установка мощности
    radio.setAutoAck(1);//Режим подтверждения приёма
    radio.openReadingPipe(1, pipe);//Активация данных для отправки
    radio.startListening();
    }

    void loop(){


    if ( radio.available() ) {
      digitalWrite ( 2 , HIGH ) ;
        int dataIn;
        bool done = false;
        while (!done) {
        done = radio.read( &dataIn, sizeof(dataIn)); // Значение dataIn в данном случае
        //не важно. Но его можно использовать и как управляющую команду.
     
    //if ( dataIn == '1' )  digitalWrite ( 2 , HIGH ) ;
    //else if (dataIn == '0')  digitalWrite ( 2 , LOW ) ;
    }
    }
    }
     
  15. sergey-fedor

    sergey-fedor Нерд

    да пока ничем , но в новой версии микропитона пилят модуль _thread , чем очень сильно расширят возможности этого языка на микроконтроллере , потому как сейчас можно исполнять только один процесс а станет возможно выполнять несколько параллельных процессов.. Соответсвенно возрастет и сам код, и вполне возможно понадобятся дополнительные библиотеки - и вдруг и понадобится дополнительное место! но это все лирика мне и 4 за глаза пока хватает , главное в этом модуле все таки не большие размеры и внешняя антенна.

    P/S
    Чтобы не выглядело как флуд :)) код выше вроде бы правильный и теоретически должен работать! но прелесть модулей nrf24l01+ в том, что сомневаться придется везде , начиная качеством контактов и заканчивая хорошим и стабильным питанием. И пройти этот долгий и сложный путь напаивания конденсаторов, изучения новых библиотек если они обновились в IDE и т.д.
     
  16. ИгорьК

    ИгорьК Гуру

    "Дайте мне таблетку от жадности! Да по-больше, по-больше!"
    Шутка :)
    Бедный микропитон! Меньше всего библиотек, дольше всего пилят.
    Хотите потоки? Велкам Lua: coroutine вас ждет. Как и асинхронные функции. Очень давно. И стабильно.
     
  17. sergey-fedor

    sergey-fedor Нерд

    ничего ничего допилят! я бы и Lua с радостью но раз уж начал python надо продолжать , нельзя сворачивать с пути , не собьете :D
     
  18. Oleg_7

    Oleg_7 Гик

    Добрый день всем! при компиляции скетча вылезает предупреждение - не достаточно оперативной памяти (а ее всего 2 кб). Вопрос: если уменьшить не размер глобальных переменных, а укоротить их название: "globalTemperatureSet" до "T", это уменьшить размер занимаемой оперативной памяти?
     
  19. ИгорьК

    ИгорьК Гуру

    А Вы о каком железе то?
     
  20. DiaSan

    DiaSan Нуб

    Если я правильно помню, длина названия переменной не имеет значения, при компиляции заменяется на адрес переменной в памяти.