GR-SAKURAでGROVEの温湿度センサを使う

GR-SAKURAのローカルビルド環境を更新したので、GROVEの温湿度センサを使ってみる。

ベースシールドを取り付ける。

Seeed Studio Bazaar, Boost ideas, Extend the Reach

etherの口が干渉するので、マスキングテープでカバー。

温湿度センサは、これ。使われているのはDHT22。

https://www.seeedstudio.com/item_detail.html?p_id=838

参考になるサンプルを探したら、 そのものずばりのサンプルがあった。

http://japan.renesasrulz.com/gr_user_forum_japanese/m/mediagallery/18.aspx

サンプルではDHT11となっているが、そのまま動いた。

GR-SAKURAのビルド環境をアップデートしてみる

久々にGR-SAKURAで遊ぼうと思い、まずはローカルのビルド環境を更新している。

ソースはhttps://gcc-renesas.com/ja/からダウンロードできる。今回はv16.01をダウンロードした。

ビルド方法は、 https://gcc-renesas.com/wiki/index.php?title=How_to_build_the_RX_Toolchain_under_Ubuntu_14.04を参考に。

MacOS X上でエラーが発生したのは、

  • autoconfのバージョン

  • なぜか、展開したソースに含まれるスクリプト(configureとか)に実行権限が付いていない

といった点。

autoconfは2.64が必要だと言われ、Homebrewでautoconf264をインストールしても、autoconf264といったファイル名でインストールされるので、シンボリックリンクを張ることで回避。正しい方法は不明。

あと、gettext関係のツールのパスが見つからなかったので、brew linkをしたが、その際--forceオプションが必要だった。

newlibのビルドには時間がかかる・・・

gdbはとりあえず、後回し

GR-SAKURAでmrubyをインタラクティブに使う

http://d.hatena.ne.jp/kyab/20130621を参考にmirb-hostbasedを使って、インタラクティブに接続する。

ターゲット側には、https://github.com/kyab/mruby-arduinoを組み込んでおけば、LED等の操作も可能になる。

GR-SAKURA用に幾つか修正したmruby-arduinoを、https://github.com/masahino/mruby-arduino/tree/gr-sakuraに置いた。 build_config.rbのターゲット側の設定で、-DBOARD_GRSAKURAをコンパイルオプションに追加する必要がある。

ビルド環境の用意は、http://qiita.com/jjzak/items/8e9d9d98370181aa97faを参考にすれば良い。

mirb-hostbasedからの入力を受けて、結果を返すスケッチは、mirb-hostbasedのsamples/target配下のコードを参考に、GR-SAKURA用に修正する。 修正点は、rxduino.hをインクルードするのと、itoaが使えないので代りにsnprintfなどを使うのみ。

@@ -1,3 +1,4 @@
+#include <rxduino.h>

 #include <Servo.h>

@@ -72,7 +73,8 @@

 void reportMem(){
        char str[15];
-       itoa(total_allocated_mem, str, 10);
+//     itoa(total_allocated_mem, str, 10);
+       snprintf(str, 10, "%d", total_allocated_mem);
        Serial.print("(taget):TOTAL_ALLOCATED : ");
        Serial.println(str);
 }
@@ -88,7 +90,8 @@

     if(!ret){
       char str[15];
-      itoa(size, str, 10);
+//      itoa(size, str, 10);
+      snprintf(str, 10, "%d", size);
       Serial.print("(target):allocation error. requested size = ");
       Serial.println(str);
       reportMem();

予想以上にあっさり出来た。