14弯淘、nodeMCU學(xué)習(xí)筆記--“時(shí)間”模塊

rtc??utc??esp8266??nodeMCU

閑言碎語

nodeMCU的模塊中,能吹的差不多沒了妙痹,其他一些傳感器的手上沒有铸史,估計(jì)也沒機(jī)會(huì)介紹了。這回來說說nodeMCU的時(shí)間细诸,涉及了2個(gè)模塊sntprtctime。雖然需要兩個(gè)模塊陋守,不過內(nèi)容還是比較簡(jiǎn)單的震贵。一起來看看。

sntp是一個(gè)可以用來獲取網(wǎng)絡(luò)時(shí)間的模塊水评,也就是通過網(wǎng)絡(luò)進(jìn)行授時(shí)猩系。

nodeMCU總共有三個(gè)和RTC有關(guān)的模塊,分別是rtcmem中燥、rtcfifo和rtctime寇甸。其中rtctime才是和時(shí)間相關(guān)的模塊。

百度上找的

模塊函數(shù)

序號(hào) 函數(shù)名 參數(shù) 返回值
1 sntp.sync() [server_ip], [callback], [errcallback]

sntp就一個(gè)函數(shù)疗涉,用法也是很簡(jiǎn)單拿霉。指定一個(gè)授時(shí)服務(wù)器的IP地址,比如上海交通大學(xué)網(wǎng)絡(luò)中心202.120.2.101咱扣。也可以不傳入任何參數(shù)绽淘,這時(shí)候會(huì)使用上一次授時(shí)過的IP。

當(dāng)然了闹伪,使用這個(gè)函數(shù)的前提條件是要連入網(wǎng)絡(luò)沪铭!如果打算在設(shè)備上電后校準(zhǔn)時(shí)間壮池,那需要連入WIFI后在使用這個(gè)函數(shù)。否則杀怠,不能正確授時(shí)椰憋。授時(shí)失敗主要有下面4種情況:

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

接著,來看看rtctime的函數(shù)赔退,函數(shù)也不多橙依。就5個(gè),其中2個(gè)是睡眠相關(guān)的函數(shù)离钝。

序號(hào) 函數(shù)名 參數(shù) 返回值
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()函數(shù)返回從1970/01/01到使用get函數(shù)那時(shí)的秒和微秒(時(shí)間戳)票编。對(duì)應(yīng)的set函數(shù)就不用多說了。如果使用了.sync()并授時(shí)成功卵渴,rct的時(shí)間也會(huì)被更新慧域,可以認(rèn)為是調(diào)用了.set()函數(shù)。

get函數(shù)得到的時(shí)間是秒浪读,我想沒有多少人可以知道這個(gè)秒對(duì)應(yīng)的年月日時(shí)分秒吧昔榴。這個(gè)時(shí)候就需要.epoch2cal()函數(shù)了,這個(gè)函數(shù)可以把時(shí)間戳變成時(shí)間碘橘。需要注意的是互订,這個(gè)時(shí)間沒有時(shí)區(qū)和夏令時(shí)的概念,是個(gè)UTC時(shí)間痘拆。如果要換成北京時(shí)間仰禽,需要+8小時(shí)。

實(shí)踐一下

例子只有一個(gè)纺蛆,不過代碼也不少吐葵,分開來看。首先是判斷是否連上了wifi桥氏,判斷依據(jù)是有沒有IP地址温峭。這部分寫成獨(dú)立的函數(shù)。

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

接著是一個(gè)打印時(shí)間的函數(shù)字支,也是本文的主要內(nèi)容啦 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()函數(shù)獲取時(shí)間戳凤藏。不過這個(gè)時(shí)間戳是秒,還需要使用..epoch2cal()把這個(gè)時(shí)間戳變成UTC堕伪。咱們這里是東8區(qū)揖庄,所以在小時(shí)time["hour"]這地方加8,變成北京時(shí)間欠雌。

這里的做法有誤, 詳見評(píng)論區(qū)!!!

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)

設(shè)置一個(gè)定時(shí)器以1秒的頻率調(diào)用第一個(gè)函數(shù)抠艾,當(dāng)連上wifi的時(shí)候,使用.sync()函數(shù)桨昙,同步一下時(shí)間检号。接著腌歉,設(shè)置一個(gè)定時(shí)器以1秒的頻率調(diào)用第二個(gè)函數(shù),打印出時(shí)間齐苛。

來看個(gè)效果

把代碼save到nodeMCU翘盖,你就可以看到上面的效果了。建議把文件名寫成init.lua凹蜂。

別忘記了配置連入wifi的密碼和SSID要用wifi.sta.config()函數(shù)馍驯!

更多內(nèi)容

↑ 點(diǎn)擊上面的標(biāo)題可用查看同文集的其它文章。

簡(jiǎn)書評(píng)論不能貼圖, 如有需要可以到我的GitHub上提issues

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末玛痊,一起剝皮案震驚了整個(gè)濱河市汰瘫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌擂煞,老刑警劉巖混弥,帶你破解...
    沈念sama閱讀 210,835評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異对省,居然都是意外死亡蝗拿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門蒿涎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哀托,“玉大人,你說我怎么就攤上這事劳秋〔质郑” “怎么了?”我有些...
    開封第一講書人閱讀 156,481評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵玻淑,是天一觀的道長(zhǎng)嗽冒。 經(jīng)常有香客問我,道長(zhǎng)岁忘,這世上最難降的妖魔是什么辛慰? 我笑而不...
    開封第一講書人閱讀 56,303評(píng)論 1 282
  • 正文 為了忘掉前任区匠,我火速辦了婚禮干像,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘驰弄。我一直安慰自己麻汰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,375評(píng)論 5 384
  • 文/花漫 我一把揭開白布戚篙。 她就那樣靜靜地躺著五鲫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪岔擂。 梳的紋絲不亂的頭發(fā)上位喂,一...
    開封第一講書人閱讀 49,729評(píng)論 1 289
  • 那天浪耘,我揣著相機(jī)與錄音,去河邊找鬼塑崖。 笑死七冲,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的规婆。 我是一名探鬼主播澜躺,決...
    沈念sama閱讀 38,877評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼抒蚜!你這毒婦竟也來了掘鄙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,633評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤嗡髓,失蹤者是張志新(化名)和其女友劉穎操漠,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體器贩,經(jīng)...
    沈念sama閱讀 44,088評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡颅夺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,443評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蛹稍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吧黄。...
    茶點(diǎn)故事閱讀 38,563評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖唆姐,靈堂內(nèi)的尸體忽然破棺而出拗慨,到底是詐尸還是另有隱情,我是刑警寧澤奉芦,帶...
    沈念sama閱讀 34,251評(píng)論 4 328
  • 正文 年R本政府宣布赵抢,位于F島的核電站,受9級(jí)特大地震影響声功,放射性物質(zhì)發(fā)生泄漏烦却。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,827評(píng)論 3 312
  • 文/蒙蒙 一先巴、第九天 我趴在偏房一處隱蔽的房頂上張望其爵。 院中可真熱鬧,春花似錦伸蚯、人聲如沸摩渺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,712評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽摇幻。三九已至闭树,卻和暖如春牵舵,著一層夾襖步出監(jiān)牢的瞬間斑响,已是汗流浹背官紫。 一陣腳步聲響...
    開封第一講書人閱讀 31,943評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留狂芋,地道東北人棵逊。 一個(gè)月前我還...
    沈念sama閱讀 46,240評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像银酗,于是被迫代替她去往敵國和親辆影。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,435評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理黍特,服務(wù)發(fā)現(xiàn)蛙讥,斷路器,智...
    卡卡羅2017閱讀 134,626評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,724評(píng)論 25 707
  • php usleep() 函數(shù)延遲代碼執(zhí)行若干微秒灭衷。 unpack() 函數(shù)從二進(jìn)制字符串對(duì)數(shù)據(jù)進(jìn)行解包次慢。 uni...
    思?jí)鬚HP閱讀 1,983評(píng)論 1 24
  • fuerzhou閱讀 273評(píng)論 0 1
  • JavaScript 沒有提供傳統(tǒng)面向?qū)ο笳Z言中的類式繼承,而是通過原型委托的方式來實(shí)現(xiàn)對(duì)象與對(duì)象之間的繼承翔曲。 1...
    白小蟲閱讀 242評(píng)論 0 0