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. Библиотеки очень сложные и тяжёлые по весу, и лично у меня китайские модули с ними не заработали. Причём со средними и правыми модулями с картинки из самого начала этого урока данные библиотеки в принципе не будут работать, так как у них слишком долгая синхронизация. Я написал свою библиотеку, 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
25 Комментариев
Вам не кажется, что самый востребованный пример был бы отправки числа типа int? Как это сделать из примеров не понятно.
самый востребованный – передача структуры данных, он есть в примерах библиотеки
Подскажите, я правильно понимаю, что для организации двунаправленного обмена данными, к одному контроллеру нужно подключать и приёмник и передатчик и работать с ними отдельно?
да
а это как? Сразу два скетча?
если всё в один скетч, не работает. Проверил
Добрый день, а модули SYN115 [3.3V]: передача 14 мА, холостой 0.5 мкА
SYN480R [5V]: 4.5 мА
Можно использовать в формате 10 передатчков в разное время и один приемник? И если ли функция приема RSSI? Чтобы знать можность сигнала
Не загружается прошивка в ардуинку для отправки, кто-то сталкивался?
Доброго времени суток. У меня почему то на отрез отказывается собираться эта библиотека для Digispark и просто для Attiny85. На esp32 все работает без вопросов.
Как исправить?
Собрал приемник и передатчик. включил. Почему то тишина полнейшая. Приемник не видит отправки данных. Расстояние между устройствами 5 см. Даже не знаю откуда начать ковырять. Больше то устройств на 433 у меня нету
Код вязл из примера
Докладываю. Попробовал другую библиотеку – заработало. Использовал – RCSwitch
Почему-то у меня очень низкая дальность действия. Осциллографом проверял антенну, на выходе импульсы амплитудой примерно 0.5 вольт. Как исправить?
странно, у меня как раз не заработала RCSwitch и я написал свою библиотеку. Какая версия Gyver433 использовалась для теста и какие конкретно модели радио?
Существует ли приёмник-реле, которое можно замыкать при подаче сигнала с передатчика на ардуино?
Или для приёмника обязательно целую плату ставить?
Не в порядке финального совета, а поддержания дискуссии для. Платы, как я понял, работают, как повторители, т.е. подал на вход передатчика высокий уровень, на приёмнике также на выходе высокий появился. В принципе, если на пин приёмника повесить реле или ключ, то оно (он) будет срабатывать при появлении +5 на выходе приёмника безо всяких дополнительных контроллеров (если мощи на пине хватит обмотку реле запитать – надо характеристики смотреть и того, и другого). Более того, и на передатчик контроллер не нужен, просто 3.3 В на вход и приёмник за ним повторяет. Подводные камни из области высших материй: 1. ПВ передатчика, т.е. сколько времени может длиться постоянная передача сигнала, есть ли ограничение по длине импульса. 2. 433 МГц это очень захламлённая любительская частота, т.е. приёмник будет ловить любой подобный брелок или радиопульт, и периодически ложно срабатывать. В моём понимании как-то так…
Я нашел уже на ютубе. Приёмником можно просканировать, какой код передаёт передатчик и потом этот же сигнал повторить програмно. Жду доставку, буду проверять.
Сделал модель четыре мотора 2 класса мотор дописал включение камеры. Передавать ничего не нужно. Просто когда сигнала передатчика нет всё выключается, есть сигнал, включается, а вот не соображу как дописать переменную логическую, которая просто бы повторяла 1 и 0. Не поможете пенсионеру, не знаю куда написать..Переменная типа boolean cam;
void loop() {
static uint32_t tmr;
if (millis() – tmr > 200) {
motor.run(0);
tmr = millis();
}
if (rx.tick()) {
Data data;
if (rx.readData(data)) {
tmr = millis();
motors.run(data.speed1);
motor.run(data.speed);
на lgt8f328p работет? Что то именно с 433 модулем не пашет, хотя на UNO модуль работает, может кто подскажет какую библиотеку с ней юзать ?
Блин. Вот хоть бы кто разжевал про эти модули. Ну не работает код как хотелось бы. Все модули перепробовал и парами и в разброс. Приёмники ничего не показывают. Точки расставленные в программе показывают что после активации прерывания tick нет приема.
Он у всех медленно работает? У меня где-то 8 пакетов в секунду отправляет, не больше.
так же никакого успеха с использованием библиотеки, один мусор приходит, даже с crc раз в минуту мусор. а корректные данные вообще ни разу не получил.
а вот RadioHead что то да смогла, только в конце пару лишних байт добавляла, но жаль что работает только с miso\mosi
у меня nano на отправке и mega на приём, ну и сам модуль на 315мгц
ну и да, модули fs1000a + mx-rm-5v
можно ли зашифровать передачу
433Gyver c esp32 будет работать?
А как мне послать переменную
я отправляю а переменная читается как квадратик.