Вопросы по NRF24L01

Fleshdeck

★★★✩✩✩✩
19 Янв 2019
349
175
Киев
в этой библиотеке не нужно трубу открывать, используй примеры с сайта, если у тебя модули одинаковые и из одной партии, то все будет работать
 

Madcape

✩✩✩✩✩✩✩
22 Окт 2019
15
2
в этой библиотеке не нужно трубу открывать, используй примеры с сайта, если у тебя модули одинаковые и из одной партии, то все будет работать
Все нормально. Я сделал по примерам. Тот код я привел без использования Network - о чем еще поначалу говорил.
Ну короче, пропуски есть ( - и дело все равно в самом принципе работы НРФок в режиме рассылки одного сообщения на несколько приемников ( .

Использовал примеры от сюда:
http://maniacbug.github.io/RF24Network/index.html

Да нрфки из одной партии (скорее всего ... китайцы же... у них ведь и на мне может закончиться одна партия, они мне из другой могли сунуть ) )
 

Madcape

✩✩✩✩✩✩✩
22 Окт 2019
15
2
Странности однако...
Код передатчика:
смотрите строки -
C++:
const byte* hello[8] = { 112, 144, 1, 2, 3, 4, 5, 6 }; // массив типа byte
// передаем массив из 8-и элементов
RF24NetworkHeader header(/*to node*/ other_node);
bool ok = network.write(header,hello,16); // 16 - УКАЗАНО В ДВА РАЗА БОЛЬШЕ ЧЕМ ПЕРЕДАВАЕМЫЙ МАССИВ

- если указать размер передаваемого массива как есть на самом деле, т.е 8, то приемник будет получать вот такое:
"Received: 112 0 144 0 1 0 2 0 0 0 0 0 0 0 0 0 "
- а если увеличить в два раза, то вот это
Received: 112 0 144 0 1 0 2 0 3 0 4 0 5 0 6 0
* Во-первых, есть странные лишние нули, а во вторых в первом случае происходит тупо обрезка - в конце не хватает данных, сплошные нули. Если указать размер в два раза больше, то приходят все данные (хотя все равно с нулями)


C++:
/* Передатчик */

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

RF24 radio(7,8);

// Network uses that radio
RF24Network network(radio);

// Address of our node
const uint16_t this_node = 1;

// Address of the other node
const uint16_t other_node = 0;
const uint16_t other_node2 = 2;

// How often to send 'hello world to the other unit
const unsigned long interval = 500; //ms

// When did we last send?
unsigned long last_sent;

void setup(void)
{
  Serial.begin(57600);

  SPI.begin();
  radio.begin();
  network.begin(/*channel*/ 90, /*node address*/ this_node);
}

void loop(void)
{
  network.update();

  unsigned long now = millis();
  if ( now - last_sent > interval  )
  {
    last_sent = now;
    
    printf("Sending...\r\n");
    
    const byte* hello[8] = { 112, 144, 1, 2, 3, 4, 5, 6 }; // массив типа byte
    // передаем массив из 8-и элементов
    RF24NetworkHeader header(/*to node*/ other_node);
    bool ok = network.write(header,hello,16); // 16 - УКАЗАНО В ДВА РАЗА БОЛЬШЕ ЧЕМ ПЕРЕДАВАЕМЫЙ МАССИВ
  
    const char* hello2 = "Hello, world! 2";    // массив типа char
    RF24NetworkHeader header2(/*to node*/ other_node2);
    ok = network.write(header2,hello2,strlen(hello2));
  }

}
C++:
/* Приемник */

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

// nRF24L01(+) radio attached to SPI and pins 8 & 9
RF24 radio(7,8);

// Network uses that radio
RF24Network network(radio);

// Address of our node
const uint16_t this_node = 0;

// Address of the other node
const uint16_t other_node = 1;

void setup(void)
{
Serial.begin(57600);
Serial.println("RF24Network/examples/helloworld_rx/");

SPI.begin();
radio.begin();
network.begin(/*channel*/ 90, /*node address*/ this_node);
}

void loop(void)
{
// Pump the network regularly
network.update();

// Is there anything ready for us?
  if ( network.available() )
   {
   // If so, grab it and print it out
      RF24NetworkHeader header;
     static byte message[16];
     network.read(header,message,sizeof(message));
     Serial.print("Received: ");
     for (byte k = 0; k<16; k++){
        Serial.print(message[k]);
        Serial.print("\t");
     }
    Serial.println("");
    }
}
Тест типа char приходит без пропусков. Думаю библа завершающий символ 0 вкрячивает в каждый элемент массива... дура.
 

Fleshdeck

★★★✩✩✩✩
19 Янв 2019
349
175
Киев
адреса нужно писать двумя цифрами, типа 00 или 01, а далее тремя 011 или 021, по крайней мере так в даташите написано, и я не видел что бы можно было массивы отправлять, я отправлял только переменные с датчиков, и делал беспроводные выключатели дальнобойные
 

Madcape

✩✩✩✩✩✩✩
22 Окт 2019
15
2
адреса нужно писать двумя цифрами, типа 00 или 01, а далее тремя 011 или 021, по крайней мере так в даташите написано, и я не видел что бы можно было массивы отправлять, я отправлял только переменные с датчиков, и делал беспроводные выключатели дальнобойные
ну отправлять просто гольные единичные переменные это для моего проекта не прокатит... ваяю "центральный пульт" управления, нужно отправлять коды команд и параметры к этим командам, чтобы приемник принял, считал код команды, запустил нужную свою функцию и подставил в нее пришедшие параметры... своего рода с ЦП будет программироваться поведение удаленных узлов... ) как-то так.

адреса нужно писать двумя цифрами, типа 00 или 01, а далее тремя 011 или 021
Да особой разница нет как написать 00 или 0, 01 или 1, 02 или 2 - библа просто при разборе адреса делает битовый сдвиг. и для компилятора 00 и 0 - это одно и тоже, число с одним сегментом. если написать 10 - это уже двухсегментное число, и 000010 - тоже двухсегментное число. Я не понимаю, че авторы замудрили с описанием. Написали бы, что адресация производится побитовым сдвигом справа налево, и все... видимо что такое битвый сдвиг слишком сложно для аудитории ардуины. как-то так )
 

puhloschiok

✩✩✩✩✩✩✩
8 Окт 2018
22
0
Всем привет! Наступила зима и вместе с ней новогодний отпуск!
Наконец-то я засел за свой давний проект, в котором несколько ардуинок должны общаться между собой посредством модуля NRF24L01.
C библиотекой RF24 разобрался сразу, и заставить две ардуинки обмениваться данными не составило труда.
Но, когда дело дошло до более серьёзной библиотеки RF24Network, дело застопорилось :/
При компиляции скетча вылезают следующие ошибки:
C++:
Arduino: 1.8.5 (Windows 10), Плата:"Arduino Nano, ATmega328P"

C:\Program Files (x86)\Arduino\libraries\RF24Network-1.0.8\RF24Network.cpp: In member function 'uint16_t RF24Network::read(RF24NetworkHeader&, void*, uint16_t)':

C:\Program Files (x86)\Arduino\libraries\RF24Network-1.0.8\RF24Network.cpp:662:35: error: 'rf24_min' was not declared in this scope

   maxlen = rf24_min(maxlen,bufsize);

                                   ^

C:\Program Files (x86)\Arduino\libraries\RF24Network-1.0.8\RF24Network.cpp: In member function 'bool RF24Network::write(RF24NetworkHeader&, const void*, uint16_t, uint16_t)':

C:\Program Files (x86)\Arduino\libraries\RF24Network-1.0.8\RF24Network.cpp:762:79: error: 'rf24_min' was not declared in this scope

  uint16_t fragmentLen = rf24_min((uint16_t)(len-offset),max_frame_payload_size);

                                                                               ^

exit status 1
Ошибка компиляции для платы Arduino Nano.

Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
Прошу помощи у более опытных камрадов!
Всем заранее спасибо!

P.S.: Пробовал менять версию библиотеки на более старую — безрезультатно. Сейчас используется RF24Network-1.0.9
 

puhloschiok

✩✩✩✩✩✩✩
8 Окт 2018
22
0
Чуть с ума не сошёл, но заставил скетч компилироваться. Всё дело, как оказалось, в конфликтах между двумя библиотеками: RF24 и RF24Network.
Скачал последние версии обеих библиотек и всё наладилось. Продолжаю!
 

Fleshdeck

★★★✩✩✩✩
19 Янв 2019
349
175
Киев
Чуть с ума не сошёл, но заставил скетч компилироваться. Всё дело, как оказалось, в конфликтах между двумя библиотеками: RF24 и RF24Network.
Скачал последние версии обеих библиотек и всё наладилось. Продолжаю!
Если честно, я отказался от этих модулей и RF24Network в пользу Wifi и Blynk, уж очень не стабильно у меня все это работало, эти модули хорошо работают когда их 2, во всяких пультах например, а когда их много они сбоить начинают, ну или это только у меня такая проблема была, я хз
 

puhloschiok

✩✩✩✩✩✩✩
8 Окт 2018
22
0
Fleshdeck, буду тестировать. Вся эта система мне нужна для управления освещением и неким подобием сигнализации на даче. Пока нет смысла рассказывать в подробностях. Так что буду тестировать в квартире на балконе до апреля/мая. Если будет стабильно работать, то установлю всё куда положено. Ну и конечно расскажу здесь что я и как сделал + фото. Должно получиться очень даже интересно и симпатично в итоге :)
 

puhloschiok

✩✩✩✩✩✩✩
8 Окт 2018
22
0
Всем привет! В своём видео на канале «Заметки Ардуинщика» Алекс упоминал, что у этих модулей есть режим подтверждения получения пакета.
Для меня это очень восстребованная функция. Может ли кто-нибудь объяснить, как это работает?
Например я отправил данные с одно модуля на другой. И тот должен в ответ как-то передать подтверждение, а первый модуль его зафиксировать.
Зарнее спасибо всем.
 

Fendragon

✩✩✩✩✩✩✩
30 Мар 2019
20
0
Помогите с решением проблемы. Запустил пример CallResponse, но выдает ошибки. Модули я припаял, но выдает ошибки как и раньше.
Проблема.png
 

kalobyte

★★★✩✩✩✩
1 Янв 2020
726
146
меняй канал, пока не заработает
эфир засран роутерами
 

Fendragon

✩✩✩✩✩✩✩
30 Мар 2019
20
0
Здравствуйте, нет канал не засран, я проверял скетчем listen_air.
 

kalobyte

★★★✩✩✩✩
1 Янв 2020
726
146
налепи на контакты питания модулей конденсатор 100мкф и керамику смд
 

Fendragon

✩✩✩✩✩✩✩
30 Мар 2019
20
0
Припаял, но все равно на всех каналах не работает.После данной процедуры ,при запуске скетчей RX и TX, на приемной часте начало ловить что-то (много нулей и местами 255, иногда подряд). Решил опять запустить скетчем listen_air , но один модуль выдает теперь нули во второй строчке. чем это связано не знаю.
 
Изменено:

kalobyte

★★★✩✩✩✩
1 Янв 2020
726
146
сфоткай свои поделия, монтаж надо смотреть
еще там были китайские подделки
 

Fendragon

✩✩✩✩✩✩✩
30 Мар 2019
20
0
Конденсатор я отпаял, когда еще раз пропаял контакты. Питание я тоже отпаял.Проблема2.png2HGvOVg0axM.jpgT6RhMfSw4O0.jpgGKlvJRMIRRY.jpg
 

kalobyte

★★★✩✩✩✩
1 Янв 2020
726
146
что специальный переходник есть - хорошо
а вот на скриншоте показывает, что нрф без +, т.е. старой версии
китайцы продавали без плюса перемаркированный под плюс, а там была аппаратная ошибка и в даташите оно не было описано
вобщем был там давно баг один
и скриншоты показывают, что у тебя вообще по спи не идет обмен данными

либо библиотека кривая, либо провод где переломился или нет контакта, надо осциллографом смотреть
проверяй контакты и напряжения короче
 

Fendragon

✩✩✩✩✩✩✩
30 Мар 2019
20
0
Проблема в переходнике. Я проверял на другом переходнике , и оба модуля работают. А еще фотки без питания. Я бы с радостью просто перепаял переходник на другой, но у меня его нет. А еще я замерял напряжение на переходнике и там ровно 3.3 В . Я могу предположить что там тока не хватает, но я проверил все смд детали , и они такие как на работающем переходнике. Могу попробовать сделать осциллограмму, но у меня только dso138.
 

kalobyte

★★★✩✩✩✩
1 Янв 2020
726
146
а что с переходником тогда не так? может провод где переломился?
 

Fendragon

✩✩✩✩✩✩✩
30 Мар 2019
20
0
Ситуация такая, переходник выдает 3.3В, все радиодетали в норме, контакт хороший, пульсаций нет, нрф рабочие (на другом переходнике ,припаянный к уно, они работают ), прошивка на уно и нано одна тажа, но на нанке переходник не работает.
 

Fendragon

✩✩✩✩✩✩✩
30 Мар 2019
20
0
Здравствуйте @PiratFox. Да запитан. Я даже пробовал отдельно запитать нанку от лбп, но все равно не работает, хотя кроме нулей появились буквы f.