ESP8266 NodeMCU如何在Lua控制台读取标准输入(stdio)
问题原因
- 你使用的ESP8266 NodeMCU固件默认裁剪了标准Lua的
io库,没有全局io对象,因此调用io.read()会触发attempt to index global 'io' (a nil value)报错 - NodeMCU内置的
file模块是用来操作板载闪存文件系统的,不存在stdio虚拟文件,你写的file.open("stdio")逻辑无法读取控制台输入
解决方案
你的固件已经包含uart模块,直接通过监听串口输入即可实现读取控制台用户输入的需求,参考代码如下:
print("Enter your name:") -- 注册串口接收回调,收到换行符时触发执行 uart.on("data", "\n", function(input) -- 过滤输入末尾的回车、换行符 local name = string.gsub(input, "[\r\n]", "") print("Hello "..name) -- 不需要继续监听时可注销回调,避免重复触发 uart.on("data") end, 0)
补充说明
- 上述代码默认监听UART0,也就是NodeMCU默认连接控制台的串口,波特率和你当前控制台的配置一致即可正常使用
- 如果需要持续读取多轮用户输入,可以省略注销回调的
uart.on("data")代码,根据业务逻辑调整触发条件即可
内容的提问来源于stack exchange,提问作者Andy Joiner
相关产品推荐
相关产品推荐

