13、nodeMCU学习笔记--node模块

node  system-level  esp8266  nodeMCU

闲言碎语

nodeMCU的模块中,有个特别的模块,名叫node。看起来并不像是某种外设,但是和其名字有点接近。node模块看起来有点特殊。实际上,node模块提供的是一些系统级(system-level)的API。用来提供一些特别功能或者获取一些硬件信息。

模块函数

序号 函数名 参数 返回值
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个函数,提供了一些高级功能,反正我是没弄懂的。

.chipid.flashidflashsize.info可以获取一些设备信息。前三个分别是芯片ID(似乎不是唯一ID,没有找到对此的具体描述)、flash ID、flash大小。而最后一个可以获取更详细的信息,除了前面三种信息,还包括了版本号、flash的工作模式和速度。

.heap函数可以获取当前堆的大小。不过,可能因为碎片的影响,实际可用空间可能比这个值小。

.restore重置系统设置,看起来像恢复出厂值。具体什么设置文档并没有说到。重置候需要重启才能使用新配置。

setcupfreq可以用来设置CPU频率。有两种频率可选

  • node.CPU80MHZ
  • node.CPU160MHZ

有set函数,却没有get函数。而info却没有返回CPU频率,好像有点尴尬 o(╯□╰)o

实践一下

上面一句话介绍了几个函数的作用。剩下的几个函数不是一句话就能说完的,还需要动手实践一下才知道都有什么用。

.bootreason函数可以获取设备重启的原因。通常该函数返回两个值,都是表示重启的原因。后者比前者更详细的描述了重启的原因,文档建议使用第二个参数来获取重启的原因。如果是异常重启,则会返回更多的值。具体的重启原因有下面几个:

  • 0, power-on:上电
  • 1, hardware watchdog reset:硬件看门狗复位
  • 2, exception reset:异常重启
  • 3, software watchdog reset:软件看门狗复位
  • 4, software restart:软件重启
  • 5, wake from deep sleep:设备唤醒
  • 6, external reset:外部重启
_, reset_reason = node.bootreason()

.restart函数可以让设备重启,也就是软重启。

在设备上电后,先使用.bootreason函数看看返回了什么值。接着使用.restart重启一下设备,再使用.bootreason看看这次返回的是什么值。在看一个尴尬的例子

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

这个例子需要将文件名保存为init.lua。原本以为上电后,获取复位原因会是 0 的,结果却返回了6,也就是外部复位,这就尴尬了。另外,我这个板子上面的reset键按了却一点反应都没有。

.compile函数的作用是将.lua文件编译成字节码。

=node.compile("init.lua")

在右边的命令行里输入上面的代码就可以将lua文件编译成.lc文件了。然而,编译后文件竟然比lua文件大。


有点看不懂了

接着来看node.dsleep函数,用来让设备进入休眠模式的。有两个参数,第一个是睡眠时间,单位us。第二个是关于RF重启后的状态。具体看这里

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连到一起。睡眠时间后将会拉低RST,使设备重启。这唤醒方式够暴力的 -_-||

最后来看两个函数,.input.output.input用于接收一个lua语句并执行。.output用于重定向输出执行结果。官网文档有个不错的例子,这里偷懒不自己写例子,直接搬运过来。不过,官方的s_output函数没有换行。

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)

这个例子需要连接wifi,wifi部分内容可以看这里。首先是创建一个server,接着创建一个监听。重映射了输出。最后绑定了两个事件回调。

文档还中提到,不要使用print(),可能会出现无限递归,导致重启。


这图又是这么大,囧

node模块的内容就介绍到这里,后面有机会再来说说最后两个函数。用这两个函数和file模块、net模块、wifi模块结合来实现一个类似于esplorer的工具。

更多内容

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

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

推荐阅读更多精彩内容