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

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

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

Зачем декодировать RF-сигналы?

Я пробовал различные способы управления сетевым напряжением, но некоторые из них требуют:

  • Опыта работы с переменным напряжением

  • Сверления отверстий в стенах/потолке/выключателях

  • Модификации электрического щитка

  • Знания электрических норм для каждой страны

Сложно найти решение, которое было бы безопасным и работало для всех. Один из самых простых и безопасных способов дистанционного управления электроприборами, подключенными к сети, – использование розеток с радиочастотным (RF) управлением. Почему? Использование розеток с дистанционным управлением имеет 5 преимуществ:

  1. Достаточно недорогие

  2. Легко приобрести

  3. Работают с ESP8266 и Arduino

  4. Безопасны в использовании

  5. Работают в любой стране

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

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

Примечание: вам нужно приобрести розетки с дистанционным управлением, которые работают на радиочастоте 433 МГц. Рабочая частота должна быть указана либо на странице продукта, либо на этикетке.

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

Пример

Вот как они выглядят:

Розетки с дистанционным RF-управлением 433 МГц

Настройка RF-каналов

Я установил свой пульт дистанционного управления в положение I.

Пульт дистанционного управления RF-розетками

Розетки тоже должны быть в положении I. Я выбрал каналы 3 и 4 для розеток (вы можете использовать любой канал по вашему желанию).

Настройка каналов RF-розеток с дистанционным управлением

Если вы подключите их к розетке, вы сможете управлять розетками с дистанционным управлением с помощью вашего пульта.

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

Библиотека RC Switch предоставляет простой способ использования ESP8266, ESP32 или Arduino для управления устройствами с радиочастотным дистанционным управлением. Скорее всего, она будет работать со всеми популярными недорогими розетками с дистанционным управлением.

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

  2. Распакуйте .zip-файл, и вы получите папку rc-switch-master.

  3. Переименуйте папку из rc-switch-master в rc_switch.

  4. Переместите папку rc_switch в папку библиотек вашей Arduino IDE.

  5. Затем перезапустите Arduino IDE.

Открытие скетча декодера

Вам нужно декодировать сигналы, которые отправляет ваш пульт дистанционного управления, чтобы Arduino или ESP8266 могли воспроизвести эти сигналы и в конечном итоге управлять розетками.

Библиотека поставляется с несколькими примерами скетчей. В Arduino IDE вам нужно перейти в File > Examples > RC_Switch > ReceiveDemo_Advanced. Откроется следующий скетч:

/*
  Example for receiving

  https://github.com/sui77/rc-switch/

  If you want to visualize a telegram copy the raw data and
  paste it into http://test.sui.li/oszi/
*/

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

void setup() {
  Serial.begin(9600);
  mySwitch.enableReceive(0);  // Receiver on interrupt 0 => that is pin #2
}

void loop() {
  if (mySwitch.available()) {
    output(mySwitch.getReceivedValue(), mySwitch.getReceivedBitlength(), mySwitch.getReceivedDelay(), mySwitch.getReceivedRawdata(),mySwitch.getReceivedProtocol());
    mySwitch.resetAvailable();
  }
}

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

Вы должны открыть пример через File > Examples > RC_Switch > ReceiveDemo_Advanced, чтобы автоматически загрузился также файл output.

Скетч ReceiveDemo Advanced библиотеки RC Switch в Arduino IDE

Подключив плату Arduino к компьютеру, выполните следующие действия:

  1. Перейдите на вкладку Tools

  2. Выберите плату Arduino UNO

  3. Выберите COM-порт

  4. Нажмите кнопку Upload

Декодер – Схема подключения

После загрузки скетча подключите приемник 433 МГц к цифровому пину 2 платы Arduino UNO:

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

Декодирование RF-сигналов (кодов)

Откройте монитор последовательного порта Arduino IDE и начните нажимать кнопки. Как показано в видеодемонстрации ниже:

После нажатия каждой кнопки по одному разу вы увидите двоичный код для каждой кнопки (он выделен красным):

Двоичные коды RF-сигналов в мониторе последовательного порта Arduino IDE

Сохраните двоичные коды для каждого нажатия кнопки (вы также можете использовать десятичные или Tri-State коды):

  • Кнопка 3 ВКЛ = (24 бита) Двоичный: 000101010101000101010101

  • Кнопка 3 ВЫКЛ = (24 бита) Двоичный: 000101010101000101010100

  • Кнопка 4 ВКЛ = (24 бита) Двоичный: 000101010101010001010101

  • Кнопка 4 ВЫКЛ = (24 бита) Двоичный: 000101010101010001010100

Сохраните длину импульса: 416 микросекунд и протокол: 1.

Отправка RF-сигналов (кодов)

Вам нужно настроить следующий скетч, указав ваши двоичные коды, длину импульса и протокол:

/*
  Based on the SendDemo example from the RC Switch library
  https://github.com/sui77/rc-switch/
*/

#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();

void setup() {
  Serial.begin(9600);

  // Transmitter is connected to Arduino Pin #10
  mySwitch.enableTransmit(10);

  // Optional set pulse length.
  mySwitch.setPulseLength(REPLACE_WITH_YOUR_PULSE_LENGTH);

  // Optional set protocol (default is 1, will work for most outlets)
  mySwitch.setProtocol(REPLACE_WITH_YOUR_PROTOCOL);

  // Optional set number of transmission repetitions.
  // mySwitch.setRepeatTransmit(15);
}

void loop() {
  // Binary code - button 3
  mySwitch.send("000101010101000101010101");
  delay(1000);
  mySwitch.send("000101010101000101010100");
  delay(1000);

  // Binary code - button 4
  mySwitch.send("000101010101010001010101");
  delay(1000);
  mySwitch.send("000101010101010001010100");
  delay(1000);
}

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

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

// Optional set pulse length.
mySwitch.setPulseLength(416);

// Optional set protocol (default is 1, will work for most outlets)
mySwitch.setProtocol(1);

Вот пример отправки двоичного кода (вы должны заменить его своими двоичными кодами):

mySwitch.send("000101010101000101010101");

Схема подключения передатчика

После загрузки скетча на плату Arduino соберите следующую схему:

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

Обе ваши розетки должны непрерывно включаться и выключаться.

Заключение

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

Вы можете использовать концепции, изученные в этом руководстве, с :doc:`ESP8266 </esp32/rnt/getting-started-with-esp8266-wifi-transceiver-review/index>`_ или :doc:`ESP32 </esp32/rnt/getting-started-with-esp32/index>`_.

Спасибо за чтение.