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

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

  1. Faig

    Faig Нерд

    Я, кажись, догадался: Oleg_7 отправляет broadcast на оба приемника, а так оно и не будет работать (изза автоответов) потому что передатчик должен получить ответ от каждого из приемников а при "самопальном"(ну понимаете что имеется ввиду) броадкасте передатчик перестанет кидаться(теми самыми 15-ю пакетами) как только получит ответ от любой из нод.
    Не поленитесь и примените метод с "pipes" (трубами) передавайте каждое сообщение отдельно одной и другой ноде и все. Скорость конечно немного упадет но о потерях вы забудете.
     
  2. parovoZZ

    parovoZZ Гуру

    А кто может сказать - при снижении питания до минимального сильно проседает мощность (там и так крохи - 1 мВт).
    И ещё- может, кто экспериментировал. Не понимаю, как включить динамическую длину пакета не включая автоответчик? Т.е. Есть куча разных датчиков, у которых длины пакетов хоть и фиксированы, но разные. Из даташита понял, что автоответ на приемнике придётся включить, но посылки посылать с преамбулой NO_ACK. Ну не забивать же нулями недостающие байты((((
    А покупал ли кто не китайские чипы? Хочу попробовать - нашёл по 130 рублей. Говорят у китайских фапч то ли залочен, толи узкоглазый. От того и связь узкоглазая.
     
  3. IgorK

    IgorK Нерд

    Да, конечно. Вот ответ с форума MySensors:

    the node is trying to start with id=0, which is reserved for the gateway.
    Upload and run the cleareepromconfig example and then upload your node sketch again and the node should work.

    Does your sketch write to eeprom?
     
  4. Faig

    Faig Нерд

    У меня рябит в глазах или это автор темы переписывается сам с собой?
     
  5. Anton.M

    Anton.M Нуб

    Здравствуйте, уважаемые!

    Разочаровался я что-то в Wi-Fi, т.к. канал ооочень короткобойный, даже внешняя антенна не помогает. Попались мне в руки модули E01-ML01DP5 на 100 мВт, порадовали расстоянием передачи.

    [​IMG]

    Цифры и байты передаются, теперь хочу перевести на передачу стандартных сообщений моего проекта. Сообщения типа "L#-8888888-999". Написал пару простеньких скетчей - трансмиттер и приемник.

    Трансмиттер:

    Код (C++):
    #include <SPI.h>
    #include <RF24.h>

    RF24 radio(9, 10);
    const uint32_t pipe = 123456789;
    char sender[13];


    void setup()
    {
    Serial.begin(57600);
    radio.begin();
    radio.setDataRate(RF24_250KBPS);
    radio.openWritingPipe(pipe);
    }


    void loop()
    {
    char sender[] = "L#0000000-000";
    radio.write(sender, strlen(sender));
    Serial.println(sender);
    delay(1000);

    }
    Приёмник:

    Код (C++):
    #include <SPI.h>
    #include <RF24.h>
    RF24 radio(9, 10);
    const uint32_t ch1 = 123456789;

    int len=0;
    char data[];

    void setup()
    {
    Serial.begin(57600);
    radio.begin();
    radio.setDataRate(RF24_250KBPS);
    radio.openReadingPipe(1,ch1);
    radio.startListening();
    }


    void loop()
    {
    if(radio.available())
    {
    len = radio.getDynamicPayloadSize();
    radio.read(&data, len );
    Serial.println(data);
    }

    }
    Проблема в том, что к сожалению нет приёма. Я предполагаю, что система ждет финишный байт (вроде 0х03 в МК), но его не получает, поэтому буфер просто переполняется поступающими данными. При смене параметра len = 13 приходит куча "переносов" в мониторе порта. При замене строчки на

    Код (C++):
    radio.read(&data, sizeof(data));
    в мониторе появляются также переносы с редкими символами [] и <.

    Подскажите пожалуйста, что ж я неверно делаю?

    И параллельно - был ли у кого-либо опыт работы с библиотекой RF24-Ethernet?



    Всем Спасибо за Ответы!
     
    Последнее редактирование: 27 фев 2018
  6. parovoZZ

    parovoZZ Гуру

    Не вижу, где задается номер канала?
     
  7. Faig

    Faig Нерд

    Вас ист дас? В библиотеке есть шаблон для адреса трубы.

    Не ставьте 250KBPS во время экспериментов пока не получите стабильный прием и передачу, потому что эта скорость не всегда поддерживается.
     
  8. Faig

    Faig Нерд

    Если не задать явно то, выберется по умолчанию (47-й если не ошибаюсь)
     
  9. Anton.M

    Anton.M Нуб

    К сожалению, ни приведение к шаблонному виду, ни обозначение канала, ни увеличение скорости ничего не дало... Даже поэкспериментировал увеличением массива - ни-фи-га

    После некоторых корректировок, при отсылке простой "1" раз в секунду, в монитор порта приемника прилетают хексовые числа, причем постоянно:
     
    Последнее редактирование: 28 фев 2018
  10. parovoZZ

    parovoZZ Гуру

    Тему читали вообще? Сканер работает? Если даже сканер не работает, то остальное бессмысленно.
    На малинке висит практически такой же модуль, но без экрана. С экраном в ящике лежит.
    У меня на малинке инициализация происходит так:
    Код (C++):
    #define nRF_SEND_LEN 11
    #define interruptPin RPI_V2_GPIO_P1_29

    RF24 radio(RPI_V2_GPIO_P1_22, RPI_V2_GPIO_P1_24, BCM2835_SPI_SPEED_8MHZ);

      radio.begin();
      radio.setPALevel(RF24_PA_MAX);
      radio.setDataRate(RF24_1MBPS);
      radio.setCRCLength(RF24_CRC_8);
      radio.setRetries(15, 15);
      radio.setAutoAck(1);
      radio.setChannel(125);
      radio.setPayloadSize(nRF_SEND_LEN);
      radio.openWritingPipe(0x1111111111LL);
      radio.openReadingPipe(1,0x1111111110LL);
      radio.openReadingPipe(2,0x1111111111LL);
      radio.openReadingPipe(3,0x1111111112LL);
      radio.openReadingPipe(4,0x1111111113LL);
      radio.openReadingPipe(5,0x1111111114LL);
      //radio.maskIRQ(0, 0, 1);
      radio.startListening();
      radio.printDetails();

      attachInterrupt(interruptPin, INT_EDGE_FALLING, intHandler);
     
    В обработчике прерывания:
    Код (C++):
        radio.whatHappened(tx_ok, tx_fail, rx);

        if (radio.available(&pipe_num)){
            memset(Buf, 0, nRF_SEND_LEN);
            radio.read(Buf, nRF_SEND_LEN);


            switch (Buf[0]){

                case 222:
                getWeather(Buf);
                break;
        }
               
        radio.stopListening();
        radio.startListening();

        }
    Если тему читали, то знаете, что последние две строчки обязательны.

    С передатчика код не привожу - там всё на сях, без библиотек.
     
  11. parovoZZ

    parovoZZ Гуру

    Китайская отбраковка ничего не выбирает. А у автора в коде нет проверки.
     
  12. Anton.M

    Anton.M Нуб

    Сканер успешно работает. Тему всю не осилил - 83 страницы все же.


    Я может как человек, который на codesys пишет, не понимаю что-то, но зачем сбрасывать чтение?
     
  13. parovoZZ

    parovoZZ Гуру

    На источник 2.4 ГГц реагирует? WiFi, радио мышка, клава? По-началу мне тоже казалось, что работает.
    Codesys то здесь причем? Я тоже когда-то на нем что-то писал. Но это совершенно другой спектакль.
    Это недоработка библиотеки. Просто так надо. Где-то было в этой теме. FIFO не освобождается что-ли.
     
  14. Anton.M

    Anton.M Нуб

    Да я уж тоже пробовал убирать все. Почему то мусор сыпаться прекращает только при выключении модуля от питания, т.е. наводи нет.
     
  15. parovoZZ

    parovoZZ Гуру

    На водку???
    Сканер должен показать активность мышки ну или ещё чего. Либо по вифи прогнать данные - увидишь канал. А мусор - это не работа.
     
  16. Oleg_7

    Oleg_7 Гик

    Спасибо за ответ, но я уже использую 5 труб)) и автоответ использую radio.setAutoAck(1); надо radio.setAutoAck(0) ?!!
     
  17. MickNich

    MickNich Нуб

    Всем добра.
    Пару лет назад разбирался с этими модулями, радиосканер завёлся, простенькое радиоуправление (серво и коллекторничек) получилось. Потом как то отложил в сторону.
    А вот сейчас решил продолжить эксперименты.
    Вопрос - какие библиотеки актуальны ?
    Были
    #include <SPI.h>
    #include "nRF24L01.h"
    #include "RF24.h"
     
  18. Vladis_a

    Vladis_a Гик

    Библиотеки берите здесь https://github.com/nRF24. Там ещё и пример сети из этих модулей есть.
    Ну и без SPI.h никак не обойтись.
     
    MickNich нравится это.
  19. MickNich

    MickNich Нуб

    Ну меня в моём старом скетче смутило наличие сразу двух "nRF24L01.h" и "RF24.h"
    По ссылке на гитхаб нужна только одна - из RF24 - Optimized fork of nRF24L01 for Arduino & Raspberry Pi/Linux Devices. Это она ?
    Задача приём-передача в обе стороны между двумя nRF24L01, по десятку байт до 10 раз в секунду.
     
  20. parovoZZ

    parovoZZ Гуру

    Последняя аппаратная ревизия датируется 13 что-ли годом. Соответственно, за эти 4-5 лет ничего не поменялось. Что там меняется у автора в библиотеках? Подход к планированию MESH сетей, поддержка различных ОС.
     
    MickNich нравится это.