Радио модули с частотой 433 MHz – самый простой способ связать две Ардуины по беспроводному каналу для передачи данных, например для управления роботом или отправки показаний температуры с уалённого датчика. Связь работает на той же частоте, что и пульты от шлагбаумов и некоторой другой техники, т.е. при помощи этих радиомодулей можно как перехватывать команды с пультов, так и отправлять их на приёмник! Модулей данного типа на китайских площадках существует несколько, продаются они парой (передатчик TX и приёмник RX), либо по отдельности.
В наборе GyverKIT | START | IOT | EXTRA | |
---|---|---|---|---|
![]() |
Передатчик 433 МГц | ✔ | ||
![]() |
Приёмник 433 МГц | ✔ |
Чем они лучше радио 2.4 GHz, например nRF24?
- Неприхотливы к питанию
- Потребляют небольшой ток
- Занимают один пин МК
- В два раза дешевле
- Выше дальность связи при той же мощности
- Более высокая проникающая способность
Наборы GyverKIT до 2 партии комплектовались парой модулей как по центру на картинке выше (модель SYNxxx), со второй партии в наборах идут модули FS1000A и MX-RM-5V (слева на картинке) как более удобные для подключения и более стабильные в работе.
Ток потребления модулей:
- FS1000A [5V]: передача 12 мА, холостой 10 мкА
- MX-RM-5V [5V]: 3.7 мА
- SYN115 [3.3V]: передача 14 мА, холостой 0.5 мкА
- SYN480R [5V]: 4.5 мА
Антенна #
Для лучшего качества связи к модулям в пин ANT нужно припаять антенну длиной 17.3 см (четверть волны) в виде одножильного провода, при желании можно свернуть в спираль:
Подключение к Arduino #
Модули подключаются к питанию и data – на любой цифровой пин. "Зелёные" модули к Arduino подключаются напрямую, а синий передатчик – через делитель напряжения трёх 10к резисторах (есть в наборе). Для подключения к esp8266 делитель не нужен, там и так 3.3V на пине.
На всех схемах передатчик слева, приёмник справа.
Библиотеки #
Для данных модулей можно использовать библиотеки:
- VirtualWire – устаревшая библиотека для передачи данных при помощи радио модулей
- RadioHead (если офф. сайт не работает – открываем через WebArchive, вот прямая ссылка на загрузку v1.121) – "обновлённая" VirtualWire, поддерживает некоторые протоколы пультов и может передавать пользовательские данные
- RCSwitch – библиотека поддерживает работу со стандартными пультами от шлагбаумов
- Gyver433 – моя библиотека для передачи любых данных по радио
- GyverWire - более новая моя библиотека, удобнее в использовании и работает лучше чем Gyver433
В примерах на этом сайте будем использовать GyverWire, её можно установить/обновить из встроенного менеджера библиотек Arduino по названию GyverWire. Краткая документация находится по ссылке выше, базовые примеры есть в самой библиотеке.
GyverWire #
В следующих примерах модули подключены как на схеме выше. Приёмник подключается на пин с прерыванием по CHANGE
, в обработчике прерывания нужно вызывать rx.pinChange()
.
Передача и приём строки
// отправка
#include <Arduino.h>
#include <GW_TX.h>
void setup() {
}
GW_TX_RF<2> tx; // радио 433
void loop() {
String s;
s += "hello! ";
static uint8_t i;
s += ++i;
noInterrupts();
tx.sendPacket(s.c_str(), s.length());
interrupts();
delay(1000);
}
// приём
#include <Arduino.h>
#include <GW_RX.h>
GW_RX<2> rx;
void setup() {
Serial.begin(115200);
attachInterrupt(0, []() { rx.pinChange(); }, CHANGE);
rx.onPacket([](uint8_t type, void* data, size_t len) {
Serial.write((uint8_t*)data, len);
Serial.println();
});
}
void loop() {
rx.tick();
}
Передача и приём структуры
// отправка
#include <Arduino.h>
#include <GW_TX.h>
struct Data {
int i;
float f;
};
void setup() {
}
GW_TX_RF<2> tx; // радио 433
void loop() {
static int i;
Data data{i++, 3.14};
noInterrupts();
tx.sendPacket(data);
interrupts();
delay(1000);
}
// приём
#include <Arduino.h>
#include <GW_RX.h>
struct Data {
int i;
float f;
};
GW_RX<2> rx;
void setup() {
Serial.begin(115200);
attachInterrupt(0, []() { rx.pinChange(); }, CHANGE);
rx.onPacket([](uint8_t type, void* data, size_t len) {
if (sizeof(Data) != len) return; // проверка корректности длины
Data& d = *((Data*)data);
Serial.print(d.i);
Serial.print(',');
Serial.println(d.f);
// или
// Serial.println(static_cast<Data*>(data)->f);
});
}
void loop() {
rx.tick();
}
Полезные страницы #
- Набор GyverKIT – наш большой стартовый набор Arduino, продаётся в России
- Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress
- Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту ([email protected])
- Поддержать автора за работу над уроками