main.lua 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "sntpdemo"
  3. VERSION = "1.0.0"
  4. -- 统一联网函数
  5. sys.taskInit(function()
  6. -----------------------------
  7. -- 统一联网函数, 可自行删减
  8. ----------------------------
  9. if wlan and wlan.connect then
  10. -- wifi 联网, Air8101系列均支持,ssid、password修改为自己的wifi参数
  11. local ssid = "momowifi"
  12. local password = "abc123456"
  13. log.info("wifi", ssid, password)
  14. wlan.init()
  15. wlan.setMode(wlan.STATION) -- 默认也是这个模式,不调用也可以
  16. device_id = wlan.getMac()
  17. wlan.connect(ssid, password, 1)
  18. else
  19. -- 其他不认识的bsp, 循环提示一下吧
  20. while 1 do
  21. sys.wait(1000)
  22. log.info("bsp", "本bsp可能未适配网络层, 请查证")
  23. end
  24. end
  25. -- 默认都等到联网成功
  26. sys.waitUntil("IP_READY")
  27. sys.publish("net_ready", device_id)
  28. end)
  29. sys.taskInit(function()
  30. -- 等待联网
  31. local ret, device_id = sys.waitUntil("net_ready")
  32. sys.wait(1000)
  33. -- sntp内置了几个常用的ntp服务器, 也支持自选服务器
  34. while 1 do
  35. -- 使用内置的ntp服务器地址, 包括阿里ntp
  36. log.info("开始执行SNTP")
  37. socket.sntp()
  38. -- 自定义ntp地址
  39. -- socket.sntp("ntp.aliyun.com")
  40. -- socket.sntp({"baidu.com", "abc.com", "ntp.air32.cn"})
  41. -- 通常只需要几百毫秒就能成功
  42. local ret = sys.waitUntil("NTP_UPDATE", 5000)
  43. if ret then
  44. -- 以下是获取/打印时间的演示,注意时区问题
  45. log.info("sntp", "时间同步成功", "本地时间", os.date())
  46. log.info("sntp", "时间同步成功", "UTC时间", os.date("!%c"))
  47. log.info("sntp", "时间同步成功", "RTC时钟(UTC时间)", json.encode(rtc.get()))
  48. log.info("sntp", "时间同步成功", "本地时间戳", os.time())
  49. local t = os.date("*t")
  50. log.info("sntp", "时间同步成功", "本地时间os.date() json格式", json.encode(t))
  51. log.info("sntp", "时间同步成功", "本地时间os.date(os.time())", os.time(t))
  52. -- 正常使用, 一小时一次, 已经足够了, 甚至1天一次也可以
  53. -- sys.wait(3600000)
  54. -- 这里为了演示, 用5秒一次
  55. sys.wait(5000)
  56. else
  57. log.info("sntp", "时间同步失败")
  58. sys.wait(60000) -- 1分钟后重试
  59. end
  60. -- 注意, 至少成功完成2次sntp,该时间戳才比较准确
  61. -- 如果仅完成了一次sntp, 时间戳比标准时间会慢一个网络延时的时长(10~500ms)不等
  62. if socket.ntptm then
  63. local tm = socket.ntptm()
  64. log.info("tm数据", json.encode(tm))
  65. log.info("时间戳", string.format("%u.%03d", tm.tsec, tm.tms))
  66. sys.wait(5000)
  67. end
  68. end
  69. end)
  70. sys.subscribe("NTP_ERROR", function()
  71. log.info("socket", "sntp error")
  72. -- socket.sntp()
  73. end)
  74. -- 用户代码已结束---------------------------------------------
  75. -- 结尾总是这一句
  76. sys.run()
  77. -- sys.run()之后后面不要加任何语句!!!!!