W tym wpisie postaram się pokazać jak obsługiwać gotowy moduł ESP-01 z dwoma przekaźnikami. Istnieje podobny moduł ESP-01 z jednym przekaźnikiem i tam sprawa jest bardzo prosta, wystarczy zmienić stan z niskiego na wysoki na odpowiedniej nóżce naszego ESP-01 i przekaźnik również zmieni swój stan. Z modułem z 2 przekaźnikami sprawa komplikuje się o tyle, że płytka oczekuje konkretnej komendy, która została zaprogramowana przez producenta modułu i różny HEX jest dla otwarcia i zamknięcia każdego z dwóch przekaźników.
moduł ESP-01 z przekaźnikami kupicie w naszym sklepie internetowym
Jak sterować ESP-01 z przekaźnikami?
Każdy producent ma swoje komendy HEX, które działają z jego modułem. Należy zwrócić się bezpośrednio do sprzedawcy, od którego kupiliśmy nasz moduł jeśli nie możemy poradzić sobie ze znalezieniem odpowiedniego HEXa samemu. Moduły, które aktualnie posiadamy w ofercie działają z następującymi kombinacjami:
1 ON {0xA0, 0x01, 0x01, 0xA2};
1 OFF = {0xA0, 0x01, 0x02, 0xA3};
2 ON = {0xA0, 0x02, 0x01, 0xA3};
2 OFF = {0xA0, 0x02, 0x02, 0xA4};
Czym programować ESP-01?
Jak programować ESP-01 w wygodny sposób? Odpowiedzią jest moduł z podstawką dla ESP-01 dostępny w ofercie naszego sklepu. Programator ESP-01 moduł, który polecamy w linku ma tą przewagę nad tańszym zamiennikiem opartym o CH340, że nie trzeba tutaj bawić się w dodatkowe lutowanie przycisków i robienie zworek, aby ESP-01 wprowadzić w tryb programowania. W tym poradniku napiszemy i wgramy program przez darmowe środowisko ArduinoIDE.
Aby w ArduinoIDE wgrać program należy wybrać następujące ustawienia pamiętając, że ustawiamy u siebie port do jakiego podpięliśmy aktualnie nasz programator:
Jeśli nie masz dodanego repozytorium do obsługi modułów ESP8266 zrób to w ten sposób:
Zakładam, że posiadacie już środowisko Arduino IDE. Uruchamiamy je i wchodzimy kolejno w Arduino -> Preferencje.
W polu „Dodatkowe adresy URL do managera pytek” wklejamy następujący link: http://arduino.esp8266.com/stable/package_esp8266com_index.json
Teraz wybieramy płytkę ESP8266 Generic oraz ustawienia jak na poniższym screenie:
Kod programu do wgrania znajdziecie na końcu wpisu.
Sterowanie ESP-01 z przekaźnikami przez przeglądarkę
Kiedy zaprogramujemy nasze ESP-01 wpinamy je do modułu jak na zdjęciu. Pamiętamy, że ESP wysyła komendy w hexie do modułu pinami TX RX, dlatego musimy mieć wpięte zworki łączące TX i RX naszego ESP i płytki z przekaźnikami. Prawidłowo wpięte zworki ilustruje poniższy obrazek.

Teraz wystarczy podpiąć zasilania 5V DC do płytki z przekaźnikami.
Kod programu do sterowania przekaźnikami z ESP-01
Teraz zajmiemy się kodem. Będziemy pisać program, który pozwoli podpiąć się naszemu ESP-01 do naszej sieci WiFi, a każde urządzenie podpięte w tą samą sieć będzie mogło poprzez wpisanie odmiennego adresu w oknie przeglądarki zmienić stan przekaźników. W SSID podajemy nazwę sieci WiFi, do której ma podpiąć się nasze ESP oraz hasło do niej. Następnie logujemy się do naszego routera i sprawdzamy jaki adres IP przydzielił naszemu ESP-01. Teraz znając ip w przeglądarce wykorzystujemy następujące komendy do kontrolowania modułu podmieniając server_ip na adres przydzielony naszemu ESP-01:
- http://wpiszIP/1/on włącz 1 przekaźnik
- http://server_ip/1/off wyłącz 1 przekaźnik
- http://server_ip/2/on włącz 2 przekaźnik
- http://server_ip/2/off wyłącz 2 przekaźnik
/* * W miejsce server_ip podaj adres ip ESP-01 jakie uzyska po podpięciu się do routera * http://server_ip/1/on włącz 1 przekaźnik * http://server_ip/1/off wyłącz 1 przekaźnik * http://server_ip/2/on włącz 2 przekaźnik * http://server_ip/2/off wyłącz 2 przekaźnik */ #include <ESP8266WiFi.h> const char* ssid = "NazwaSieciWIFIgdzieSiePodpinasz"; const char* password = "HasloDoSieci"; WiFiServer server (80); //hexy do kontrolowania przekaźników włącz/wyłącz byte relON[] = {0xA0, 0x01, 0x01, 0xA2}; byte relOFF[] = {0xA0, 0x01, 0x02, 0xA3}; byte rel2ON[] = {0xA0, 0x02, 0x01, 0xA3}; byte rel2OFF[] = {0xA0, 0x02, 0x02, 0xA4}; void setup () { delay (10); Serial.begin (115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); } // Start servera server.begin(); delay(50); } void loop() { int val; //sprawdź połączenie WiFiClient client = server.available(); if ( ! client ) { return; } // czekaj na dane while ( ! client.available () ) { delay (100); } // czytaj 1 linie zapytania String req = client.readStringUntil ('\r'); client.flush (); // porównaj if (req.indexOf ("/1/on") != -1) { Serial.write (relON, sizeof(relON)); val = 1; } else if (req.indexOf ("/1/off") != -1) { Serial.write (relOFF, sizeof(relOFF)); val = 0; } else if (req.indexOf ("/2/on") != -1) { Serial.write (rel2ON, sizeof(rel2ON)); val = 1; } else { if (req.indexOf ("/2/off") != -1) Serial.write (rel2OFF, sizeof(rel2OFF)); val = 0; // if you want feedback } client.flush (); // odpowiedz String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nRelay is now "; s += (val)?"on":"off"; s += "</html>\n"; // wyślij do klienta client.print (s); delay (10); }