2012-04-15 107 views
5

我正在使用serialportgem從我的Ruby on Rails 3.2應用程序中的串行端口讀取。串行端口本身用於從Arduino板上寫入數據。 該寶石被添加到Gemfile。端口初始化在application.rb:當我嘗試從該端口讀取出現從Ruby on Rails應用程序中的串行端口讀取

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設置爲更大的值,但沒有結果。我應該怎麼做才能使它工作?

更新:

我試着用sinatraframework執行相同的操作。它也掛起。

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 

回答

0

你能與設備intereact使用一個簡單的腳本,像這樣:

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

在這種情況下,我使用GSM調制解調器。也許你的設備先等待一些命令。

2

有同樣的問題。修復其實很簡單,問題在於您的Rails應用程序不斷從串口讀取新值,只要它讀取這些輸入,它就不會執行其他任何操作,因此您的站點將永遠不會實際構建。

嘗試一下,如果它的工作,例如,你只是讓它從串行端口讀取固定次數。