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

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

  1. vlad123419

    vlad123419 Нерд

    Т.е. это то, что вы писали про настройки в библиотеке?
     
  2. DIYMan

    DIYMan Guest

    Прочитал всю тему, и какие-то двоякие у мну ощущения остались: сперва планировал беспроводную часть делать именно на nRF, теперь даже как-то пробовать не хочется. Что-то подсказывает, что модуль таки капризный, обидно, если это на самом деле так - были на него такиииие планы :)
     
  3. ostrov

    ostrov Гуру

    Да не сильно капризный, особенно если использовать в односторонней связи. Главное с питанием и контактами разобраться, он за них волнуется очень и создать необходимую инициализацию (если конечно модуль не фирменный, которого никто не видел). Один раз помучиться, потом будет работать как папа Карло. Наверное. )
     
    DIYMan нравится это.
  4. ИгорьК

    ИгорьК Гуру

    Модуль действительно работает. У меня работает 4 штуки в одном комплексном устройстве: два в режиме передатчик/приемник, два просто приемники на исполнительных устройствах. Модули были куплены одновременно и с горем пополам запущены в работу, в результате чего и появилась эта тема.

    Мне казалось, что я этот модуль изучил неплохо. И вот встала задача - ввести в устройство еще один модуль, причем под управлением Малины. И тут я "убился". Ни в какую. Пятый модуль "присоединяться" к системе напрочь отказывался. Причем модуль куплен уже года через два после этой истории. Пара куплена.
    И эта пара и между собой не контачит.

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

    Как только появился ESP8266 - сразу схватился за него, после этого. К nRF у меня тихая ненависть.
    ESP8266 в те далекие времена программировался на кривой прошивке NodeMCU, а ардуино-примочек и в проекте не было.
    Так взялся за изучение Lua - спасибо nRF. C ESP8266 работаю только на Lua. NodeMCU уже вполне стабильная прошивка. Надо было только поверить в нее.

    А тут и ардуинщики к ESP8266 подоспели. Они весьма агрессивны в своей любви к великой Ардуино и превращают в ардуино-шилд все подряд: и чайник, и автомобиль, и жену. И ESP8266 стала ардуинистой.

    Однако амперщики придумали выпустить плату Iskra JS, чем наделили меня лично (может другие в теме и были) знанием о JS на МК большей мощности. А после Lua JavaScript не кажется таким кошмарным, а вполне себе ничего. В общем, и Iskra JS у меня в уже двух устройствах. (Удобно. Дольше паяешь чем программируешь!)

    Тов. DIYMan разъяснил некоторые вопросы, которые при простом программировании ESP8266 не слишком нужны были и вот уже хороший пинок идти дальше.

    И все пошло от nRF :) Есть даже за что его благодарить :)
     
    Последнее редактирование: 7 июл 2016
    DIYMan нравится это.
  5. ИгорьК

    ИгорьК Гуру

    Да, об этом и писал.
     
  6. Нет, ардуино полностью запускается, кнопку не менее двух секунд держу, этого сполна хватает, скетч запускается HIGH дает, но при отпускании кнопки все отключается
    Можно поподробнее о чем вы? С транзистором я так понял это работать не будет
     
  7. vlad123419

    vlad123419 Нерд

    Спасибо! Буду пробовать!
    Кстати, преобразователь купил такой:
    http://s.aliexpress.com/aMVz6Zvm
     
  8. ostrov

    ostrov Гуру

    Вот про ESP8266 + Arduino IDE, хоть и немного оффтоп. Хочу сделать простое соединение точка-точка для передачи данных туда-обратно (по UDP или TCP, например), измучился, но пока такая простая вещь не получается. (

    С NRF, при помощи такой то матери, заработало хоть.
     
  9. ИгорьК

    ИгорьК Гуру

    Показывал ссылку на документацию на Lua. AP на модуле поднимается на раз.
    Можно и великим языком Ардуино посредством AT-команд с модулем работать. Но я не умею.
    NodeMCU сейчас очень стабильна. Вчера на даче на полдня свет выключился, потом включился. Все устройства связь и работу восстановили. Вот она, температура в тепличке. Устройство от батарейки работает:
    garden.jpg
     
    DIYMan нравится это.
  10. vlad123419

    vlad123419 Нерд

    Извините за нубовский вопрос, но не могли бы чуть чуть поподробнее объяснить про pipe ( трубы), не до конца всё понял? Спасибо!
     
  11. ИгорьК

    ИгорьК Гуру

    Трубы - это шесть цифровых идентификаторов.
    Чтобы что-то передавать или слушать, они должны быть записаны в модуль. Как минимум - одна. Максимум - шесть.
    Прием и передача информации пользователя осуществляется с включением в нее этих цифр.
    Передатчик, отправляя данные, добавляет к ним "трубу" - некий код, который приемник опознает, отделяет от данных, а сами данные выдает наружу.
    Если "трубы", то есть группы цифр, не совпадают - информация проходит "мимо ушей".
    Труб может быть шесть на прием. Первая "труба" используется еще и при передаче.
    То есть, трубы - это не шифрование, а бирка к отправляемым и принимаемым данным.
     
  12. vlad123419

    vlad123419 Нерд

    Теперь понял!
    А все настройки из библиотеки их в код записывать?
     
  13. ИгорьК

    ИгорьК Гуру

    :) а есть другие варианты?
     
  14. ostrov

    ostrov Гуру

    Пришли вот такие адаптеры, по обещаниям произволителя упрощают и улучшают работу. Сегодня буду пробовать.
    [​IMG]

    [​IMG]
     
  15. vlad123419

    vlad123419 Нерд

    Код (C++):
    #include <SPI.h>
    #include "RF24.h"
    RF24 radio(9,10);
    const uint64_t pipe = 0xF0F0F0F000LL;
    int msg[1];
    int potpin_1 = A0;
    int val_1;
    int potpin_2 = A1;
    int val_2;

    void setup(void){
    radio.begin();
    radio.openWritingPipe(pipe);

    }
    void loop() {
    val_1 = analogRead(potpin_1),val_1 = map(val_1, 0, 1023, 0, 127),msg[0] = val_1,radio.write(msg, 1);
    val_2 = analogRead(potpin_2),val_2 = map(val_2, 0, 1023, 128, 255),msg[0] = val_2,radio.write(msg, 1);


    }
     
    Код (C++):
    // Необходимо установить библиотеку для радиомодуля nRF24
    #include <Servo.h>
    #include <SPI.h>
    #include "RF24.h"
    Servo servo1;
    Servo servo2;

    RF24 radio(9,10);
    const uint64_t pipe = 0xF0F0F0F000LL;
    int msg[1];
    int data;
    int pos;
    int fspeed;           // forward speed
    int bspeed;           // backward speed

    void setup()
    {

    servo1.attach(3);
    servo2.attach(5);
    delay(50);
    radio.begin();
    radio.openReadingPipe(1,pipe);
    radio.startListening();
    }

    void loop()
    {
      if (radio.available())radio.read(msg, 1);
      if (msg[0] <127 && msg[0] >-1)data = msg[0], pos = map(data, 0, 126, 0, 180),servo1.write(pos);

      if (msg[0] <=255 && msg[0] >=128)data = msg[0], pos = map(data, 129, 254, 147, 7),servo2.write(pos);

    }
     
    С этим кодом не хочет работать...
     
  16. ИгорьК

    ИгорьК Гуру

    Упрощают. Я такой на Малине использовал.
     
  17. ИгорьК

    ИгорьК Гуру

    то vlad123419
    Этот код может заработать а может и нет. Единственный параметр, который он устанавливает - труба. Если модули из одной партии - могут заработать. А могут и не заработать даже если из одной.
     
  18. vlad123419

    vlad123419 Нерд

    Код (C++):
    #include <SPI.h>
    #include "RF24.h"
    RF24 radio(9,10);
    const uint64_t pipe01 = 0xE8E8F0F0E2LL;
    int msg[1];
    int potpin_1 = A0;
    int val_1;
    int potpin_2 = A1;
    int val_2;

    void setup(void){
    radio.begin();
    radio.setChannel(0x22);
    radio.openWritingPipe(pipe01);

    }
    void loop() {
    val_1 = analogRead(potpin_1),val_1 = map(val_1, 0, 1023, 0, 127),msg[0] = val_1,radio.write(msg, 1);
    val_2 = analogRead(potpin_2),val_2 = map(val_2, 0, 1023, 128, 255),msg[0] = val_2,radio.write(msg, 1);


    }
     
    Модули из разных партий, чуть код исправил
     
  19. ИгорьК

    ИгорьК Гуру

    Работает?
     
  20. vlad123419

    vlad123419 Нерд

    Нет, можете с кодом помочь пожалуйста?