В следующем эксперименте мы отправим в радиоэфир традиционное «Hello world!».
//=================================================================
//Подключаем библиотеки
#include <SPI.h> // управление взаимодействия модуля с Ардуино по каналу SPI,
#include <nRF24L01.h>// управление самим модулем
#include <RF24.h>
//Создаём объект «Радио» типа RF24
RF24 radio(9, 8); // CE на 9 контакте, CSN на 8 контакте
//назначаем адрес - имя трубы по которой будут общаться два модуля
//(имя описывается массивом из 5 символов: 00001, node1, myFM1 и т.д.)
//имя трубы прописывается как идентификатор модуля, общающиеся модули должны //иметь один и тот же идентификатор
const byte address[6] = "00001";
void setup()
{
radio.begin(); //начинаем работу объекта Радио
//открываем трубу для передачи данных с именем (address)
radio.openWritingPipe(address);
//прекращаем слушать эфир – модуль переходит в режим передатчика
radio.stopListening();
}
void loop()
{
//Создаём сообщение приёмнику в виде массива символов
const char text[] = "Hello World";
//переписываем в трубу по-байтно начиная с байта (&text) в котором хранится
|
|
//сообщение в трубу,
// количество передаваемых байт равно размеру сообщения (sizeof())
radio.write(&text, sizeof(text));
delay(1000); // задержка между состояниями системы
}
//==========================================================================
Метод Write позволяет отправлять сообщения размером до 32 байт. Метод возращает Истину, если было получено уведомление о получении сообщения приёмником, и Ложь если, сообщение были потеряно.
ВАЖНО! Пока не будет получено уведомление о получении сообщения приёмником или пока не кончатся все попытки заново отправить сообщение КОД ДАЛЬШЕ НЕ ВЫПОЛНЯЕТСЯ.
Скетч для управления приёмником
//=================================================================
//Подключаем библиотеки
#include <SPI.h> // управление взаимодействия модуля с Ардуино по каналу SPI,
#include <nRF24L01.h>// управление самим модулем
#include <RF24.h>
//Создаём объект «Радио» типа RF24
RF24 radio(9, 8); // CE на 9 контакте, CSN на 8 контакте
//назначаем адрес - имя трубы по которой будут общаться два модуля
//(имя описывается массивом из 5 символов: 00001, node1, myFM1 и т.д.)
//имя трубы прописывается как идентификатор модуля, общающиеся модули должны //иметь один и тот же идентификатор
const byte address[6] = "00001";
void setup()
{
Serial.begin(9600); // открываем соединение с последовательным портом
//для передачи данных
while (!Serial); //ожидаем подключения последовательного порта. Нужно
//только для Leonardo
radio.begin(); //начинаем работу объекта Радио
//открываем трубу для приёма данных с именем (address)
//первый аргумент – номер трубы, второй её адрес. (модуль может общаться по
|
|
//шести трубам (каждая со своим адресом) с шестью различными модулями,
//таким образом можно построить сеть из модулей.
radio.openReadingPipe(0, address);
//начинаем слушать радиоэфир – переключаем модуль в режим приёмника
radio.startListening();
}
void loop()
{
// Если данные в буфере объекта Радио есть, то (метод возвращает Истину,
//если данные есть и Ложь, если их нет)
if (radio.available())
{
//Создаём массив из 32 символов и инициализируем его нулями
char text[32] = {0};
//читаем данные из буфера объекта Радио по-байтно начиная с байта (&text)
// в котором хранится сообщение, количество передаваемых байт равно
// размеру сообщения (sizeof())
radio.read(&text, sizeof(text));
// Печатаем сновой строки в монитор порта принятое сообщение
Serial.println(text);
}
}
//===========================================================================
В результате выполнения программы в мониторе порта каждую секунду должны выводиться сообщения «Hello World!».