W poprzedniej części udało się wydać pierwsze komendy AT. Nadal używam konfiguracji:
- Elementy: ESP8266, płytka stykowa, przejściówka-samoróbka z poprzedniego postu, rozszerzenie do zasilania płytki stykowej, zasilacz 12V (wpinany do rozszerzenia), konwerter UART-do-USB (podłączony do masy płytki stykowej; bez zasilania) i oczywiście komputer z Putty (+zworki i kabelki połączeniowe)
- ESP wpięty do płytki stykowej
- ESP: piny Vcc, CH_PD i Reset podłączone do 3,3V; GND do masy;RX/TX do przejściówki UART-do-USB
Podłączcie się Putty do ESP (port szeregowy jak dla przejściówki, 9600) i wykonajcie sekwencję (za każdą linią czekając na potwierdzenie):
Wszystkie polecenia AT podajemy bez spacji! Po każdej komendzie wciskamy [ENTER]
AT+RST
Na komputerze zeskanujcie dostępne sieci WiFi. Na liście powinniście zauważyć AP (access point) nazywający się „esp_test”.
AT+CWMODE=2
AT+CWSAP="esp_test","",2,0
AT+CIPMUX=1
AT+CIPSERVER=1,80
Szczegóły powyższych komend (więcej komend znajdziecie tutaj):
Komenda | Znaczenie | Użycie | Rezultat |
---|---|---|---|
AT+RST | Reset | AT+RST | ready |
AT+CWMODE=… | Tryb AP/klienta | Tryb urządzenia-klienta: AT+CWMODE=1 Tryb routera (access point):AT+CWMODE=2 |
OK |
AT+CWSAP | Parametry AP:nazwa,hasło,kanał,autoryzacja | Kanał 2, bez autoryzacji (0): AT+CWSAP= „esp_test”,””,2,0 |
OK |
AT+CIPMUX | Ile połączeń akceptuje serwer. Uwaga: ustawienie to może wpływać na niektóre komendy AT – gdy możliwe jest wiele równoczesnych połączeń (AT+CIPMUX=1), będzie musieli podać id połączenia. | Jedno połączenie na raz: AT+CIPMUX=0 Wiele połączeń: AT+CIPMUX=1 |
OK |
AT+CIPSERVER | Ustaw jako serwer; tylko dla AT+CIPMUX=1, | tryb=0: zamknij serwer; tryb=1: otwórz serwerAT+CIPSERVER=1,80 | OK |
W tabeli powyżej zwróćcie szczególną uwagę na kolumnę „Rezultat”. Dostając się przez port szeregowy, komunikacja z ESP przypomina trochę linię poleceń. Wydajecie komendy AT a w odpowiedzi dostajecie rezultat ich wykonania, np:
AT+CIPMUX=1
OK
Niestety ESP nie jest zbyt rozmowny i najczęściej ogranicza się do „OK” lub „Error”. Co więcej „Error” nie zawsze oznacza np. błąd w składni. Czasami taką komendę trzeba powtórzyć (raz, dwa:)).
Podłączenie klienta do ESP
Na tym etapie powinniście na komputerze widzieć sieć „esp_test”. Podłączcie się do niej. Ponieważ w „AT+CWSAP=”esp_test”,””,2,0″ wyłączyłem autoryzację („0” na końcu), nie musicie podawać hasła. Wasz komputer powienien odpowiedzieć, że jest podłączony do sieci bez Internetu (znacznik sygnału z czarnym wykrzyknikiem na żółtym tle). Wypróbujmy teraz transmisję z klienta do ESP. Użyję do tego bardzo prostego skryptu Pythonowego esp_test.py
:
import socket
ip = '192.168.4.1'
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((ip, 80))
sock.send("hello")
recv = sock.recv(250)
sock.close()
print "recv:", recv
Za adres ESP użyłem „192.168.4.1”. Zmodyfikujcie skrypt, w zależności od adresu Waszego ESP. W Windows można go uzyskać poleceniem ipconfig
; adres ESP będzie w linijce 'gateway’ interfejsu, który używacie do podłączenia się do niego.
Zapiszcie plik w jakimś miejscu – np. c:\tmp
. Uruchomcie skrypt (jeżeli nie ma pythona w ścieżce musicie przejść do katalogu, w którym został zainstalowany):
>cd c:\Python27
>python c:\tmp\esp_test.py
W pierwszym kroku skrypt wysyła „hello” do ESP. Powinnniście to zobaczyć na konsoli ESP:
0,CONNECT
+IPD,0,5:hello
OK
Ponieważ skrypt „wisi” czekając na odpowiedź, poleceniem AT+CIPSTATUS
możecie zobaczyć status serwera na ESP:
AT+CIPSTATUS
STATUS:3
+CIPSTATUS:0,"TCP","192.168.4.2",49357,1
OK
Zwróćcie uwagę, że podłączenie z pytona ma id=0. Dzieje się tak, ponieważ komendą „AT+CIPMUX=1” pozwoliłem na wieloktrotne podłączenia. ESP oznacza sobie kolejne sesje kolejnymi id.
Łatwo to zobaczyć:
- Na komputerze otwórzcie przeglądarkę
- W polu adresu wpiszcie: 192.168.4.1 (u was adres gateway’a może być inny) i zatwierdźcie
- Na konsoli ESP pojawi się:
1,CONNECT
+IPD,1,286:GET / HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: pl
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; Touch; MALNJS; rv:11.0) like Gecko
UA-CPU: AMD64
Accept-Encoding: gzip, deflate
Host: 192.168.4.1
DNT: 1
Connection: Keep-Alive
OK- Na konsoli ESP wpiszcie: AT+CIPSTATUS:
AT+CIPSTATUS
STATUS:3
+CIPSTATUS:0,"TCP","192.168.4.2",49357,1
+CIPSTATUS:1,"TCP","192.168.4.2",49358,1
OK- Widzicie, że oprócz połączenia z pythona (id=0) pojawiło się to z przeglądarki (id=1)
Teraz wyślemy coś z ESP na klienta:
AT+CIPSEND=0,6
>Sie ma
SEND OK
W oknie linii poleceń skryptu pythonowego na komputerze powinniście zobaczyć „Sie ma”.
Komenda | Znaczenie | Użycie | Rezultat |
---|---|---|---|
AT+CIPSEND | Wysłanie polecenia do klienta: AT+CIPSEND=id,rozmiar; gdzie: 'id’ to identyfikator połączenia (zgodnie z AT+CIPSTATUS) a 'rozmiar’ to ilośćbajtów do wysłania (bez końca linii) | Wyślij 6 bajtów na połaczenie 0:AT+CIPSEND=0,6 | „>”; a potem „SEND OK” |
Czas przesiąść się na Arduino:)
[AT+CDN]
Pozdrawiam,
Arek
A kiedy następna część poradnika?
Witam,
wkrótce będzie więcej o ESP – ostatnio trochę z nim walczyłem i chciałbym spisać te doświadczenia… NodeMCU, LUA i takie tam:)
Pozdrawiam,
Arek
Poradnik, ale trochę inaczej:
http://uczymy.edu.pl/wp/blog/2015/09/27/esp8266-plytka-ewaluacyjna-cz-1/
Pozdrawiam,
A