Feel Physics Backyard

HoloLensの出張授業をする会社で、教材を開発しています

110413-GAS(Google Apps Script)を使ったTwitterとArduinoの連携(と、Rubyに関する備忘録)

作ったのはこんな感じのものです。TwitterのIDを入れると最近のツイートの長さが液晶パネルに表示されます。

 

 

 

大まかな仕組みは下図のとおりです(図には書いてませんが、Google Apps ScriptはTwitterと通信しています)。

 

110413-Untitled (Network diagram)

 

フォームにSubmitすると以下のGoogle Apps Scriptが走るようにしておきます。

 

2011-04-13_1116

 

Googleスプレッドシートはこんな感じになります。

 

2011-04-13_1115

 

PC上のRubyのコードはこんな感じです。シリアルに送る文字列の長さを16文字にしているのは、液晶パネルの横の長さが16文字分だからです。

 

 

これで、GoogleスプレッドシートTwitterArduinoを連携させることができました。

 

◆発展

 

Arduinoにアクチュエーターを付ければ、ネット上のデータに応じて作動させることができます。

 

◆フォーム機能の仕様制限

 

今回は新しいレコードが追加されるたびにスクリプト(GAS)でセルに関数を書き込みました。そんなめんどくさいことをせずに、あらかじめセルに関数を書いておけばいいじゃないか、と思われるかもしれません。しかし、フォーム機能を使うとスプレッドシート上に関数をあらかじめ書いておくことができません(書いておくと消されます)。これはGoogleスプレッドシートの仕様制限です。

 

◆ダイアログを作るやり方

 

フォーム機能を使わずにダイアログを作ってデータを入力してもらう方法もあります。この方法だと、ダイアログを作るスクリプトだけ書けば、あとはセルに計算式を入れるだけで済みます。ExcelVBAに不慣れな方は、こちらのやり方の方が良いと思います。

 

ダイアログを作るスクリプトですが、そのうちジェネレーターを誰かが作ってくれそうな気がします。それを利用すれば、極端な話、スクリプトに関する知識がまったく無くてもWebアプリケーションが作れてしまいます。

 

Twitter

 

Twitterからデータを取得する部分については、他の方がどこかでブログに書かれていたのをほぼそのまま使っています(すいません、掲載元を記すべきなのですが、ブックマークしていませんでした汗)。

 

スプレッドシートの利点

 

Googleスプレッドシートを使わずにすべてRubyで作ってしまうという選択肢もありますが、Googleスプレッドシートを使うと計算経過がわかるので安心して少しずつコーディングできるのがメリットだと個人的には思います。

 

◆どのように実装するか

 

今回はPC上のRubyスクリプトGoogleスプレッドシートArduinoのあいだを中継していますが、mbedのライブラリが充実してこれば、mbedから直接Googleスプレッドシートのデータを取得するのもラクにできるかもしれません。さらに言えば、mbed用pythonライブラリが充実してこればpythonで実現できるでしょうし、Ruby組み込みチップが出てこればRubyでいけるようになるかもしれません。なんにせよライブラリの充実しているところから始めるのが確実だと思います。

 

【以下備忘録】

 

◆どのRubyを使うか

 

WindowsにインストールするRubyとしてExerbが標準で添付されているActiveScriptRubyを選んだ。デフォルトでインストールするとProgram Filesの中に入るため、gemのインストールの際に管理者権限が必要になる。これはRuby Consoleをシフトキーを押しながら右クリックして「管理者として実行」し、gem installすれば良い。

 

Rubyエディタ「Netbeans」のセットアップ

 

Rubyのエディタとしては、Netbeansをインストールした。前述のActiveScriptRubyをNetbeansに登録するには、「ツール」→「Rubyプラットフォーム」→「プラットフォームを追加」でruby.exeを選択すれば良い。

 

◆シリアル通信ライブラリのインストール

 

シリアル通信ライブラリwincom.rbは、とりあえず「C:\Program Files\ruby-1.8\lib\ruby\site_ruby\1.8」に入れておいた。特に問題なく動作した。

 

Windows実行形式への変換

 

いろいろなライブラリを使っているため、普通にexerbを使ってWindows実行ファイルを生成しても動かない。

 

まずRuby Consoleから「>mkexy gss2serial.rb」のようにして実行すると、実行中に使用したライブラリのリストを記述したファイルがgss2serial.rbと同じフォルダにgss2serial.exyのように生成される。これに対して「>exerb gss2serial.exy」のようにすると、使用するライブラリをすべて取り込んだexeファイルが生成される。

 

しかし、それでも「ssleay32.dllが見つかりません」などというエラーを出して実行できない(これらのファイルはNokogiriなどがWebアクセスにSSL通信を使う際などに使っている)。これらのファイルはRubyがインストールされたフォルダのbinフォルダに入っているので、下図のように生成したexeファイルと同じフォルダに入れてやると、無事動くようになる。

 

2011-04-13_1339