Moduł przekaźników sterowanych przez Wi-Fi

Moduł przekaźników sterowanych przez Wi-Fi
Pobierz PDF Download icon

Układu ESP8266 nie trzeba nikomu przedstawiać. Zdobył ogromną popularność i stał się bazą do realizacji wielu różnych pomysłów. Prezentowane urządzenie również wykorzystuje układ ESP, jednak na tle innych rozwiązań wyróżnia się przede wszystkim łatwością konfiguracji i obsługi. Ma też dodatkowe funkcjonalności: zabezpieczenie dostępu hasłem oraz tryb pracy czasowej, które znacznie poszerzają wachlarz zastosowań urządzenia. Rekomendacje: moduł przyda się w automatyce domowej.

Urządzenie działa jak mikroserwer www, więc interfejsem, poprzez który komunikuje się z użytkownikiem, jest strona internetowa. Do wyświetlenia strony internetowej potrzebne jest urządzenie z zainstalowaną dowolną przeglądarką internetową oraz potrzebny jest adres ip strony. 

Moduł pracuje w dwóch trybach: pierwszy z nich to praca jako punkt dostępowy Wi-Fi - access point. Jego domyślna nazwa to PRO-RELAYS i będzie widoczna na liście dostępnych sieci Wi-Fi (rysunek 1). Przy próbie dołączenia do access pointa należy wprowadzić hasło, które domyślnie ma wartość 12345678. Gdy zostanie nawiązane połączenie, można uruchomić przeglądarkę internetową i na pasku adresu wpisać adres IP, który ma wartość 10.10.10.10. Wyświetli się strona internetowa jak na rysunku 2. Należy teraz podać hasło, które jest takie samo jak hasło do access pointa, czyli domyślnie 12345678. Dopiero teraz zostanie wyświetlona strona główna urządzenia (rysunki 3 i 4). Jest to pierwszy sposób dostępu do urządzenia, całkowicie wystarczający do jego pełnej obsługi w sytuacji, gdy pracuje poza zasięgiem jakiejkolwiek sieci lokalnej (domowej).

Rysunek 1. Urządzenie widoczne na liście dostępnych sieci Wi-Fi
Rysunek 2. Strona logowania do urządzenia
Rysunek 3. Okno główne, pierwsza część
Rysunek 4. Okno główne, druga część

Urządzenie może pracować w innym trybie, wygodniejszym pod względem użytkowania, wymaga tylko przeprowadzenia konfiguracji. Strona konfiguracyjna zostanie wyświetlona po naciśnięciu przycisku Settings, który znajduje się u dołu strony głównej. Wygląd strony konfiguracyjnej pokazano na rysunkach 5 i 6, w górnej części (rysunek 5) znajdują się pola umożliwiające nadanie nowej nazwy i hasła. Nazwa dotyczy nazwy access pointa ale jest także nazwą urządzenia i jest wyświetlana na stronie logowania i stronie głównej urządzenia. Hasło dotyczy hasła dostępu do access pointa oraz jest hasłem logowania na stronie internetowej. Po wprowadzeniu nowej nazwy i hasła należy nacisnąć przycisk Save umieszczony pod tymi polami. Urządzenie zapamięta nowe ustawienia w pamięci nieulotnej a po około 30 sekundach uruchomi się ponownie i będzie działało z nowymi ustawieniami.

Rysunek 5. Okno ustawień, część dotycząca ustawień access pointa
Rysunek 6. Okno ustawień, część dotycząca ustawień routera

W dolnej części strony konfiguracyjnej (rysunek 6) znajdują się pola, które pozwalają skonfigurować połączenie z lokalną siecią Wi-Fi. Urządzenie może zostać podłączone do domowego routera i wtedy każdy użytkownik podłączony do tego samego routera może mieć dostęp do urządzenia. Aby uruchomić taki tryb pracy, należy wpisać w odpowiednich polach strony konfiguracyjnej nazwę sieci Wi-Fi (tzw SSID) oraz hasło do wybranej sieci Wi-Fi i zakończyć poprzez naciśnięcie przycisku Save pod tymi polami. Urządzenie zapamięta nowe ustawienia w pamięci nieulotnej a po ok 30 s uruchomi się ponownie i jeśli wszystko przebiegło pomyślnie, podłączy się do sieci o podanej nazwie.

Aby sprawdzić, czy wszystko przebiegło prawidłowo, należy podłączyć się do urządzenia poprzez access point i na stronie konfiguracyjnej sprawdzić, czy pole IP zawiera numer IP. Należy zapamiętać ten numer, zwykle będzie miał wartość 192.168.x.xxx i będzie to numer IP, który router przydzielił dla naszego urządzenia. Teraz można rozłączyć się z access pointem, podłączyć się do domowego routera i wpisać w oknie dowolnej przeglądarki zapamiętany adres IP. Wyświetli się strona logowania naszego urządzenia.Obsługa

Na stronie głównej urządzenia, na samej górze, znajduje się nazwa urządzenia, domyślnie jest to PRO-RELAYS, poniżej wyświetlany jest czas zegara zawartego w urządzeniu. Wyświetlana wartość czasu nie jest automatycznie aktualizowana, jest to wartość z chwili ostatniego odświeżenia strony. Kolejne elementy strony głównej to cztery bliźniacze sekcje odnoszące się do czterech wyjść urządzenia. Każda sekcja opisuje aktualny stan wyjścia w postaci tekstu - Out ON lub Out OFF a poniżej wyświetla przycisk, który pozwala zmienić stan wyjścia (rysunek 7).

Rysunek 7. Okno główne - elementy służące do sterowania wyjściami
Rysunek 8. Okno podsumowania ustawień dla pracy czasowej

Następnym elementem strony głównej jest przycisk opisany jako Work time. Po jego naciśnięciu otwiera się strona, która przedstawia aktualne ustawienia pracy czasowej, podzielone na cztery sekcje odpowiadające czterem wyjściom, jak pokazano na rysunku 8. W górnej części strony znajduje się przycisk Modify, który przenosi na kolejną stronę umożliwiającą wprowadzenie zmiany w harmonogramie pracy czasowej (rysunek 9). Dla każdego wyjścia można ustawić dwa niezależne przedziały czasowe określające czas załączenia i czas wyłączenia wyjścia. Aby zrezygnować z pracy czasowej, należy ustawić wartości czasów na godzinę „24:00”. Takie ustawienia będą wyświetlane jako --:-- i będą oznaczały funkcję nieaktywną.

Rysunek 8. Okno podsumowania ustawień dla pracy czasowej
Rysunek 10. Okno ustawiania zegara

Każda z podstron ma u dołu przycisk opisany Back, który pozwala na powrót do poprzedniej strony. Natomiast wszelkie zmiany należy potwierdzić przyciśnięciem przycisku Save na danej stronie.

Działanie funkcjonalności pracy czasowej wymaga ustawienia prawidłowego czasu. Aby ustawić czas zegara wbudowanego w urządzenie, należy na stronie głównej kliknąć przycisk Clock set, zostanie wyświetlona strona jak na rysunku 10. W odpowiednie pola należy wpisać czas i datę i zatwierdzić przyciskiem Save. Urządzenie zawiera niezależny zegar RTC z podtrzymaniem bateryjnym, więc czas będzie odmierzany nawet przy odłączonym zasilaniu urządzenia. Oczywiście w takiej sytuacji nie będą załączane wyjścia.

Po zakończeniu pracy z urządzeniem należy się wylogować, przyciskając Log out na głównej stronie urządzenia. Urządzenie ma funkcję automatycznego wylogowywania - jeśli po zalogowaniu, nie będzie żadnej aktywności ze strony użytkownika przez 60 s, to zostanie automatycznie wylogowany.

Budowa

Schemat ideowy urządzenia zamieszczono na rysunku 11. Na schemacie widoczny jest podział na bloki funkcjonalne: blok zasilania ze stabilizatorami IC1 i IC2, blok sterowania wyjściami z driverem IC6, blok zegara RTC z układem IC4, blok modułu Wi-Fi IC5 typu ESP8266 oraz blok mikrokontrolera sterującego IC3 typu LPC824.

Rysunek 11. Schemat ideowy modułu przekaźników z Wi-Fi

Do prawidłowej pracy urządzenie wymaga doprowadzenia do złącza CON5 źródła zasilania o napięciu ok. 12 V i wydajności prądowej minimum 500 mA. Do zacisków wyjściowych doprowadzone są styki przekaźników, które w stanie aktywnym zwierają zaciski danego wyjścia. Takie rozwiązanie pozwala sterować praktycznie dowolnym obwodem, nawet 230 V AC.

Stan pracy urządzenia sygnalizują dwie diody świecące:

  • LED1 sygnalizuje aktywność modułu ESP8266.
  • LED2 migając co około 2 sekundy, sygnalizuje aktywność mikrokontrolera.

Na płytce zamontowano listwę szpilek goldpin, która obejmuje złącza CON1...CON4 widoczne na schemacie. Złącza te służą do zaprogramowania oraz aktualizacji oprogramowania mikrokontrolera oraz modułu Wi-Fi.

Program

Najważniejszych elementów urządzenia nie widać na schemacie - są to programy sterujące zawarte w pamięci modułu Wi-Fi oraz mikrokontrolera. Program dla modułu ESP8266 został napisany w środowisku Arduino a jego główne zadania to przesyłanie treści metody GET wydzielonej z żądania HTTP Request poprzez interfejs UART do mikrokontrolera. W odpowiedzi mikrokontroler przesyła do modułu treść kodu HTML opisującego wygląd generowanej strony internetowej. Jednak na początku, w sekcji SETUP programu w Arduino, przeprowadzana jest inicjalizacja, której istotny fragment widoczny jest na listingu 1. Po pierwsze moduł wysyła żądania o nazwę dla access pointa, hasło dla access pointa, nazwę sieci Wi-Fi oraz hasło do sieci Wi-Fi, które przechowuje w pamięci nieulotnej mikrokontroler. Następnie moduł rozpoczyna pracę jako access point a jeśli otrzymał nazwę i hasło do sieci Wi-Fi to przełącza się na tryb łączony access point/station mode. Jeśli połączy się z siecią Wi-Fi, to przesyła do mikrokontrolera adres IP, który otrzymał, jeśli połączenie się nie powiedzie, to powraca do pracy w trybie access pointa. Na koniec moduł ESP8266 przesyła do mikrokontrolera komendę o treści statOK, która oznacza koniec inicjalizacji. Wszystkie komendy i żądania zachowują format metody GET i mają treść podobną do tej: GET /?statOK&HTTPr.

Listing 1. Inicjalizacja modułu Wi-Fi
//get parameters
apName = SerialStringGet(„apName”);
apPass = SerialStringGet(„apPass”);
roName = SerialStringGet(„roName”);
roPass = SerialStringGet(„roPass”);
//set AP mode
WiFi.mode(WIFI_AP);
apName.toCharArray(apSSID, settStrLen);
apPass.toCharArray(apPASS, settStrLen);
WiFi.softAPConfig(apIP, apGATE, apSUBNET);
WiFi.softAP(apSSID, apPASS);
apGetIP = WiFi.softAPIP();
//if roName & roPass then set AP_STA mode
if ((roName.length() >= 4) && (roPass.length() >= 4))
{
WiFi.mode(WIFI_AP_STA);
roName.toCharArray(roSSID, settStrLen);
roPass.toCharArray(roPASS, settStrLen);
WiFi.begin(roSSID, roPASS);
//Wait for WiFi to connect
int connStatus = 10;
while(1)
{
if (WiFi.waitForConnectResult() != WL_CONNECTED)
{
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
if (connStatus > 0)
{
connStatus--;
if (connStatus == 0)
{
//if connection failed
Serial.print(„GET /?roIp=0&HTTP\r”);
WiFi.mode(WIFI_AP);
break;
}
}
}else
{
//if connection success
roGetIP = WiFi.localIP();
Serial.print(„GET /?roIp=”);
Serial.print(roGetIP);
Serial.print(„&HTTP\r”);
break;
}
}
}
//set handlers
webServer.on(„/”, handleRoot);
webServer.onNotFound(handleClose);
webServer.begin();
//end of setup
delay(500);
Serial.print(„GET /?statOK&HTTP\r”);
digitalWrite(2, HIGH);

Procedura, która przygotowuje i przesyła metodę GET, realizowana jest w przerwaniu handleRoot. Jej treść widoczna jest na listingu 2, w zmiennej serialString umieszczane są nazwy parametrów i ich wartości, a następnie cała treść jest przesyłana do mikrokonrtrolera - Serial.print(serialString);. Następnie moduł oczekuje na kod opisujący treść strony internetowej BodySend(); Na koniec treść strony, poprzedzona nagłówkiem i odpowiednio zakończona, tworzy treść odpowiedzi serwera webServer.send(200, „text/html”, PageHeader + serialContent + PageClosed);

Listing 2. Kod przerwania handleRoot
void handleRoot()
{
digitalWrite(2, LOW);
serialString = „GET /?”;
for (int i=0; i< webServer.args(); i++)
{
serialString += webServer.argName(i);
serialString += „=”;
serialString += webServer.arg(i);
serialString += „&”;
}
serialString += „HTTP/1.1\r\n”;
Serial.print(serialString);
serialContent = „”;
BodySend();
webServer.send(200, „text/html”, PageHeader + serialContent + PageCloser);
digitalWrite(2, HIGH);
}

Program mikrokontrolera realizuje mnóstwo zadań, najistotniejsze z nich to interpretacja komend odbieranych z modułu Wi-Fi. Budowa każdej komendy rozpoczyna się od GET /? a dalej znajduje się bardzo istotny parametr logId. Mikrokontroler zapamiętuje 5 ostatnich wartości tego parametru, które były powiązane z udanym logowaniem. Jeśli parametr logId ma wartość, która znajduje się w puli zapamiętanych, oznacza to potwierdzony dostęp do strony, jeśli wartości nie ma w puli zapamiętanych to wyświetlana jest strona logowania. Wartości kolejnych parametrów są generowane prostym, ale wystarczającym algorytmem. Po wylogowaniu lub po upływie czasu dana wartość logId zostaje usunięta z puli zapamiętanych. Następnym parametrem jest pageNum określający, którą stronę należy wyświetlić. Kolejne parametry dotyczą konkretnych elementów, np. actId=1 wraz z parametrem pageNum=1 pozwala zmienić stan wyjścia numer 1. Cała komenda wygląda wtedy tak:

GET /?logId=555&pageNum=1&actId= 1&HTTPr

Lista nazw wszystkich parametrów jest zamieszczona na listingu 3, po nazwach łatwo rozszyfrować ich znaczenie.

Listing 3. Lista nazw parametrów metody
GET
const uint8_t cFrameStart[] = „GET /?”;
const uint8_t cFrameEnd[] = „HTTP”;
const uint8_t cLogId[] = „logId”;
const uint8_t cPageNum[] = „pageNum”;
const uint8_t cActId[] = „actId”;
const uint8_t cTstart[] = „tStart”;
const uint8_t cTstop[] = „tStop”;
const uint8_t cTsecStart[] = „tSecStart”;
const uint8_t cTsecStop[] = „tSecStop”;
const uint8_t cClockSet[] = „clockSet”;
const uint8_t cDateSet[] = „dateSet”;
const uint8_t cEspApName[] = „apName”;
const uint8_t cEspApPass[] = „apPass”;
const uint8_t cRouterName[] = „roName”;
const uint8_t cRouterPass[] = „roPass”;
const uint8_t cRouterIp[] = „roIp”;
const uint8_t cStatusOK[] = „statOK”;

Montaż i uruchomienie

Schematy montażowy płytki drukowanej pokazano na rysunku 12. Urządzenie zostało zbudowane w większości z elementów SMD o bardzo małym rastrze. Chociaż nie ma wielu elementów, to montaż wymaga odpowiednich narzędzi i umiejętności. Po zmontowaniu i wstępnym skontrolowaniu napięć zasilających należy wykonać programowanie dwóch układów. Na płytce znajduje się złącze, które umożliwia przeprowadzenie niezbędnych czynności. Jednak potrzebny będzie dodatkowo konwerter USB-UART z wyjściami RX i TX o poziomie napięcia 5 V. Jeśli dysponujemy tylko konwerterem z wyjściami o poziomie 3,3 V, to należy usunąć z płytki rezystor R10.

Rysunek 12. Schemat montażowy modułu przekaźników z Wi-Fi

W pierwszej kolejności należy zaprogramować moduł ESP, w tym celu należy założyć zworki na szpilki goldpin, zgodnie z opisem PROGRAMOWANIE MODUŁU ESP na rysunku 13 i podłączyć zasilanie. Teraz należy otworzyć w środowisku Arduino program ProRelArd, w ustawieniach wybrać płytkę NodeMCU (ESP-12E Module) i uruchomić proces kompilacji i programowania modułu. W razie problemów dokładniejsze wskazówki dotyczące programowania modułu ESP8266 za pośrednictwem Arduino można bez problemu znaleźć w Internecie.

Rysunek 13. Opis sygnałów na złączu programowania

Następnym krokiem będzie zaprogramowanie mikrokontrolera, można tego dokonać za pomocą programu Flash Magic poprzez ten sam konwerter USB-UART, który posłużył do zaprogramowania modułu ESP. Należy wtedy założyć zworki na szpilki goldpin, zgodnie z opisem PROGRAMOWANIE UKŁADU LPC na rysunku 13 i włączyć zasilanie. W oknie programu należy wybrać typ układu - LPC824, wskazać plik - ProRelays.hex i nacisnąć przycisk Start. W razie problemów dokładniejsze wskazówki dotyczące programowania układu LPC za pośrednictwem Flash Magic można można znaleźć np. w opisie modułu z LPC824, opublikowanego w EP. Innym sposobem na zaprogramowanie układu LPC jest zastosowanie programatora LPC-LINK wraz ze środowiskiem MCUXpresso IDE. Po tych czynnościach urządzenie będzie gotowe do pracy.

Podsumowanie

Na koniec kilka przydatnych informacji:

  • Wszystkie nazwy i hasła mogą mieć maksymalną długość 19 znaków.
  • Jeśli zostanie ustawione niewłaściwe hasło do istniejącej sieci Wi-Fi, to moduł ESP podejmie kilka prób połączenia z tą siecią. Próby oczywiście zakończą się niepowodzeniem i ostatecznie moduł przejdzie to pracy w trybie access pointa, ale cały proces może potrwać kilka minut.
  • Zapomnianego hasła nie da się usunąć, ale można je „podejrzeć”, podłączając do urządzenia konwertera USB-UART i zamieniając sygnały RX i TX. Podczas uruchamiania urządzenia mikrokontroler przesyła hasło do modułu ESP.
  • Urządzenie podłączone do domowego routera po restarcie zasilania może zmienić adres IP. Aby tego uniknąć, należy w ustawieniach routera przypisać stały adres ip dla tego urządzenia.
  • Jeśli urządzenie jest podłączone do routera a router, ma stały publiczny adres ip to możliwe jest sterowanie urządzeniem z dowolnego miejsca na ziemi. Należy wtedy w ustawieniach routera uruchomić funkcję przekierowania portu nr 80 na numer IP, który otrzymało urządzenie, a w przeglądarce wpisać publiczny adres ip routera.

KS
ep@prolab.waw.pl

Artykuł ukazał się w
Elektronika Praktyczna
kwiecień 2019
DO POBRANIA
Pobierz PDF Download icon
Materiały dodatkowe
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik grudzień 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio listopad - grudzień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje listopad - grudzień 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna grudzień 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich grudzień 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów