SNShield library (0.1)

がじぇるね岡宮です。

新しいセンサーネットワークシールドのライブラリを作ってみました。

WebコンパイラでKURUMIのプロジェクトを作り、rootで右クリック→ZIPファイルインポートで使用できます。

まずは、センサーの値を取るだけのサンプルです。

#include <Arduino.h>
#include <snshield.h>

SNShield kurumi;

void setup() {
kurumi.begin();
Serial.begin(9600);
}

void loop() {
char ttt[100];
kurumi.getAll();
sprintf(ttt,"Temp: %.2f Lux: %.2f X: %.2f Y: %.2f Z: %.2f",kurumi.temp,kurumi.lux,kurumi.accx,kurumi.accy,kurumi.accz);
Serial.println(ttt);
delay(200);
}

  • 初期バージョン用、前回のKurumiEyesとはソースレベルで随分違うみたいですが、上位互換?置き換えは可能なのですか?

  • XBeeのリセット解除の処理を削除と加速度センサの読み込み関数名を若干変えています。前者の影響でプロトタイプ版シールドではコメントアウトされているSLEEP_RQの処理を復帰する必要があります。

  • ああん、具体的に対策を提示してもらえると助かります。いまはwebコンパイラを使用しておらず、e2studio上でライブラリは共通化して使っているので。

    xbee.cppもだぶっちゃうんですよね(笑)。

  • ファイルやフォルダの整理、ライセンス文の追記は行いましたが、ソース自体はそれほど変えていません。XBeeのライブラリは無変更で加速度センサーの部分は抜き出しているだけです。

  • 行き違いました。ちょっと出先のため、あとで書きたいと思います。

  • プロトタイプ版SNShield( Kurumi Eyesの呼称は廃止。Arduino Pro Miniでも一応使えるため)用のライブラリで作成したプログラムに対して、今回のライブラリを使う場合、以下を変更してください。

    ●インスタンスの変更

     KurumiEyes インスタンス名 → SNShield インスタンス名

    ●D6のアサインをXBee ResetからSLEEP RQに変更したことによる変更

    SNShield.cppの下記コメントをはずしてください。

    //    pinMode(XBEE_SLEEPRQ, OUTPUT);

    //    digitalWrite(XBEE_SLEEPRQ, HIGH);

    ●加速度センサー読み込みメソッドの変更

     前回ライブラリで、x,y,z軸の加速度をよむメソッド関数は下記でしたが、

     kurumi.getGx

     kurumi.getGy

     kurumi.getGz

     以下のように変更し、値もreturnされるようにしました。

     kurumi.getAccx

     kurumi.getAccy

     kurumi.getAccz

  • 新しいSNシールドと新しいSNシールドライブラリであっさりとXivelyへのアップロードできました。

    次回、夜の大人の電子工作教室は是非xbee wifiとSNシールドでやりましょう(笑)。

  • いいですねぇ。chobichanさんの資料通りにやったらXivelyアクセスできました。で、丸一日ハマったことがありまして、記載しておきたいと思います。新しいXCTU(V6.x)だと、ASC入力モードで改行が0Dしか付加されず、0Aを足したらうまくいきました。また、GETでGoogle searchなんかも試したところV5.xxだとワラワラ結果が表示されるのですが、V6.xxだとハングするという現象にあいました。結論として、今度は初期設定以外はKURUMIに助けてもらおうと思っています。一応この課題はdigiには連絡しましたが、やっぱりβ版は色々ありそうですね。

  • X-CTUのバージョン6だとそんなこと有るんですか。私の場合まずテキストファイル上でHTTP文を書いて貼り付けで上手く行ったのですが。でもX-CTUはバージョン5も用意して置く事を私は薦めています。だってバージョン6だとシリアルの制御線を操作できないんですよね。なんであの機能止めたのかなぁ?

  • chobichanさん、お願いがあるのですが、XBee wifiを使ってXivelyにあげるサンプルをいただくことはできないでしょうか?ここのところずっとArduino WiFiシールド用のドライバ部分をポーティングして、XBee ArduinoライブラリとXivelyライブラリによるアップロードができるように試していたのですが、どうしてもHTTPのレスポンスが返ってこず辟易しておりまして、、

  • chobichanさん、まずはごくごく単純に下記ソースで、Xivelyにアップできることを確認しました。お騒がせしました。これはトランスペアレントモードであらかじめIPとポートを指定してますので非常に簡単でした。

    ちょっとXivelyライブラリを使ったArduino WiFiシールドドライバのポーティングが難しそうなため、まずはXBee Arduinoライブラリを工夫してアップする方法を考えたいと思います。

    #include

    #include

    #include

    SNShield kurumi;

    String str;

    void setup() {

       kurumi.begin();

       Serial.begin(9600);

       Serial2.begin(115200);

       str="PUT /v2/feeds/2128669808.json HTTP/1.1\r\n";

       str += "Host: api.xively.com\r\n";

       str += "User-Agent: GR-KURUMI/1.0\r\n";

       str += "Connection: close\r\n";

       str += "X-ApiKey: YvYvhAfLrGnigaqLGdx0DvisFTBVcVCqpm5I1g44KyBj0Y09\r\n";

       str += "User-Agent: GR-KURUMI-XBee-wifi/1.0\r\n";

       str += "Content-Length: 90\r\n";

       str += "\r\n";

       str += "{\r\n";

       str += "\"version\":\"1.0.0\",\r\n";

       str += "\"datastreams\" : [\r\n";

       str += " {\"id\":\"eye_lux\",\"current_value\":\"110\"}\r\n";

       str += " ]\r\n";

       str += "}\r\n";

       str += "\r\n";

       Serial2.print(str);

    }

    void loop() {

       while(Serial2.available()){

           Serial.print((char)Serial2.read());

       }

       delay(500);

    }

  • ちょっと消えてますね

  • 例の括弧抜けですね。

  • feed idとapi keyが丸出しなので、みんなで岡宮さんのチャネルにアップし放題ですね(笑)。

    httpのレスポンスですが、まずxbeeを起動後モデムステータスを確認しています?

    xbeeが起動→参加可能なネットワークを探す→ネットワークに参加

    と言う手順を取るので、このネットワークに参加が確認されるまで外部とのやり取りはできません。

    モデムステータスで2が帰るか、AIコマンドで0が返るまで待つ必要がありますヨ。

  • > ちょっとXivelyライブラリを使ったArduino WiFiシールドドライバのポーティングが難しそうなた> め、まずはXBee Arduinoライブラリを工夫してアップする方法を考えたいと思います。

    思うんだけれど、ここでxbeeのapiモードを使う理由って、DNSによる名前解決以外はあまり強い理由付けは無いと思うんだよね。

    でもDNSによる名前解決はAPIコマンドを駆使して自力で解決する必要がある。まあ誰かがライブラリ化するのかもしれないけれど。

    夜のお楽しみ電子工作会ではトランスペアレントモードでやってもらった方がいいんじゃない?。