Декодирование и отправка радиосигналов 433 МГц с помощью Arduino
В этом руководстве показано, как использовать Arduino для декодирования сигналов 433 МГц от RF-пультов дистанционного управления и отправки их с помощью Arduino и передатчика 433 МГц для дистанционного управления сетевыми розетками.
Зачем декодировать RF-сигналы?
Я пробовал различные способы управления сетевым напряжением, но некоторые из них требуют:
Опыта работы с переменным напряжением
Сверления отверстий в стенах/потолке/выключателях
Модификации электрического щитка
Знания электрических норм для каждой страны
Сложно найти решение, которое было бы безопасным и работало для всех. Один из самых простых и безопасных способов дистанционного управления электроприборами, подключенными к сети, – использование розеток с радиочастотным (RF) управлением. Почему? Использование розеток с дистанционным управлением имеет 5 преимуществ:
Достаточно недорогие
Легко приобрести
Работают с ESP8266 и Arduino
Безопасны в использовании
Работают в любой стране
Необходимые компоненты
Для этого урока вам понадобятся следующие компоненты:
Arduino UNO – ознакомьтесь с лучшими стартовыми наборами Arduino
Примечание: вам нужно приобрести розетки с дистанционным управлением, которые работают на радиочастоте 433 МГц. Рабочая частота должна быть указана либо на странице продукта, либо на этикетке.
Вы можете использовать ссылки выше или перейти непосредственно на MakerAdvisor.com/tools, чтобы найти все компоненты для ваших проектов по лучшей цене!
Пример
Вот как они выглядят:
Настройка RF-каналов
Я установил свой пульт дистанционного управления в положение I.
Розетки тоже должны быть в положении I. Я выбрал каналы 3 и 4 для розеток (вы можете использовать любой канал по вашему желанию).
Если вы подключите их к розетке, вы сможете управлять розетками с дистанционным управлением с помощью вашего пульта.
Установка библиотеки RC Switch
Библиотека RC Switch предоставляет простой способ использования ESP8266, ESP32 или Arduino для управления устройствами с радиочастотным дистанционным управлением. Скорее всего, она будет работать со всеми популярными недорогими розетками с дистанционным управлением.
Нажмите здесь, чтобы скачать библиотеку RC Switch. В папке Downloads должен появиться .zip-файл.
Распакуйте .zip-файл, и вы получите папку rc-switch-master.
Переименуйте папку из rc-switch-master в rc_switch.
Переместите папку rc_switch в папку библиотек вашей Arduino IDE.
Затем перезапустите 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.
Подключив плату Arduino к компьютеру, выполните следующие действия:
Перейдите на вкладку Tools
Выберите плату Arduino UNO
Выберите COM-порт
Нажмите кнопку Upload
Декодер – Схема подключения
После загрузки скетча подключите приемник 433 МГц к цифровому пину 2 платы Arduino UNO:
Декодирование 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 соберите следующую схему:
Обе ваши розетки должны непрерывно включаться и выключаться.
Заключение
Надеюсь, это руководство оказалось для вас полезным. Если вам понравилась эта статья, возможно, вам понравятся и следующие, поэтому обязательно подпишитесь на блог RNT.
Вы можете использовать концепции, изученные в этом руководстве, с :doc:`ESP8266 </esp32/rnt/getting-started-with-esp8266-wifi-transceiver-review/index>`_ или :doc:`ESP32 </esp32/rnt/getting-started-with-esp32/index>`_.
Спасибо за чтение.