ESP8266 - 是否可以从 C(不是完整的 NodeMCU 环境)中 运行 Lua?
ESP8266 - Is it possible to just run Lua from C (not the full NodeMCU environment)?
我正在使用 ESP8266,我不想在整个项目中使用 Lua,我只想 运行 一些 Lua 代码片段,已收到来自 wifi/sd 卡片。我需要启动一个 Lua 环境和 运行 脚本,然后它们最终会调用一些本机函数来执行低级任务。换句话说,我只想使用 Lua 作为简单的脚本语言(如预期的那样)来实现一些动态行为。可能吗?是否有任何用于 arduino 的 lualib 版本?
提前致谢!
例如,您可以简单地将 Lua 嵌入到 extlibs/ 文件夹中,然后在编译程序时将 link 嵌入其中。
已有 Lua 个二进制文件,但自己构建它更容易且更好(因为它是多平台的)。
ESP8266 具有高达 4MB 的程序存储空间。理论上,您最多可以获得数据表指定的 16MB。
我记得,编译 Lua 的合并版本(所有源文件在一个文件中)占用不到 100kb。
因此,您可以编译 Lua 库并根据需要在 esp8266 上使用它,甚至使用 Arduino IDE.
但是如果你这样做,你会得到 NAKED Lua ......没有漂亮的库来控制 Wifi,串行,SD,端口......你必须在 C 中提供它,或者根据需要使用 NodeMCU 代码。
您可以尝试 LuaJIT 并直接从 Lua 访问 C 代码,从而无需编写库。我不知道你如何将它编译成 Esp8266,或者之前是否有人尝试过,但你可以做到 "for science" 并告诉我们结果如何。
好的,我知道这两个答案都告诉我可以将代码嵌入到我的项目中,但是,我发现我需要做一些小的更改。我制作了一个可用的示例工作项目 here 并且必须进行以下更改列表:
- 标志
LUA_32BITS
和 LUA_USE_LONGJMP
(C 异常处理)已启用
- 排除了以下库:
io
、os
、package
、coroutine
- 从 C API 中删除了以下函数:
luaL_fileresult
、luaL_execresult
、luaL_loadfile
、luaL_loadfilex
、luaL_dofile
、luaB_loadfile
, luaB_dofile
- Lua 输出消息被重定向到串行接口,检查
tinylua.h
、tinylua.cpp
和 lauxlib.h
以更改此行为
希望对您有所帮助!
我正在使用 ESP8266,我不想在整个项目中使用 Lua,我只想 运行 一些 Lua 代码片段,已收到来自 wifi/sd 卡片。我需要启动一个 Lua 环境和 运行 脚本,然后它们最终会调用一些本机函数来执行低级任务。换句话说,我只想使用 Lua 作为简单的脚本语言(如预期的那样)来实现一些动态行为。可能吗?是否有任何用于 arduino 的 lualib 版本?
提前致谢!
例如,您可以简单地将 Lua 嵌入到 extlibs/ 文件夹中,然后在编译程序时将 link 嵌入其中。 已有 Lua 个二进制文件,但自己构建它更容易且更好(因为它是多平台的)。
ESP8266 具有高达 4MB 的程序存储空间。理论上,您最多可以获得数据表指定的 16MB。
我记得,编译 Lua 的合并版本(所有源文件在一个文件中)占用不到 100kb。
因此,您可以编译 Lua 库并根据需要在 esp8266 上使用它,甚至使用 Arduino IDE.
但是如果你这样做,你会得到 NAKED Lua ......没有漂亮的库来控制 Wifi,串行,SD,端口......你必须在 C 中提供它,或者根据需要使用 NodeMCU 代码。
您可以尝试 LuaJIT 并直接从 Lua 访问 C 代码,从而无需编写库。我不知道你如何将它编译成 Esp8266,或者之前是否有人尝试过,但你可以做到 "for science" 并告诉我们结果如何。
好的,我知道这两个答案都告诉我可以将代码嵌入到我的项目中,但是,我发现我需要做一些小的更改。我制作了一个可用的示例工作项目 here 并且必须进行以下更改列表:
- 标志
LUA_32BITS
和LUA_USE_LONGJMP
(C 异常处理)已启用 - 排除了以下库:
io
、os
、package
、coroutine
- 从 C API 中删除了以下函数:
luaL_fileresult
、luaL_execresult
、luaL_loadfile
、luaL_loadfilex
、luaL_dofile
、luaB_loadfile
,luaB_dofile
- Lua 输出消息被重定向到串行接口,检查
tinylua.h
、tinylua.cpp
和lauxlib.h
以更改此行为
希望对您有所帮助!