NodeMCU在启动时预留了init.lua作为应用程序入口,如果没有该文件则忽略,如果存在则开始执行该文件。利用这个特性可以在init.lua中写入需要执行的代码,以便上电自动运行。
资料包中文件名为“init.lua”。
1 print("\n")
2 print("ESP8266 Started")
3
4 local luaFile = {"fileName.lua"}
5 for i, f in ipairs(luaFile) do
6 if file.open(f) then
7 file.close()
8 print("Compile File:"..f)
9 node.compile(f)
10 print("Remove File:"..f)
11 file.remove(f)
12 end
13 end
14
15 luaFile = nil
16 collectgarbage()
17
18 dofile("fileName.lc");
程序第1、2行打印字符信息。
第4行定义需要编译的lua文件名。其中“fileName”需要根据不同的文件进行更改。如果要编译多个文件,在后面继续添加即可。例如: local luaFile = {"fileName1.lua","fileName2.lua"}
第5行是使用for循环完成多个文件的操作。
第6行判断文件是否存在,如果存在则执行编译。如果不存在则忽略。
第7行是关闭已经打开的文件。
第8~11行完成编译,自动生成“filename.lc”文件。
第15~16行是回收内存。
第17行是执行刚刚编译完成的二进制文件。 Tips:在Lua程序中,默认变量为全局类型,如果要限定变量只能在本文件中使用,需要在变量前加入关键词“local”。在使用完后,需要将其赋值为nil,然后调用collectgarbage()显示的回收内存。
下载程序,重启NodeMCU运行时,如果发现编译出现内存不足的警告。如下所示:
lua: init.lua:8: not enough memory
这是因为Lua程序在刚刚启动的时候,内存消耗较大,在启动完成后回到正常。因此可以在启动后,稍微延迟一定时间再进行编译。