11月19日に豊洲のルネサス半導体トレーニングセンターにて、GR-CITRUS発売記念のワークショップに参加してきました。
当日は、GR-CITRUSと、WiFiとSDカードスロットを搭載した拡張モジュールのWA-MIKAN、あと温度などのセンサーを借りて、GR-CITRUSでのプログラミングを体験しました。その感想と、今後やりたいことをまとめてみます。
GR-CITRUSの機能
GR-CITRUSのピン配置を見ると、シリアル4個/I2C 5個/SPI1個(共用あり)、あとアナログ入力4ピン/アナログ出力7ピン/デジタル入出力が20ピン(共用あり)と入出力端子はこれで十分かなと思います。
GR-CITRUSに書き込んだプログラムは、ボード上のジャンパーをショート(ハーフピッチのスイッチを取り付けると便利なようです)させるとPCから切り離して動作させられるようです。
開発環境
GR-CITRUSのプログラミングは3種類あるようです。
-
WebコンパイラでのArduinoスケッチ開発
-
IDE for GRでのオフラインでのArduinoスケッチ開発
-
Rubicを使ったmrubyでの開発
今回は3番目のRubicを使った開発が主でしたが、mrubyを使って非常に手軽に開発できたのが印象的でした。
以下は、照度センサーから読み取ったアナログ値をRubicのログ欄に表示するスクリプトですが、ピンへのアクセスが直感的ですし、Rubyの言語機能を使えばデータの処理も楽そうに思いました(まだ複雑な処理を実装していませんが)。
#!mruby
usb = Serial.new(0)
pinMode(14, 2) #INPUT_PULLUP
100.times do
usb.println(analogRead(14).to_s)
delay(100)
end
Wi-Fiへのアクセスも標準で用意されていて、WA-MIKANを使ってIFTTTと連携したりして、GR-CITRUSの応用できる範囲は広そうです。
#!mruby
pinMode(5,1)
digitalWrite(5,0) # LOW:Disable
delay 500
digitalWrite(5,1) # LOW:Disable
Usb = Serial.new(0,115200)
if( System.useWiFi() == 0) then
Usb.println "WiFi Card can't use."
System.exit()
end
Usb.println WiFi.disconnect
Usb.println WiFi.setMode 3
Usb.println WiFi.ipconfig
Usb.println WiFi.connect("ap-xxxxxx","abcdefgh")
Usb.println WiFi.ipconfig
Usb.println WiFi.multiConnect 1
Usb.println WiFi.httpGet("maker.ifttt.com/trigger/citrus/with/key/xxxxx").to_s
Usb.println WiFi.disconnect
これ以外にも、GR-CITRUS特設クラス、メソッド早見表にあるように、I2C、サーボ、RTC、SDカードにアクセスする手段も用意されていて、外部のモジュールを操作したり、IFTTTと連携したりして、いろいろと面白いことができそうです。
個人的にはmbedをよく使っていて、オンラインコンパイラもしくはオフラインの開発環境でC++を使ったプログラミングに慣れていますが、mrubyでの開発も面白いかもしれません。
ワークショップの内容
ワークショップは大きく3つに分かれていて、GR-CITRUS特設サイトの解説とワークショップ進行のガイドを見て、ガイダンスを受けながら進めていきました。解説がしっかり書かれているので、ガイダンスなしでも進めていける内容でした。
-
GR-CITRUSのmrubyプログラミング → mrubyプログラミング環境の設定、文法学習、Lチカ
-
センサーネットワークを作ってみる → センサーの読み取り(I2Cとか)、IFTTT
-
MP3プレーヤー作成デモ+自由時間 → Webコンパイラを使っての作業
センサーの利用はArduinoやmbedと変わらないなという印象です。
(左から照度、温湿度、加速度、角速度、地磁気センサ)
(温度センサーで温度・湿度を取得中)
時間の都合で最後のMP3プレーヤーはやり切れなかったですが、時間があるときに続きをしようかと思います。
今後やりたいこと
ワークショップでやったこと(Lチカ、センサー、IFTTT、MP3(スピーカ出力、SDカード))以外で何かを作ろうと考えてましたが、まずはLCDでの表示(文字、グラフィックそれぞれ)でしょうか。
GR-CITRUSを単独で動作するガジェットにしたとき、状態の表示にLEDが使えますが、より細かい情報を表示するためにLCDを使いたくなります。
LCDの操作はmrubyには用意されていないので、Webコンパイラで提供されているLiquidCrystalライブラリを使うことになりそうですが、手持ちのキャラクタLCD(ACM1602NI-FLW-FBW-M01)がI2C接続なので、ライブラリを少しいじる必要がありそうです。
時間があればmrubyにLCDアクセスを組み込むことができるのか調べてみようかと思います。