我想在我的页面上显示连接到Arduino的一个传感器(湿度)的输出。
按照脚本,每秒给我一些值(数字)。
require 'dino'
board = Dino::Board.new(Dino::TxRx.new)
sensor = Dino::Components::Sensor.new(pin: 'A0', board: board)
on_data = Proc.new do |data|
puts data
sleep 1
end
sensor.when_data_received(on_data)
sleep我想我可以使用Sinatra作为API和Javascript脚本来显示异步输出。
所以这应该是这样的
%w(sinatra dino haml).each do |lib|
require lib
end
board = Dino::Board.new(Dino::TxRx.new)
sensor = Dino::Components::Sensor.new(pin: 'A0', board: board)
sleep 1
get '/' do
haml :index
end
get '/moisture' do
on_data = Proc.new do |data|
{ moisture_value: data }
sleep 1
end
sensor.when_data_received(on_data)
end你能给我一些提示或简单的好模式吗?我该如何处理呢?
我找到了用于恐龙的样例sinatra应用程序:https://github.com/austinbv/dino_cannon
发布于 2012-12-27 03:50:59
您将需要使用某种类型的数据存储来支持异步数据读取: db、文件存储或内存存储。最好将读取代码的传感器抽象到一个单独的类中,并具有定义良好的API来读回该数据。我建议将MoistureSensor类放入一个单独的文件中,并将其放入服务器文件中。此外,我将内存存储中的数据点数量限制为1000个。尝试以下操作:
%w(json sinatra dino haml).each do |lib|
require lib
end
class MoistureSensor
require 'dino'
board = Dino::Board.new(Dino::TxRx.new)
sensor = Dino::Components::Sensor.new(pin: 'A0', board: board)
@@data = []
on_data = Proc.new do |data|
@@data.shift if @@data.length > 1000
@@data << data
sleep 1
end
sensor.when_data_received(on_data)
def self.data
@@data
end
def self.last_entry
@@data.last
end
end
get '/' do
haml :index
end
get '/moisture.json' do
content_type :json
{ moisture_value: MoistureSensor.last_entry }.to_json
endhttps://stackoverflow.com/questions/14013021
复制相似问题