Перехват кодировки Princeton с помощью Arduino

Кодировка Princeton, используется в беспроводных пультах управления электроприборами, радиозвонках и прочих бытовых девайсах. Частота работы в нашей стране ASK 433,92 MHz, а вот за бугром еще и на частоте 315 MHz.

PrincetonDevice

Статья нацелена на начинающих фрикеров 😉

Про кодировку можно прочитать в статье «Форматы статических кодов CAME и NICE» https://phreaker.ru/447

Для того чтоб поймать и декодировать сигнал нам понадобиться :

1. Плата Arduino, я буду использовать для примера Arduino Nano.

ArduinoNano

2. Понадобиться нам приемный и передающий модули на диапазон 433,9 Мгц (Ам), использовал то, что было под рукой модуль приемника Aurel Rx rc-nbk, а передатчик XY-FST.

PrincetonRxTx

3. Само собой нам нужно настроить среду программирования – дам несколько ссылок где популярно все это написано, как установить Arduino IDE.

https://edugalaxy.intel.ru/?automodule=blog&blogid=2611&showentry=5087

http://www.pobot.ru/topic/show/4/

http://freeduino.ru/arduino/quickstart.html

4. Соеденить Arduino с модулями приемника и передатчика,приемник подсоединен выходом на Pin D2 платы ардуино, а передатчик на Pin D10.

PrincetonSchem

Вот теперь нам надо скачать библиотеку которая будет нам помогать декодировать посылки пультов RCswitch_2.51.zip. Теперь нам надо его распаковать в директорию libreries в папке где находиться Arduino Ide, пример пути вот такой c:\arduino-1.5.2\libraries\RCswitch

Настройкии подготовку закончили, пора начинать принимать посылки от пультов, для этого открываем Arduino Ide ->Файл->Создать

PrincetonArduinoIDE

Стираем весь код и вписываем вот такой:

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

void setup(){
Serial.begin(9600);
mySwitch.enableReceive(0);  // Receiver on inerrupt 0 => that is pin #2
Serial.println(«Scanning 433,9Mhz «);
}

void loop() {
if (mySwitch.available()) {
int value = mySwitch.getReceivedValue();
if (value == 0) {
Serial.print(«Unknown encoding»);
} else {
Serial.print(«Received «);
Serial.print( mySwitch.getReceivedValue() );
Serial.print(» / «);
Serial.print( mySwitch.getReceivedBitlength() );
Serial.print(«bit «);
Serial.print(«Protocol: «);
Serial.println( mySwitch.getReceivedProtocol() );
}
mySwitch.resetAvailable();
}
}

Компилируем и заливаем в плату. Потом открываем монитор ком порта или терминальную программу, кому в чем удобнее смотреть. Нажимаем кнопки пульта который есть или ждем прием от близлежащих радиозвонков или дистанционно управляемых электроприборов.

Поймал вот такой пульт:

PrincetonArduinoIDE2

Теперь берем циферки полученные от пульта (на рисунке обведены красным)

PrincetonArduinoIDE12

и вставляем во вновь созданный файл:

 

/*
Пример передачи принятой посылки на выключение и включение люстры.
*/

#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(320);
// Optional set protocol (default is 1, will work for most outlets)
// mySwitch.setProtocol(2);
// Optional set number of transmission repetitions.
// mySwitch.setRepeatTransmit(15);
}

void loop() {
/* Same switch as above, but using decimal code */
mySwitch.send(3939520, 24);//код включения лампы
delay(5000);
mySwitch.send( 3939331, 24);//код выключения лампы
delay(5000);
}

Компилируем и заливаем в платку и вуала свет включается и выключается через каждые 5 секунд(время можно регулировать). Можно добавить в код опрос кнопки при нажатии которой когда нам надо эти посылки мы выпустим.

Используемая литература:

https://phreaker.ru/447

http://www.wes.id.au/2013/07/decoding-and-sending-433mhz-rf-codes-with-arduino-and-rc-switch/

https://code.google.com/p/rc-switch/

https://www.google.ru

Обсуждение тут:  https://phreaker.ru/forum/showthread.php?t=1228

DIVER_SANT

(c) www.PhreakerClub.com