LoginSignup
0

More than 5 years have passed since last update.

sakura.ioをGenuino 101ではじめた(Lチカ~sakura.io接続テスト)

Last updated at Posted at 2017-06-15

sakura.ioとGenuino 101のBluetoothを組み合わせて使ってみると楽しそう
その前に、LチカのBlinkとSakuraIOのStandardサンプルスケッチを書き込んでみた。

sakura.ioとは?

モノとネットワークでデータを送受信するための「さくらの通信モジュール」(以下、「通信モジュール」)、通信環境、データの保存や連携処理に必要なシステムを一体で提供するIoTのプラットフォーム
https://sakura.io/

必要な部品を準備する

  • さくらの通信モジュール
    • 1x 本体
    • 1x アンテナ接続用ケーブル(付属)
    • 1x 専用アンテナ(付属)
  • Arduinoシールド
    • 1x 本体
    • 2x 2.0mmジャンパピン(付属)
  • Genuino 101
    • 1x 本体
  • その他購入が必要なもの
    • 1x USB A-MiniAケーブル
    • 1x ジャンパーコード
    • 1x LED 3V程度

Hello, World. Lチカする

ハードウェア

さくらの通信ジュールにアンテナを接続する

さくらの通信モジュールの空中線コネクタのMain antennaコネクタ及びSub antennaコネクタにアンテナ接続用ケーブルを両方とも取り付けます。アンテナ取り付けケーブルはそれぞれどちらに接続してもかまいません。

antenna.png

アンテナ接続用ケーブルにネジを回す要領でアンテナを取り付けます。

さくらの通信モジュールをArduinoシールドに取り付ける

さくらの通信モジュールとArduinoシールドのHost interfaceコネクタ(基板間コネクタ)を接続します。

ArduinoシールドをGenuino 101に取り付ける

シールドとGenuinoのピンが合わさるように取り付けましょう。

LEDを取り付ける

LEDを取り付けます。LEDの足が長いほうがアノードなのでデジタル13ピンに、足の短いほうのカソードをグラウンド/GNDに接続します。

led.jpg

ソフトウェア

Arduino IDEをインストール

Arduino IDEにSakuraIOライブラリをインストール

  1. Sketch->Include Library->Manage Libraries...で遷移し、Library Managerを開く
  2. 検索窓にsakuraioを入力し、SakuraIOをインストール

sakuraio.png

Arduino IDEにGenuino 101ボードをインストールする

  1. Tools->Board: "..."->Boards Manager...で遷移し、Boards Managerを開く
  2. 検索窓にGenuino 101を入力し、Intel Curie Boardsをインストール

curie.png

ソフトウェアを書き込む

  1. ボードとPCをUSBで繋いで起動したら、Tools->Boards: "..."->Arduino/Genuino 101でボードを選択
  2. Tools->Port->COMポートで接続したArduinoデバイスを選択
  3. File->Examples->Builtin-Examples 01.Basics->Blinkでサンプルスケッチを開く
  4. アップロードアイコンをクリックまたは Ctrl + U でスケッチを書き込みます。
blink.ino
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

完成

a.jpg

LEDを1秒点灯、1秒消灯を繰り返します。

sakura.ioサンプルスケッチを動かしてみる

sakura.ioプラットフォーム操作

sakura.io管理画面でモジュールを登録する

「プロジェクト追加」で名称を入力し、「モジュールの追加」で登録用IDと登録用パスワードと名称を入力し、先ほど追加したプロジェクトをプロジェクトの一覧から選択して追加しましょう。

sakura.ioのWebSocket連携サービスを有効にする

管理画面のプロジェクト一覧からWebSocketを有効にしたいプロジェクトの「サービス追加」をクリックし、「追加サービスの選択」からWebSocketを選択し、名称を入力して追加します。連携サービスに先ほど追加したWebSocketが登録されているのを確認できたら完了です。

ハードウェア

Arduinoシールドに電源を供給する

ACアダプターから電源をとる際は必要ないのですが、USBのみから給電する場合シールドへ電源の供給が行われないため、5VとVINをつなぎGenuino 101の5VをArduinoシールドのVINに供給します。

wire.jpg

ArduinoシールドのI2C接続を有効にする

さくらの通信モジュールュールのI2C信号とArduinoのI2C信号を接続するためにArduinoシールドのI2C接続用ジャンパを取り付けます。図のように接続することでSDA1/SCL1に接続します。

i2c.png

NOTE: https://sakura.io/developer/pdf/sco-ard-01_manual_latest.pdf[Arduinoシールド取扱説明書]

ソフトウェア

ソフトウェアを書き込む

ボードとPCをUSBで繋いで起動したら、Tools->Boards: "..."->Arduino/Genuino 101でボードを選択。

Tools->Port->COMポートで接続したArduinoデバイスを選択。

File->Examples->SakuraIO->Standardでサンプルスケッチを開く。

Sketch->Include Library->Wireをインポートします。Wire.hをインポートすることでI2Cを有効にします。

#include <Wire.h>

Wire.hを使うためのWire.begin()関数をSerial.begin()関数の後ろに挿入します。

  Wire.begin();

setup()はこのようになります。

#include <Wire.h>

#include <SakuraIO.h>

//SakuraIO_SPI sakuraio(10);
SakuraIO_I2C sakuraio;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  Serial.print("Waiting to come online");
  for(;;){
    if( (sakuraio.getConnectionStatus() & 0x80) == 0x80 ) break;
    Serial.print(".");
    delay(1000);
  }
  Serial.println("");
}

アップロードアイコンをクリックまたは Ctrl+U でスケッチを書き込みます。

blink.ino
#include <Wire.h>

#include <SakuraIO.h>

//SakuraIO_SPI sakuraio(10);
SakuraIO_I2C sakuraio;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  Serial.print("Waiting to come online");
  for(;;){
    if( (sakuraio.getConnectionStatus() & 0x80) == 0x80 ) break;
    Serial.print(".");
    delay(1000);
  }
  Serial.println("");
}

uint8_t counter = 0;

void loop() {
  counter++;

  Serial.println("");
  Serial.println(counter);

  uint8_t request[33] = {};
  uint8_t response[33] = {};

  // Echoback
  request[0] = counter;
  sakuraio.echoback(1, request, response);
  Serial.print(request[0]);
  Serial.print(" -> ");
  Serial.println(response[0]);

  // Unixtime
  uint32_t unixtime = (uint32_t)(sakuraio.getUnixtime()/1000UL);
  Serial.print("Unixtime ");
  Serial.println(unixtime);

  // ADC
  uint16_t adc;
  adc = sakuraio.getADC(0);
  Serial.print("ADC0 ");
  Serial.println(adc);
  adc = sakuraio.getADC(1);
  Serial.print("ADC1 ");
  Serial.println(adc);

  // ProductID
  uint16_t pid = sakuraio.getProductID();
  Serial.print("PID ");
  Serial.println(pid);

  // UniqueID
  sakuraio.getUniqueID((char *)response);
  Serial.print("UID ");
  Serial.println((char *)response);

  // Version
  sakuraio.getFirmwareVersion((char *)response);
  Serial.print("Ver ");
  Serial.println((char *)response);

  // Connection Status
  uint8_t connectionStatus = sakuraio.getConnectionStatus();
  Serial.print("Status ");
  Serial.println(connectionStatus);

  //getSignalQuality
  uint8_t signalQuality = sakuraio.getSignalQuality();
  Serial.print("Quality ");
  Serial.println(signalQuality);


  // Tx Queue
  uint8_t ret;
  ret = sakuraio.enqueueTx((uint8_t)0, (int32_t)counter);
  Serial.print("Enqueue ");
  Serial.println(ret);

  uint8_t avail;
  uint8_t queued;
  sakuraio.getTxQueueLength(&avail, &queued);
  Serial.print("Tx Available=");
  Serial.print(avail);
  Serial.print(" Queued=");
  Serial.println(queued);

  if(queued >= 30){
    ret = sakuraio.clearTx();
    Serial.print("Clear ");
    Serial.println(ret);
  }else if(queued >= 5){
    ret = sakuraio.send();
    Serial.print("Send ");
    Serial.println(ret);
  }

  // Rx Queue
  sakuraio.getRxQueueLength(&avail, &queued);
  Serial.print("Rx Available=");
  Serial.print(avail);
  Serial.print(" Queued=");
  Serial.println(queued);

  for(uint8_t i=0; i<queued; i++){
    uint8_t channel;
    uint8_t type;
    uint8_t values[8];
    int64_t offset;
    ret = sakuraio.dequeueRx(&channel, &type, values, &offset);
    Serial.print("Dequeue ");
    Serial.print(ret);
    if(ret == 0x01){
      Serial.print(" ch="); Serial.print(channel);
      Serial.print(" type="); Serial.print((char)type);
      Serial.print(" values=[");
      for(uint8_t b=0; b<7; b++){
        Serial.print(values[b]);
        Serial.print(" ");
      }
      Serial.print(values[7]);
      Serial.print("] offset="); Serial.println((int32_t)offset);
    }else{
      Serial.println(" ERROR");
    }
  }

  delay(5000);
}

完成

Tools->Serial Monitor Ctrl+Shift+M でシリアルのログを見てみましょう。

241
241 -> 241
Unixtime 1497510704
ADC0 2282
ADC1 1770
PID 1
UID 16A0100470
Ver v1.2.1-170425b-cd8cace
Status 128
Quality 5
Enqueue 1
Tx Available=28 Queued=4
Rx Available=32 Queued=0

242
242 -> 242
Unixtime 1497510709
ADC0 2319
ADC1 1702
PID 1
UID 16A0100470
Ver v1.2.1-170425b-cd8cace
Status 128
Quality 5
Enqueue 1
Tx Available=27 Queued=5 <1>
Send 1 <2>
Rx Available=32 Queued=0

243
243 -> 243
Unixtime 1497510714
ADC0 2319
ADC1 1727
PID 1
UID 16A0100470
Ver v1.2.1-170425b-cd8cace
Status 128
Quality 5
Enqueue 1
Tx Available=31 Queued=1 <3>
Rx Available=32 Queued=0

<1> キューを5まで貯める
<2> 送信
<3> キューのカウントがリセットされた

sakura.ioのコントロールパネルのWebSocketログを確認して、プラットフォームにデータが到達しているか確認してみましょう。

sakura.io管理画面のモジュールが登録されているプロジェクトにあるWebSocket連携サービスを開きます。

b.jpg

しばらく待っていると、データが25秒ごとに5つずつ到達しているのが確認できます。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0