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.
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