こんにちは、ENGかぴです。
TWELITEのインタラクティブモードはZigBee通信の特徴である複数グループで通信する場合などに必要な周波数チャンネル、アプリケーションID、再送回数などの重要なパラメータを簡単に設定できるのが特徴です。MWSTAGEでインタラクティブモードを実装する方法をまとめました。
インタラクティブモードを実装する
MWSTAGEではインタラクティブモードを実装のためのライブラリとして設定 (STG) – インタラクティブモードが準備されています。下記リンクに詳細の説明があります。
モノワイヤレス社ー設定 (STG) – インタラクティブモード
モノワイヤレス社のHPで使用方法について説明されていますが動作確認した一部の機能を紹介します。
実装方法
#include <TWELITE>
#include <STG_STD>
STG_STDライブラリを使用するためインクルードします。
void setup() {
auto&& set = the_twelite.settings.use<STG_STD>()
set << SETTINGS::appname("MY_APP"); //アプリ名
set << SETTINGS::appid_default(0x1234cdef); //デフォルトID
}
the_twelite.settings.use<STG_STD>でライブラリ内容を変数に格納します。インタラクティブモードで設定値を表示する前にアプリ名とデフォルトIDを設定することができます。
インタラクティブモードの起動
pinMode(PIN_DIGITAL::DIO12, PIN_MODE::INPUT_PULLUP);
//DIO12を使用
if (digitalRead(PIN_DIGITAL::DIO12) == LOW) {
set << SETTINGS::open_at_start(); //インタラクティブモード起動
appmode = APP_MODE::INTERACTIVE; //loop()で動作しないようにするため
}
set.reload(); //データの読み込み
インタラクティブモードを起動する条件はシステム構成によって任意ですが、今回は電源ONして初期化時にDIO12のピンの状態を確認しLOWであればインタラクティブモードを起動させます。
DIO12ピンをプルアップ付きのDIピン設定を行うため何も接続しない場合はHIGHになります。インタラクティブモードで起動する場合は電源を投入する前にDIO12ピンをGNDにする必要があります。
void loop() {
switch (appmode){
case APP_MODE::INTERACTIVE:
//インタラクティブモード(何も処理しない)
break;
case APP_MODE::NORMAL:
//通常時の動作
break;
default:
break;
}
}
インタラクティブモード中もsetup()関数から抜けloop()に遷移するため通常の処理が動作します。通常の処理によってインタラクティブモードによる変数の変更に支障が出る場合があるため注意が必要です。
例ではインタラクティブモードを起動するときにインタラクティブモードに遷移していることを通知するモードをセットしloop()内で何も処理しないようにしています。
動作確認

MWSTAGEのアクトにSTG_STDライブラリを追加して各種設定を行います。インタラクティブモードで動作させるためDIO12(15ピン)をGNDに接続して電源をONします。
GNDに接続していない場合はインタラクティブモードに遷移せずタイムスタンプを表示します。Tera Termで動作確認しましたがインタラクティブモードに遷移させない場合にタイムスタンプが表示されることを確認しています。
基本操作

インタラクティブモードに遷移すると設定できる項目が表示されます。左側に表示されているの項目のa,i,c等の文字を入力することで各項目の設定ができます。アプリケーションIDを変更するためにはaを入力してリターンキーを押します。

aを押してアプリケーションIDの設定画面に遷移すると変更したいIDを入力してリターンキーを押すと一時保存できます。同様にしてDevice IDやChannelなどを変更することができます。
一時保存したデータはコンフィグレーション画面(最初の画面)でS(大文字)を入力するとEEPROM書き込まれるため電源をOFFしても設定した内容が保存できます。

コンフィグレーション画面で[M]:Extr Menuがあります。M(大文字)を入力するとその他の機能が使用できます。EEPROMのデータを確認したりハードウェアピンのDI情報やI2C接続されているI2Cモジュールのアドレス確認等ができます。
広告
PR:わからないを放置せず、あなたにあったスキルを身に着けるコツを教える テックジム 「書けるが先で、理解が後」を体験しよう!
EEPROMのデータの操作

Extr Menuで1を入力しリターンキーを押すとEEPROM UTILモード遷移します。ここではEEPROMのデータのリードとイレースを操作できます。rでセクターごとにEEPROMのデータが確認できます。
例ではsector1をリードしています。アプリケーションIDがアドレス0x040の後方にから0x050の前方に11223344が表示されています。
Rで全セクターをリードすることができます。

0x0300及び0x0380にデータが書き込まれているのが分かります。このデータは下記記事で操作したEEPROMのデータです。
I2Cのアドレスの確認

Extr Menuで2を入力しリターンキーを押すとH/W UTILモード遷移します。DI statusは現在のDIのHまたはLを示すものですがインタラクティブモード中に確認しても特に処理することがないため使用する頻度は少ないと思います。
probe i2c busは接続したi2c通信ができるセンサーのアドレスを確認することができます。

ハードの接続でSCL及びSDAの配線を間違えていない限り接続されているモジュールのI2Cアドレスを確認することができます。BME280を配線しているので0x76が確認できています。
ソースコード全体
ソースコードは記事作成時点において動作確認できていますが、使用しているライブラリの更新により動作が保証できなくなる可能性があります。また、コメントに誤記が含まれていることもありますが、参考にお使いいただければと思います。
#include <TWELITE>
#include<STG_STD>
// very simple state machine
enum APP_MODE{
INTERACTIVE = 0,
NORMAL
};
APP_MODE appmode = APP_MODE::NORMAL;
uint32_t APP_ID;
uint8_t CHANNEL;
uint8_t LID;
int16 cnt;
uint32_t tmcnt;
/*** the setup procedure (called on boot) */
void setup() {
uint16_t adrs;
uint8_t data;
Serial.begin();
auto&& set = the_twelite.settings.use<STG_STD>();
set << SETTINGS::appname("MY_APP"); //アプリ名
set << SETTINGS::appid_default(0x1234cdef); //デフォルトID
// read SET pin (DIO12)
pinMode(PIN_DIGITAL::DIO12, PIN_MODE::INPUT_PULLUP);
if (digitalRead(PIN_DIGITAL::DIO12) == LOW) {
set << SETTINGS::open_at_start(); //インタラクティブモード起動
appmode = APP_MODE::INTERACTIVE; //loop()で動作しないようにするため
}
set.reload();
APP_ID = set.u32appid();
CHANNEL = set.u8ch();
LID = set.u8devid();
Serial <<" id: " << int(APP_ID) << "ch: " << int(CHANNEL) << "LID: " << int(LID) << crlf << flush;
}
/*** the loop procedure (called every event) */
void loop() {
switch (appmode){
case APP_MODE::INTERACTIVE:
//インタラクティブモード
break;
case APP_MODE::NORMAL:
if( TickTimer.available()){
if( ++cnt >= 1000 ){
cnt -= 1000;
tmcnt+=1;
Serial << "ts:" << int(tmcnt)<< crlf << flush;
}
}
break;
default:
break;
}
}
関連リンク
トワイライトを太陽光パネルで動作させたことやMWSTAGEの環境でソフト開発して無線通信したことなどについてまとめています。
トワイライト(TWELITE)のソフト開発と無線通信でできること
PR:無料トライアル実施中【PC専用】AIスライド資料作成ツールの利用:イルシル
最後まで、読んでいただきありがとうございました。