使用 Ruby 从串行端口读取数据

发布于 2024-11-15 15:58:32 字数 282 浏览 1 评论 0原文

我正在尝试使用 ruby​​ 对串行端口执行简单的读+写操作。

这是我到目前为止得到的代码。我正在使用 serialport gem。

require 'rubygems'
require 'serialport'

ser = SerialPort.new("/dev/ttyACM0", 9600, 8, 1, SerialPort::NONE)

ser.write "ab\r\n"
puts ser.read

但脚本运行时会挂起。

I'm trying to use ruby to do a simple read + write operation to a serial port.

This is the code I've got so far. I'm using the serialport gem.

require 'rubygems'
require 'serialport'

ser = SerialPort.new("/dev/ttyACM0", 9600, 8, 1, SerialPort::NONE)

ser.write "ab\r\n"
puts ser.read

But the script hangs when it is run.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

走过海棠暮 2024-11-22 15:58:32

我有问题。这是因为使用 ser.read 告诉 Ruby 永远继续读取,而 Ruby 永远不会停止读取,从而挂起脚本。解决方案是仅读取特定数量的字符。

例如:

ser.readline(5)

I had the problem to. It's because using ser.read tells Ruby to keep reading forever and Ruby never stops reading and thus hangs the script. The solution is to only read a particular amount of characters.

So for example:

ser.readline(5)
醉城メ夜风 2024-11-22 15:58:32

为了回应 user968243 所说的,该 ser.read 调用将等待 EOF。如果您的设备没有发送 EOF,您将永远等待。您只能按照建议读取一定数量的字符。

您的设备可能会以行尾字符结束每个响应。尝试读取到下一个回车符:

response = ser.readline("\r")
response.chomp!
print "#{response}\n"

To echo what user968243 said, that ser.read call is going to wait for EOF. If your device is not sending EOF, you will wait forever. You can read only a certain number of characters as suggested.

Your device may be ending every response with an end of line character. Try reading up to the next carriage return:

response = ser.readline("\r")
response.chomp!
print "#{response}\n"
甜味超标? 2024-11-22 15:58:32

我遇到了同样的问题并找到了解决方案。使用 Ruby IO 方法 readlines。

puts ser.readlines

I ran into this same problem and found a solution. Use the Ruby IO method readlines.

puts ser.readlines
南风起 2024-11-22 15:58:32

也许您的设备正在等待一些输入。检查此答案并查看是否有帮助:https://stackoverflow.com/a/10534407/1006863

Maybe your device is waiting for some input. Check this answer and see if it helps: https://stackoverflow.com/a/10534407/1006863

硬不硬你别怂 2024-11-22 15:58:32

尝试设置串行端口的#read_timeout 值。请注意,使用 #write_timeout 值可以对写入操作执行相同的操作。

Try setting the #read_timeout value for the serial port. Note that the same thing can be done for a write operation using the #write_timeout value.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文