Skip to main content

Heliumへの接続

note

この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues

Heliumへの接続

この章では、Heliumプラットフォームの基本的な使用方法と、Heliumプラットフォームを通じてセンサーデータを中継する方法について説明します。

産業用センサーへのアップグレード可能

SenseCAP S2110コントローラーS2100データロガーを使用することで、Groveを簡単にLoRaWAN®センサーに変えることができます。Seeedはプロトタイピングをサポートするだけでなく、SenseCAPシリーズの堅牢な産業用センサーを使用してプロジェクトを拡張する可能性も提供します。

IP66の筐体、Bluetooth設定、グローバルLoRaWAN®ネットワークとの互換性、内蔵19Ahバッテリー、そしてAPPからの強力なサポートにより、SenseCAP S210xは産業用途に最適な選択肢となります。このシリーズには、土壌水分、空気温度と湿度、光強度、CO2、EC、そして8-in-1気象ステーション用のセンサーが含まれています。次の成功する産業プロジェクトには最新のSenseCAP S210xを試してみてください。

SenseCAP産業用センサー
S2100
データロガー
S2101
空気温度&湿度
S2102
S2103
空気温度&湿度&CO2
S2104
土壌水分&温度
S2105
土壌水分&温度&EC
S2110
LoRaWAN®コントローラー
S2120
8-in-1気象ステーション
Heliumに全く経験がない場合は、まずHeliumコンソールについて読むことをお勧めします。

pir

Heliumの紹介

この章では、Heliumコンソールの操作方法を紹介し、Heliumコンソールの第一印象を得るための方法を説明します。

さあ始めましょう >
note

このセクションを開始する前に、展開環境周辺にHelium LoRaWAN®のカバレッジがあることを確認してください。そうでない場合、LoRa®を介してHeliumにデバイスを追加することはできません。詳細については、Helium LoRaWAN®をご覧ください。

Grove - Wio-E5 デバイスを Helium コンソールに追加する

センサーデータをHeliumから中継するには、まずGrove - Wio-E5をHeliumコンソールに追加し、ローカルデバイスとHeliumプラットフォーム間の接続を構築する必要があります。

Grove - Wio-E5を追加するには、Devicesに移動し、ウィンドウ右上の+ Add Device アイコンをクリックします。

上記のように、Heliumコンソールデバイス用に、DevEUIAppEUI、およびAppKeyのデータトリプレットがこの時点で自動的に生成されます。

まずデバイスの名前を入力します。ここではlora wio terminalと名付けます。

note

必要なArduinoおよびWio Terminal環境を事前承認済みコンテンツからダウンロードしてください。

Grove - Wio-E5は、ユーザーが独自のDevEUIAppEUI、およびAppKeyを設定できるため、上記でHeliumによって生成されたトリプレット情報を対応する列に入力できます。

Arduino IDEを開き、以下のコードをArduino IDEにコピーします。

#include <Arduino.h>
#include "disk91_LoRaE5.h"

Disk91_LoRaE5 lorae5(&Serial); // ATコマンドとデバッグトレースが出力される場所

#define Frequency DSKLORAE5_ZONE_EU868
/*
ここで周波数帯域を選択してください。
DSKLORAE5_ZONE_EU868
DSKLORAE5_ZONE_US915
DSKLORAE5_ZONE_AS923_1
DSKLORAE5_ZONE_AS923_2
DSKLORAE5_ZONE_AS923_3
DSKLORAE5_ZONE_AS923_4
DSKLORAE5_ZONE_KR920
DSKLORAE5_ZONE_IN865
DSKLORAE5_ZONE_AU915
*/

char deveui[] = "2CF7FXXXXXX0A49F";
char appeui[] = "80000XXXXXX00009";
char appkey[] = "2B7E151628XXXXXXXXXX158809CF4F3C";

void setup() {

Serial.begin(9600);
uint32_t start = millis();
while ( !Serial && (millis() - start) < 1500 ); // シリアルモニタを開くか、1.5秒待機

// ライブラリを初期化し、利用可能なWIOポートでLORAE5を検索
if ( ! lorae5.begin(DSKLORAE5_SEARCH_WIO) ) {
Serial.println("LoRa E5 初期化失敗");
while(1);
}

// LoRaWanの認証情報を設定
if ( ! lorae5.setup(
Frequency, // LoRaWan ラジオゾーン EU868
deveui,
appeui,
appkey
) ){
Serial.println("LoRa E5 設定失敗");
while(1);
}
}

void loop() {

}
note

上記のコードにはGrove - Wio-E5接続に制限はなく、Grove - Wio-E5が接続されているGroveポートを自動的に検索します。ただし、検索プロセスには時間がかかる場合があります(約1分程度)。

使用したいLoRaWAN®バンドを選択してください。このバンドは使用しているゲートウェイバンドと一致している必要があります。利用可能な周波数バンドは以下のコードのコメントに記載されています。このチュートリアルでは、デフォルトでEU868バンドを使用します。

#define Frequency DSKLORAE5_ZONE_EU868
/*
ここで周波数帯域を選択してください。
DSKLORAE5_ZONE_EU868
DSKLORAE5_ZONE_US915
DSKLORAE5_ZONE_AS923_1
DSKLORAE5_ZONE_AS923_2
DSKLORAE5_ZONE_AS923_3
DSKLORAE5_ZONE_AS923_4
DSKLORAE5_ZONE_KR920
DSKLORAE5_ZONE_IN865
DSKLORAE5_ZONE_AU915
*/
tip

EU868バンドは主にヨーロッパ地域で使用されます。
US915バンドは主に北米で使用されます。
AU915バンドは主にオーストラリア地域で使用されます。

以下のコードにHeliumで生成されたDevEUIAppEUI、およびAppKeyを置き換えてください。

char deveui[] = "2CF7FXXXXXX0A49F";
char appeui[] = "80000XXXXXX00009";
char appkey[] = "2B7E151628XXXXXXXXXX158809CF4F3C";

Wio Terminalにコードをアップロードし、Arduino IDEのシリアルポートモニタを開き、ボーレートを9600に設定して設定を確認します。

上記の情報がすべて完了したことを確認したら、下部のSave Deviceをクリックしてデバイスの追加を完了します。

デバイスが追加されるまでしばらくお待ちください。(約20分かかります。)

各種センサー用デコーダー関数の作成

前のセクションでは、キット内の個々のセンサーの値をWio Terminalを使用して読み取る方法を説明しました。センサーの値をGrove - Wio-E5を介してHeliumに送信するには、ATコマンドを使用する必要があります。送信されたデータはHeliumで受信され、実際に読み取れるデータになる前にデコードする必要があります。このため、デコーダーを作成しました。

また、送信されるデータ形式が一律ではなく、センサーによって整数、浮動小数点、正負のデータなどが異なるため、各センサーに必要なデコーダーコードも異なります。

センサータイプダウンロードアドレス
Wio Terminal 内蔵光センサーダウンロード
Wio Terminal 内蔵IMUセンサーダウンロード
土壌湿度センサーダウンロード
VOCおよびeCO2ガスセンサー (SGP30)ダウンロード
温湿度センサー (SHT40)ダウンロード
Vision AIモジュールダウンロード

オプション1. Wio Terminal 光センサーデータデコーダー

新しいカスタムスクリプトを作成し、「Light_data」と名付けます。

前のセクションWio Terminal 光センサーでは、光センサーで読み取った光の値を整数変数lightに格納し、その値をsend_sync()関数を使用して送信しました。そのため、Heliumで作成したデコーダーの目的は、この整数データを解析できるようにすることです。

以下はデコーダーの設定コードです。このコードをHeliumのコードセクションに貼り付け、Save Functionをクリックしてデコーダーを保存してください。

function Decoder(bytes, port) {

var decoded = {};
if (port == 8) {
decoded.light = bytes[0]<<8 | bytes[1];
}

return decoded;
}

右側のSCRIPT VALIDATORに8ビットの光センサーデータを入力して、デコーダーが正しく解析するかどうかを確認できます。

Flowsに戻り、デバイスをデコーダーに接続します。

オプション2. Wio Terminal IMUセンサーデータデコーダー

新しいカスタムスクリプトを作成し、「IMU_data」と名付けます。

前のセクションWio Terminal IMUセンサーでは、IMUから返される3軸のデータをx_valuesy_valuesz_valuesという浮動小数点数に格納し、これらのデータを100倍して整数に変換してから一緒に送信しました。

特に注意すべき点は、これらのデータが正負の値を取る可能性があるため、これを解析して浮動小数点数に戻す必要があることです。

以下はデコーダーの設定コードです。このコードをHeliumのコードセクションに貼り付け、Save Functionをクリックしてデコーダーを保存してください。

function Decoder(bytes, port) {

var decoded = {};

function transformers(bytes){
value = bytes[0] * 256 + bytes[1];
if (value >= 32768) {
value = 32768 - value;
}
value = value/100.0;
return value;
}

if (port == 8) {
decoded.x = transformers(bytes.slice(0,2));
decoded.y = transformers(bytes.slice(2,4));
decoded.z = transformers(bytes.slice(4,6));
}

return decoded;
}

右側のSCRIPT VALIDATORに48ビットのIMUセンサーデータを入力して、デコーダーが正しく解析するかどうかを確認できます。

Flowsに戻り、デバイスをデコーダーに接続します。

オプション3. Grove土壌湿度センサーデータデコーダー

新しいカスタムスクリプトを作成し、「Soil_data」と名付けます。

前のセクションGrove土壌湿度センサーでは、土壌湿度センサーで読み取った土壌湿度値を整数変数sensorValueに格納し、その値をsend_sync()関数を使用して送信しました。そのため、Heliumで作成したデコーダーの目的は、この整数データを解析できるようにすることです。

そのデコーダーの設定コードは以下の通りです。このコードをHeliumのコードセクションに貼り付けてください。Save Functionをクリックしてこのデコーダーを保存します。

function Decoder(bytes, port) {

var decoded = {};
if (port == 8) {
decoded.soil = bytes[0]<<8 | bytes[1];
}

return decoded;
}

SCRIPT VALIDATORの右側に8ビット土壌湿度センサーのデータを入力して、デコーダーが正しく解析するかどうかを確認できます。

Flowsに戻り、デバイスをデコーダーに接続します。

オプション4. Grove VOCおよびeCO2ガスセンサー(SGP30)のデータデコーダー

新しいカスタムスクリプトを作成し、名前をSGP30_dataとします。

前のセクションGrove VOCおよびeCO2ガスセンサー(SGP30)では、整数変数tvoc_ppbco2_eq_ppmを使用してVOCとeCO2の値を格納しました。

そのデコーダーの設定コードは以下の通りです。このコードをHeliumのコードセクションに貼り付けてください。Save Functionをクリックしてこのデコーダーを保存します。

function Decoder(bytes, port) {

var decoded = {};

function transformers(bytes){
value = bytes[0] * 256 + bytes[1];
return value;
}

if (port == 8) {
decoded.voc = transformers(bytes.slice(0,2));
decoded.eco2 = transformers(bytes.slice(2,4));
}

return decoded;
}

SCRIPT VALIDATORの右側に16ビットSGP30のデータを入力して、デコーダーが正しく解析するかどうかを確認できます。

Flowsに戻り、デバイスをデコーダーに接続します。

オプション5. Grove Temp&Humiセンサー(SHT40)のデータデコーダー

新しいカスタムスクリプトを作成し、名前をSHT40_dataとします。

前のセクションGrove Temp&Humiセンサー(SHT40)では、浮動小数点変数temperaturehumidityを使用して温度と湿度の値を格納しました。そして、これらの値を100倍して整数に変換して送信しました。

そのデコーダーの設定コードは以下の通りです。このコードをHeliumのコードセクションに貼り付けてください。Save Functionをクリックしてこのデコーダーを保存します。

function Decoder(bytes, port) {

var decoded = {};

function transformers(bytes){
value = bytes[0] * 256 + bytes[1];
if (value >= 32768) {
value = 32768 - value;
}
value = value/100.0;
return value;
}

if (port == 8) {
decoded.temp = transformers(bytes.slice(0, 2));
decoded.humi = transformers(bytes.slice(2, 4));
}

return decoded;
}

SCRIPT VALIDATORの右側に32ビットSHT40のデータを入力して、デコーダーが正しく解析するかどうかを確認できます。

Flowsに戻り、デバイスをデコーダーに接続します。

オプション6. Grove Vision AIモジュールのデータデコーダー

新しいカスタムスクリプトを作成し、名前をAI_Version_dataとします。

前のセクションGrove Vision AIモジュールでは、整数変数modelconfiを使用して識別されたモデルの種類とその信頼度を格納しました。

そのデコーダーの設定コードは以下の通りです。このコードをHeliumのコードセクションに貼り付けてください。Save Functionをクリックしてこのデコーダーを保存します。

function Decoder(bytes, port) {

var decoded = {};

function transformers(bytes){
value = bytes[0] * 256 + bytes[1];
return value;
}

if (port == 8) {
decoded.model = transformers(bytes.slice(0,2));
decoded.confidence = transformers(bytes.slice(2,4));
}

return decoded;
}

SCRIPT VALIDATORの右側に16ビットVision AIのデータを入力して、デコーダーが正しく解析するかどうかを確認できます。

Flowsに戻り、デバイスをデコーダーに接続します。

コードをアップロードしてHeliumにデータを送信

各センサーのページでは、データをアップロードするための詳細なコードを提供しています。以下のリストから使用したいセンサーコードを見つけることもできます。

note

このセクションで提供されるコードを使用する前に、コード内のDevice EUI、App EUI、およびApp KeyがHeliumに追加されたデバイス情報と一致していることを確認してください。また、Grove - Wio-E5に設定された周波数帯が、地域のゲートウェイ帯域またはHeliumの帯域と一致しているか確認してください。これを怠ると、ネットワークアクセスに失敗する可能性があります。

LoRaWAN®帯域を設定するコードは以下の通りです。デフォルト設定はEU868帯域です。(EU868帯域はヨーロッパ地域で一般的に使用されています。) #define Frequency DSKLORAE5_ZONE_EU868 US915帯域(US915帯域は北米で一般的に使用されています。) #define Frequency DSKLORAE5_ZONE_US915 AU915帯域(AU915帯域はオーストラリア地域で一般的に使用されています。) #define Frequency DSKLORAE5_ZONE_AU915

センサータイプダウンロードアドレス
Wio Terminal内蔵光センサーダウンロード
Wio Terminal内蔵IMUセンサーダウンロード
土壌湿度センサーダウンロード
VOCおよびeCO2ガスセンサー(SGP30)ダウンロード
温湿度センサー(SHT40)ダウンロード
Vision AIモジュールダウンロード

上記のセンサー送信コードは、Arduino IDEを使用してWio Terminalに直接アップロードして実行できます。その際、シリアルモニターをオンにして、ボーレートを9600に調整し、リアルタイムでデータ送信を観察してください。

詳細については、参考カタログの個別センサー使用セクションに戻ってください。

リアルタイムデータとデバッグ

デバイスを接続したら、リアルタイムのパケットとイベントログでデータ転送を確認できます。

note

Heliumの最新バージョンの更新では、Heliumは新規ユーザーに10,000 DATA CREDITSを提供することをやめ、250 DATA CREDITSのみを提供しています。データ送信頻度を調整してDC消費を減らすか、必要に応じて購入することができます。

My Devicesタブでは、画面右側のビートルボタンをクリックして、Heliumが受信したデータに関する情報を確認できます。

以下のセクションの情報に特に注意を払うことができます。

  • payload: Heliumに送信されたデータのbase64形式の情報。

  • port: データが受信されたポート番号。

note

コードでは、メッセージ送信のポート番号を8に設定しているため、デバッグウィンドウでは、センサーに関するすべてのメッセージがポート8のペイロードになります。ペイロードの読み取りとデコードは、このデコードウェブサイトを使用して行うことができます。

ソースコード解析

このチュートリアルの内容を独自のプロジェクト開発に適用したい場合、コードの意味を理解することが重要です。ここでは、SHT40センサーのコードを例に、コード実装のロジックを説明します。

プログラムの冒頭では、Heliumに接続するための必要な三要素情報を準備し、Wio-E5の周波数を設定する必要があります。

#define Frequency DSKLORAE5_ZONE_EU868
/*
ここで周波数帯を選択してください。
DSKLORAE5_ZONE_EU868
DSKLORAE5_ZONE_US915
DSKLORAE5_ZONE_AS923_1
DSKLORAE5_ZONE_AS923_2
DSKLORAE5_ZONE_AS923_3
DSKLORAE5_ZONE_AS923_4
DSKLORAE5_ZONE_KR920
DSKLORAE5_ZONE_IN865
DSKLORAE5_ZONE_AU915
*/

char deveui[] = "2CF7FXXXXXX0A49F";
char appeui[] = "80000XXXXXX00009";
char appkey[] = "2B7E151628XXXXXXXXXX158809CF4F3C";

次に、data_decord()関数を定義します。この関数はセンサー値をHeliumデコーダーで解析可能なデータフレームに変換し、LoRaWAN®プロトコルに準拠した形式でdata[]配列に格納します。

一般的に、データのオーバーフローを防ぐため、センサーが読み取る可能性のある最大値と最小値を考慮し、オーバーフローしない16進数に分割します。

void data_decord(int val_1, int val_2, uint8_t data[4])
{
int val[] = {val_1, val_2};

for(int i = 0, j = 0; i < 2; i++, j += 2)
{
if(val[i] < 0)
{
val[i] = ~val[i] + 1;
data[j] = val[i] >> 8 | 0x80;
data[j+1] = val[i] & 0xFF;
}
else
{
data[j] = val[i] >> 8 & 0xFF;
data[j+1] = val[i] & 0xFF;
}
}
}

SHT40センサーの場合、温度データと湿度データの2つのデータがあり、正負の値が存在するため、負の値を処理する必要があります。また、小数点以下の値も処理する必要があります。

int_temp = temperature*100;
int_humi = humidity*100;

次のステップは、SHT40の初期化とWio-E5の初期設定です。これらはすべてsetup()関数内で実行されます。

lorae5.begin(DSKLORAE5_SWSERIAL_WIO_P2)

初期化コードでは、DSKLORAE5_SWSERIAL_WIO_P2はWio Terminalの右側のGroveインターフェースを表し、DSKLORAE5_SWSERIAL_WIO_P1左側のGroveインターフェースを表します。外部センサーを使用しない他のプロジェクトでは、DSKLORAE5_SEARCH_WIOを使用することもできます。これにより、Wio-E5が接続されているGroveインターフェースを自動的に検索します。

lorae5.send_sync(              // センサー値を送信
8, // LoRaWanポート
data, // データ配列
sizeof(data), // データのサイズ
false, // 応答を期待しない
7, // スプレッドファクター
14 // 送信出力(dBm)
)

send_sync()関数の重要な役割は、センサー値をLoRaWAN®を介して送信することです。最初のパラメータはデータを送信するチャンネル番号を示し、2番目のパラメータは送信するデータの内容を示し、3番目のパラメータは送信するデータの長さを示します。一般的には、最初の3つのパラメータの内容に注目するだけで十分です。

delay(15000);

プログラムの最後の遅延は、データを送信する頻度を決定します。10秒未満の頻度で送信することは推奨されません。高頻度で送信すると、Wio-E5が正常に動作しなくなる可能性があり、Heliumによって異常なデバイスと認識され、ブロックされる可能性があります。

Grove - Wio-E5のコードと機能についてさらに学ぶには、リポジトリのGitHubリンクを参照してください。Grove - Wio-E5用のライブラリを作成してくれたPaul Pinault (disk91)に特別な感謝を申し上げます。

上記のセクションは、デバイスを使用してHeliumに接続し、データを受信する方法を段階的に説明しています。ただし、実用的な観点から見ると、現在Heliumに送信されているデータは人間が読み取れる形式ではありません。データの可視化が必要な場合は、以下の手順を参照して、HeliumをMicrosoft Azure IoTハブに統合するチュートリアルを完了してください。このチュートリアルでは、データをグラフィカルに表示するプロセスを説明します。

pir

HeliumをAzure IoT Hubに統合

このセクションでは、Microsoft Azureを構成し、Heliumと統合してデータをMicrosoft Azureプラットフォームにアップロードする方法を説明します。

始めましょう >
必要に応じて、他のプラットフォームを選択することもできます。
クラウドプラットフォームセクション

pir

HeliumをGoogle Sheetsに統合

このセクションでは、Google Formsを使用してHeliumを統合し、センサーデータを保存する方法を紹介します。

章にジャンプ >

pir

HeliumをAWS IoT Coreに統合

このセクションでは、Microsoft Azureで受信したデータ情報を無料のWeb APP統合を使用して可視化する方法を説明します。

章にジャンプ >

技術サポートと製品ディスカッション

弊社製品をお選びいただきありがとうございます!製品をご利用いただく際に、できる限りスムーズな体験を提供するため、さまざまなサポートをご用意しております。異なる好みやニーズに対応するため、複数のコミュニケーションチャネルを提供しています。

声明

  • LoRa® マークは Semtech Corporation またはその子会社の商標です。
  • LoRaWAN® は LoRa Alliance® からライセンスを受けて使用されるマークです。
Loading Comments...