Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua uart.on(““数据””,…不在没有“\r\n”;(0x0d 0x0a)的情况下触发_Lua_Esp8266_Nodemcu - Fatal编程技术网

Lua uart.on(““数据””,…不在没有“\r\n”;(0x0d 0x0a)的情况下触发

Lua uart.on(““数据””,…不在没有“\r\n”;(0x0d 0x0a)的情况下触发,lua,esp8266,nodemcu,Lua,Esp8266,Nodemcu,我目前正在为NodeMCU固件编写lua中的室内空气质量传感器(CO2和颗粒物)的驱动程序 传感器通过备用UART引脚GPIO13/15连接。在发出测量命令时,ESP切换UART.alt(1)并注册UART.On(“数据”,9,…)功能,以便在接收到九个字节后触发。我已使用两个连接到本机和备用UART引脚的ch340对此进行了测试。 如果手动输入数据并添加(0d 0a),则读取值是正常的 但是,我使用的传感器在其答复的末尾没有\r\n-如何更改代码以在收到9个字节后读取UART缓冲区 funct

我目前正在为NodeMCU固件编写lua中的室内空气质量传感器(CO2和颗粒物)的驱动程序

传感器通过备用UART引脚GPIO13/15连接。在发出测量命令时,ESP切换UART.alt(1)并注册UART.On(“数据”,9,…)功能,以便在接收到九个字节后触发。我已使用两个连接到本机和备用UART引脚的ch340对此进行了测试。 如果手动输入数据并添加(0d 0a),则读取值是正常的

但是,我使用的传感器在其答复的末尾没有\r\n-如何更改代码以在收到9个字节后读取UART缓冲区

function MHZ19:measure(callback)
-- timeout and restore UART
tmr.alarm(self.timer, self.timeout*1000, 0,
function()
    uart.alt(0)
    uart.setup(0, 115200, 8, uart.PARITY_NONE, uart.STOPBITS_1, 1)
    uart.on('data')
    print("Timed out. Restored UART.")
    callback(nil)
end)

uart.on('data', 9,
    function(data)
        -- unregister uart.on callback
        uart.on('data')
        tmr.stop(self.timer)
        uart.alt(0)
        uart.setup(0, 115200, 8, uart.PARITY_NONE, uart.STOPBITS_1, 1)
        -- First two bytes are control bytes 0xFF && 0x86
        local a,b = string.byte(data,1,2)
        if (a==tonumber('FF',16)) and (b==tonumber('86',16)) then
            local high,low = string.byte(data,3,4)
            local co2value = high * 256 + low
            callback(co2value)
        else
            callback(nil)
        end
    end)

    uart.alt(self.altUart)
    uart.setup(0, 9600, 8, uart.PARITY_NONE, uart.STOPBITS_1, 0)

    -- Send request sequence to get value (refer to datasheet)
    -- send: FF 01 86 00 00 00 00 00 79
    -- receive: FF 86 02 E8 42 04 2B 1C 03
    uart.write(0, 0xff, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79)
根据
uart.on()
命令接受可选参数
[run\u input]
。 如果此参数设置为1,解释器将等待'\r'或'\n',然后运行该命令。 将此参数设置为0并设置要接收的字节数,将在检索指定字节数时调用回调函数


这解决了我的问题。

Hi-Vlad,当然-对于上述函数,它用于通过UART向CO2传感器写入命令,然后等待传感器的回答。只需将第二个参数输入到UART.on(在本例中,“…end,
UART.on('data',9,function(data)print(data)end,0)后面的'0'
我做对了吗?函数之前必须有模块介绍,即
本地MHZ19={timer=1,timeout=1,altUart=0}
,用法是
MHZ19=require(“MHZ19”)
?您将哪个nodemcu开发板引脚连接到tr/rx?谢谢!是的,您答对了。您可以查看nodemcu存储库中的lua模块示例。对于引脚分配,uart模块的nodemcu文档描述了备选GPIO。我想它们分别是14和15,但我不知道转换的nodemcu板的哪个引脚对。