Arduino и радио модули 433 МГц
Описание
Радио модули с частотой 433 MHz – самый простой способ связать две Ардуины по беспроводному каналу. Чем они лучше радио 2.4 GHz, например nRF24?
- Неприхотливы к питанию
- Потребляют небольшой ток
- Занимают один пин МК
- В два раза дешевле
- Выше дальность связи при той же мощности
- Более высокая проникающая способность
Также на этой частоте работают пульты управления (брелоки) радио-реле и шлагбаумов, что позволяет перехватывать их команды и подменять при желании.
Модулей данного типа на китайских площадках существует несколько, продаются они парой (передатчик TX и приёмник RX), либо по отдельности.
Наборы 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 см (четверть волны) в виде одножильного провода, при желании можно свернуть в спираль:
Подключение
Модули подключаются к питанию и data – на любой цифровой пин. “Зелёные” модули к Arduino подключаются напрямую, а синий передатчик – через делитель напряжения трёх 10к резисторах (есть в наборе). Для подключения к esp8266 делитель не нужен, там и так 3.3V на пине.
На всех схемах передатчик слева, приёмник справа.
Библиотеки
Для данных модулей можно использовать библиотеки:
VirtualWire– устаревшая библиотека для передачи данных при помощи радио модулей- RadioHead (если офф. сайт не работает – открываем через WebArchive, вот прямая ссылка на загрузку v1.121) – “обновлённая” VirtualWire, поддерживает некоторые протоколы пультов и может передавать пользовательские данные
- RCSwitch – библиотека поддерживает работу со стандартными пультами от шлагбаумов
- Gyver433 – моя библиотека для удобной передачи любых данных по своему протоколу
Предлагается использовать Gyver433 как наиболее простую для понимания, также она работает даже с “плохими” китайскими модулями. Библиотека идёт в архиве к набору GyverKIT, а свежую версию всегда можно установить/обновить из встроенного менеджера библиотек Arduino по названию Gyver433. Краткая документация находится по ссылке выше, базовые примеры есть в самой библиотеке.
Примеры
Рассмотрим тестовый пример, который отправляет строку Hello from #<счётчик>:
Отправка
#include <Gyver433.h> Gyver433_TX<2> tx; // указали пин void setup() { } char data[] = "Hello from #xx"; // строка для отправки byte count = 0; // счётчик для отправки void loop() { // добавляем счётчик в строку data[12] = (count / 10) + '0'; data[13] = (count % 10) + '0'; if (++count >= 100) count = 0; tx.sendData(data); delay(100); }
Приём
#include <Gyver433.h> Gyver433_RX<2, 20> rx; // указали пин и размер буфера void setup() { Serial.begin(9600); attachInterrupt(0, isr, CHANGE); // прерывание пина радио по CHANGE } // спец. тикер вызывается в прерывании void isr() { rx.tickISR(); } void loop() { if (rx.gotData()) { // если успешно принято больше 0 Serial.write(rx.buffer, rx.size); // выводим Serial.println(); } }
Библиотека позволяет отправлять данные любого типа (массив, структура) любой длины, что охватывает все возможные сценарии работы с радио.
Домашнее задание
- Изучить остальные примеры к библиотеке Gyver433