ESP8266

....nie pasujące gdzie indziej...
ptja
Posty: 2414
Rejestracja: poniedziałek 31 gru 2012, 12:44
Lokalizacja: Łódź

ESP8266

Post autor: ptja »

Kupiłem sobie jakiś czas temu jedną z wersji modułu na ESP8266: http://www.banggood.com/ESP8266-Remote- ... 47259.html

Dziś znalazłem chwilę by to podłączyć i podzielę się spostrzeżeniami:
- niektóre odpowiedzi:

Kod: Zaznacz cały

AT+GMR
0018000902

Kod: Zaznacz cały

AT+RST

<LF>
<LF>OK

"?<ETX>
? ?S&#58;??A?<BS>\?<DC1>?V?<SO>???

&#91;System Ready, Vendor&#58;www.ai-thinker.com&#93;

- moduł wymaga zasilania (3,3V) o odpowiedniej wydajności. Zasilanie podawane z modułu portu szeregowego na USB (mam taki https://www.fasttech.com/p/1230400) nie wystarczało: moduł nie uruchamiał się, albo transmisja się rwała)
- podłączenie to Vcc, GND, TxD i RxD, ale trzeba "podciągnąć" do VCC także GPIO0, GPIO2 i CH_PD. Wbrew niektórym wygooglowanym opisom nie wystarczy podłączyć do Vcc tylko o CH_PD ani nie należy podłączać wszystkich pinów "w środku": RST trzeba zostawić niepodłączone, bo jest aktywne w stanie wysokim
- Putty nie nadaje się do komunikacji, bo (chyba) wysyła CR (kod ASCII 13) po LF (kod ASCII 10), a moduł wymaga CR, LF w tej właśnie kolejności
- do komunikacji użyłem Termie (http://www.codeproject.com/Articles/236 ... S-Terminal). Do kompilacji w VS2012 trzeba zmienić "target" na .NET Framework 4.0)
- korzystałem głównie z tego dokumentu.
- Pierwsze AT+CWLAP zwróciło ERROR. Rozwiązaniem było przestawienie trybu na inny niż tylko AP (np. AT+CWMODE=1 albo AT+CWMODE=3; AT=CWMODE=2 - jest ERROR)
- moja sieć WiFi ma zabezpieczenie dające dostęp tylko urządzeniom o MAC-adresie skonfigurowanym w routerze.
Dla ustalenia MAC-adresu połączyłem się komputerem z ESP8266 w trybie AP i wykonałem komendę:

Kod: Zaznacz cały

netsh wlan show networks mode=Bssid

Udało mi się nawiązać połączenie z serwerem WWW i ściągnąć stronę (komenda "GET /"):

Kod: Zaznacz cały

AT+...piiii...=7


> GET /
GET /


<LF>SEND OK



+IPD,1452&#58;???<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http&#58;//www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http&#58;//www.w3.org/1999/xhtml" xml&#58;lang="en" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
.................dalej wycięte dla czytelności.................
Uwaga: to "piii" to "mądry" skrypt, któremu nie podoba się ciąg podobny do nazwy żeńskiego narządu płciowego. Komenda wyglądała tak (spacje dodałem "antyskryptowo"):

Kod: Zaznacz cały

A T + C I P S E N D = 7


[ Dodano: 4 Luty 2015, 18:24 ]
Uwaga: MAC-adresy dla STA (station) i AP (access point) są różne.

Zrobiłem też AT+CIUPDATE i uwaliłem moduł (migał tylko niebieską diodą, ale nie dało się z nim już "pogadać"). Odratowałem go wg tego opisu: http://wiki.iteadstudio.com/ESP8266_Serial_WIFI_Module, a potem zaaplikowałem najnowszą wersję (0.9.5.0) stąd: http://www.electrodragon.com/w/Wi07c#Latest_firmware -> http://www.electrodragon.com/w/ESP8266_ ... T_Firmware

Teraz AT+GMR "mówi":

Kod: Zaznacz cały

AT+GMR
<LF>00200.9.5&#40;b1&#41;

compiled @ Dec 25 2014 21&#58;40&#58;28

AI-THINKER Dec 25 2014
<LF>

OK
--
pozdrawiam,
Jarek Andrzejewski
Awatar użytkownika
rafalzaq
Posty: 588
Rejestracja: piątek 28 lut 2014, 19:33
Lokalizacja: Gliwice

Post autor: rafalzaq »

Mam identyczną płytkę tylko kupiłem na ali. Przy identycznym (przynajmniej z wyglądu) module na USB nie miałem problemów z zasilaniem. Możliwe, że po prostu nie trafiłem na większe zapotrzebowanie bo do internetu się nie łączyłem.
W mojej płytce wystarczyło podciągnąć jeden pin. Prawdopodobnie był to właśnie CH_PD.
Również mam błąd przy trybie tylko AP.
Do komunikacji używam programu realterm. Można wybierać czy i jakie znaki końca linii ma wysyłać. W dodatku można sobie zdefiniować polecenia, a później je wysyłać jednym kliknięciem. Bardzo wygodne. Trzeba dodać, że teraz domyślna prędkość transmisji to 9600. Można ją oczywiście zmienić. Polecenie jest podane w dokumencie zalinkowanym przez ptja.
Testowałem jak to działa w trybie serwera i klienta. Można do tego użyć prostego programu http://sockettest.sourceforge.net/ Program potrafi stworzyć prosty serwer i podłączyć się do innego serwera. Można też wysyłać dane.
ptja
Posty: 2414
Rejestracja: poniedziałek 31 gru 2012, 12:44
Lokalizacja: Łódź

Post autor: ptja »

rafalzaq pisze:Mam identyczną płytkę tylko kupiłem na ali. Przy identycznym (przynajmniej z wyglądu) module na USB nie miałem problemów z zasilaniem. Możliwe, że po prostu nie trafiłem na większe zapotrzebowanie bo do internetu się nie łączyłem.
u mnie problemy były już przy włączaniu.
Ale przyczyn upatrywałbym raczej w module USB-serial niż w samym porcie USB.
rafalzaq pisze:W mojej płytce wystarczyło podciągnąć jeden pin. Prawdopodobnie był to właśnie CH_PD.
OK, nie upieram się. Potem zresztą odpiąłęm RST i działa. GPIO2 ma pull-up, GPIO0 chyba też.

Masz jakieś doświadczenia z logiką zaszytą wyłącznie w module (czyli IoT, moduł działałby po dołączeniu wyłącznie zasilania)?
--
pozdrawiam,
Jarek Andrzejewski
Marcin S.
Posty: 435
Rejestracja: piątek 12 wrz 2008, 10:11

Post autor: Marcin S. »

Mam ESP-01, zasilanie z FT232 wystarcza. Moduł FT232 kupiony tu:

http://allegro.pl/konwerter-usb-uart-rs ... 80855.html

Melduje się tak:

Kod: Zaznacz cały

AT+GMR

0020000903

compiled @ Dec 15 2014 19&#58;43&#58;31

AITHINKER-20141206



OK
Dziś zamówiłem ESP-201 - ma wyprowadzoną większość sygnałów z ESP - na Banggood (jest tylko jedna oferta). Instaluję teraz IDE Espressif, korzystając z tej strony:

http://www.verelec.nl/?page_id=547

Maszyna produkcyjna to stareńki pecet z Ubuntu 14.04. Więc to trwa...

Na razie poruszam się trochę po omacku. Czytam, co to IoT, MQTT, LUA... Ale mam potrzebę zrobienia przekaźnika załączanego z WWW ;) I dalsze pomysły na większy moduł też.

A propos wyłączania zasilania: ten człowiek zrobił włącznik zmierzchowy w oparciu o NodeMCU, podobno stabilny jak skała ;)

http://tech.scargill.net/category/esp8266/

Małe uaktualnienie: udało mi się skompilować IoT_demo i wgrać do ESP01. Wersja SDK 0.9.5. komendy AT nie działają, ale SoftAP jest, można z nim pogadać :) np. za pomocą curl.
Pzdr.
M.
arekm
Posty: 736
Rejestracja: niedziela 22 sty 2012, 15:25
Lokalizacja: Polska

Post autor: arekm »

Marcin S. pisze: Dziś zamówiłem ESP-201 - ma wyprowadzoną większość sygnałów z ESP - na Banggood (jest tylko jedna oferta).
Zobacz też czy nie masz w tym module takiego kwiatka
http://smarpl.com/content/esp8266-esp-2 ... leshooting
Marcin S.
Posty: 435
Rejestracja: piątek 12 wrz 2008, 10:11

Post autor: Marcin S. »

Heh, dzięki!

Na razie moduły jeszcze w Chinach:

Kod: Zaznacz cały

2015-02-08 18&#58;07 Guangzhou international mail operation Center, Poland-PL, receiving and sending receiving and sending, Collection
Pzdr.
M.
Awatar użytkownika
tOmki
Posty: 965
Rejestracja: niedziela 09 mar 2008, 02:20
Lokalizacja: Słupsk

Post autor: tOmki »

Hack allows ESP-01 to go to Deep Sleep
http://hackaday.com/2015/02/08/hack-all ... eep-sleep/
Awatar użytkownika
Flora
Posty: 221
Rejestracja: wtorek 25 wrz 2012, 13:38
Lokalizacja: Bydgoszcz

Post autor: Flora »

Te moduły są bardzo wrażliwe na jakość zasilania. Przez 2 dni walczyłem z różnymi funkcjami, które raz działały, a raz nie. Problemem rozwiązał kondensator 100uF wstawiony przed stabilizator 3,3V. Całość zasilana z portu USB. 3,3V z układu konwertera USB<->UART można obciążyć maksymalnie prądem 20mA, a moduł potrzebuje chwilami nawet 250mA.

Z przydatnych rzeczy, które znalazłem: AT+CIOBAUD - komenda pozwalająca sprawdzić i zmienić prędkość portu szeregowego.

Do tej pory udało mi się zrealizować na tym wynalazku serwer WWW sterujący podświetleniem RGB samochodu. Aktualnie próbuję przerzucić całą funkcjonalność do modułu, korzystając z zasobów http://nodemcu.com/
ptja
Posty: 2414
Rejestracja: poniedziałek 31 gru 2012, 12:44
Lokalizacja: Łódź

Post autor: ptja »

Flora pisze:Z przydatnych rzeczy, które znalazłem: AT+CIOBAUD - komenda pozwalająca sprawdzić i zmienić prędkość portu szeregowego.
tak, w dokumencie, do którego link ( http://woodsgood.ca/projects/wp-content ... ndsSet.pdf ) podałem w pierwszym wpisie jest ta komenda wymieniona.
--
pozdrawiam,
Jarek Andrzejewski
Marcin S.
Posty: 435
Rejestracja: piątek 12 wrz 2008, 10:11

Post autor: Marcin S. »

Przyspieszony kurs nowoczesnych technologii pozwolił mi złożyć na pająka i uruchomić przekaźnik uruchamiany przez WiFi :) W ESP pracuje NodeMCU, na NASie diskstation 213j postawiłem brokera mqtt (RSMB) i OpenHAB.

Jak wygładzę soft, wrzucę dla innych :)

Pozdrawiam, Marcin S.
Edycja:

Będzie długo. Więc tak :)

Urządzenie ma na celu załączanie przez dowolny sprzęt z dostępem do sieci pompy cyrkulacyjnej cwu oraz automatyczne wyłączanie po pewnym czasie. Na razie mruga diodą :) Jak się soft wysmaży, dorobię mu SSR i zainstaluję.

init.lua nie wrzucam, standardowy ukradziony stąd.

init.lua woła na zakończenie plik main.lua, który wygląda tak:

Kod: Zaznacz cały

-- Zalaczanie pompy cyrkulacyjnej na ok. 1 min 30 sek, wer. 2015.02.16

-- licznik do opóźnienia
cntr = 0

-- GPIO2 SSR do załączania pompy
gpio.mode&#40;4, gpio.OUTPUT&#41; 
gpio.write&#40;4, gpio.LOW&#41; 

-- Uruchomienie mqtt
m = mqtt.Client&#40;"ESP1", 120, "", ""&#41;
m&#58;lwt&#40;"/lwt", "Włącznik pompy cyrk. - brak połączenia", 0, 0&#41;

m&#58;connect&#40;"192.168.1.16", 1883, 0, function&#40;conn&#41;
     print&#40;"mqtt połączony z RSMB"&#41;
     m&#58;subscribe&#40;"openhab/cyrkulacja",0, function&#40;conn&#41; print&#40;"Cyrkulacja - subskrybcja"&#41;
     		m&#58;subscribe&#40;"openhab/stan_pompy",0, function&#40;conn&#41; print&#40;"Stan pompy - subskrybcja"&#41;
     		end&#41;
     end&#41;
end&#41;

-- m&#58;publish&#40;"openhab/cyrkulacja","Gotów",0,0&#41;

-- Procesor komunikatów mqtt
m&#58;on&#40;"message", function&#40;conn, topic, msg&#41;   
   print&#40;"Otrzymano&#58;" .. topic .. "&#58;" .. msg&#41;   
   if &#40;msg=="START"&#41; then 
     print&#40;"Włączam cyrkulację"&#41;   
     gpio.write&#40;4,gpio.HIGH&#41; 
     tmr.alarm&#40;2, 100, 1, wait &#41;
   elseif &#40;msg=="STOP"&#41; then
			cntr = 0
			tmr.stop&#40;2&#41;
			gpio.write&#40;4,gpio.LOW&#41;
     		print&#40;"Wyłączam cyrkulację"&#41;
     	elseif &#40;msg==0&#41; then
     		print&#40;"Pompa wyłączona"&#41;
     	elseif &#40;msg==1&#41; then
     		print&#40;"Pompa włączona"&#41;
   	else
     		print&#40;"Zły komunikat"&#41;   
   end   
end&#41;

gpio.trig&#40;4, "both", function &#40;level&#41;
  m&#58;publish&#40;"openhab/stan_pompy",gpio.read&#40;4&#41;,0,0&#41;
  print&#40;"Sent openhab/stan_pompy " .. gpio.read&#40;4&#41; &#41;   
end&#41;

function wait&#40;&#41;
	if cntr < 500 then
		cntr = cntr +1
-- 		print&#40;cntr&#41;
	else
		cntr = 0
		tmr.stop&#40;2&#41;
		gpio.write&#40;4,gpio.LOW&#41;
		print&#40;"Wyłączam cyrkulację"&#41;
	end
end
Ten cały Lua (czyli po portugalsku księżyc), to dla mnie bardzo dziwny język skryptowy, o bardzo luźnej składni. Dołożywszy do tego śmieszności ESP8266 (np. watchdog timer, którego nie można wyłączyć, bo Espressif ma w nosie licencję Open GPL), wychodzą takie (dla mnie, który całe życie w C programował) dziwaczne programy ;)

Program publikuje stan wyjścia GPIO 2 (które dla NodeMCU ma numer 4 - don't ask) jako komunikat openhab/stan_pompy oraz przyjmuje polecenia uruchomienia pompy cyrkulacyjnej komunikatem openhab/cyrkulacja (odpowiednio START i STOP). Jeśli cyrkulacja jest włączona, wyłącza ją po ok. półtorej minuty, żeby woda się nie chłodziła.

192.168.1.16 to adres serwera brokera mqtt (RSMB) i jednocześnie serwera OpenHAB. Serwer brokera w konfiguracji OpenHAB nazywa się mybroker (poniżej).

Konfiguracja OpenHAB:

test.sitemap:

Kod: Zaznacz cały

sitemap Cyrkulacja label="Cyrkulacja"
&#123;
	Frame label="WŁĄCZANIE CYRKULACJI"&#123;
		Switch item=MQTTCYRK label="CYRKULACJA" mappings=&#91;ON="WŁ.", OFF="WYŁ."&#93;
		Text item=MQTTSTAT
		&#125;
&#125;
test.items

Kod: Zaznacz cały

Number MQTTSTAT "Stan pompy &#91;MAP&#40;switch.map&#41;&#58;%d&#93;" &#123;mqtt="<&#91;mybroker&#58;openhab/stan_pompy&#58;state&#58;default&#93;"&#125;
Switch MQTTCYRK &#123;mqtt=">&#91;mybroker&#58;openhab/cyrkulacja&#58;command&#58;ON&#58;START&#93;,>&#91;mybroker&#58;openhab/cyrkulacja&#58;command&#58;OFF&#58;STOP&#93;"&#125;
Efekt działania:
http://files.tinypic.pl/i/00632/n4aba7kr1f3j.png

Obrazek

Pozdrawiam
Marcin S.

PS: Korzystałem z przodków pochodzących od osób: primalcortex, Pete Scargill, kayakpete. M.
Awatar użytkownika
Flora
Posty: 221
Rejestracja: wtorek 25 wrz 2012, 13:38
Lokalizacja: Bydgoszcz

Post autor: Flora »

Tak na szybko, bo zimno strasznie:

[youtube]http://www.youtube.com/watch?v=Q_e1zlD_Sxg[/youtube]
Marcin S.
Posty: 435
Rejestracja: piątek 12 wrz 2008, 10:11

Post autor: Marcin S. »

Fajne :) I światełkowe ;)

Pzdr.
M.
PS: Przyszły ESP-201. No i jak tu żyć bez snu...? M.
Awatar użytkownika
tOmki
Posty: 965
Rejestracja: niedziela 09 mar 2008, 02:20
Lokalizacja: Słupsk

Post autor: tOmki »

A Real-Time Networked VU Running on the ESP8266
http://hackaday.com/2015/02/17/a-real-t ... e-esp8266/
Marcin S.
Posty: 435
Rejestracja: piątek 12 wrz 2008, 10:11

Post autor: Marcin S. »

Ja chyba jakiegoś bloga założę :D

Do sterownika cyrkulacji dołożyłem przycisk sterowania ręcznego, żeby można było z palca odpalić.

Lua i NodeMCU coraz bardziej mnie zadziwiają. Wyszło na jaw, że:

1. Nie można używać funkcji gpio.read dla końcówek ustawionych jako wyjście. Nic o tym nie ostrzega, w NodeMCU API ani słowa, ale program w dowolnym momencie po prostu idzie w krzaki.

2. Nie można wysłać dwóch komunikatów mqtt jeden po drugim. Funkcja mqtt.client:publish() "wraca" przed zakończeniem wysyłki. Drugi komunikat powoduje

Kod: Zaznacz cały

PANIC&#58; unprotected error in call to Lua API &#40;main.lua&#58;77&#58; sending in process&#41;
Trzeba by jakieś kolejki robić, ale dla dwóch komunikatów na krzyż chamskie opóźnienie (250ms) działa ;)

3. Obciążenie na GPIO0 i 2 trzeba podłączać między + i wyjście. Howgh. ESP przy starcie ustawia stan wysoki, co może spowodować nieprzewidziane skutki.

4. Nie ma co liczyć na pull-upy GPIO. Trzeba dać własny i to mocny, u mnie 3k3 sprawiło, że przycisk na GPIO0 zaczął działać.

5. Resetu lepiej w powietrzu nie zostawiać. Nawet maźnięcie palcem potrafi wtedy spowodować restart. 100nF do masy, 10k do +3,3V załatwia sprawę.

Nowej wersji programu nie wstawiam, bo to długie jest. Chyba, że ktoś chce.

I jeszcze fotka bałaganu na biurku :)

Pozdrawiam
M.

EDIT: Projekt "cyrkulacja" uważam za zakończony :) W załączeniu kod programu, lekko podczyszczony, w C, oparty na bibliotece esp_mqtt by Tuan PM - nie zmieniałem nic w Copyright. Kod jest raczej bałaganiarski ale nie mam czasu na pieszczoty ;) Może się komuś przyda. Załącznikowi zmieniłem rozszerzenie .doc, bo .c nie przyjmuje serwer - trzeba poprawić po ściągnięciu.

Biblioteka ma kolejkowanie wysyłania komunikatów mqtt, układ działa stabilnie już trzeci dzień :p Pompa załączana przez przekaźnik sterowany 4N33 z GPIO0. Do GPIO2 podłączyłem przycisk do masy i mocny pull-up.
Załączniki
user_main.doc
(8.92 KiB) Pobrany 52 razy
Awatar użytkownika
tOmki
Posty: 965
Rejestracja: niedziela 09 mar 2008, 02:20
Lokalizacja: Słupsk

Post autor: tOmki »

How to Directly Program an Inexpensive ESP8266 WiFi Module
http://hackaday.com/2015/03/18/how-to-d ... fi-module/
ODPOWIEDZ