Программа для приёмника

Для организации передачи данных будем использовать сразу две библиотеки. Первая — RF24, необходима для работы с модулем nRF24L01 по интерфейсу SPI. Вторая — SerialFlow, служит для пакетной передачи данных.

Для проверки работоспособности радиотракта будем передавать текущее значение таймера, с одного модуля на другой.

#include <SerialFlow.h>

SerialFlow rd(7,8);

const unsigned long data_to = 100; 
unsigned long tm, data_next;

void setup(void){
    rd.setPacketFormat(2, 1);
    rd.begin(0xF0F0F0F0E1LL,0xF0F0F0F0D2LL);
}

void loop(void){
    tm = millis();
    if( tm > data_next ){
        data_next = tm + data_to;
        rd.setPacketValue( tm );
        rd.sendPacket();
    }
}

Разберем программу по шагам. Первое, что мы делаем — это создаём объект класса SerialFlow:

SerialFlow rd(7,8);

7 и 8 — это номера выводов Ардуино, к которым подключены контакты радиомодуля CN и CSN.

В функции setup мы настраиваем формат передаваемых пакетов:

rd.setPacketFormat(2, 1);

Здесь первый аргумент — это размер передаваемых чисел. Помним, что число в диапазоне от 0 до 255 занимает 1 байт, а число от 0 до 65535 — 2 байта. Если мы будем в пакете передавать количество миллисекунд с начала запуска системы, то 2-х байтного числа нам хватит на 65 минут, что соответствует одному часу (вполне хватит для теста). После этого число переполнится и отсчет таймера сбросится. Второй аргумент этой функции отвечает за количество чисел в пакете. Нам будет достаточно одного числа, так сто ставим 1.

Теперь настроим передатчик. Первый аргумент — это адрес передатчика (модуль №1). Второй — адрес приёмника (модуль №2).

rd.begin(0xF0F0F0F0E1LL,0xF0F0F0F0D2LL);

Наконец, в цикле loop каждые 100 миллисекунд происходит отправка пакета. Здесь используется алгоритм выполнения по таймеру, который мы рассмотрели в одном из уроков. Переходим к приёмнику.


Изменено:

Ардуино: радиомодуль nRF24L01: 19 комментариев

  1. Здравствуйте! Возникли проблемы с библиотекой SerialFlow. Если быть точнее, я её нигде не смог найти. Тот файл, который автор статьи выложил в сеть, вызывает ошибку в Arduino IDE. Буду благодарен за разъяснение данной проблемы.

  2. Здравствуйте! В вашей статье очень не хватает картинки с подписью номеров пинов на самом радиомодуле.

  3. Здравствуйте! Лично у меня возникала следующая проблема: я подключал выводы радиомодуля так, будто бы по картинкам с подписями они находятся с обратной стороны, т.е. зеркально, из-за того, что ножки на моем радиомодуле выведены не в лицевую сторону печатной платы, а в тыльную.

    Вдруг, у кого-нибудь еще есть такая проблема? Мне кажется, она заслуживает отдельного упоминания вместе с картинкой пинов на радиомодуле.

  4. Столкнулся с такой проблемой. Все сделал, как описано на сайте, но вместо значений таймера на передатчике мне выводятся какие- то квадраты да разные буквы и символы. В чем может быть проблема?

  5. Здравствуйте. Возникает ошибка с SerialFlow rd(7,8); а именно no matching function for call to ‘SerialFlow::SerialFlow(int, int).

    • Нужно посмотреть SerialFlow.h файл, вероятно там установлен не тот тип передатчика в самом начале и соответственно используется другой конструктор объекта SerialFlow.

  6. Самое интересное, что автор пишет:
    «Главное, не путаем напряжение: стандартные для Ардуино 5 Вольт могут повредить модуль.»
    и при этом на схеме — макета заводит с ардуины +5В на плату))) От ардуины питать не рекомендуют, так как если модуль заработает, то однозначно работать будет криво! Данный модуль очень чувствителен к питанию, ардуиновского выхода по питанию ему явно не хватает.

    • Всё верно, для правильной работы лучше питать от 3.3 с внешнего стабилизатора с хорошим током. В примере же используется 5В, что, действительно, весьма рискованно, но стабильно работает некоторое время.
      Подредактируем урок, чтобы ни у кого не возникало желания рисковать здоровьем модуля:)

  7. Добрый день. А где скачать библиотеку SerialFlow уже под nrf24? Или скажите какой програмой редактировать .h -файлы…

    • Для редактирования .h файла подойдет любой текстовый редактор. Блокнот, к примеру.

  8. Добрый день.Подскажите, пожалуйста, по его документации у него 125 каналов, а объединяться могут только 6? Если стоит задача сделать 100 устройств, которые способны общаться между собой, то это нельзя реализовать с использованием NRF24L01?

    • Либо один приемник на каждые шесть передатчиков, либо сколько угодно передатчиков, но в режиме приема-передачи: делаешь запрос к конкретному передатчику, он переключается в режим передачи и отправляет данные.

Добавить комментарий

Ваш адрес email не будет опубликован.