Skip to contentSkip to main navigation Skip to footer

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мгц

  • А как мне послать переменную
    я отправляю а переменная читается как квадратик.

Оставить комментарий

Ваш адрес email не будет опубликован.