TWELITE SPOTをつかってTWELITE ARIAの温度データをAmbientに送信する

先日、「TWELITE SPOT」という製品を使ってみました。

「TWELITE SPOT」は「TWELITE」と「ESP32」を組み合わせたデバイスです。SPOT内のTWELITEでTWELITE子機(センサデバイス)からのデータを受信し、それをUARTでESP32に転送することで、ESP32の無線LAN機能を使って受信データをさまざまな用途に活用することができます。

先日は、「TWELITE SPOT」にプリインストールされている「spot-server」というアプリをそのまま使って、SPOTをWebサーバとして利用してみました。
パソコンのWi-Fi設定で、接続先を「TWELITE SPOT」にし、WebブラウザでSPOTにアクセスすることで、「TWELITE ARIA」や「TWELITE CUE」などのTWELITE子機(センサデバイス)で測定したデータをパソコンで表示することができました(記事は こちら)。

さて、「TWELITE SPOT」に搭載されているESP32には、Arduino IDEでつくったスケッチを書き込むことができるので、スケッチを書き換えることで異なる使い方ができます。
そこで今回は、「TWELITE SPOT」内のESP32にスケッチを書き込む方法を確認してみたいと思います。

「TWELITE SPOT」「TWELITE ARIA」「TWELITE R2」という3つのデバイスを使います。




環境構築

まずはプログラム開発環境を準備します。

  • Arduino IDEをインストールします。なお、Arduino IDEは「Legacy IDE(1.X)」を使う必要があるとのことです。今回は「1.8.19」を使いました。
  • esp32ボード定義をインストールします。ボード定義は「2.0.5」以降で動作確認されているとのことです。今回は「2.0.9」を使いました。
  • 「ツール」>「ボード」>「ESP32 Arduino」>「ESP32 Dev Module」を選択します。
  • 「ツール」>「Flash size」を「4MB (32Mb)」から「16MB (128Mb)」に変更します。
  • 「ツール」>「ライブラリを管理」でライブラリマネージャを開き、「MWings」ライブラリをインストールします。今回は「1.0.1」を使いました。

TWELITE SPOTの接続

「TWELITE SPOT」内のESP32にスケッチを書き込むための接続を行います。

  • 「TWELITE SPOT」側面のUSB-CコネクタにACアダプタをつないで電源供給します。
  • 「TWELITE SPOT」ケース上面の蓋を外します。
  • 7Pコネクタがふたつ並んでいます。ひとつがTWELITE用、もうひとつがESP32用です。ESP32用の7Pコネクタ(「ESP」と記載されています)に「TWELITE R2」をつなぎます。差し込む向きを間違えないように注意します。
  • 「TWELITE R2」のUSB-Cコネクタとパソコンをつなぎます。

スケッチを書き込む

「TWELITE SPOT」内のESP32にサンプルスケッチを書き込み、動作確認を行います。

  • 「ファイル」>「スケッチ例」>「MWings」>「plotter_spot_app_aria」を開きます。
  • 「ツール」>「シリアルポート」で「TWELITE R2」のポートを選択します。
  • ESP32横にある「EN」ボタンと「BOOT」ボタン両方を押し、「EN」→「BOOT」の順に離します。
  • Arduino IDEの「書き込む」ボタンをクリックし、スケッチを「TWELITE SPOT」内のESP32に書き込みます。
  • ESP32横の「EN」ボタンを押して離し、ESP32をリセットします。
  • 「ツール」>「シリアルプロッタ」でシリアルプロッタを開きます。
  • 初期状態の「TWELITE ARIA」(「App_ARIA」がプリインストールされています)にボタン電池を取り付けて起動します。「TWELITE ARIA」は5秒毎に温湿度などのデータを無線送信します。
  • 「TWELITE SPOT」は「TWELITE ARIA」が送信したデータを受信し、シリアルプロッタに表示します。

「TWELITE SPOT」内のESP32用スケッチが、問題なく書き込めていることを確認できました。

TWELITE ARIAの温度データをAmbientに送信する

「TWELITE ARIA」から5秒毎に送信された温湿度データを「Ambient」に送信するよう、「TWELITE SPOT」内のESP32用スケッチをつくります。
先ほどの「plotter_spot_app_aria」を参考にしてつくってみます。「TWELITE ARIA」からデータを受信したときに行いたい処理は「Twelite.on()」の中に書くようです。

つくったスケッチは以下のとおりです。

#include <Arduino.h>
#include "MWings.h"
#include "Ambient.h"

WiFiClient client;
Ambient ambient;

const char*    ssid        = "XXXXXXXX";
const char*    password    = "XXXXXXXX";
unsigned int   channelId   = XXXXX;
const char*    writeKey    = "XXXXXXXX";

const int      RST_PIN     = 5;
const int      PRG_PIN     = 4;
const int      LED_PIN     = 18;
const uint8_t  TWE_CHANNEL = 18;
const uint32_t TWE_APP_ID  = 0x67720102;

void setup() {
  Serial.begin(115200);
  Serial2.begin(115200, SERIAL_8N1);

  WiFi.begin(ssid, password);
  while(WiFi.status()!=WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("WiFi connected");
  ambient.begin(channelId, writeKey, &client);

  // Initialize TWELITE
  Twelite.begin(Serial2, LED_PIN, RST_PIN, PRG_PIN, TWE_CHANNEL, TWE_APP_ID);
  // Attach an event handler to process packets from App_ARIA
  Twelite.on([](const ParsedAppAriaPacket& packet) {
    // Plot only the first device
    static uint32_t firstSourceSerialId = packet.u32SourceSerialId;
    if (not (packet.u32SourceSerialId == firstSourceSerialId)) { return; }
    int16_t  temp = packet.i16Temp100x;
    uint16_t humi = packet.u16Humid100x;
    Serial.printf("Temp : %.2f, Humi : %.2f\n", temp/100.0, humi/100.0);
    ambient.set(1, temp/100.0);
    ambient.set(2, humi/100.0);
    ambient.send();
  });
}

void loop() {
  // Update TWELITE
  Twelite.update();
}
  • 先ほどと同様に、つくったスケッチを「TWELITE SPOT」内のESP32に書き込みます。
  • 「Ambient」を確認すると、「TWELITE ARIA」が測定した温湿度データがグラフ表示されています。

所望のスケッチができたことを確認できました。

TWELITE ARIAの温度データ送信間隔を変更する

「TWELITE ARIA」は、デフォルトでは5秒毎に温度データなどを無線送信します。
ただ「Ambient」のデータ送信間隔は最短で5秒なので、このままでは送信したデータが時々無視されてしまう可能性があります。また、1日に「Ambient」に送信できるデータ数は最大「3000」件なので、4時間ほどで送信データ数の上限に達してしまいます。
そもそも、温度や湿度データをそんなに頻繁に確認する必要もありません。

そのためここでは、「TWELITE ARIA」のデータ送信間隔を変更してみたいと思います。

  • 「TWELITE ARIA」に「TWELITE R2」をつなぎます。差し込む向きを間違えないように注意します。
  • 「TWELITE R2」のUSB-Cコネクタとパソコンをつなぎます。
  • 「TWELITE STAGE APP」を起動します(「TWELITE STAGE APP」を起動するまでの方法は こちら)。
  • 「1: TWELITE R2」をクリックします。
  • 「3: インタラクティブモード」をクリックします。
  • 「Enter」をクリックします。
  • 「t」とタイプします。
  • 「Input Transmission Interval[sec]」と表示されるので「60」とタイプします。
  • 「S」とタイプして、変更した設定内容を保存します。
  • 「Ambient」を確認します。

「Ambient」のグラフを見ると、温湿度データの送信間隔が粗く(60秒に)なっていることが分かります。

これであれば、常時温度や湿度を観測するシステムとして、問題なく実使用できそうです。