14、nodeMCU学习笔记--“时间”模块

rtc  utc  esp8266  nodeMCU

闲言碎语

nodeMCU的模块中,能吹的差不多没了,其他一些传感器的手上没有,估计也没机会介绍了。这回来说说nodeMCU的时间,涉及了2个模块sntprtctime。虽然需要两个模块,不过内容还是比较简单的。一起来看看。

sntp是一个可以用来获取网络时间的模块,也就是通过网络进行授时。

nodeMCU总共有三个和RTC有关的模块,分别是rtcmem、rtcfifo和rtctime。其中rtctime才是和时间相关的模块。

百度上找的

模块函数

序号 函数名 参数 返回值
1 sntp.sync() [server_ip], [callback], [errcallback]

sntp就一个函数,用法也是很简单。指定一个授时服务器的IP地址,比如上海交通大学网络中心202.120.2.101。也可以不传入任何参数,这时候会使用上一次授时过的IP。

当然了,使用这个函数的前提条件是要连入网络!如果打算在设备上电后校准时间,那需要连入WIFI后在使用这个函数。否则,不能正确授时。授时失败主要有下面4种情况:

  • 1: DNS lookup failed
  • 2: Memory allocation failure
  • 3: UDP send failed
  • 4: Timeout, no NTP response received

接着,来看看rtctime的函数,函数也不多。就5个,其中2个是睡眠相关的函数。

序号 函数名 参数 返回值
1 rtctime.dsleep() microseconds [, option]
2 rtctime.dsleep_aligned() aligned_us, minsleep_us [, option]
3 rtctime.epoch2cal() timestamp table
4 rtctime.get() sec, usec
5 rtctime.set() seconds, microseconds

.get()函数返回从1970/01/01到使用get函数那时的秒和微秒(时间戳)。对应的set函数就不用多说了。如果使用了.sync()并授时成功,rct的时间也会被更新,可以认为是调用了.set()函数。

get函数得到的时间是秒,我想没有多少人可以知道这个秒对应的年月日时分秒吧。这个时候就需要.epoch2cal()函数了,这个函数可以把时间戳变成时间。需要注意的是,这个时间没有时区和夏令时的概念,是个UTC时间。如果要换成北京时间,需要+8小时。

实践一下

例子只有一个,不过代码也不少,分开来看。首先是判断是否连上了wifi,判断依据是有没有IP地址。这部分写成独立的函数。

function isConnect()
    ip, _, _ = wifi.sta.getip()
    if ip ~= nil then
        print(ip)
        return true
    else
        print("without ip")
        return false
    end
end

接着是一个打印时间的函数,也是本文的主要内容啦 O(∩_∩)O

function refreshTime()
    time = rtctime.epoch2cal(rtctime.get())
    print(string.format("%04d/%02d/%02d %02d:%02d:%02d", 
                        time["year"], 
                        time["mon"], 
                        time["day"], 
                        time["hour"] + 8, 
                        time["min"], 
                        time["sec"]))
end

使用.get()函数获取时间戳。不过这个时间戳是秒,还需要使用..epoch2cal()把这个时间戳变成UTC。咱们这里是东8区,所以在小时time["hour"]这地方加8,变成北京时间。

这里的做法有误, 详见评论区!!!

tmr.alarm(0, 1000, tmr.ALARM_AUTO, function() 
    if isConnect() == true then
        tmr.stop(0)
        sntp.sync("202.120.2.101", 
            function()
                print("sync succeeded")
                tmr.alarm(0, 1000, tmr.ALARM_AUTO, refreshTime)
            end,
            function(index)
                print("failed : "..index)
            end
        )
    end
end)

设置一个定时器以1秒的频率调用第一个函数,当连上wifi的时候,使用.sync()函数,同步一下时间。接着,设置一个定时器以1秒的频率调用第二个函数,打印出时间。

来看个效果

把代码save到nodeMCU,你就可以看到上面的效果了。建议把文件名写成init.lua。

别忘记了配置连入wifi的密码和SSID要用wifi.sta.config()函数!

更多内容

↑ 点击上面的标题可用查看同文集的其它文章。

简书评论不能贴图, 如有需要可以到我的GitHub上提issues

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容