Ta strona używa ciasteczek (cookies), dzięki którym możliwe jest między innymi poprawne wyświetlanie elementów strony, zapamiętywanie sesji użytkowników. Dodatkowo na stronie znajduje się skrypt Google Analytics oraz PIWIK (statystyki oglądalności). Znajdują się również skrypty przycisków serwisów społecznościowych Facebook, Twitter i Google+ oraz YouTube, które również mogą zapisywać ciasteczka.

Na zakończenie pierwszej części poradnika nawiązaliśmy połączenie z modułem WIFI. Zanim jednak zaczniemy wydawać mu polecenia, wrócę jeszcze na chwilę do opisu programu CoolTerm. W pierwszej części poradnika napisałem pokrótce co trzeba ustawić aby móc nawiązać połączenie z ESP.  Po naciśnięciu ikony "Options" i ustawieniu portu oraz prędkości z jaką będziemy się komunikować z układem, naciskamy "OK" a następnie ikonę "Connect". Wydawanie komend do układu odbywa się poprzez ich wpisywanie w głównym oknie programu. Standardowe ustawienie tego okna nie daje nam możliwości poprawienia ewentualnego błędu podczas wpisywania polecenia. Jak się popełni błąd, należy wcisnąć "Enter" i od nowa zacząć wpisywanie. Na szczęście można to zmienić. W tym celu wchodzimy znowu w "Options" i wybieramy pozycję "Terminal".

CoolTerm1

Tu możemy dokonać zmian które ułatwią nam życie. Pierwszą z nich, to wybór czy chcemy wpisywać polecenia tak jak to jest standardowo w programie, czyli w trybie "Raw Mode", czy wolimy może poprzez linię pleceń w trybie "Line Mode". Po wybraniu drugiej opcji możemy już więcej nic nie zmieniać tylko nacisnąć "OK". Pod oknem gdzie do tej pory wpisywaliśmy polecenia, pojawi się pole w którym teraz możemy pisać i bez problemu poprawiać ewentualne błędy. Dodatkową zaletą jest to, że komendy przez nas wpisywane będą zapamiętywane i będziemy mogli je w każdej chwili ponownie wywołać. W tym celu wystarczy wcisnąć na końcu linii poleceń czarny trójkąt i pojawi się lista z wprowadzonymi do tej pory komendami. Jeżeli jednak wolimy wpisywać polecenia w trybie "Raw Mode", to w "Options -> Terminal" możemy zaznaczyć opcję "Handle BS and DEL Characters" aby móc poprawiać błędy podczas wpisywania poleceń w głównym oknie programu.

To by było chyba na tyle jeśli chodzi o taką ogólną konfigurację programu. Oczywiście możemy zapisać nasze ustawienia. Jeśli chcemy aby program po restarcie od razu uruchamiał się tak jak go skonfigurowaliśmy, wybieramy w menu głównym "File -> Save As Default", a jeśli chcemy sami wczytywać po każdym restarcie ustawienia, to korzystamy z "File -> Save As...", gdzie pod własną nazwą będziemy mogli zapisać konfigurację. Program mamy skonfigurowany, przejdźmy więc do  komend AT. To z jakich poleceń możemy skorzystać, zależy od wersji firmware zainstalowanego w pamięci ESP. Na chwilę obecną najnowsza wersja komend AT oznaczona jest numerem v.0.60.0.0. Chcąc się przekonać jaką my mamy wersję oprogramowania, należy wydać polecenie:

AT+GMR

CoolTerm2

Jak widać na obrazku zainstalowana wersja AT w moim module to v.0.40.0.0. W dokumentacji znajdziemy dokładny spis dostępnych komend. Link co prawda prowadzi do dokumentacji najnowszej wersji komend AT, ale w niczym to nie przeszkadza ponieważ podstawowe polecenia się nie zmieniają, a z takich będziemy w tej części korzystać.

Pierwsza czynność jaką należałoby wykonać, to ustawienie modułu w konkretny tryb pracy. Do wyboru mamy STA (stacja robocza), AP (access point) oraz STA+AP. Ustawmy więc moduł w tryb STA. W tym celu należy wydać polecenie:

AT+CWMODE=1

Kolejnym krokiem może być sprawdzenie jakie sieci są dostępne:

AT+CWLAP

Jeśli na liście znajduje się nasza sieć, możemy się do niej przyłączyć. Tutaj drobna uwaga, sieć do której będziemy chcieli się przyłączyć musi pracować na paśmie 2.4 GHz, bo na takim paśmie pracuje układ ESP8266. Do połączenia z siecią musimy znać jej nazwę(SSID) i hasło, które to dane wysyłamy do ESP poleceniem:

AT+CWJAP="tu wpisujemy nazwę sieci","tu wpisujemy hasło do sieci"

Powinien ukazać się komunikat "WIFI CONNECTED" a następnie "WIFI GOT IP". Ten ostatni informuje nas że moduł ma przypisany numer IP nadany mu przez DHCP. Od teraz za każdym razem gdy włączymy moduł, będzie on się automatycznie łączył z naszą siecią. Możemy zostawić tak jak jest, ale musimy mieć na uwadze to, że przy następnym połączeniu może zmienić się numer IP przydzielony modułowi. Aby więc nie sprawdzać za każdym razem jaki numer IP został przypisany do modułu, powinniśmy wyłączyć korzystanie z DHCP przez ESP8266 oraz przypisać statyczny numer IP do modułu. DHCP wyłączymy poleceniem:

AT+CWDHCP=1,0

Polecenie to wyłącza DHCP dla trybu STA modułu. Jeśli przełączymy moduł w tryb AP, numer IP zostanie mu nadany przez DHCP. Ale gdy przełączymy układ w tryb STA+AP, to numer IP dla AP zostanie automatycznie przydzielony, ale już tryb STA będzie korzystał ze statycznego IP, które ustawiamy komendą:

AT+CIPSTA="tu wpisujemy numer IP jaki chcemy nadać"

Przy nadawaniu statycznego numeru IP, należy zwrócić uwagę na to aby mieścił on się w naszej klasie adresowej. Wpisanie numeru spoza naszej klasy adresowej, bez podania bramki i maski, spowoduje niemożność nawiązania komunikacji z modułem ESP.

OK, moduł mamy skonfigurowany i podłączony do sieci. Możemy w końcu rozpocząć próby komunikacji z modułem, korzystając z protokołu UDP lub TCP. Na Macu istnieje możliwość nasłuchiwania konkretnych portów jak i wysyłanie danych na te porty poprzez polecenia wpisywane w terminalu. Nie jest to jednak zbyt wygodne i "user-friendly". Na szczęście udało mi się znaleźć program który umożliwia stawianie serwerów UDP i TCP dosłownie jednym kliknięciem.

Mowa tu o PacketSender. Po rozpakowaniu archiwum z programem, jest on praktycznie od razu gotowy do użycia. Nic generalnie nie musimy konfigurować. Porty dla UDP i TCP są przypisywane przy starcie programu a oba serwery są automatycznie załączone i oczekują na pojawienie się danych do odbioru. Oczywiście w preferencjach programu porty możemy zmienić, jeśli z jakiegoś powodu nie pasują nam ustawione numery portów przez program.

Zacznijmy zatem od próby nawiązania połączenia po protokole TCP. Najprostszym przykładem będzie wyświetlenie dowolnego tekstu w oknie przeglądarki. Niestety pod tym kątem Safari jest wyjątkowo kapryśne, dlatego do tego celu używam Firefoxa. Na marginesie dodam, że nie jest to jednyny przypadek kiedy Safari nie chce współpracować, bo nawet korzystanie z języka Lua w ESP wymaga wysłania kilku dodatkowych informacji aby Safari łaskawie wyświetliło tekst z ESP, ale o tym przy innej okazji.

Chcąc więc uruchomić serwer TCP na ESP, musimy wydać dwa polecenia. Pierwsze ustawia komunikację na wielo-połączeniową, natomiast drugie inicjalizuje serwer: 

AT+CIPMUX=1

AT+CIPSERVER=1,80

W przypadku drugiej komendy, pierwsza pozycja "1" oznacza włączenie serwera, natomiast druga "80" to numer portu przez jaki się komunikujemy. Przechodzimy teraz do Firefoxa i w pasku adresu wpisujemy numer IP naszego modułu i naciskamy Enter.

CoolTerm3

ESP odbierze zapytanie od przeglądarki co zostanie potwierdzone wypisaniem informacji w oknie CoolTerm, zaznaczone w ramce na obrazku. Teraz musimy komendą AT poinformować ESP że zamierzamy wysłać dane. Należy podać numer kanału na jaki wysyłamy tekst oraz ilość przesyłanych znaków. W przypadku tego drugiego parametru należy mieć na uwadze że liczony jest każdy znak, nawet taki który jest nie widoczny podczas wpisywania, czyli "Enter" oraz znak nowej linii, a każda komenda AT lub wprowadzenie tekstu kończy się właśnie znakiem "Enter" i nowej linii. Takie są ustawienia standardowe w CoolTerm. Oczywiście gdy zapomnimy o tym i wprowadzimy dłuższy tekst niż zadeklarowaliśmy, zostanie on obcięty do długości którą chcieliśmy wysłać.

AT+CIPSEND=0,30

Na kanał 0, wysyłamy tekst o długości 30 znaków. Po wprowadzeniu komendy pojawi się strzałka oznaczająca możliwość wprowadzania tekstu bez dodatkowych parametrów. Ja wpisałem "Witam, tu ESP8266 :)" bez cudzysłowów. Po naciśnięciu "Enter" wyświetli się w oknie CoolTerm informacja że dane zostały wysłane i jaką miały długość, ale w oknie przeglądarki nic się nie pojawi. Aby wprowadzony tekst ukazał się w przeglądarce, należy zamknąć połączenie z serwerem, co dla ESP będzie informacją że zakończyliśmy wprowadzanie danych i może je wysłać. Połączenie zamykamy komendą:

AT+CIPCLOSE=0

FireFox

Dopiero teraz w oknie przeglądarki zostanie wyświetlony wysłany przez ESP tekst. Jeśli chcielibyśmy wysłać kolejny tekst do przeglądarki, należy ponownie z jej poziomu odświeżyć adres IP. Znowu zostanie wysłane zapytanie do ESP, a my komendą AT+CIPSEND=0,"ilość znaków" poinformujemy ESP że mamy zamiar wysyłać dane. Pamiętać tylko należy o tym żeby po każdym wprowadzeniu tekstu zamykać połączenie, inaczej tekst się nie pojawi w przeglądarce.

Czas teraz na komunikację po protokole UDP. Do tego celu przyda nam się oprócz programu CoolTerm, wspomniany wcześniej PacketSender. 

PacketSender

Jak widać na obrazku, u dołu okna mamy informację na jakich portach program uruchomił protokoły UDP i TCP. Porty możemy zmienić w preferencjach programu. Na razie nic nie zmieniamy, a jedynie wyłączamy protokół TCP co by nie było jakichś komplikacji, bo jak widać ustawiony jest ten sam port co do UDP. Wyłączenie odbywa się poprzez naciśnięcie na numer portu przy wybranym protokole. Resetujemy moduł ESP. Możemy użyć komendy AT+RST wpisanej w CoolTerm, lub odłączyć na chwilę zasilanie od modułu. Po restarcie modułu ESP, poleceniem AT+CIFSR sprawdzamy jaki jest adres IP, a następnie wpisujemy komendę:

AT+CIMPUX=0

Użyliśmy jej już przy protokole TCP, ale tym razem ustawiliśmy komunikację jedno-połączeniową. Drugie polecenie które musimy wydać to:

AT+CIPSTART="UDP","0",55056,1000,0

Tym poleceniem uruchamiamy komunikację po protokole UDP, gdzie portem na który będziemy wysyłać dane z ESP jest port o numerze 55056 (czyli ten jaki jest ustawiony w programie PacketSender), a port odbiorczy na który ESP będzie przyjmował dane ma numer 1000. Korzystając teraz z polecenia AT+CIPSEND możemy wysyłac dane z ESP do programu PacketSender. Pełna składnia komendy CIPSEND, powinna wyglądać tak:

AT+CIPSEND=9,"192.168.1.105",55056

gdzie pierwszy parametr oznacza ilość wysyłanych znaków, zasada taka sama jak przy protokole TCP, drugi to adres naszej karty sieciowej, a trzeci to numer portu na który wysyłamy dane. Wysyłanie danych z PacketSender do ESP nie wymaga podawania żadnych poleceń modułowi.

Nie będę już opisywał jak wysyłać dane z programu PacketSender, myślę że objaśnienia na ostatnim obrazku są wystarczające. Jeśli jednak coś jest niezrozumiałe, to zapraszam do obejrzenia dwóch filmów na moim kanale YouTube. Pierwszy pokazuje jak komunikować się po UDP korzystając z programów CoolTerm i PacketSender, a drugi to przykład użycia ESP połączonego z ATmegą 328P po protokole UART do sterowania diodą LED.

W następnym poradniku zajmiemy się zmianą firmware na nowszy z oficjalnej dystrybucji producenta układu ESP8266, oraz alternatywnego jakim jest NodeMCU który daje nam możliwość bezpośredniego oprogramowania układu ESP za pomocą języka Lua. Dzięki temu sam moduł z układem ESP może sterować urządzeniami podpiętymi do wyjść GPIO modułu.

Na koniec jeszcze dodam, że jeśli za mocno namieszaliśmy w ustawieniach ESP komendami AT, zawsze możemy wrócić do ustawieńi fabrycznych układu poleceniem:

AT+RESTORE

Drukuj

Komentarze   

#10 Marcin 2017-06-06 10:53
Hmm, pierwsza taka uwaga ;-) Może to tylko jakaś chwilowa zadyszka serwera?
Cytować
#9 Wilhelmina 2017-06-06 10:19
Hej, czemu czy tylko mi tak długo ładuje się strona ?

My web site; Janusz Miskiewicz: https://gdansk.kwiaciarniacalodobowa.pl/
Cytować
#8 Marcin 2016-03-27 14:47
Polecenia z końcówką _DEF ustawiają dane parametry jako domyślne. Akurat w przypadku CWMODE nie jest konieczne użycie tej komendy, bo ustawienie to jest zapisywane w pamięci układu i po restarcie jest odczytywane. Nie, nie zapisuje do pamięci tego co odbierze. Komenda AT też niczego nie zwraca w terminalu? Jak masz układ zmontowany na płytce stykowej to posprawdzaj dokładnie połączenia. To że się świeci dioda od zasilania wcale nie świadczy o tym że układ jest poprawnie zasilony. Sam używam płytki stykowej i mimo tego że staram się jej nie ruszać, to co jakiś czas muszę poprawiać połączenia bo układ w ogóle nie reaguje. Taki urok stykówek.
Cytować
#7 Mariusz 2016-03-27 10:59
To się chyba stało po tym poleceniu AT+CWMODE_DEF .Zapisywało by do pamięci to co odbierze ???
Cytować
#6 Mariusz 2016-03-27 10:40
Napotkałem jeszcze jeden dziwny problem namieszałem trochę w tych komendach i zniknęły mi całkowicie te odpowiedzi teraz wo gule nic nie dostaje na wyjściu komenda AT+RESTORE nie pomaga.Wgrałem mu nawet nowe oprogramowanie i nic cisza dalej to samo jak zrobić żeby pokazywał mi to co odbierze w terminalu ?? nadal pracuje z udp
Cytować
#5 Marcin 2016-03-26 15:34
Niestety pewnych ustawień nie można zapisać na trwałe. W swoim module mam już firmware v 0.60, ale w dokumentacji nie znalazłem informacji aby można było z automatu startować z uruchomionym serwerem. Oczywiście są polecenia które zapisują nasze ustawienia w pamięci, np. CWMODE, CWJAP, CWDHCP, CIPSTA oraz parę jeszcze innych. Jednak polecenie którym inicjalizujemy połączenie CIPSTART, "żyje" tylko do momentu utrzymania zasilania. Podobnie z poleceniem CIPMUX, po zaniku zasilania wraca do ustawienia połączenia jednokierunkowego, czyli CIPMUX=0. Dlatego też pewnie, są wersje nie oficjalne firmware'u które mają dodatkowe funkcjonalności. Można też samemu napisać swoje polecenia AT, tyle tylko że trzeba do kodu źródłowego dodać swoje funkcje z poleceniami, a następnie taki firmware skompilować. W następnym poradniku mam zamiar opisać jak uaktualnić oficjalny firmware, oraz jak zmienić firmware na NodeMCU. Jest to chyba jeden z bardziej popularnych firmware w którym już nie korzystamy z komend AT, ale ma on swoje własne API z całą masą bibliotek których można użyć pisząc skrypt w języku LUA. Tutaj już można osiągnąć funkcjonalność o którą pytasz.
Cytować
#4 Mariusz 2016-03-26 10:18
Marcin mam jeszcze jedno pytanie czy jest jakaś komenda która mi te wszystkie ustawienia zapisała by do pamięci tak żeby po wyłączeniu zasilania i ponownym włączeniu moduł został w tej konfiguracji ???.
Cytować
#3 Mariusz 2016-03-26 08:04
Sprawdziłem działa wielkie dzięki :roll:
Cytować
#2 Marcin 2016-03-25 17:39
Fajnie wiedzieć że się komuś przydają moje wypociny. Nawiązując do Twojego pytania, to owszem można uzyskać samo AT. Należy przestawić moduł w tryb pracy opisany w dokumentacji jako "passthrough", służy do tego komenda AT+CIPMODE=1 , dzięki temu ustawieniu można wysyłać dane z i do modułu bez informowania go o ilości przesyłanych znaków.
Cytować
#1 Mariusz 2016-03-25 11:00
Dzięki ci Marcinie za ten poradnik akurat tego potrzebowałem :-).Zrobiłem wszystko jak opisałeś tylko mam mały problem dostaje coś takiego +IPD,2:AT.Jak pozbyć się tego +IPD,2: ?? tak żebym dostawa tylko AT wiesz może jak to zrobić ?
Cytować

Dodaj komentarz

Kod antyspamowy
Odśwież