先日、「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秒に)なっていることが分かります。
これであれば、常時温度や湿度を観測するシステムとして、問題なく実使用できそうです。