Używam serialport
gem do odczytu z portu szeregowego w mojej aplikacji Ruby on Rails 3.2. Sam port szeregowy służy do zapisu danych z tablicy Arduino. Klejnot jest dodawany do Gemfile
. Port jest inicjowany w application.rb
:Odczytywanie z portu szeregowego w aplikacji Ruby on Rails wisi
config.serial_port = SerialPort.new "/devttyACM0", 9600
config.serial_port.read_timeout = 100
Problem pojawia się przy próbie odczytu z tego portu.
@sp = ProjectName::Application::config.serial_port
@sp.read
Aplikacja zawiesza się śmiercionośna. Próbowałem wykonać odczyt z sesji pry
i wszystko było w porządku. Jeśli ustawię read_timeout
na 0
, również zawiedzie czytanie z pry
. Próbowałem już ustawić read_timeout
na większe wartości bez rezultatu. Co powinienem zrobić, aby działało?
Aktualizacja:
Starałem się wykonać te same czynności przy użyciu sinatra
framework. Wisi też.
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