DoitCar 开发流程

init.lua文件

  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程序在刚刚启动的时候,内存消耗较大,在启动完成后回到正常。因此可以在启动后,稍微延迟一定时间再进行编译。