-->

从串口在Ruby on Rails应用程序挂起阅读(Reading from serial port

2019-09-16 13:43发布

我使用serialport 宝石在我的Ruby on Rails的3.2应用程序中的串口读取。 串行端口本身被用于从一个Arduino板写入数据。 创业板加入Gemfile 。 端口初始化在application.rb

config.serial_port = SerialPort.new "/devttyACM0", 9600
config.serial_port.read_timeout = 100

当我尝试从这个端口读取出现问题。

@sp = ProjectName::Application::config.serial_port
@sp.read

应用程序挂起致命的。 我试图从一个执行读取pry会议,一切都OK。 如果我设置read_timeout0 ,从阅读pry也挂起。 我已经尝试设置read_timeout到更大的价值没有结果。 我应该怎么做才能使其工作?

更新:

我试着执行使用相同的操作sinatra 框架 。 它挂起了。

require "sinatra"
require "serialport"

get '/' do
  read_data
end

helpers do
  def read_data
    sp = SerialPort.new "/dev/ttyACM0", 9600
    sp.read_timeout = 1500
    t = sp.read.match(/\d+(\n|\r)+/)[0].gsub!(/(\n|\r)*/,"") rescue nil
    sp.close
    t
  end
end

Answer 1:

有同样的问题。 伦敦定盘其实很容易,问题是,你的Rails应用程序不断从串口读取新的价值观,并且只要它读取这些输入,它不会做任何事情,所以你的网站将永远不会被真正建立。

尝试,如果它的工作原理例如,如果你只是让它从串口读取的固定的次数。



Answer 2:

你可以使用一个简单的脚本,像这样与设备intereact:

require 'rubygems'
require 'serialport'
sp = SerialPort.new "/dev/ttyUSB0"
sp.write "AT\r"
while true do
   printf("%c", sp.getc)
 end

在这种情况下,我使用GSM调制解调器。 也许你的设备第一次等待一些命令。



文章来源: Reading from serial port in a Ruby on Rails application hangs