motogp fan

motogp ファンによる、雑ブログ、ガジェットネタも

電子工作初心者がIoT挑戦!赤外線センサーVS1838Bとサーバー送信 2/2

前回リモコンのボタン情報を取得できました。
今回はこの情報をクラウドサーバーに送信します。

送信先は初回記事で試した、さくらIoTのテストプログラムを使います。 

motagp.hatenablog.com

 

送信コード

初回のサンプルプログラムを見ると、いっぱいモニター表示用のコードが書いてあります。
でもサーバーに送信するコードは1行だけみたい。

sakura.writeChannel(0, cnt);

これだけ。

 

 

送信できる型はマニュアルに記載されていました。
cntの部分になります。

f:id:motagp:20160713081821p:plain

文字列はどうやって送るの?・・・ C言語は詳しくないので悩みます。
とりあえず数字は簡単に送信できそうなので今回は考えません。

 

 

受信コード

リモコンから受信したボタン情報は、16進数で表示してました。

Serial.println(results.value, HEX);

f:id:motagp:20160712090754p:plain

 

これHEXの場所をDECに変更するだけで10進数になります。
便利ですね。

Serial.println(results.value, HEX);
Serial.println(results.value, DEC);

試しに両方出力してみました。

f:id:motagp:20160713084115p:plain

 

業界人なら変換を暗算でしろって話になりそうですが、私は底辺の技術者って事でwebサービスを使って検証。
このサイトシンプル。

tool.muzin.org

検証結果は正しく10進数で表示されました。当たり前か。

実際のプログラムは数値型の変数に受信したリモコン情報をセットするだけです。

 

 

送信テスト

ではプログラムか書き換えて送信テスト。

 プログラムを転送すると下記エラーで失敗。

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xb0
avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0xb0

マイコンボードに書き込もうとしましたが、エラーが発生しました。
このページを参考にしてください。

 

そうでした、さくらのIoTモジュール合体してるとプログラムの更新ができません。
これ何か回避方法ないのだろうか、プログラムを修正するたびに毎回分解して配線し直すの面倒です。

f:id:motagp:20160713085835j:plain

 

分解して、プログラム転送して、合体。

ようやく試験開始。

 

リモコンの0,1,2,3を送信してみました。

サクラの検証画面を見ると。(COM3の画面はArduinoのシリアル画面です)

 

リアルタイムに情報が飛んできます。
なんとタイムラグなし。凄いぞさくらIoT。

 

f:id:motagp:20160713092340p:plain

 

 

 

 

 スケッチソース

 

// ************************************************************
//  赤外線センサーの情報をサクラIoTに送信 VS1838B
// ************************************************************

// ライブラリー
#include <IRremote.h>
#include <SakuraAlpha.h>

// 宣言
// ---赤外線
int RECV_PIN = 8;
IRrecv irrecv(RECV_PIN);
decode_results results;
// ---さくら
#define BUF_LEN 16
int64_t i64IRin = 0;

SakuraAlphaI2C sakura;

// 初期化
void setup()
{
  //  シリアルモニター開始
  Serial.begin(9600);

  // さくら接続を待つ
  for (;;) {
    if ( sakura.getNetworkStatus() == 1 ) break;
    delay(500);
  }
  // リモコン初期化
  irrecv.enableIRIn(); // Start the receiver
}

// メイン処理
void loop() {
  // リモコン待ち
  if (irrecv.decode(&results)) {
    // ビーム発見
    Serial.print("IR16:");
    Serial.println(results.value, HEX);
    Serial.print("IR10:");
    Serial.println(results.value, DEC);
    // サーバーに送信
    i64IRin = results.value;
    sakura.writeChannel(0, i64IRin);
    delay(500);
    // センサークリア
    irrecv.resume(); // Receive the next value 次を読む
  }
}

 

 

まとめ

サンプルが乏しく不安もありましたが、あっさりテスト成功。
後はこの情報を何処かに貯めて、分析や表示する仕組みを作れば実際に利用できるサービスになります。

資本力のある会社は、独自にIoTサービスを作成提供しています。
小規模事業者や個人では正直厳しい分野でした。
それが、さくらのIoTが始まる事で、お手軽にいろんなIoTサービスを構築でき、新しい何かが出てくるかも。

さくらIoTが正式に開始されるのが待ち遠しい。
(料金気になる) 

 

以上

この先はwebサービス作成の技術が必要です。
私の技術が向上したら、またお会いしましょう。

おしまい。

 f:id:motagp:20160712101535j:plain