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:

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

 

 

Pobierz kod dla Arduino

 

Kod HTML do wysyłania danych

Należy skopiować poniższy kod i wykorzystując np. systemowy Notatnik zapisać go z rozszerzeniem .html.

 


   
        Kontrola LED przez ESP8266
   
   
    
   
    
   
   
   
        
   
   
   

 

Pobierz kod 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.

 

zapraszamy do współpracy!