セクションの複数ページをまとめています。 印刷またはPDF形式で保存...

もとのページに戻る

2024-11-14 現在

TWELITE 子機からのデータ受信

TWELITE CUE から受信した加速度データをシリアルモニタに出力してみる
    TWELITE SPOT は、ESP32 に TWELITE を組み合わせることで、多数の小型で省電力な無線タグを利用できるようにしています。

    用意するもの

    環境を構築する

    1. 開発環境を導入する 🚛

    ESP32 を使ったファームウェア開発の基礎 の環境構築を行っていない場合は、これを実施してください。

    2. ボード設定を行う ⚙️

    ボード種別を ESP32 Dev Module としたうえで、下記のように設定してください。

    設定後の内容

    設定後の内容

    3. ライブラリを導入する 🚚

    ESP32 から TWELITE を使うために必要となる MWings ライブラリをインストールします。

    スケッチ -> ライブラリをインクルード -> ライブラリを管理… を開いてください。

    ライブラリマネージャの場所

    ライブラリマネージャの場所

    検索ボックスに MWings と入力し、MWings をインストールしてください。

    ライブラリマネージャ

    ライブラリマネージャ

    TWELITE SPOT を準備する

    1. フタをはずす ⛏️

    TWELITE SPOT のケース上面のフタをはずしてください。

    2. ケーブルをつなぐ 🔌

    ESP32用 7P インターフェイス(ESP32 と記載)に TWELITE R3 / R2 を接続したうえで、側面の USB-C コネクタ に 5V 電源を供給してください。

    接続例 (ESP32)

    接続例 (ESP32)

    まずはスケッチを動かしてみる

    1. サンプルを開く 📂

    Arduino IDE を起動し、ファイル -> スケッチ例 -> MWings -> monitor_spot_app_cue を選択してください。

    monitor_spot_app_cue

    2. シリアルポートを選ぶ ⚙️

    ツール -> シリアルポート メニューから、 接続したデバイス(TWELITE R シリーズ)のポートを選択してください。

    シリアルポート選択

    シリアルポート選択

    3. ESP32 を起動する 👇

    ESP32 をプログラムモードで起動します。

    リセットスイッチ EN(RST) と ESP32 ブートスイッチ BOOT を押し、EN(RST) -> BOOT の順で離してください。

    ボタンの位置

    ボタンの位置

    4. スケッチを書き込む ⚒️

    Arduino IDE 上部の マイコンボードに書き込む ボタンをクリックしてください。

    書き込み完了画面

    書き込み完了画面

    5. シリアルモニタを開く 🖥️

    画面を開く

    Arduino IDE 右上の シリアルモニタ ボタンをクリックしてください。

    右上にシリアルモニタボタンがある

    右上にシリアルモニタボタンがある

    設定する

    シリアルモニタのボーレートを 115200 に設定してください。

    6. ESP32 を再起動する 🚀

    書き込みが完了したら、TWELITE SPOT の ESP32 リセットスイッチ EN(RST) を押して離し、ESP32 をリセットしてください。

    リセットスイッチの位置

    リセットスイッチの位置

    7. 起動を確認する 💬

    シリアルモニタに以下の文字列が表示されたら、起動に成功しています。

    Monitor example for TWELITE SPOT: App_CUE (CUE Mode)
    起動に成功した様子

    起動に成功した様子

    8. TWELITE CUE を起動する ⚡

    TWELITE CUE に CR2032 型コイン電池を挿入してください。ただちに動作を開始します。

    コイン電池の挿入

    コイン電池の挿入

    9. 受信を確認する 💬

    シリアルモニタに以下のような文字列が表示されたら、TWELITE CUE からのデータ受信に成功しています。

    Packet Number:     #3
    Source Logical ID: 0x1
    LQI:               147
    Supply Voltage:    3310 mV
    Accel Event:       Dice (1)
    Accel X Axis [0]:  72 mG
    Accel Y Axis [0]:  -64 mG
    Accel Z Axis [0]:  1000 mG
    Magnet State:      Leaving or Not found
    受信に成功した様子

    受信に成功した様子

    スケッチの解説

    サンプルスケッチ(monitor_spot_app_cue.ino)の内容を簡単に解説します。

    ライブラリのインクルード

    4行目では、さきほど導入した MWings ライブラリをインクルードしています。

    #include "MWings.h"

    ピン番号の定義

    6-8行目では、ピン番号を定義しています。

    const int RST_PIN = 5;
    const int PRG_PIN = 4;
    const int LED_PIN = 18;
    名称内容
    RST_PINTWELITE の RST ピンが接続されているピンの番号
    PRG_PINTWELITE の PRG ピンが接続されているピンの番号
    LED_PIN基板上の ESP32 用 LED が接続されているピンの番号

    TWELITE 設定の定義

    10-11行目では、TWELITE SPOT に搭載された TWELITE 親機に適用する設定を定義しています。

    const uint8_t TWE_CHANNEL = 18;
    const uint32_t TWE_APP_ID = 0x67720102;
    名称内容
    TWE_CHANNELTWELITE の 周波数チャネル
    TWE_APP_IDTWELITE の アプリケーション ID

    シリアルポートの設定

    19-21行目では、使用するシリアルポートを初期化するとともに、シリアルモニタへ起動メッセージを出力しています。

      Serial.begin(115200);
      Serial.println("Monitor example for TWELITE SPOT: App_CUE (CUE Mode)");
      Serial2.begin(115200);

    Serial は、Arduino IDE の シリアルモニタとの通信に使います。シリアルモニタの設定に合わせて、ボーレートを 115200 bps としています。

    一方、Serial2 は、TWELITE SPOT に搭載された TWELITE 親機との通信に使います。こちらも TWELITE 親機の初期設定に合わせて、ボーレートを 115200 bps としています。

    TWELITE の設定

    24-26行目では、Twelite.begin() を呼び出し、TWELITE SPOT に搭載された TWELITE 親機の設定と起動を行っています。

        Twelite.begin(Serial2,
                          LED_PIN, RST_PIN, PRG_PIN,
                          TWE_CHANNEL, TWE_APP_ID);
    引数内容
    Serial2HardwareSerial&TWELITE との通信に使うシリアルポート
    LED_PINintステータス LED を接続したピンの番号
    RST_PINintTWELITE の RST ピンを接続したピンの番号
    PRG_PINintTWELITE の PRG ピンを接続したピンの番号
    TWE_CHANNELuint8_tTWELITE の 周波数チャネル
    TWE_APP_IDuint32_tTWELITE の アプリケーション ID

    パケット受信時のイベントの登録

    29-49行目では、Twelite.on() を呼び出し、TWELITE CUE から送られたデータに対して行う処理を登録しています。

    ここでは、受信したパケットの内容をシリアルモニタに出力しています。

        Twelite.on([](const ParsedAppCuePacket& packet) {
            Serial.println("");
            Serial.print("Packet Number:     #");
            Serial.println(packet.u16SequenceNumber, DEC);
            Serial.print("Source Logical ID: 0x");
            Serial.println(packet.u8SourceLogicalId, HEX);
            Serial.print("LQI:               ");
            Serial.println(packet.u8Lqi, DEC);
            Serial.print("Supply Voltage:    ");
            Serial.print(packet.u16SupplyVoltage, DEC); Serial.println(" mV");
            Serial.print("Accel Event:       ");
            printAccelEvent(packet.u8AccelEvent);
            Serial.print("Accel X Axis [0]:  ");
            Serial.print(packet.i16SamplesX[0], DEC); Serial.println(" mG");
            Serial.print("Accel Y Axis [0]:  ");
            Serial.print(packet.i16SamplesY[0], DEC); Serial.println(" mG");
            Serial.print("Accel Z Axis [0]:  ");
            Serial.print(packet.i16SamplesZ[0], DEC); Serial.println(" mG");
            Serial.print("Magnet State:      ");
            printMagnetState(packet.u8MagnetState, packet.bMagnetStateChanged);
        });

    上記のイベントは、TWELITE CUEからのパケットを受信したときにだけ呼び出されます。

    受信したパケットの内容は ParsedAppCuePacket 型の引数 packet に格納されます。

    packet には、下記のデータが含まれています(太字 のデータを上記のコード中で使用しています)。

    データ内容
    packet.u32SourceSerialIduint32_t送信元のシリアルID
    packet.u8SourceLogicalIduint8_t送信元の論理デバイスID
    packet.u16SequenceNumberuint16_tシーケンス番号
    packet.u8Lqiuint8_tLQI(電波通信品質の指標)
    packet.u16SupplyVoltageuint16_t電源電圧 (mV)
    packet.i16SamplesXint16_t[10]各サンプルの X 軸加速度 (mG)
    packet.i16SamplesYint16_t[10]各サンプルの Y 軸加速度 (mG)
    packet.i16SamplesZint16_t[10]各サンプルの Z 軸加速度 (mG)
    packet.u8SampleCountuint8_tサンプル数
    packet.bHasAccelEventbool加速度イベントがあるならtrue
    packet.u8AccelEventuint8_t加速度イベントID
    packet.u8MagnetStateuint8_t磁気イベントID
    packet.bMagnetStateChangedbool磁気センサの状態が変化したならtrue

    TWELITE のデータの更新

    55行目では、Twelite.update() を呼び出しています。

        Twelite.update();

    Twelite.update() は、TWELITE 親機から送信されるパケットデータ(ModBus ASCII 形式)を順次1バイトずつ読み出す関数です。