Современная электроника №2/2020
ИНЖЕНЕРНЫЕ РЕШЕНИЯ 48 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 2 2020 ключения модуля nRF24L01 к контрол- леру Arduino можно воспользоваться адаптером, в составе которого имеет- ся стабилизатор напряжения на 3,3 В. Сам адаптер при этом подключается к источнику питания постоянного тока с напряжением 5 В. В таблице 3 приве- дено соответствие цепей при подклю- чении модуля к контроллеру Arduino. При питании радиомодуля от платы контроллера Arduino могут возникнуть проблемы, связанные с недостаточной мощностью источника питания, кото- рые приводят к потере связи и неста- бильной работе. Подобные трудности появляются, когда используются платы Arduino, в которых не хватает мощно- сти источника питания. Для решения этой проблемы лучше всего использо- вать отдельный источник питания 3,3 В для радиомодуля. П РОГРАММИРОВАНИЕ МОДУЛЯ Для создания программного кода в среде разработки ARDUINO IDE доста- точно будет дополнить её основной библиотекой RF24 [2], которая содер- жит все необходимые функции для работы с модулем на языке высокого уровня. В листинге 1 приведён пример про- грамм для модуля, ежесекундно переда- ющего данные с аналогового датчика, а в листинге 2 – для модуля, принима- ющего эти данные с трансляцией их в последовательный порт UART. Обе про- граммы снабжены подробными ком- ментариями, поясняющими назначе- ние всех операторов и функций. Во время записи программы в кон- троллер Arduino необходимо отклю- чить от него радиомодуль, чтобы он не мешал загрузке программы. Перед первой инициализацией модуля нужно делать в программе паузу на 2 с после подачи напряжения питания. При необходимости в программе можно изменять порты для подклю- чения модуля nRF24L01, номер кана- ла связи, скорость, мощность переда- чи и другие параметры. Вместо переда- чи данных с аналогового порта можно передавать любые другие данные, в зависимости от решаемой задачи. В данной программе каждому модулю программно задаётся роль передатчи- ка или приёмника, но в ходе выполне- ния программы эту роль можно менять. Для добавления в созданную сеть из двух модулей дополнительного моду- ля nRF24L01 можно использовать для него программу из листинга 1, изменив Таблица 3. Соответствие цепей модуля nRF24L01 Модуль nRF24L01 Контроллер Arduino Назначение цепей CSN 10 (задаётся программно) Выбор микросхемы модуля SСK 13 (SCK) Сигнал тактирования MOSI 11 (MOSI) Входной сигнал данных MISO 12 (MISO) Выходной сигнал данных CE 9 (задаётся программно) Управление режимом: 0 – приём, 1 – передача IRQ Не используется Прерывание Листинг 1 // Программа для ежесекундной передачи данных с аналогового датчика // по радиоканалу #include <SPI.h> // Подключить библиотеку интерфейса SPI #include <nRF24L01.h> // Подключить файл настроек библиотеки RF24 #include <RF24.h> // Подключить библиотеку функций для модуля nRF24L01 const uint64_t pipe = 0x123456789aLL; // Назначить идентификатор // канала связи int data; // Создать переменную для данных RF24 radio(9,10); // Создать класс radio с выводами управления CE и //CSN модулем // Настройки void setup() { pinMode(A1,INPUT); // Задать порт для чтения аналогового датчика delay(2000); // Задержка на 2 с radio.begin(); // Включить радиомодуль radio.setChannel(1); // Выбрать канал 1 radio.setDataRate(RF24_1MBPS); // Задать скорость канала связи 1 Мбод radio.setPALevel(RF24_PA_HIGH); // Задать мощность передатчика модуля radio.openWritingPipe(pipe); // Открыть канал связи для передачи } // Главный цикл программы void loop() { data = analogRead(A1); // Читать данные с датчика radio.write(&data, sizeof(data)); // Передать данные delay(1000); // Задержка на 1 с } Листинг 2 // Программа для приёма данных и трансляции их в последовательный // порт UART #include <SPI.h> // Подключить библиотеку интерфейса SPI #include <nRF24L01.h> // Подключить файл настроек библиотеки RF24 #include <RF24.h> // Подключить библиотеку функций для модуля nRF24L01 const uint64_t pipe1 = 0x123456789aLL; // Назначить идентификатор //канала связи int data; // Создать переменную для данных uint8_t npipe; // Создать переменную для номера канала связи RF24 radio(9,10); // Создать класс radio с выводами управления CE и CSN модулем // Настройки void setup() { Serial.begin(9600); // Задать скорость для последовательного порта UART delay(2000); // Задержка на 2 с radio.begin(); // Включить радиомодуль radio.setChannel(1); // Выбрать канал 1 radio.setDataRate(RF24_1MBPS); // Задать скорость канала связи 1 Мбод radio.setPALevel(RF24_PA_HIGH); // Задать мощность передатчика модуля radio.openReadingPipe(1, pipe1); // Открыть канал связи для приёма radio.stopListening(); // Начать приём } // Главный цикл программы void loop() { if(radio.available(&npipe)) // Проверить буфер обмена { radio.read(&data, sizeof(data)); // Читать данные if(npipe==1) Serial.println(data); // Транслировать данные канала 1 //в порт UART } }
RkJQdWJsaXNoZXIy MTQ4NjUy