Urządzenie ESP8266 jako pilot zdalnego załączania.
Omówię tu budowę programu głównego.
Zbudowane urządzenie umożliwi Ci zdalne załączanie i wyłączanie różnych urządzeń np. światło. Do budowy potrzebne będą;
- Wemos D1 mini , lub inne urządzenie ESP8266.
- Nadajnik radiowy na 433MHz.
- Odbiornik radiowy na tę samą częstotliwość.
Odbiornik będzie wykorzystywany najmniej, bo tylko do sczytywania kodów załączenia z pilota zdalnego sterowania. Po zapamiętaniu kodów odbiornik możesz odłączyć na stałe. Nadajnik będzie nadawał kody załączania jak i kody wyłączania. Zasilanie nadajnika podłącz do napięcia 5V, a odbiornika do D0 napięcie 3.3V. Piny D1, D2 i D3 pozostaną wolne, bo nie podłączasz przekaźników zwykłych. Pin D5 podłącz do pinu DATA odbiornika. Pin D8 podłącz do pinu DATA nadajnika. Pamiętaj o podłączeniu mas G i GND. Urządzenie można umieścić w dowolnym miejscu, ale w zasięgu sieci WiFi. Program umożliwia robienie update poprzez sieć WiFi jak już opisałem we wpisie ESP8266 Update przez www. Wbudowaną diodę LED możesz wykorzystać do sygnalizacji połączenia z WiFi. Świeci gdy brak połączenia.
No to zaczynaj. Otwórz Arduino IDE, wciśnij Ctrl-N, następnie Ctrl-S i zapisz w katalogu RFSwitch3. Teraz możesz bezpiecznie wpisywać program główny. Na początku pliku wpisz potrzebne biblioteki.
#include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #include <ESP8266HTTPUpdateServer.h> #include "Relay.h" #include <EEPROM.h> #include "RCSwitch.h" #include "RFSwitch.h" #include "RFSwitch3.h"
Teraz zdefiniuj stałe potrzebne do kompilowania warunkowego. IP_STATIC umożliwi Ci wstawianie stałego adresu IP. Gdy będziesz chciał aby IP przydzielał DHCP , to na początku linijki wstaw //. DEBUG umożliwia wypisywanie tekstu na ekranie monitora szeregowego w Arduino IDE np. IP. Opcje tą można wyłączyć poprzez wpisanie na początku //.
//#define IP_STATIC #define DEBUG
Utwórz obiekty dla przekaźników.
extern RCSwitch rcread; //obiekt zadeklarowany w innym pliku Relay r1; //przekaźnik zwykły nr 1 Relay r2; //przekaźnik zwykły nr 2 Relay r3; //przekaźnik zwykły nr 3 RFSwitch RFrelay1; //przekaźnik radiowy nr 1 RFSwitch RFrelay2; //przekaźnik radiowy nr 2 RFSwitch RFrelay3; //przekaźnik radiowy nr 3
Wprowadź dane swojej sieci WiFi.
const char* ssid = "nazwa_twojej_sieci"; // SSID sieci WiFi const char* password = "haslo_twojes_sieci"; // hasło do WiFi
Wpisz dane dla stałego IP. Druga część dla IP_STATC w funkcji setup().
#ifdef IP_STATIC IPAddress IPadr(10,110,0,13); //stały IP IPAddress netmask(255,255,0,0); IPAddress gateway(10,110,0,1); #endif
Wpisz, że obiekt server i funkcja setservers() znajdują się w innym pliku..
extern ESP8266WebServer server; extern void setservers();
Zadeklaruj zmienne potrzebne dla funkcji zapisywania i czytania pamięci EEPROM.
//zmienne pomocnicze do współpracy z EEPROM uint8_t EcodOn0[4]; //kod tymczasowy pomocniczy uint8_t EcodOn1[4]; //kod tymczasowy przekaźnika nr 1 uint8_t EcodOn2[4]; //kod tymczasowy przekaźnika nr 2 uint8_t EcodOn3[4]; //kod tymczasowy przekaźnika nr 3 uint8_t Eval1[2]; //długość impulsu HIGH
Teraz przed funkcją setup() wpisz wszystkie funkcje obsługujące EEPROM. Opisane w poprzednim wpisie. Następnie uzupełnij funkcję setup() jak poniżej.
//ustaw szybkość portu szeregowego #ifdef DEBUG Serial.begin(115200); #endif //inicjalizacja przekaźników r1.begin(pinrelay1); r2.begin(pinrelay2); r3.begin(pinrelay3); rcread.enableTransmit(RFPINTX); EEPROM.begin(512);//ustal wielkość dostępnej EEPROM // saveEEProm(); readEEProm(); //odczytaj dane z pamięci //załacz LED pinMode(pinled0, OUTPUT); digitalWrite(pinled0,LOW); // konfiguracja WiFi //gdy IP statyczne #ifdef IP_STATIC WiFi.config(IPadr,gateway,netmask); // stały IP #endif WiFi.mode(WIFI_STA); //tryb STATION WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { // czekaj na połączenie z WiFi delay(500); #ifdef DEBUG Serial.print("."); #endif } #ifdef DEBUG Serial.println(""); Serial.println("WiFi połączone"); Serial.println(WiFi.localIP()); Serial.println(WiFi.macAddress()); #endif digitalWrite(pinled0,HIGH);// wyłącz LED gdy jest połączenie z WiFi setservers();
Ostatnia funkcja loop() ma wyglądać tak jak poniżej.
server.handleClient(); // czekaj na wywołanie strony www delay(100); //testowanie połączenia z WiFi if (WiFi.status() != WL_CONNECTED){ digitalWrite(pinled0,LOW);// załączenie LED wbudowanej gdy brak połączenia z WiFi } else{ // wyłącz LED gdy jest połączenie z WiFi digitalWrite(pinled0,HIGH);// }
Do katalogu głównego RFSwitch3 wklej wszystkie pliki opisane i utworzone w poprzednich częściach. Skompiluj i wgraj program do urządzenia ESP8266. Włącz komputer, tablet lub telefon i uruchom przeglądarkę www, wpisz adres IP , uruchom wgrywanie kodów z pilota. Zapisz ustawienia i korzystaj z tego urządzenia.
Najnowsza wersja tego programu znajduje się tutaj.