Układem ESP8266 możemy sterować za pomocą komend AT znanych ze sterowania modemami. Oczywiście ze względu na specyfikę układu sposób komunikacji będzie trochę inny - dostosowany do roli, jaką układ ma pełnić. Wszystkie prezentowane poniżej komendy AT zostały przetestowane z wykorzystaniem układów ESP8266 z wgranym firmware w wersji 1.3.0.0, (niektóre zrzuty wykonano dla wersji 0020000903).
Wykorzystanie komend AT ułatwia podpięcie dowolnego sterownika do sieci WIFI. Wystarczy jeden port szeregowy i dowolny układ może komunikować się z kartą sieciową ESP8266, a przez nią z siecią. W docelowych układach komendy AT będą wysyłane przez mikrokontroler. W celach edukacyjno-testowych skorzystamy ze zwykłego terminala portu szeregowego i z klawiatury będziemy wydawać komendy AT naszemu układowi. W zależności od systemu operacyjnego możemy wykorzystać dowolny preferowany program terminala. Ja korzystam z wbudowanego w ArduinoIDE terminala. Jest on bardzo prosty, nie wymaga skomplikowanej konfiguracji, a spełnia swoje zadanie. Rozpoczynamy przegląd dostępnych komend AT. Po podłączeniu do komputera układu musimy włączyć ArduinoIDE i wybrać okno terminala. Na rysunku poniżej pokazano okno terminala z zaznaczonymi ważnymi elementami.
Pozycja 1 oznacza miejsce wpisywania poleceń, które zostaną przesłane poprzez port szeregowy do układu ESP. Przycisk wyślij (poz. 2) zatwierdza wpisaną komendę. Ten sam efekt uzyskamy naciskając enter na klawiaturze. Efekt wykonanego polecenia pojawi się w oknie poniżej. Pozycje 3 i 4 znajdujące się na dole okna mają wpływ na transmisję i sposób wyświetlania danych. Zawijanie wierszy ma znaczenie dla czytelności odbieranych z układu. Domyślnie większość układów ESP8266 komunikuje się poprzez port szeregowy z prędkością 115200 bps. Niektóre, zwłaszcza starsze układy miały ustawioną prędkość 9600 bps. W przypadku, gdy układ ESP odpowiada "krzaczkami" na wydawane polecenia należy sprawdzić czy, mamy ustaloną właściwą prędkość transmisji. Poniżej rysunek przedstawiający nieprawidłowo ustawioną prędkość transmisji danych.
Jak widać ustawienie nieprawidłowej wartości powoduje przesyłanie "dziwnych" znaków przez urządzenie. Wysłanie jakiejkolwiek komendy do układu ESP powinno skutkować odpowiedzią. Na rysunku poniżej pokazano przesłanie znaków do układu ESP8266 i odebrane odpowiedzi.
Aktualnie jedyną odpowiedzią układu na polecenia jest "ERROR", wynika to z faktu, że nie wysłano do układu ESP żadnej poprawnej komendy AT. Jedyną pozytywną informacją jest fakt, że komunikacja pomiędzy komputerem, a układem ESP8266 została skonfigurowana poprawnie. W tym momencie możemy przejść do testowania właściwych komend AT. Komendy AT podajemy zawsze dużymi literami. Składnia polecenia jest prosta:
AT+WŁAŚCIWE_POLECENIE
Zawsze podajemy słowo AT znak plus i polecenie do wykonania. Wydanie samego polecenia AT powinno spowodować odesłanie przez układ informacji OK. Na rysunku poniżej przedstawiono sekwencję kilku poleceń i odpowiedzi układu.
Jak widać komendy AT muszą być pisane dużymi literami, w przeciwnym wypadku polecenie nie zostanie rozpoznane i układ zwróci błąd. Na rysunku pojawiło się pierwsze użyteczne polecenie, dzięki któremu możemy odczytać wersję wgranego oprogramowania.
AT+GMR
Kolejna użyteczna komenda to reset układu:
AT+RST
Na rysunku poniżej przedstawiono wynik działania polecenia.
Jak widać w pierwszej kolejności układ odpowiada komunikatem OK, następnie wykonywany jest restart i pojawia się komunikat READY. Oznacza to, że układ jest gotowy do dalszej pracy. Podłączymy teraz nasz układ do sieci WIFI. W pierwszym kroku sprawdzimy, jakie punkty dostępowe są w zasięgu naszej karty. W tym celu wydajemy polecenie:
AT+CWLAP
W odpowiedzi układ ESP prześle do nas listę wykrytych sieci bezprzewodowych;
AT+CWLAP
+CWLAP:(4,"E-WIFI",-46,"22:65:11:b2:d4:1b",1)
+CWLAP:(3,"GO-ON",-83,"18:d2:71:11:ff:5a",1)
+CWLAP:(4,"TP-LINK_3EBA72",-61,"c4:6e:13:33:ba:72",6)
+CWLAP:(4,"TRK",-78,"74:ea:3a:ec:41:06",9)
OK
Jak widać w zasięgu naszej karty są cztery sieci WIFI. Otrzymaliśmy rodzaj kodowania, identyfikatory SSID, moc sygnału (wartości ujemne podane w decybelach), adresy MAC urządzeń dostępowych oraz numery kanałów, na których pracują. Pierwszy argument w odpowiedzi, to rodzaj kodowania sieci WIFI. Poniżej przedstawiono możliwe wartości i ich opis:
- 0: sieć otwarta
- 1: WEP
- 2: WPA_PSK
- 3: WPA2_PSK
- 4: WPA_WPA2_PSK
- 5: WPA2_Enterprise (za pomocą komend AT nie da się podłączyć do takiego punktu dostępowego)
Za pomocą polecenia AT+CWLAP można wyszukać konkretny punkt dostępowy wydając polecenia:
AT+CWLAP="ApTest"
lub
AT+CWLAP="ApTest" ,"94:01:c2:e3:44:55"
otrzymamy
+CWLAP:(0,"ApTest",-30,"94:01:c2:e3:44:55",6,11,0)
OK
Następnie przełączymy nasz układ do pracy w trybie klienta za pomocą polecenia:
AT+CWMODE_CUR=1
Polecenie przyjmuje trzy wartości: 1-tryb klienta, 2-tryb AP, 3-tryb mieszany. Polecenie to nie zapisuje ustawień do pamięci FLASH, po wyłączeniu zasilania należy ponownie ustawić tryb działania układu. Dla starszych wersji firmware odpowiednikiem polecenia AT+CWMODE_CUR jest polecenie AT+CWMODE, jes ono oznaczone w dokumentacji jako "deprecated", czyli przestarzałe i nie powinno się go już używać (należy jednak pamiętać, że w starszej wersji oprogramowania polecenie AT+CWMODE_CUR nie występuje). Odmianą polecenia AT+CWMODE_CUR jest AT+CWMODE_DEF, które zapisuje do pamięci FLASH informację o trybie pracy. Po restarcie/włączeniu zasilania układ ESP przełączy się do ustawionego za pomocą tej komendy trybu pracy.
Po wydaniu polecenia AT+CWMODE_CUR=1 nasz układ pracuje w trybie klienta. Możemy podłączyć go do dostępnej sieci WIFI. Jeszcze raz wykonamy skanowanie dostępnych sieci:
AT+CWLAP="ApTest"
+CWLAP:(0,"ApTest",-30,"94:01:c2:e3:44:55",6,11,0)
OK
Otrzymaliśmy informację, że dostępny jest punkt dostępowy o nazwie ApTest, który pracuje na kanale 6 i nie jest zabezpieczony (0-sieć otwarta). Dysponując powyższymi danymi podłączymy się do sieci WIFI:
AT+CWJAP_CUR="ApTest",""
Polecenie AT+CWJAP_CUR posiada dwa parametry. Pierwszy to nazwa punktu dostępowego, drugi to wymagane hasło. W przypadku sieci otwartych hasło jest puste. Polecenie to ma swój odpowiednik dla starszych wersji: AT+CWJAP, jest ono oznaczone w dokumentacji jako przestarzałe. Bliźniaczym poleceniem jest AT+CWJAP_DEF, które umożliwia zapisanie parametrów o połączeniu do pamięci FLASH. Prawidłowo wykonane polecenie AT+CWJAP powinno podłączyć nasz układ do sieci WIFI i pobrać adres IP oraz pozostałe niezbędne dane wymagane do prawidłowej pracy sieci.
AT+CWJAP_CUR="ApTest",""
WIFI DISCONNECT
WIFI CONNECTED
WIFI GOT IP
OK
Jak widać na powyższym przykładzie polecenie zwróciło komunikat OK oraz informację, że pobrało adres IP. Nie znamy jeszcze tego adresu, możemy natomiast odczytać z pozycji punktu dostępowego zarówno przydzielony adres IP, jak i MAC, czy nazwę urządzenia ESP. Pora odczytać przydzielony przez serwer DHCP adres IP naszego układu ESP8266. Poniżej polecenie odczytujące bieżący adres IP i MAC z układu ESP:
AT+CIFSR
W wyniku wykonania powyższego polecenia otrzymamy:
AT+CIFSR
+CIFSR:STAIP,"192.168.43.52"
+CIFSR:STAMAC,"5c:cf:7f:80:dd:a3"
OK
Pora sprawdzić działanie sieci. Jeżeli nasza sieć ma połączenie z siecią Internet, to możemy od razu przetestować połączenie ze zdalnym serwerem, w przeciwnym wypadku, musimy ograniczyć się do sieci lokalnej. Na początek sprawdzimy połączenie z innego komputera. Znamy adres IP naszego urządzenia ESP, więc na komputerze podłączonym do tej samej sieci lokalnej otwieramy okno konsoli (w Windowsie wiersz poleceń) i wydajemy polecenie:
ping 192.168.43.52
zmieniając oczywiście podany powyżej adres IP na adres przypisany do urządzenia ESP8266 odczytany za pomocą polecenia AT+CIFSR. W efekcie powinniśmy otrzymać to co pokazano na zrzucie poniżej.
Jak widać pakiety zostały wysłane do układu ESP i powróciły. Mamy więc pewność, że układ jest skonfigurowany prawidłowo i może pracować w sieci jako równoprawne urządzenie. Sprawdzimy jeszcze z pozycji układu ESP, czy jest możliwa komunikacja z innymi urządzeniami. W tym celu skorzystamy z polecenia:
AT+PING="192.168.43.1"
Wyślemy pakiety do punktu dostępowego. UWAGA: Jeżeli korzystamy z punktu dostępowego, który posiada inny adres IP, to należy użyć tego adresu. Polecenie AT+PING zwraca informację o czasie wysłania transmisji pakietu i komunikat OK, lub komunikat ERROR. Poniżej przedstawiono wynik działania polecenia dla adresu, który istnieje w sieci oraz dla adresu, który jest w sieci nieosiągalny:
AT+PING="192.168.43.1"
+11
OK
AT+PING="192.168.43.2"
+timeout
ERROR
W poleceniu możemy również podać nazwę serwera lub domeny:
AT+PING="google.pl"
W efekcie wykonania polecenia otrzymamy:
AT+PING="google.pl"
+54
OK
Za pomocą kilku poleceń AT udało się podłączyć układ ESP do istniejącej sieci WIFI. Od tego momentu mamy pełny dostęp z ESP do sieci oraz z sieci do układu ESP, a poprzez niego do dowolnego urządzenia/sterownika, który podłączymy z wykorzystaniem portu szeregowego. W następnej części opiszę komunikację z układem ESP jako serwerem WWW.