ESP8266 - pierwsze kroki
Ostatnio pisałem o ESP8266 , dzisiaj pora rozszerzyć temat. Wiemy już jak podłączyć układ do komputera oraz jak wgrać firmware NodeMCU. Nasz ESP łączy się też automatycznie z domową siecią wifi. Pora zabrać się za programowie w Lua. Na razie trochę dla testu, trochę dla zabawy, trochę żeby poznać możliwości samodzielnej pracy układu, jak i jego stabilność.
Połączmy się więc z ESP8266 przez port szeregowy, jak dotychczas. Ostatnio robiłem to z użyciem oprogramowania Arduino, ale na dłuższą metę to mało wygodne. Pod Linuksem dużo prościej użyć screena, np. wydając komendę screen /dev/ttyUSB0 9600. Pod windows można użyć dowolnego teminala, jak choćby putty , który poza tym, że jest klientem ssh, to może działać jako terminal. Po połączeniu otrzymujemy znak zachęty interpretera Lua/NodeMCU.
Możemy więc przykładowo poprosić o podanie aktualnego adresu IP, którym posługuje się układ przy połączeniu wifi:
> print(wifi.sta.getip())
192.168.7.7
Można też zrestartować układ:
node.restart()
Działa jak trzeba. Tylko skoro już mamy połączeniu wifi i będziemy dużo eksperymentować z programowaniem, to dobrze byłoby wykorzystać ten rodzaj połączenia, zamiast ciągle nosić ESP i FTDI na kablu. Wszak to mało wygodne i jest formą proszenia się o zwarcie czy inne problemy. Do pierwszych zabaw dobrze więc by było, żeby przez wifi dało się połączyć z układem za pośrednictwem telnetu i wydawać polecenia jak przez połączenie szeregowe. Na stronie NodeMCU jest nawet stosowny przykład:
s=net.createServer(net.TCP,180)
s:listen(2323,function(c)
function s_output(str)
if(c~=nil)
then c:send(str)
end
end
node.output(s_output, 0)
c:on("receive",function(c,l)
node.input(l)
end)
c:on("disconnection",function(c)
node.output(nil)
end)
print("Welcome to NodeMcu world.")
end)
Co robi program? Przede wszystkim tworzy serwer (zmienna s) i zaczyna nasłuchiwać na porcie 2323/tcp. Przy połączeniu przypina wyjście interpretera Lua do gniazda (mamy więc wyjście przez nasze połączenie, nie przez port szeregowy), a linie tekstu które pojawią się przez połączenie są przekierowywane do wejścia interpretera. Po rozłączeniu wyjście jest wyrejestrowywane i wraca do portu szeregowego. Mamy więc sytuację, że po połączeniu dostajemy komunikat powitalny i dalej pracujemy jak przez połączenie szeregowe.
Można oczywiście ten program przepisać przy połączeniu terminalowym, ale po restarcie nie zostanie z niego ślad. Można też go umieścić w pliku init.lua, który jest automatycznie wykonywany po starcie systemu. Oczywiście ta druga opcja jest praktyczniejsza. Jak to zrobić? Najprościej wydając komendy Lua do otwarcia pliku i zapisu kolejnych linii, ale na dłuższą metę to niewygodne, szczególnie gdy mamy w perspektywie modyfikowanie tego i innych plików oraz uruchamianie większej liczby układów.
Sprawę znacznie upraszcze użycie programu w języku python nodemcu-uploader . Ściągamy więc uploader, tworzymy plik init.lua z powyższym przykładem kodu i wysyłamy do ESP8266:
$ ../nodemcu-uploader/nodemcu-uploader.py upload init.lua
Preparing esp for transfer.
Transfering init.lua
All done!
Szybkie, proste i skuteczne. Teraz już można odłączyć układ od komputera i podłączyć do niezależnego zasilania (na razie choćby do ładowarki od telefonu przez interfejs FTDI, jak do komputera). W dalszej kolejności można ekperymenty prowadzić przez telnet (na port 2323).
Sprawdźmy więc jeszcze kilka poleceń zaczerpniętych z API NodeMCU . Na początek sprawdźmy adres MAC:
> print(wifi.sta.getmac())
18-FE-34-9D-02-F5
Aktualny zegar (w sekundach):
> print(tmr.time())
639453607
Ustawmy zegar nr 0 (dostępne 0-6) aby po sekundzie napisał “jest”:
> tmr.alarm(0, 1000, 0, function() print("jest") end )
jest
Albo, żeby pisał co sekundę:
> tmr.alarm(0, 1000, 1, function() print("jest") end )
jestjestjestjest
I przerwijmy to wypisywanie:
> tmr.stop(0)
I na początek tyle wystarczy. Ciekawiej będzie po podłączeniu czegokolwiek do układu (np. termometru). Tym jednak zajmiemy się już następnym razem.

Komentarze (2)
Archiwum komentarzy z poprzedniej wersji bloga.
Właśnie przymierzam się do zakupu kilku sztuk żeby zrobić sobie sensory temperatury i natknąłem się na IDE do obsługi ESP8266 - http://esp8266.ru/esplorer/ - nie wiem na ile jest ono przydatne ale mam nadzieję sprawdzić to już niedługo :)
Tez bedacm