Ruby + dino で、RubyからArduinoを制御してみた
昨年末にArduino買ってちょくちょく遊んでます。オープンソースの基板で、デジタル入力14点(うち6点は出力として使用可)、アナログ入力6点を持ち、3000円未満と遊ぶにはちょうどいい金額と機能。
ただ、これCによく似たArduino言語でコード書くんですよね。当然、軟弱者の私としましては慣れ親しんだRubyでコードかけないかなって思って調べてみました。
まっさきに調べたのは組み込み向けのRuby、mrubyでいけないかってことでしたが手元にあるArduino Unoではリソース的に厳しそうです(てか実際やってみましたが、リソース以前にコンパイル通らず。
ちなみにUnoよりリソースに余裕のあるArduino DueとChipKit32ではmrubyが動いてるらしく、mrubyのリポジトリにそれ向けのビルドセッティングが入ってたりします。
https://github.com/mruby/mruby/tree/master/examples/targets
で、じゃあArduinoは入出力として使って、BeagleboardとかRaspberryPiとかと組み合わせ使うのはどうなんだろうってまた調べてたらdinoというありがたいgemがありました。
のでそれ使ってみます。
Arduinoの用意
Arduinoの基板はスイッチサイエンスでLEDやジャンパと一緒に4000円ほどで売ってます。
もっとも標準的なUnoでデジタルが14点、アナログが6点あります。
ArduinoのIDEがまだ落としてない場合はこれを落としておきます。
Arduino-Software
Arduinoへスケッチをアップロード
dinoのリポジトリにあるdu.inoをダウンロードして、適当なところに保存。Arduino IDEで開きます。
Arduino IDEでdu.inoをコンパイル・基板にアップロードします。
以上でArduino側の用意は終わりです。ここまでやったらArduino IDEは終了してかまいません。
dinoライブラリの準備
dinoはgemにありますので、これをインストールします。
$ sudo gem install dino
とりあえず、ためしにLEDのチカチカやってみます。
これまた親切丁寧に配線図?があるのでこのとおりにLEDをさします。
試しにirbから制御してみます。
require "dino" => true board = Dino::Board.new(Dino::TxRx.new) => #<Dino::Board:0x..... led = Dino::Components::Led.new(pin: 13, board: board) => #<Dino::Components::Led:0x.....
ここまでで13番のデジタル入出力を制御する準備ができました。
では13番にデジタル出力してLEDを光らせてみます。
led.send :on
では消してみます。
led.send :off
とりあえず今回はここまでですが、他にもいろいろとできそうなので、調べてみます。できたらZigBeeと組み合わせてセンサーネットワークとか作ってみたい。