Open form

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:

 

  1.  
  2. #include //dolaczenie biblioteki do obsługi programowego interfejsu UART
  3. SoftwareSerial esp01(2,3); // Inicjalizacja programowego interfejsu UART: 2-RX (polaczyc z Tx modulu ESP); 3-TX (polaczyc z Rx modulu ESP)
  4. void setup()
  5. {
  6. Serial.begin(9600); // Inicjalizacja sprzetowego interfejsu UART z prędkościa 9600 bps - do komunikacji z komputerem poprzez USB
  7. esp01.begin(9600); // Inicjalizacja programowego interfejsu UART z prędkościa 9600 bps - do komunikacji z modulem ESP
  8. pinMode(11,OUTPUT); //ustawienie pinu 11 jako wejście dla diody LED nr 1
  9. digitalWrite(11,LOW); //podanie stanu niskiego na pin 11 - dioda 1 domyślnie wyłączone
  10. pinMode(12,OUTPUT); //ustawienie pinu 12 jako wejście dla diody LED nr 2
  11. digitalWrite(12,LOW); //podanie stanu niskiego na pin 12 - dioda 2 domyślnie wyłączone
  12. pinMode(13,OUTPUT); //ustawienie pinu 13 jako wejście dla diody LED nr 3
  13. digitalWrite(13,LOW); //podanie stanu niskiego na pin 13 - dioda 3 domyślnie wyłączone
  14. //Wysyłanie komend incjalizacyjnych dla modulu ESP
  15. sendData("AT+RSTrn",2000); //reset modułu
  16. sendData("AT+CWMODE=2rn",1000); //ustawienie w trybie Access Point
  17. sendData("AT+CIFSRrn",1000); //uzyskanie adresu IP (domyślnie 192.168.4.1)
  18. sendData("AT+CIPMUX=1rn",1000); //włączenie trybu połączeń wielokrotnych
  19. sendData("AT+CIPSERVER=1,80rn",1000); //ustawienie serwera na porcie 80
  20. }
  21. void loop()
  22. {
  23. if(esp01.available()) // sprawdzenie czy moduł otrzymał dane
  24. {
  25. if(esp01.find("+IPD,"))
  26. {
  27. delay(1000); // czekanie na zapełnienie bufora danymi
  28. // odczytanie ID połączenia
  29. int connectionId = esp01.read()-48; //odczytanie wartosci ASCI: odjęto 48 ponieważ funkcja read() zwraca wartość dziesiętną ASCII na pozycji 48
  30. esp01.find("pin="); // wyszukanie frazy "pin=" oraz ustawienie tam "kursora"
  31. int pinNumber = (esp01.read()-48)*10; // pobranie pierwszej cyfry, np. dla pinu 13, pierwsza cyfra to 1, należy ją pomnożyć przez 10
  32. pinNumber += (esp01.read()-48); //pobranie drugiej cyfry, np. dla pinu 13, druga cyfra to 3, należy ją dodać do poprzedniego wyniku
  33. digitalWrite(pinNumber, !digitalRead(pinNumber)); // zmiana stanu wybranego pinu
  34. // zamknięcie połączenia
  35. String closeCommand = "AT+CIPCLOSE=";
  36. closeCommand+=connectionId; // ID połączenia odczytane na początku
  37. closeCommand+="rn";
  38. sendData(closeCommand,1000); // wyslanie komend zakoczenia polaczenia
  39. }
  40. }
  41. }
  42. /*
  43. * Funkcja wysyłająca komendy do modułu ESP01
  44. * Parametry:
  45. * command - komenda do wysłania
  46. * timeout - czas oczekiwania na odpowiedź
  47. */
  48. String sendData(String command, const int timeout)
  49. {
  50. String response = "";
  51. esp01.print(command); // wysłanie polecenia do ESP01
  52. long int time = millis();
  53. while( (time+timeout) > millis())
  54. {
  55. while(esp01.available()) //jeśli są jakieś dane z modułu, wtedy następuje ich odczyt
  56. {
  57. char c = esp01.read(); // odczyt kolejnego znaku
  58. response += c;
  59. }
  60. }
  61. Serial.print(response);
  62. return response;
  63. }

 

 

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!