気の向くままに辿るIT/ICT/IoT
webzoit.net
IoT・電子工作

RubyとArduinoでLチカ

ウェブ造ホーム前へ次へ
サイト内検索
カスタム検索
Arduinoって?

RubyとArduinoでLチカ

RubyとArduinoでLチカ

2018/02/27

 RubyとArduinoでLチカを実行してみるページ。

 Arduino IDEは、C/C++ベースだが、このIDEには、ArduinoとPCやRaspberry Piなどとの間をシリアル通信で接続して操作できるFirmataプロトコルを使ったサンプルスケッチ群があり、例えば、これをArduinoボードに書き込んでおけば、PythonProcessingRubyPerl、JavaScript...などのスクリプトやC/C#などのプログラミング言語からでもArduinoを操作・制御することができるようになる模様。

 ここでは、この中から、まつもとひろゆき氏開発のRubyと、橋本翔氏(橋本商会さん?)が、JavaからFirmataプロトコルをRubyに移植して下さったというarduino_firmataライブラリを使わせて頂き、Arduino界のHello World!であるLチカ(blink)を実行するまでの手順を書く。

ArduinoボードにStandardFirmataをアップロード

 もちろん、後でもよいが、今回は、まず、ArduinoボードにArduino IDEのサンプルスケッチStandardFirmataをアップロードしておくものとする。

 サンプルスケッチStandardFirmataは、Arduino IDEの[ファイル/File] => [スケッチ例/Examples] => [Firmata]にある。

Rubyのインストール

 Rubyライセンスについて熟読の上、公式サイトのダウンロードから使用中のOS用のRubyを、もしくは、リポジトリにあるならそれをインストールする。

$ sudo apt install ruby ruby-all-dev
$ ...
$

 尚、Debian(Linux)を使っている自身の環境でリポジトリからインストールしたところ、rubyだけでなく、ruby-all-devパッケージも必要だった。(これがないと後述のarduino_firmataインストール時に「ruby.hにruby用のヘッダファイルがない」旨で怒られた。)

 ディストロによっては、ruby-develやruby-devなどという名称かもしれない。

arduino_firmataのインストール

$ sudo gem install arduino_firmata
$ ...
$

 ここからは、arduino_firmata作者のArduino Firmataを参照させて頂く。

 rubyをインストールするとgemコマンド(gem/RubyGemsは、サードパーティ製ライブラリ集及びこれらライブラリ用パッケージ管理コマンドである模様)もインストールされ、gemコマンドでarduino_firmataも簡単にインストールできる。

スクリプトを書く

// example.rb
#!/usr/bin/env ruby
$:.unshift File.expand_path '../lib', File.dirname(__FILE__)
require 'rubygems'
require 'arduino_firmata'
 
arduino = ArduinoFirmata.connect ARGV.shift
puts "firmata version #{arduino.version}"
 
arduino.pin_mode 13, ArduinoFirmata::OUTPUT
 
stat = true
loop do
 puts stat
 arduino.digital_write 13, stat
 stat = !stat
 sleep 0.1
end

 作者のリンク先には、サンプルコードのリンクが貼られており、led_blink.rbにたどり着くことができるので、そのままコピー&ペーストさせて頂く。

 ファイル名は、example.rbとした。

スクリプトの実行と終了

 Arduino IDEのサンプルスケッチStandardFirmataをアップロードしたArduinoボードをPCにUSB接続しておく。

$ ruby example.rb
true
false
true
...
[Ctrl+C]
$

 rubyにファイル名を引数として渡せば、実行権限がなくても実行できる。

 実行中、端末上では、true、falseの表示が繰り返され、少しすると、今回はUno互換機を使ったが、少なくともNanoやPro Miniなどなら、Arduinoボード上のLEDが点滅しているはず。

 breakさせておらず、無限ループ状態なので終了するには、キーボードの[Ctrl]+[C]ボタン同時押しで強制終了させる。

 尚、シリアルポートは、自動認識してくれた。

EasyWordMall Arduino UNO R3互換ボード(USBケーブル付属)

EasyWordMall Arduino Pro Mini互換ボード Atmega328 5V 16MHz

Rasbeeオリジナル FT232RL互換 3.3V/5V FTDI/USB/TTL変換アダプタ

KKHMF Arduino Nano Ver 3.0互換ボード ATmega328P CH340G 5V 16MHz

ArduinoとRuby

 シリアル通信越しであるため、高速通信は厳しいにしてもPython/Perl/Rubyなどのインタプリタのスクリプト言語やNode.jsなど今時のJavaScriptフレームワークなどでArduinoを操作可能になると電子工作からIoTへの架け橋の役割もあり、できることの幅が広がるだろう。

備考

 Python/Perl/Ruby/JavaScriptだと自身は、それほど詳しいわけでもないがPerlが最も身近、続いて(昔のクライアントサイドの)JavaScript、PythonはJavaと共に超初心者レベル、Rubyについては門外漢。

 ただ、JavaScriptはさておき、Arduinoを楽しむ上でPython/Perl/Rubyの内、何れかは使っていくことになるだろうということで今更ながら基本中の基本Lチカのやりやすさで決めようかと比較検討中。

 ここでは、未知のRubyを使ってみたものの、コピペしただけなので難しいことはなかったが、初めてだからか、正直、ソースコードの記述が直感的ではないというか、他の言語類とだいぶ違う感があるというか、斬新というか、他の知識を活かしづらく、覚えづらい印象を受けた...が、コード・書式は洗練されていると思う。

ウェブ造ホーム前へ次へ