ESP8266 Remote Controller part. 4

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ą;

  1. Wemos D1 mini , lub inne urządzenie ESP8266.
  2. Nadajnik radiowy na 433MHz.
  3. 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.

 

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *