Sigfox Shield for Arduinoを使ってみる
@hibigaku 2019年10月08日に作成

低消費電力・低コスト・長距離伝送を特長としたLPWA Sigfoxの開発キットSigfox Shield for Arduino (UnaShield)の使い方を説明します。
UnaShield-V2S2-details-opt.jpg

まず最初に

まずは、開発キットの入手と1年間無料回線契約が必要になります。(Arduino Unoも必要です)

開発キットの入手

Sigfox Shield for Arduinoは、下記ネットショップから購入できます。

1年間無料回線契約

開発キットを入手したら、Sigfox Buyサイトから"Activate my Devkit"ボタンを選択し、画面指示に従って無料回線を取得してください。この時、デバイスのIDとPACが必要になりますので、開発キットに添付されているQRコードを読みとり、入力してください。
取得後、Sigfox backendクラウドのアクセス権が払い出されますので、ログインして、ご自身のデバイスが登録されていることを確認してください。

Sigfoxメッセージを送信する

デバイスが登録されていることが確認できれば、早速ArduinoとSigfox Shield for Arduinoを使ってSigfoxメッセージを送信してみましょう。
サンプルスケッチをこちらからダウンロードして、コンパイル後、Arduinoに書き込んでください。

basic-demo

#include "SIGFOX.h" //必要に応じ書き換えてください //************************************ static const unsigned int MESSAGE_INTERVAL = 30000; //Sigfoxメッセージ送信間隔(30秒) static const unsigned int MAX_MESSAGE_CNT = 10; //Sigfoxメッセージ最大送信数(10回) //************************************ unsigned int message_cnt = 0; // IMPORTANT: Check these settings with UnaBiz to use the SIGFOX library correctly. static const String device = "NOTUSED"; // Set this to your device name if you're using UnaBiz Emulator. static const bool useEmulator = false; // Set to true if using UnaBiz Emulator. static const bool echo = true; // Set to true if the SIGFOX library should display the executed commands. static const Country country = COUNTRY_JP; // Set this to your country to configure the SIGFOX transmission frequencies. static UnaShieldV2S transceiver(country, useEmulator, device, echo); // Uncomment this for UnaBiz UnaShield V2S Dev Kit static String response; // Will store the downlink response from SIGFOX. // IMPORTANT: Check these settings with UnaBiz to use the SIGFOX library correctly. void setup() { Serial.begin(9600); // Arduinoハードウェアシリアルを起動(Arduino <-> PC) Serial.println("==========================="); Serial.println("Sigfox UnaShield Basic Sample"); Serial.print("Send a message in "); Serial.print(MAX_MESSAGE_CNT); Serial.print(" times for each "); Serial.print(MESSAGE_INTERVAL); Serial.println(" msec."); Serial.println("==========================="); //Sigfoxモジュールを起動 if (!transceiver.begin()) stop(F("Unable to init SIGFOX module, may be missing")); // Will never return. Serial.println("Waiting 3 seconds..."); delay(3000); } void loop() { //温度、バッテリー電圧を取得する float temperature = 0; float voltage = 0; transceiver.getTemperature(temperature); transceiver.getVoltage(voltage); if (sendSigfoxMessage(message_cnt, temperature, voltage)) { message_cnt++; } if (message_cnt >= MAX_MESSAGE_CNT) { stop(String("finish...(Message sent successfully)")); } Serial.print("Waiting "); Serial.print(MESSAGE_INTERVAL/1000); Serial.println(" seconds..."); delay(MESSAGE_INTERVAL); } //送信回数と温度、バッテリー電圧をSigfoxメッセージで送信する bool sendSigfoxMessage(unsigned int cnt, float temperature, float voltage) { Serial.println("\n*****SEND SIGFOX MESSAGE*****"); String sCnt = transceiver.toHex(cnt); String sTemp = convertFloatToHex(temperature); String sVoltage = convertFloatToHex(voltage); Serial.print("Count: "); Serial.print(cnt); Serial.print(" / Temperature: "); Serial.print(temperature); Serial.print(" / Voltage: "); Serial.println(voltage); Serial.print("Payload: "); Serial.println(sCnt + sTemp + sVoltage); bool success = transceiver.sendMessage(sCnt + sTemp + sVoltage); Serial.println("*****************************"); return success; } //Float型変数をIEEE754に準拠した16進文字列へ変換する String convertFloatToHex(float val) { union { uint32_t B32; float Float; } floatb32; floatb32.Float = val; return String(floatb32.B32, HEX); }

このスケッチを動かすことにより、送信回数と温度、バッテリー電圧をSigfoxメッセージで送信することができます。
次は、Sigfox backendクラウドで受信したかどうかを確認します。

Sigfox backendクラウドで受信確認する

Sigfox backendクラウドのDEVICEリストから、ご自身のデバイスIDを選択し、左メニューからMESSAGESを選択すると、下図のように受信されたメッセージが確認できます。
sigfox-backend.png

Callback機能を使い3rd partyアプリケーションにメッセージを転送する

SigfoxクラウドのCallback機能を使用することにより、外部アプリケーションにメッセージペイロードを転送することができます。

Callbackの設定方法

Sigfox backendクラウドのDEVICETYPEリストから、ご自身のデバイスタイプ名(Name)を選択し、左メニューからCALLBACKSを選択してください。
Sigfoxクラウドは、AWS IoTやMicrosoft Azure IoT hub、IBM Watson IoT Platform等との連携メニューがありますが、それ以外は、Custom callbackを使います。
custom callback.png
Callback設定画面では、Typeを[DATA]_[UPLINK]とし、下図のようにUrl patternに転送先アプリケーションサーバのURL、その他メッセージ送信方法を定義することにより、メッセージペイロードを転送することができます。
callback2.png
上記の場合、Url pattern先に下記のJSONメッセージを転送します。

callback

{ "device": "1234AB", <-デバイスID "time": 1570565096, <-メッセージ受信時刻(UNIXタイムスタンプ) "data": "1234567890ABCDEF" <-ペイロード }

あとは、アプリケーションサーバ側で、JSONメッセージをパースするだけで結構です。
もし、お手軽にアプリケーションを作ってみたい場合は、Sigfox社が、初期検証目的で公開しているIoT Agency Platformを使ってみてください。

3
hibigaku さんが 2019/10/08 に 編集 をしました。 (メッセージ: 初版)
ログインしてコメントを投稿する

elchikaの記事投稿では
Markdown記法を採用しています。

Markdown記法については
コチラをご確認ください

elchikaの記事投稿では
Markdown記法を採用しています。

Markdown記法については
コチラをご確認ください