Lua脚本从OpenWRT中的串行端口读取

时间:2018-03-19 18:07:50

标签: lua serial-port openwrt

我有通过USB FTDI适配器连接Arduino的Openwrt路由器。 串口是/ dev / ttyUSB0

Arduino代码打印一些数据:

通过命令print()以延迟打印的数据的第一部分,例如:

Serial.begin(9600);
Serial.print(var1);
delay(1000);
Serial.print(var2);
delay(1000);
Serial.print(var3);
delay(1000);

第二部分用println()命令打印:

Serial.println("");
Serial.println(var4);
Serial.println(var5);
Serial.println(var6);

所以当我在终端打开串口时,我可以看到这样的东西:

1

然后在1秒内超时,然后

1 2

下一次超时。然后

1 2 3

上次超时和

1 2 3
4
5
6

它适用于OpenWRT中的终端程序和控制台,例如screen /dev/ttyUSB0

我需要制作一个Lua脚本来读取串口并以相同的方式打印数据。我有一个简单的脚本,但它没有按预期工作。

rserial=io.open("/dev/ttyUSB0","r")
while true do
chain = nil
  while chain==nil do
    chain=rserial:read();
    print(chain)
  end
end

它一次显示所有数据。 它没有显示前3个变量的延迟。 似乎是因为rserial:read() - 它将一直读取,直到它收到一个换行符。 它在类似的问题中说: How to read from a serial port in lua

我尝试按照那里的建议运行此命令:

stty -F /dev/ttyUSB0 -icanon

但它没有帮助,我不明白为什么。 这是通过stty修复此行为的方法吗? 或者我肯定需要为Lua脚本使用另一个串口库? 所有这些libs现在看起来都已经过时了,我不想使用过时的东西..

1 个答案:

答案 0 :(得分:0)

来自Lua Reference Manual

  

在没有格式的情况下调用时,它使用读取的默认格式   下一行(见下文)。

新行是缓冲区中的任何内容,直到下一个换行符。

因此,只要您不发送换行符,Lua就会通过拨打read()

告诉他们。

收到换行符后,系统会提示该行中的任何其他字符。

终端程序通常会更新每个字节,以显示他们在"实时"中收到的内容。

因此,如果你想拥有相同的行为,你可能不会在没有任何参数的情况下使用read()

使用read(1)读取每个字节而无需等待其他任何内容。

相关问题