В библиотеке по ссылке выше есть папка examples с примерами!
Поиграйтесь с
examples/meshping, там есть инструкция как ей пользоваться. Вкратце:
Код единый для всех узлов, заливаете его во все arduino с модулями nrf24l01.
Вам только нужно при первом запуске присвоить адреса: 00 - базе, 01 и т.д. - всем остальным. Делается это в консоле, нужно послать цифру от 0 до 9, что будет соответствовать адресу который будет присвоен и записан в eprom: 0=00, 1=02, 2=05, 3=012, 4=015, 5=022, 6=025, 7=032, 8=035, 9=045. Можно заменить на любые свои (22 строчка файла nodeconfig.cpp).
Что делает данный пример:
все узлы отправляют пакеты базе с заданной периодичностью, база выводит результат в консоль.
Пакеты отправляются так:
Код: Выделить всё
message="test";
RF24NetworkHeader header(/*Кому*/ 01, /*Тип*/ 'a');
network.write(header,&message,sizeof(message));
Принимаются так:
Код: Выделить всё
while (network.available())
{
RF24NetworkHeader header;
static char message[32];
network.read(header,message,sizeof(message));
Serial.print("Received: ");
Serial.println(message);
}
Все узлы всегда должны слушать эфир, иначе транзитные пакеты будут теряться, для этого периодически нужно вызывать команду
Маршрутизацию пакетов обеспечивает сама библиотека, поэтому не стоит с ней заморачиваться, главное правильно раздать узлам адреса в самом начале и всё.
Понять какому узлу какой адрес присвоить при конфигурации не сложно, например пакет от 015 идет не сразу на 01, а следующим образом: Узел 015 -> Узел 05 -> База 00 -> Узел 01. С таким подходом правда имеется минус - транзитные узлы не должны спать. Тоесть если у вас имеются энергозависымые arduin-ы на батарейках которые основное время находятся в спящем режиме, то их лучше всего поставить последними в дереве.
Все выглядит примерно так: