Модуль 433МГц
Lля полноценной работы, к модулям необходимо припаять антенну. Рекомендуемая длина антенны для прередатчикиков с частотой 433 МГц равна 17 см.
Для управления передачей нам понадобится скачать и закинуть в папку с установленной IDEшкой библиотеку VirtualWire
Далее подключаем плату с передатчиком и заливаем следующий код:
Пример программного кода
#include void setup(void) { vw_set_ptt_inverted(true); // Необходимо для DR3100 vw_setup(2000); // Устанавливаем скорость передачи (бит/с) } void loop(void) { int number = 123; char symbol = 'c'; String strMsg = "z "; strMsg += symbol; strMsg += " "; strMsg += number; strMsg += " "; char msg[255]; strMsg.toCharArray(msg, 255); Serial.println(msg); vw_send((uint8_t *)msg, strlen(msg)); vw_wait_tx(); // Ждем пока передача будет окончена delay(200); }
Во первых формируем строку strMsg. Используем тип String,
Поскольку все передатчики работают в одном диапазоне частот, то каждый приемник будет принимать информацию с каждого передатчика находящегося в зоне досягаемости. Для того, чтобы отсеять лишние символы в простейшем случае можно просто предварить команды каким-то специальным символом. В нашем случае это символ 'z'.
Далее передадим символ 'c', который может означать выполнение какой-то команды и число 123, как параметр к этой команде. На практике удобно работать именно таким образом.
После этого преобразовываем тип String к стандартному массиву символов при помощи метода toCharArray и передаем его в команду vw_send.
Наш код будет отправлять строку 'z c 123'.
Перейдем к коду приемника:
Пример программного кода
#include void setup() { Serial.begin(9600); vw_set_ptt_inverted(true); // Необходимо для DR3100 vw_setup(2000); // Задаем скорость приема vw_rx_start(); // Начинаем мониторинг эфира } void loop() { uint8_t buf[VW_MAX_MESSAGE_LEN]; // Буфер для сообщения uint8_t buflen = VW_MAX_MESSAGE_LEN; // Длина буфера if (vw_get_message(buf, &buflen)) // Если принято сообщение { // Начинаем разбор int i; // Если сообщение адресовано не нам, выходим if (buf[0] != 'z') { return; } char command = buf[2]; // Команда находится на индексе 2 // Числовой параметр начинается с индекса 4 i = 4; int number = 0; // Посколько передача идет посимвольно, то нужно преобразовать набор символов в число while (buf[i] != ' ') { number *= 10; number += buf[i] - '0'; i++; } Serial.print(command); Serial.print(" "); Serial.println(number); } }