为什么我从串口读取数据时,Lua - io.read 会发送回显?

我正在使用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

然后我需要按Enter键才能在我的Lua脚本中看到我的消息。

我在Dragino上使用了OpenWRT。

似乎就像一个提示命令,你输入你看到的每件事,并且你需要按Enter来发送你的命令。

还有其他读写串口的方法吗?

可以有人帮帮我吗?非常感谢!

点赞
用户107090
用户107090

read 方法没有参数时会读取一整行。这就是为什么你需要在文本末尾按 Enter 键。尝试使用 :read(1) 每次读取一个字节或者使用 :read("*a") 读取全部文本。

2013-03-29 11:04:34
用户3709954
用户3709954

我不知道这对某些人是否仍然是一个问题,但也许这能帮助一些人。像lhf所说的:read(1)是实现这个的好方式。尽管我对:read(”\ * a”)有一些问题。我认为最简单的方法是逐段添加答案,例如:

rserial=io.open("/dev/ttyS0",'r')
lines = ""
repeat
    local line=rserial:read(1)
    if string.sub(line, 0, 3) == "OED" then  --OED是此处的流结尾。这可能有所不同
            EOD = true
            rserial:close()
    elseif line then
            lines = lines .. line
    end
until EOD == true
print (lines)
2016-02-18 09:02:21