Najpierw uwaga.
Mój router 433 MHz będzie łączył urządzenia pracujące ze stałym kodem. To jest takie, które w czasie normalnej pracy za każdym razem wysyłają taką samą sekwencję. Oczywiście kod ten można zmienić na etapie konfiguracji (ręcznie lub automatycznie) ale generalnie kod jest niezmienny. Co to oznacza dla użytkownika? Taki kod można odczytać i nim się posłużyć. I o ile stosowanie tego typu sterowania do zapalania świateł, załączania grzania czy sterowania podlewaniem ogrodu jest stosunkowo bezpieczne to już bramy garażu czy drzwi wejściowych takim systemem bym nie otwierał. Stosowanie urządzeń ze stałym kodem w obrębie domu w zasadzie ogranicza propagację sygnałów sterujących do obszaru naszej działki. Ale w mieszkaniu jest on już odbierany u sąsiadów. Decyzję czy stosować urządzenia bezprzewodowe ze stałym kodem należy zawsze przeanalizować pod kątem naszego bezpieczeństwa. Co by było gdyby.......... Gdy zależy nam na poufności dostępu należy stosować urządzenia z kodem zmiennym (kroczącym) - i takie są w większości układów sterowania bram garażowych czy pilotów samochodowych.
Część I - Układ testowy
Zanim zacznę cokolwiek rzeźbić w oprogramowaniu warto poskładać jakiś próbny układ. Transmisja radiowa to dosyć kapryśne medium i warto od samego początku testować poszczególne funkcje na rzeczywistym układzie. Szczególnie, że nie mam jeszcze większych doświadczeń ze współpracy modułów radiowych CY z ESP8266. Również standardowe biblioteki Arduino do obsługi protokołów w paśmie 433MHz mogą zachowywać się różnie na tym mikrokontolerze.
Układ jest banalny - poskładane na szybko ESP w wersji D1 MINI i dwa moduły CY - nadawczy CYT1 i odbiorczy CY-07. Nie daję osobnego zasilania. Wszystko ma czerpać energię z USB. Oba moduły radiowe jadą na 5 V choć zasilenie nadajnika z 12 V znakomicie powiększyłoby zasięg. Dodałem jednak oryginalną antenkę z bezprzewodowej czujki PIR i to powinno znacząco poprawić osiągi. Zasilenie ESP8266 napięciem 3V3 rozwiązano skutecznie na module D1 MINI. Pytanie tylko czy USB pociągnie bez czkawki taki zestaw. ESP jest bardzo wrażliwy na wahania napięcia zasilania i lubi się resetować.
Całość zmieściła się na niewielkiej płytce prototypowej Zasilanie i programowanie dokonuje się jednym kablem. D1 MINI to naprawdę super moduł do szybkiego wdrażania projektów na ten chiński mikroprocesor.
Napięcie zasilania sprawdzone - o dziwo trzyma się nawet w okolicach 5 V. Testowy program BLINK mrugający ledem na modle D1 działa więc komunikacja jest OK. Można zaczynać.
CZĘŚĆ II - Moduł radiowy - odbiornik
Zaczniemy od odbiornika. Standardowo używam biblioteki RCSwitch.h. Jest uniwersalna i daje sobie radę z większością kodów stałych. Pozwala ona na odbiór i wysyłanie sygnałów obsługiwanych przez następujące chipsety
- SC5262 / SC5272
- HX2262 / HX2272
- PT2262 / PT2272
- EV1527 / RT1527 / FP1527 / HS1527
- Intertechno outlets
- HT6P20X
Moduły radiowe i biblioteka RCswitch działa świetnie z modułami Arduino. Mam nadzieję, że z ESP będzie podobnie. Podstawowy kod do odbioru danych to lekko zmodyfikowany przykład wprost z biblioteki Arduino
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
void no433setup()
{ mySwitch.enableReceive(12); //
mySwitch.enableTransmit(13); //
}
void no433akcja()
{ // procedura obsługi kodu odebranego z 433MHz
if (mySwitch.available()) {
Serial.print("Received ");
Serial.print( mySwitch.getReceivedValue() );
Serial.print(" / ");
Serial.print( mySwitch.getReceivedBitlength() );
Serial.print("bit ");
Serial.print("Protocol: ");
Serial.print( mySwitch.getReceivedProtocol() );
Serial.print(" / PulseLength: ");
Serial.println(mySwitch.getReceivedDelay() );
mySwitch.resetAvailable();
}
}
Moduły wiszą na porcie GPIO12 i 13.
A to wyniki rzeczywistych odczytów kilku przykładowych nadajników 433MHz
Pilot ELROReceived 5522769 / 24bit Protocol: 1 / PulseLength: 324
Received 5522769 / 24bit Protocol: 1 / PulseLength: 325
ten sam kod z innego pilota ELRO
Received 5522769 / 24bit Protocol: 1 / PulseLength: 338
Received 5522769 / 24bit Protocol: 1 / PulseLength: 339
Termostat DIGITIMEReceived 5592332 / 24bit Protocol: 1 / PulseLength: 212
Received 5592332 / 24bit Protocol: 1 / PulseLength: 211
Pilot od termostatu DIGITIMEReceived 5592324 / 24bit Protocol: 1 / PulseLength: 190
Received 5592324 / 24bit Protocol: 1 / PulseLength: 192
Czujka PIR jednego producentaReceived 14013756 / 24bit Protocol: 1 / PulseLength: 409
Received 14013756 / 24bit Protocol: 1 / PulseLength: 408
Czujka PIR drugiego producentaReceived 5591381 / 24bit Protocol: 1 / PulseLength: 456
Received 5591381 / 24bit Protocol: 1 / PulseLength: 455
Czujka PIR trzeciego producenta
Received 69653 / 24bit Protocol: 1 / PulseLength: 319
Received 69653 / 24bit Protocol: 1 / PulseLength: 319
Czujnik kontaktronowyReceived 3150041 / 24bit Protocol: 1 / PulseLength: 405
Received 3150041 / 24bit Protocol: 1 / PulseLength: 404
Czujnik kontaktronowy innego producentaReceived 5784067 / 24bit Protocol: 1 / PulseLength: 571
Received 5784067 / 24bit Protocol: 1 / PulseLength: 571
Nie wszystkie urządzenia da się odczytać tą biblioteką. Nie udało się zdekodować sygnału np. z dzwonka bezprzewodowego czy stacji pogodowej. Nad tymi elementami trzeba będzie jeszcze trochę popracować.
CZĘŚĆ III - Modułu radiowy - nadajnik
Sterowanie konkretnym urządzeniem trzeba poprzedzić wstępną konfiguracją parametrów transmisji. Najlepiej skupić to w jednej funkcji. I tak do załączenia gniazda ELRO przyda się taka procedura
void sendkodpilot (unsigned long codeA)
{
mySwitch.setPulseLength(320);
mySwitch.setProtocol(1);
mySwitch.setRepeatTransmit(4);
mySwitch.send(codeA, 24);
}
Wywołanie procedury sendkodpilot (kod) gdzie kod = kod dla danego gniazda niechybnie spowoduje jego załączenie lub wyłączenie. Dla innych urządzeń wykonawczych parametry procedury "send" należy odpowiednio dopasować
I to wszystko!!!
Nie ma tak łatwo
Niestety co pewien czas wyskakuje dobrze znany w ESP8266 komunikat o resecie modułu.
--------------------------
Exception (0):
epc1=0x40204d78 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000
ctx: sys
sp: 3ffffc30 end: 3fffffb0 offset: 01a0
>>>stack>>>
3ffffdd0: 40106bb4 40101591 00000002 4000050c
3ffffde0: ffffffff 00000020 00000001 00000000
............................................................................
3fffff90: 3ffee510 00000000 40000f65 3fffdab0
3fffffa0: 40000f49 00019b0b 3fffdab0 40000f49
<<<stack<<<
ets Jan 8 2013,rst cause:2, boot mode:(3,6)
load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
v3de0c112
~ld
------------------------
Przyczyn takiego stanu może być wiele. Od nieaktualnego oprogramowania procesora do zakłóceń na zasilaniu lub portach wejściowych. Trzeba więc znowu wrócić do hardwaru . Trudno - czeka mnie chwilowa przerwa w programowaniu routera 433 MHz
Ale jak mniemam ciąg dalszy nastąpi
Wcześniejsze odcinki serialu
http://100-x-arduino.blogspot.com/2017/11/router-433-mhz-aczymy-rozne-systemy.html
Ale jak mniemam ciąg dalszy nastąpi
Wcześniejsze odcinki serialu
http://100-x-arduino.blogspot.com/2017/11/router-433-mhz-aczymy-rozne-systemy.html
103
Brak komentarzy:
Prześlij komentarz