Суть такова - имеется портянка кода (чуть-чуть обрезал и убрал точки доступа/пароли для релевантности):
В основном теле кода последовательно выполняются [inline]network()[/inline] и [inline]debugging()[/inline]. По идее, при функциональном программировании функции выполняются последовательно, одна за другой, но в NodeMCU реализовано что-то вроде многопоточности (камнями просьба не бить, знаю, что не многопоточность в истинном смысле этого слова), и эти функции выполняются асинхронно. В итоге они работают настолько быстро, что [inline]wifi.sta.connect()[/inline] не успевает отрабатывать вовремя, чтобы отладочная строка выводила свойства соединения к роутеру. Я пробовал использовать библиотеку nodemcu-timer (GitHub - simenkid/nodemcu-timer: Timer utility in node.js style for NodeMcu on ESP8266 WiFi SoC), но, как я говорил, работает она только в контексте функции, т.е. не блокирует основной поток.
Фикс опционален, устройство работает и так, но с эстетической точки зрения получается "не ок".
P.S. Знаю про злобную-злобную функцию tmr.delay(), которая способна уронить Wi-Fi на чипе на время действия, так что хотелось бы обойтись без неё.
P.P.S. В идеале надо ловить в функции debugging() эвент от network(), но я не знаю, как это делается в контексте NodeMCU.
Код:
function network()
print("Network init...")
--wifi.setmode(wifi.STATION)
wifi.setmode(wifi.STATIONAP)
--wifi.setmode(wifi.SOFTAP)
--Start access point config--
wifi.ap.config({ssid="Project",pwd="password"})
wifi.ap.setip({ip="192.168.0.1",netmask="255.255.255.0",gateway="192.168.0.1"})
wifi.ap.dhcp.config({start="192.168.0.10"})
wifi.ap.dhcp.start()
--End access point config--
--Start router config--
wifi.sta.config("OpenWrt","password")
wifi.sta.connect()
--End router config--
end
function debugging()
print("WiFi module data:")
print("Mode: "..tostring(wifi.getmode()))
print("PHY mode: "..tostring(wifi.getphymode()))
print("Channel "..tostring(wifi.getchannel()))
print("Router connection:")
print(tostring(wifi.sta.getmac()).." as "..tostring(wifi.sta.getip()))
print("Point connection:")
print(tostring(wifi.ap.getip()).."/"..tostring(wifi.ap.getbroadcast()))
print("Users:")
for mac,ip in pairs(wifi.ap.getclient()) do
print(tostring(mac).." known as "..tostring(ip))
end
end
Фикс опционален, устройство работает и так, но с эстетической точки зрения получается "не ок".
P.S. Знаю про злобную-злобную функцию tmr.delay(), которая способна уронить Wi-Fi на чипе на время действия, так что хотелось бы обойтись без неё.
P.P.S. В идеале надо ловить в функции debugging() эвент от network(), но я не знаю, как это делается в контексте NodeMCU.