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);
}