読者です 読者をやめる 読者になる 読者になる

Mae向きなブログ

Mae向きな日記のブログ版。ようやくこちらに移行してきました。

センサーの値をつぶやく

多摩美 – バイオメディアアート・ワークショップ 2011 第4回:ネットワークとの連動 – センサーの情報をTwitterでつぶやく | yoppa org」を参考にArduinoで取得したCdSの値をTweetしてみました。昔,Javaをやっていた時期もあったので,Processingを使うのはほとんど初めてでしたが,楽しく実験を進めることができました。
以下は,自分が使い慣れたRubyでも試してみようと思い作ったものです。Arduinoに接続したセンサーの値を,Rubyを使って手軽に取得しネットワークとも連携できるので,応用することで何か面白いことができそうです。

stew_gate.rb

StewGatetweetをPOSTしてくれるクラスです。

# -*- coding: utf-8 -*-
require 'net/http'
require 'uri'

class StewGate
  def initialize(token)
    @query_hash = { "_t" => token }
  end
  
  def tweet(msg)
    @query_hash["msg"] = URI.encode(msg)
    query_string = @query_hash.map{|key, value|
      "#{key}=#{value}"
    }.join("&")
    http = Net::HTTP.new('stewgate.appspot.com')
    http.post('/sg1/post/', query_string)
  end
end

if __FILE__ == $0
  token = "__Your Token__"
  sg = StewGate.new(token)
  sg.tweet("test message.")
end

arduino2twitter.rb

Arduinoからシリアルポート経由で送られてくるCdSの情報を取得しStewGateを経由してTwitter上にtweetします。StewGateを使用するときは事前に,ここからトークンを取得する必要があります。

# -*- coding: utf-8 -*-
require 'serialport'
require 'stew_gate'

# Arduinoからシリアルポート経由で値を取得
sp = SerialPort.new('/dev/cu.usbmodem1d11', 9600, 8, 1, SerialPort::NONE)
value = sp.readline
sp.close

# StewGateを経由してtweet
token = "__Your Token__"
sg = StewGate.new(token)
str = "CdS's value = #{value}"
puts str
sg.tweet(str)

cds.pde

Arduinoで動作させるプログラムです。とても簡単に作成することができます。

int in0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  in0 = analogRead(0);
  Serial.print(in0);
  delay(100);
}

実行結果

以下のように実行します。

$ ruby -I. arduino2twitter.rb
CdS's value = 752