WiFi na Arduino?! Tak: ESP8266 (cz. 2)

W poprzedniej części udało się wydać pierwsze komendy AT. Nadal używam konfiguracji:
fff

  • 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
AT+CWMODE=2
AT+CWSAP="esp_test","",2,0
AT+CIPMUX=1
AT+CIPSERVER=1,80
Na komputerze zeskanujcie dostępne sieci WiFi. Na liście powinniście zauważyć AP (access point) nazywający się „esp_test”.

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:)

IMG_1122

[AT+CDN]
Pozdrawiam,
Arek

3 komentarze do “WiFi na Arduino?! Tak: ESP8266 (cz. 2)”

Dodaj komentarz