首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Dino和Sinatra显示传感器输出?

如何使用Dino和Sinatra显示传感器输出?
EN

Stack Overflow用户
提问于 2012-12-24 01:26:09
回答 1查看 251关注 0票数 7

我想在我的页面上显示连接到Arduino的一个传感器(湿度)的输出。

按照脚本,每秒给我一些值(数字)。

代码语言:javascript
复制
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脚本来显示异步输出。

所以这应该是这样的

代码语言: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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-27 03:50:59

您将需要使用某种类型的数据存储来支持异步数据读取: db、文件存储或内存存储。最好将读取代码的传感器抽象到一个单独的类中,并具有定义良好的API来读回该数据。我建议将MoistureSensor类放入一个单独的文件中,并将其放入服务器文件中。此外,我将内存存储中的数据点数量限制为1000个。尝试以下操作:

代码语言:javascript
复制
%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
end
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14013021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档