Sterowanie diodami LED przez WiFi z wykorzystaniem ESP8266
Przykład pokazuje jak przesłać dane przez stronę internetową WWW do modułu ESP8266 z wykorzystaniem Arduino. Program steruje diodami LED podłączonymi do płytki Arduino.
W przykładzie zostały zastosowane następujące elementy:
- Arduino Uno
- Moduł oparty na układzie ESP8266, np. ESP-01
- Diody LED
- Rezystory
- Płytka stykowa oraz przewody
- Komputer wyposażony w kartę WiFi
Podłączenie ESP-01 z Arduino
Do komunikacji pomiędzy modułem WiFi opartym na układzie ESP8226 a płytką Arduino służy interfejs szeregowy UART. W tym wypadku zostanie wykorzystana jego programowa wersja, sprzętowy UART, czyli piny 1 i 0 pozostaną do dyspozycji użytkownika. Układy należy połączyć, np. za pomocą przewodów żeńsko-męskich w następujący sposób:
Pin ESP8266 | Pin Arduino |
---|---|
Tx | 2 |
Rx | 3 |
Vcc | 3,3 V |
CH_PD |
3,3 V |
GND | GND |
Do pinów 11, 12 oraz 13 Arduino należy podłączyć diody LED przez rezystor ograniczający prąd diody. Od jego wartości zależy jasność diody LED, zbyt mała rezystancja może uszkodzić diodę, przy zbyt dużej nie będzie ona świeciła. Proponujemy wybrać wartość rezystancji z zakresu od 220 Ω do 1,5 kΩ.
Program do Arduino
W przykładzie został wykorzystany następujący kod:
#include//dolaczenie biblioteki do obsługi programowego interfejsu UART SoftwareSerial esp01(2,3); // Inicjalizacja programowego interfejsu UART: 2-RX (polaczyc z Tx modulu ESP); 3-TX (polaczyc z Rx modulu ESP) void setup() { Serial.begin(9600); // Inicjalizacja sprzetowego interfejsu UART z prędkościa 9600 bps - do komunikacji z komputerem poprzez USB esp01.begin(9600); // Inicjalizacja programowego interfejsu UART z prędkościa 9600 bps - do komunikacji z modulem ESP pinMode(11,OUTPUT); //ustawienie pinu 11 jako wejście dla diody LED nr 1 digitalWrite(11,LOW); //podanie stanu niskiego na pin 11 - dioda 1 domyślnie wyłączone pinMode(12,OUTPUT); //ustawienie pinu 12 jako wejście dla diody LED nr 2 digitalWrite(12,LOW); //podanie stanu niskiego na pin 12 - dioda 2 domyślnie wyłączone pinMode(13,OUTPUT); //ustawienie pinu 13 jako wejście dla diody LED nr 3 digitalWrite(13,LOW); //podanie stanu niskiego na pin 13 - dioda 3 domyślnie wyłączone //Wysyłanie komend incjalizacyjnych dla modulu ESP sendData("AT+RSTrn",2000); //reset modułu sendData("AT+CWMODE=2rn",1000); //ustawienie w trybie Access Point sendData("AT+CIFSRrn",1000); //uzyskanie adresu IP (domyślnie 192.168.4.1) sendData("AT+CIPMUX=1rn",1000); //włączenie trybu połączeń wielokrotnych sendData("AT+CIPSERVER=1,80rn",1000); //ustawienie serwera na porcie 80 } void loop() { if(esp01.available()) // sprawdzenie czy moduł otrzymał dane { if(esp01.find("+IPD,")) { delay(1000); // czekanie na zapełnienie bufora danymi // odczytanie ID połączenia int connectionId = esp01.read()-48; //odczytanie wartosci ASCI: odjęto 48 ponieważ funkcja read() zwraca wartość dziesiętną ASCII na pozycji 48 esp01.find("pin="); // wyszukanie frazy "pin=" oraz ustawienie tam "kursora" int pinNumber = (esp01.read()-48)*10; // pobranie pierwszej cyfry, np. dla pinu 13, pierwsza cyfra to 1, należy ją pomnożyć przez 10 pinNumber += (esp01.read()-48); //pobranie drugiej cyfry, np. dla pinu 13, druga cyfra to 3, należy ją dodać do poprzedniego wyniku digitalWrite(pinNumber, !digitalRead(pinNumber)); // zmiana stanu wybranego pinu // zamknięcie połączenia String closeCommand = "AT+CIPCLOSE="; closeCommand+=connectionId; // ID połączenia odczytane na początku closeCommand+="rn"; sendData(closeCommand,1000); // wyslanie komend zakoczenia polaczenia } } } /* * Funkcja wysyłająca komendy do modułu ESP01 * Parametry: * command - komenda do wysłania * timeout - czas oczekiwania na odpowiedź */ String sendData(String command, const int timeout) { String response = ""; esp01.print(command); // wysłanie polecenia do ESP01 long int time = millis(); while( (time+timeout) > millis()) { while(esp01.available()) //jeśli są jakieś dane z modułu, wtedy następuje ich odczyt { char c = esp01.read(); // odczyt kolejnego znaku response += c; } } Serial.print(response); return response; }
Kod HTML do wysyłania danych
Należy skopiować poniższy kod i wykorzystując np. systemowy Notatnik zapisać go z rozszerzeniem .html.
Program używa również biblioteki JQuery. Należy ją pobrać i zapisać w katalogu gdzie znajduje się powyższy plik .html.
Uruchomienie programu
Na początek należy połączyć się z modułem jako punktem dostępowym (podobnie jak np. z bezprzewodowym routerem). Po ustanowieniu połączenia należy otworzyć utworzoną stronę internetową za pomocą dowolnej przeglądarki. Korzystając z jednego z trzech przycisków możemy zapalać lub gasić diody.