当我从串口读取时,Lua-io.read发回一个回声 - 为什么?

时间:2013-03-29 10:43:12

标签: lua serial-port openwrt

我正在Lua中编写一个代码来读取串口,但是当我读到的时候,我收到了一个回复代码:

print("Dragino Uart Test started\n")
while 1 do
    serialin=io.open("/dev/ttyS0","r")
    print(serialin:read())    --print the data
    serialin:close()
end

当我打开minicom向他发送一些数据时,我启用本地回声而不是输入“text”,我看到了:

  

tteexxtt

然后我需要按回车键以在我的lua脚本中查看我的消息。

我在Dragino中使用OpenWRT。

看起来它就像是一个提示命令,你输入你看到的所有东西,你需要按回车发送命令。

还有其他方法可以读取和写入串口吗?

是的,有人能帮帮我吗?非常感谢你!

2 个答案:

答案 0 :(得分:1)

没有参数的read方法读取一个完整的行。这就是你需要在文本末尾按Enter键的原因。尝试使用:read(1)一次读取一个字节,或者使用:read("*a")读取所有字节。

答案 1 :(得分:0)

我不知道这对某人来说是否仍然是一个问题,但这可能对一些人有所帮助。像lhf所说的那样:read(1)是这样做的一种方式。我遇到了一些问题:虽然读了(" * a")。在我看来,最简单的方法是逐个追加答案:

rserial=io.open("/dev/ttyS0",'r')
lines = ""
repeat
    local line=rserial:read(1)
    if string.sub(line, 0, 3) == "OED" then  --OED is here the stream ending. This can vary
            EOD = true
            rserial:close()
    elseif line then
            lines = lines .. line 
    end
until EOD == true
print (lines)