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

もとのページに戻る

2024-04-08 現在

TWELITE SPOT

TWELITE と Wi-Fi のネットワークを連携させる
無線LANゲートウェイ TWELITE SPOT は、低消費電力が特徴の無線マイコンモジュール TWELITE と 無線 LAN マイコンモジュール ESP32 を組み合わせた製品です。ESP32 のファームウェアを開発することで、TWELITE のネットワークと Wi-Fi ネットワークを連携させることができます。

TWELITE と ESP32 で広がる世界

TWELITE SPOT は、小型で省電力、さらにペアリングをしないため多くの端末を同時に使用できる TWELITE シリーズと無線 LAN マイコンモジュール ESP32 を組み合わせた製品です。

外観

外観

内部構成

内部構成

ESP32 のファームウェアを開発することで、例えば下記のようなシステムを実現できます。

ローカルサーバローカルゲートウェイIoT ゲートウェイ
TWELITE 子機のデータを LAN 内で共有TWELITE 子機のデータを LAN 内で利用TWELITE 子機のデータをクラウドに利用

ローカルサーバ

ESP32 をサーバとして使用します。例えば、TWELITE CUE が計測した加速度データをスマートフォンに表示したり、TWELITE DIP の出力ポートをスマートフォンで操作したりすることができます。

ローカルゲートウェイ

ESP32 を LAN に接続します。例えば、ビル全体に設置した TWELITE ARIA が送るデータを各フロアの TWELITE SPOT で受信し、LAN 上のサーバに全フロアの温湿度データを集約することができます。

IoT ゲートウェイ

ESP32 をインターネットに接続します。例えば、TWELITE CUE と磁石をドアに取り付け、取得したドアの開閉状態から、ドアが開いたままであることをクラウド上で検知できます。

Arduino IDE と専用ライブラリによる開発

TWELITE SPOT によるシステムを構築するには、ESP32 のファームウェアを開発する必要があります。

このとき、ESP32 のファームウェア開発には Arduino IDE が使用できます。

Arduino IDE を使った開発の様子

Arduino IDE を使った開発の様子

Arduino ライブラリマネージャで配布中の MWings ライブラリ により、TWELITE 子機からのパケット受信や TWELITE 子機へのコマンド送信を簡単に行うことができます。

スタートガイドの流れ

このスタートガイドでは、TWELITE SPOT の動作確認、ESP32 開発環境の構築、簡単なスケッチの作成および書き込みを行います。

1. TWELITE SPOT の動作を確認する

まずは使ってみる

内容

TWELITE SPOT にプリインストールされているアプリを使って、加速度センサー無線タグ TWELITE CUE のデータをスマートフォンで閲覧してみます。

必要なもの

TWELITE SPOTTWELITE CUE
TWELITE 親機TWELITE 子機

2. ESP32 の Hello World を行う

ESP32 を使ったファームウェア開発の基礎

内容

開発環境の構築、Hello World スケッチの作成・書き込み、動作確認を行ってみます。

必要なもの

TWELITE SPOTTWELITE R3
ファームウェアを書き込むための TWELITE SPOT 本体PC と TWELITE SPOT を接続するための USB アダプター

3. TWELITE CUE からデータを取得する

TWELITE との通信

内容

TWELITE CUE の加速度データを ESP32 から出力してみます。

必要なもの

TWELITE SPOTTWELITE CUETWELITE R3
ファームウェアを書き込むための TWELITE SPOT 本体TWELITE SPOT と通信するための TWELITE 子機PC と TWELITE SPOT を接続するための USB アダプター

1 - まずは使ってみる

TWELITE SPOT と TWELITE CUE を使って、スマホに加速度情報を表示してみる
TWELITE SPOT では、ESP32 上の Web サーバに動的なページをホストすることで、TWELITE 子機から受信したデータをネットワーク内に配信できます。
動作イメージ

動作イメージ

ここでは、TWELITE SPOT が無線 LAN のアクセスポイントとして機能します。

用意するもの

TWELITE SPOT の動作を確認する

1. 本体を起動する ⚡

TWELITE SPOT の側面に USB-C ケーブルを接続し、USB AC アダプタから電源を供給してください。

USB 電源の接続

USB 電源の接続

2. TWELITE CUE を起動する ⚡

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

コイン電池の挿入

コイン電池の挿入

3. スマートフォンを接続する 📱

スマートフォンの Wi-Fi 設定からネットワーク TWELITE SPOT (XXXX) に接続してください。

4. Webブラウザを開く 🌐

スマートフォンのWebブラウザを開き、spot.local へアクセスしてください。

以下のような画面が表示されます。

トップページ

トップページ

5. CUE ビューアを開く 📈

CUE Viewer をタップして、CUE ビューアの画面を開いてください。

以下のような画面が表示されます。

CUE Viewer

2 - ESP32 を使ったファームウェア開発の基礎

TWELITE SPOT のファームウェア開発に向けて、ESP32 の Hello World を試す

ESP32 は、単体でも無線 LAN によるシステムを構築することができます。例えば、ホストした Web ページにデータを表示したり、データを WebSocket で LAN 内のサーバに送信したり、クラウドサービスへ REST API を投げたりすることができます。

TWELITE SPOT は、この ESP32 に TWELITE を組み合わせることで、多数の小型で省電力な無線タグを利用できるようにした製品です。

用意するもの

環境を構築する

1. IDE を導入する 🚛

コンピュータに Arduino IDE 1.x を導入していない場合は、Arduino 公式ダウンロードページから Legacy IDE (1.8.X) をダウンロードのうえ、これをインストールしてください。

2. ツールチェインを導入する 🚚

Arduino IDE 1.x に Arduino core for the ESP32 を導入していない場合は、ボードマネージャの URL に下記を追加し、esp32 ボード定義をインストールしてください。

https://espressif.github.io/arduino-esp32/package_esp32_index.json

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

TWELITE SPOT に合わせて、Arduino core for the ESP32 の設定を行います。

ボード種別を選択する

ツールバーの ツール -> ボード -> ESP32 Arduino -> ESP32 Dev Module を選択してください。

ESP32 Dev Module の場所

ESP32 Dev Module の場所

ボード設定を行う

下図と同様に設定してください。

設定後の内容

設定後の内容

TWELITE SPOT を準備する

1. フタをはずす ⛏️

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

スイッチやコネクタ類が露出します。

各部の名称

各部の名称

2. TWELITE R3 / R2 をつなぐ 🔌

ESP32用 7P インターフェイス(ESP32 と記載)に TWELITE R3 / R2 を接続してください。

接続例 (ESP32)

接続例 (ESP32)

3. USB-C 電源をつなぐ ⚡

側面の USB-C コネクタ に 5V 電源を供給してください。

スケッチを動かす

Arduino では、プログラムコード/プロジェクトのことをスケッチと呼びます。

1. スケッチを作成する 👨‍💻

ESP32 から文字列をシリアル出力し、Arduino IDE のシリアルモニタに出力する Hello World スケッチを作成します。

スケッチ作成画面

スケッチ作成画面

Arduino IDE を起動して、下記のコードを入力してください。

void setup() {
  Serial.begin(115200);
  Serial.println("Hello, World!");
}

void loop() {
}

setup() の内容は起動時に一度だけ実行されます。一方、loop() の内容は際限なく繰り返し実行されます。

2行目では、シリアルポートのボーレート(通信速度)を 115200bps に設定しています。

  Serial.begin(115200);

3行目では、"Hello, World!" という文字列をシリアルポートに出力しています。

  Serial.println("Hello, World!");

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

シリアルポートを選択する

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

シリアルポート選択

シリアルポート選択

ESP32 を起動する

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

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

ボタンの位置

ボタンの位置

スケッチを書き込む

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

書き込み完了画面

書き込み完了画面

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

画面を開く

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

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

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

設定する

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

ボーレート設定

ボーレート設定

4. スケッチを動かす 🚀

ESP32 を再起動する

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

リセットスイッチの位置

リセットスイッチの位置

シリアルモニタを確認する

シリアルモニタに以下の文字列が表示されたら成功です。

Hello, World!
Hello World に成功した様子

Hello World に成功した様子

3 - 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バイトずつ読み出す関数です。

4 - 関連情報

ステップアップに向けて
TWELITE SPOT のファームウェア開発に役立つ資料をまとめました。

MWings ライブラリ

TWELITE 製品データシート

TWELITE SPOT マニュアル

スケッチ解説

その他

外部リンク

Arduino

ESP32

コミュニティ

ライブラリ

プラグイン