13沿盅、nodeMCU學(xué)習(xí)筆記--node模塊

node??system-level??esp8266??nodeMCU

閑言碎語(yǔ)

nodeMCU的模塊中,有個(gè)特別的模塊籽腕,名叫node嗡呼。看起來(lái)并不像是某種外設(shè)皇耗,但是和其名字有點(diǎn)接近南窗。node模塊看起來(lái)有點(diǎn)特殊。實(shí)際上郎楼,node模塊提供的是一些系統(tǒng)級(jí)(system-level)的API万伤。用來(lái)提供一些特別功能或者獲取一些硬件信息。

模塊函數(shù)

序號(hào) 函數(shù)名 參數(shù) 返回值
1 node.bootreason() rawcode, reason [, exccause, epc1, epc2, epc3, excvaddr, depc ]
2 node.chipid() chip ID (number)
3 node.compile() filename
4 node.dsleep() us, option
5 node.flashid() flash ID (number)
6 node.flashsize() flash 大小 (integer)
7 node.heap() 剩余堆大小 (number)
8 node.info() majorVer(number), minorVer, devVer, chipid, flashid, flashsize, flashmode, flashspeed
9 node.input() str
10 node.output() function(str), serial_debug
11 node.restart()
12 node.restore()
13 node.setcpufreq() speed frequency (number)
14 node.stripdebug()
15 node.osprint()
16 node.egc.setmode()
17 node.task.post()

模塊的最后4個(gè)函數(shù)呜袁,提供了一些高級(jí)功能敌买,反正我是沒(méi)弄懂的。

.chipid阶界、.flashid虹钮、flashsize.info可以獲取一些設(shè)備信息聋庵。前三個(gè)分別是芯片ID(似乎不是唯一ID,沒(méi)有找到對(duì)此的具體描述)芙粱、flash ID祭玉、flash大小。而最后一個(gè)可以獲取更詳細(xì)的信息春畔,除了前面三種信息脱货,還包括了版本號(hào)、flash的工作模式和速度律姨。

.heap函數(shù)可以獲取當(dāng)前堆的大小振峻。不過(guò),可能因?yàn)樗槠挠绊懺穹荩瑢?shí)際可用空間可能比這個(gè)值小扣孟。

.restore重置系統(tǒng)設(shè)置,看起來(lái)像恢復(fù)出廠值缓淹。具體什么設(shè)置文檔并沒(méi)有說(shuō)到哈打。重置候需要重啟才能使用新配置塔逃。

setcupfreq可以用來(lái)設(shè)置CPU頻率讯壶。有兩種頻率可選

  • node.CPU80MHZ
  • node.CPU160MHZ

有set函數(shù),卻沒(méi)有g(shù)et函數(shù)湾盗。而info卻沒(méi)有返回CPU頻率伏蚊,好像有點(diǎn)尷尬 o(╯□╰)o

實(shí)踐一下

上面一句話介紹了幾個(gè)函數(shù)的作用。剩下的幾個(gè)函數(shù)不是一句話就能說(shuō)完的格粪,還需要?jiǎng)邮謱?shí)踐一下才知道都有什么用躏吊。

.bootreason函數(shù)可以獲取設(shè)備重啟的原因。通常該函數(shù)返回兩個(gè)值帐萎,都是表示重啟的原因比伏。后者比前者更詳細(xì)的描述了重啟的原因,文檔建議使用第二個(gè)參數(shù)來(lái)獲取重啟的原因疆导。如果是異常重啟赁项,則會(huì)返回更多的值。具體的重啟原因有下面幾個(gè):

  • 0, power-on:上電
  • 1, hardware watchdog reset:硬件看門狗復(fù)位
  • 2, exception reset:異常重啟
  • 3, software watchdog reset:軟件看門狗復(fù)位
  • 4, software restart:軟件重啟
  • 5, wake from deep sleep:設(shè)備喚醒
  • 6, external reset:外部重啟
_, reset_reason = node.bootreason()

.restart函數(shù)可以讓設(shè)備重啟澈段,也就是軟重啟悠菜。

在設(shè)備上電后,先使用.bootreason函數(shù)看看返回了什么值败富。接著使用.restart重啟一下設(shè)備悔醋,再使用.bootreason看看這次返回的是什么值。在看一個(gè)尷尬的例子

tmr.alarm(0, 5000, tmr.ALARM_SINGLE, function() 
    _, reason = node.bootreason()
    print("reason : "..reason)
    if reason == 6 then
        node.restart()
    end
end)

這個(gè)例子需要將文件名保存為init.lua兽叮。原本以為上電后芬骄,獲取復(fù)位原因會(huì)是 0 的猾愿,結(jié)果卻返回了6,也就是外部復(fù)位账阻,這就尷尬了匪蟀。另外,我這個(gè)板子上面的reset鍵按了卻一點(diǎn)反應(yīng)都沒(méi)有宰僧。

.compile函數(shù)的作用是將.lua文件編譯成字節(jié)碼材彪。

=node.compile("init.lua")

在右邊的命令行里輸入上面的代碼就可以將lua文件編譯成.lc文件了。然而琴儿,編譯后文件竟然比lua文件大段化。


有點(diǎn)看不懂了

接著來(lái)看node.dsleep函數(shù),用來(lái)讓設(shè)備進(jìn)入休眠模式的造成。有兩個(gè)參數(shù)显熏,第一個(gè)是睡眠時(shí)間,單位us晒屎。第二個(gè)是關(guān)于RF重啟后的狀態(tài)喘蟆。具體看這里

tmr.alarm(0, 5000, tmr.ALARM_SINGLE, function() 
    _, reason = node.bootreason()
    print("reason : "..reason)
    if reason == 6 then
        node.dsleep(1000000)
    end
end)

使用睡眠模式鼓鲁,需要將GPIO16和RST連到一起蕴轨。睡眠時(shí)間后將會(huì)拉低RST,使設(shè)備重啟骇吭。這喚醒方式夠暴力的 -_-||

最后來(lái)看兩個(gè)函數(shù)橙弱,.input.output.input用于接收一個(gè)lua語(yǔ)句并執(zhí)行燥狰。.output用于重定向輸出執(zhí)行結(jié)果棘脐。官網(wǎng)文檔有個(gè)不錯(cuò)的例子,這里偷懶不自己寫例子龙致,直接搬運(yùn)過(guò)來(lái)蛀缝。不過(guò),官方的s_output函數(shù)沒(méi)有換行目代。

s=net.createServer(net.TCP)
s:listen(2323,function(c)
   con_std = c
   function s_output(str)
      if(con_std~=nil) then 
         str = str..'\n'
         con_std:send(str)
      end
   end
   node.output(s_output, 0)   -- re-direct output to function s_ouput.
   c:on("receive",function(c,l)
      node.input(l)           -- works like pcall(loadstring(l)) but support multiple separate line
   end)
   c:on("disconnection",function(c)
      con_std = nil
      node.output(nil)        -- un-regist the redirect output function, output goes to serial
   end)
end)

這個(gè)例子需要連接wifi屈梁,wifi部分內(nèi)容可以看這里。首先是創(chuàng)建一個(gè)server像啼,接著創(chuàng)建一個(gè)監(jiān)聽(tīng)俘闯。重映射了輸出。最后綁定了兩個(gè)事件回調(diào)忽冻。

文檔還中提到真朗,不要使用print(),可能會(huì)出現(xiàn)無(wú)限遞歸僧诚,導(dǎo)致重啟遮婶。


這圖又是這么大蝗碎,囧

node模塊的內(nèi)容就介紹到這里,后面有機(jī)會(huì)再來(lái)說(shuō)說(shuō)最后兩個(gè)函數(shù)旗扑。用這兩個(gè)函數(shù)和file模塊蹦骑、net模塊、wifi模塊結(jié)合來(lái)實(shí)現(xiàn)一個(gè)類似于esplorer的工具臀防。

更多內(nèi)容

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市袱衷,隨后出現(xiàn)的幾起案子捎废,更是在濱河造成了極大的恐慌,老刑警劉巖致燥,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件登疗,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡嫌蚤,警方通過(guò)查閱死者的電腦和手機(jī)辐益,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)脱吱,“玉大人智政,你說(shuō)我怎么就攤上這事〖被耍” “怎么了女仰?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵猜年,是天一觀的道長(zhǎng)抡锈。 經(jīng)常有香客問(wèn)我,道長(zhǎng)乔外,這世上最難降的妖魔是什么床三? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮杨幼,結(jié)果婚禮上撇簿,老公的妹妹穿的比我還像新娘。我一直安慰自己差购,他們只是感情好四瘫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著欲逃,像睡著了一般找蜜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上稳析,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天洗做,我揣著相機(jī)與錄音弓叛,去河邊找鬼。 笑死诚纸,一個(gè)胖子當(dāng)著我的面吹牛撰筷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播畦徘,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼毕籽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了井辆?” 一聲冷哼從身側(cè)響起影钉,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎掘剪,沒(méi)想到半個(gè)月后平委,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡夺谁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年廉赔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匾鸥。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蜡塌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出勿负,到底是詐尸還是另有隱情馏艾,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布奴愉,位于F島的核電站琅摩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏锭硼。R本人自食惡果不足惜房资,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望檀头。 院中可真熱鬧轰异,春花似錦、人聲如沸暑始。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)廊镜。三九已至牙肝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背惊奇。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工互躬, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人颂郎。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓吼渡,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親乓序。 傳聞我的和親對(duì)象是個(gè)殘疾皇子寺酪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

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