5

Ruby on Rails 3.2 アプリケーションのシリアル ポートから読み取るためにserialport gemを使用しています。シリアル ポート自体は、Arduino ボードからデータを書き込むために使用されます。gem が に追加され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セッションから読み取りを実行しようとしましたが、すべて問題ありませんでした。に設定read_timeoutすると0、からの読み取り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
4

2 に答える 2

0

次のような単純なスクリプトを使用して、デバイスとやり取りできますか。

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

この場合、私は GSM モデムを使用していました。デバイスが最初に何らかのコマンドを待っている可能性があります。

于 2012-05-10T12:52:07.723 に答える