Я работаю над небольшим проектом, использующим ESP8266 с NodeMCU и Lua. Я подозреваю, что нашел ошибку, но так как я новичок в Lua (и двух других тоже!), Я надеюсь на некоторую помощь в подтверждении, прав ли я, или я что-то пропустил (больше скорее всего!).
Микропрограмма NodeMCU содержит встроенный клиентский модуль SNTP, который обновляет синхронизированное время на системные часы (модуль rtctime). Кажется, что функция обратного вызова успеха вызывается, когда (или, возможно, раньше) происходит сбой синхронизации NTP. Это происходит, например, если Wi-Fi не подключен, или иногда при первой попытке синхронизации после загрузки (с подключенным Wi-Fi). Согласно документу, rtctime.get () возвращает ноль, если текущее время недоступно; это результат, который я получаю, еще раз показывая, что синхронизация NTP не была успешной. Я не могу понять, почему функция успеха вызывается в этот момент, заранее или вместо функции отказа (как я и ожидал).
Модуль sntp, на который я ссылаюсь, находится здесь - к сожалению, исходный код C был немного над моей головой: https://nodemcu.readthedocs.io/en/master/en/modules/sntp/
Мой (минимальный) код:
-- Define callback function for ntp sync success
function ntpSyncSuccess (sec, usec, server, info)
print('SNTP time sync successful!')
print("rtctime.get() returns: ", rtctime.get())
end
-- Configure and start NTP time sync with auto repeat enabled
sntp.sync("0.au.pool.ntp.org",
ntpSyncSuccess(sec, usec, server, info), --success callback
function() -- error callback
print('SNTP time sync failed!')
end,
1 -- enable autorepeat (SNTP sync every 1000 seconds (~17 min))
)
Результат последовательного вывода при загрузке устройства и выполнении кода (обратите внимание на 2-ю и 3-ю последние строки):
NodeMCU custom build by frightanic.com
branch: master
commit: 11592951b90707cdcb6d751876170bf4da82850d
SSL: false
modules: cron,file,gpio,i2c,net,node,rotary,rtctime,sntp,struct,tmr,uart,wifi
build created on 2019-01-16 03:11
powered by Lua 5.1.4 on SDK 2.2.1(6ab97e9)
lua: cannot open init.lua
> print(uart.setup(0, 115200, 8, 0, 1, 1 ))
115200
> dofile("ntpTest.lua")
SNTP time sync successful!
rtctime.get() returns: 0 0 0
> SNTP time sync failed!