Полное руководство по модулю RF 433 МГц (передатчик/приемник) с Arduino

Эта статья представляет собой руководство по популярным модулям RF 433 МГц передатчика/приемника с Arduino. Мы объясним, как они работают, и покажем пример проекта на Arduino, который вы сможете использовать в своих собственных проектах.

Модуль RF 433 МГц передатчик/приемник с Arduino

У нас есть другие руководства по передатчику/приемнику 433 МГц, которые могут оказаться полезными:

Описание

В этом руководстве мы будем использовать передатчик FS1000A и соответствующий приемник, но приведенные инструкции также работают с другими модулями передатчика/приемника 433 МГц, которые функционируют аналогичным образом. Эти RF-модули очень популярны среди любителей Arduino и используются в самых разных приложениях, требующих беспроводного управления.

Эти модули очень дешевые, и вы можете использовать их с любым микроконтроллером, будь то Arduino, ESP8266 или ESP32.

Характеристики RF 433 МГц приемника

  • Диапазон частот: 433,92 МГц

  • Модуляция: ASK

  • Входное напряжение: 5 В

  • Цена: от $1 до $2

Характеристики RF 433 МГц передатчика

  • Диапазон частот: 433,92 МГц

  • Входное напряжение: 3-12 В

  • Цена: от $1 до $2

Где купить?

Модуль RF 433 МГц передатчик/приемник

Вы можете приобрести эти модули всего за несколько долларов. Нажмите здесь, чтобы сравнить RF 433 МГц передатчик/приемник в нескольких магазинах и найти лучшую цену.

Arduino с модулями RF 433 МГц передатчика/приемника

В этом разделе мы создадим простой пример, который отправляет сообщение с одного Arduino на другую плату Arduino с помощью частоты 433 МГц. Одна плата Arduino будет подключена к передатчику 433 МГц и будет отправлять сообщение «Hello World!». Другая плата Arduino будет подключена к приемнику 433 МГц для получения сообщений.

Необходимые компоненты

Для этого примера вам понадобятся следующие компоненты:

Вы можете воспользоваться ссылками выше или перейти непосредственно на MakerAdvisor.com/tools, чтобы найти все компоненты для ваших проектов по лучшей цене!

Установка библиотеки RadioHead

Библиотека RadioHead предоставляет простой способ работы с передатчиком/приемником 433 МГц на Arduino. Выполните следующие шаги, чтобы установить эту библиотеку в Arduino IDE:

  1. Нажмите здесь, чтобы скачать библиотеку RadioHead. В папке Downloads должен появиться файл .zip.

  2. Распакуйте библиотеку RadioHead.

  3. Переместите папку библиотеки RadioHead в папку libraries установки Arduino IDE.

  4. Перезапустите Arduino IDE.

Библиотека RadioHead великолепна и работает практически со всеми RF-модулями на рынке. Вы можете узнать больше о библиотеке RadioHead здесь.

Схема передатчика

Подключите модуль передатчика к Arduino, следуя приведенной ниже схеме.

Схема подключения RF 433 МГц передатчика к Arduino

Важно: всегда проверяйте распиновку используемого модуля передатчика. Обычно рядом с выводами есть подписи. Кроме того, вы также можете ознакомиться с техническим описанием (datasheet) вашего модуля.

Скетч передатчика

Загрузите следующий код на плату Arduino, которая будет выступать в роли передатчика. Этот код основан на одном из примеров, предоставленных библиотекой RadioHead.

#include <RH_ASK.h>
#include <SPI.h> // Not actually used but needed to compile

RH_ASK driver;

void setup()
{
    Serial.begin(9600);    // Debugging only
    if (!driver.init())
         Serial.println("init failed");
}

void loop()
{
    const char *msg = "Hello World!";
    driver.send((uint8_t *)msg, strlen(msg));
    driver.waitPacketSent();
    delay(1000);
}

Посмотреть исходный код

Как работает скетч передатчика

Сначала подключите библиотеку RadioHead ASK.

#include <RH_ASK.h>

Для работы этой библиотеки необходима библиотека SPI. Поэтому вам также нужно подключить библиотеку SPI.

#include <SPI.h>

После этого создайте объект RH_ASK с именем driver.

В функции setup() инициализируйте объект RH_ASK с помощью метода init().

Serial.begin(9600); // Debugging only
if (!driver.init())
    Serial.println("init failed");

В функции loop() мы записываем и отправляем наше сообщение. Сообщение сохраняется в переменной msg. Обратите внимание, что сообщение должно быть типа char.

const char *msg = "Hello World!";

Это сообщение содержит текст «Hello World!», но вы можете отправить что угодно, при условии, что данные будут в формате char.

Наконец, мы отправляем наше сообщение следующим образом:

driver.send((uint8_t *)msg, strlen(msg));
driver.waitPacketSent();

Сообщение отправляется каждую секунду, но вы можете настроить это время задержки.

delay(1000);

Схема приемника

Подключите модуль приемника к другому Arduino, следуя приведенной ниже схеме.

Схема подключения RF 433 МГц приемника к Arduino

Важно: всегда проверяйте распиновку используемого модуля приемника. Обычно рядом с выводами есть подписи. Кроме того, вы также можете ознакомиться с техническим описанием (datasheet) вашего модуля.

Скетч приемника

Загрузите приведенный ниже код на Arduino, подключенный к приемнику. Этот код основан на одном из примеров, предоставленных библиотекой RadioHead.

#include <RH_ASK.h>
#include <SPI.h> // Not actualy used but needed to compile

RH_ASK driver;

void setup()
{
    Serial.begin(9600);  // Debugging only
    if (!driver.init())
         Serial.println("init failed");
}

void loop()
{
    uint8_t buf[12];
    uint8_t buflen = sizeof(buf);
    if (driver.recv(buf, &buflen)) // Non-blocking
    {
      int i;
      // Message with a good checksum received, dump it.
      Serial.print("Message: ");
      Serial.println((char*)buf);
    }
}

Посмотреть исходный код

Как работает скетч приемника

Аналогично предыдущему скетчу, вы начинаете с подключения необходимых библиотек:

#include <RH_ASK.h>
#include <SPI.h>

Вы создаете объект RH_ASK с именем driver:

RH_ASK driver;

В функции setup() инициализируйте объект RH_ASK.

void setup(){
    Serial.begin(9600); // Debugging only
    if (!driver.init())
    Serial.println("init failed");
}

В функции loop() нам нужно задать буфер, размер которого соответствует размеру сообщения, которое мы будем получать. «Hello World!» содержит 12 символов. Вы должны соответствующим образом настроить размер буфера в зависимости от сообщения, которое будете получать (пробелы и знаки препинания тоже считаются).

uint8_t buf[12];
uint8_t buflen = sizeof(buf);

Затем проверьте, получено ли корректное сообщение. Если получено корректное сообщение, выведите его в монитор последовательного порта.

if (driver.recv(buf, &buflen)) {
    int i;
    // Message with a good checksum received, dump it.
    Serial.print("Message: ");
    Serial.println((char*)buf);
}

Демонстрация

В этом проекте передатчик отправляет сообщение «Hello World!» приемнику по радиоканалу. Эти сообщения отображаются в мониторе последовательного порта приемника. На следующем рисунке показано, что вы должны увидеть в мониторе последовательного порта Arduino IDE.

Монитор последовательного порта приемника RF 433 МГц Arduino

Заключение

Вам нужно иметь реалистичные ожидания при использовании этого модуля. Они работают очень хорошо, когда приемник и передатчик находятся близко друг к другу. Если вы разместите их слишком далеко друг от друга, связь будет потеряна. Дальность связи может варьироваться. Она зависит от напряжения, подаваемого на модуль передатчика, радиочастотных помех в вашей среде и от того, используете ли вы внешнюю антенну.

Если вы хотите использовать пульты дистанционного управления 433 МГц для связи с Arduino, следуйте этому руководству: :doc:`Декодирование и отправка RF-сигналов 433 МГц с Arduino </arduino/rnt/decode-and-send-433-mhz-rf-signals-with-arduino/index>`_.

Если вы начинающий пользователь Arduino, мы рекомендуем пройти наш мини-курс по Arduino. Он поможет вам быстро начать работу с этой замечательной платой (и он бесплатный!).

Вам также могут понравиться следующие ресурсы:

Вы можете найти все наши проекты и руководства по Arduino здесь.