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.
