Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
サンプルコード
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
汎用クラス・関数
基本クラス、関数
Loading...
Loading...
ユーティリティ関数
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
ライブラリについて
資料の取り扱いについてをご参照ください。 お気付きの点がありましたら、当サポート窓口にご連絡いただければ幸いです。
本資料の記述内容はライブラリとして取り扱い、ライブラリに適用されるMW-OSSLAを適用します。
本資料は MWM5 バージョン 0.9 に対応します。
本ライブラリMWM5は、M5StackとTWELITE をシリアル(UART)接続して、M5Stack上でTWELITEを利用することを目的としています。またライブラリを活用した TWELITE STAGE (開発環境) のソースコードも含まれています。
TWELITEシリアルデータ形式のパーサーライブラリ
ターミナル画面描画を行うライブラリ
Windows/Linux/macOS向けウインドウ描画ライブラリ
TWELITE STAGE (TWELITE 開発・評価環境)
ライセンス
本パッケージ内で、ライセンス上特別な記述のないものは、モノワイヤレスオープンソースソフトウェア使用許諾契約書を適用します。詳細はパッケージ付属の文書を参照してください。
本ソフトウェアについては、モノワイヤレス株式会社が正式にサポートを行うものではありません。お問い合わせにはご回答できない場合もございます。予めご了承ください。
不具合などのご報告に対してモノワイヤレス株式会社は、修正や改善をお約束するものではありません。
また導入パッケージなどお客様の環境に依存して動作しない場合もございます。
MWM5ライブラリには、シリアル入出力、画面出力など多岐にわたるコードが含まれます。ここでは、コマンドライン(コンソール)画面上で動作標準入出力のみを用いる単純なサンプルについて解説します。
サンプルはexamples_con/
以下に格納します。
App_Wings(または各アプリのUART出力)を解釈して、各パケットメッセージの概要を表示します。
glancerは「glance(一目する)人」の意味の英単語です。
プロジェクトフォルダのソースコードはglancer.cpp
のみです。残りの必要なコードはsrc/..
を参照します。
MWM5ライブラリ全てのファイルは必要ありません。以下に必要なファイルを列挙します。
上記で必要なファイル等は本ドキュメントと相違ある場合もあります。問題があればビルド時にエラーが表示されますので、エラーファイルに記述される"~not found"といったメッセージを頼りに足りないファイルをコピーしてください。
examples/glancer_con というプロジェクト定義がありますので、こちらをビルドしてください。
make (GNU) と g++ (gcc より) が必要です。事前にインストールを済ませてください。
Makefile
を確認してください。以下の定義は必要に応じて書き換えます。
makeコマンドを実行します。
標準入力(通常の1バイト入力を用いているため改行が入力されるまでは入力文字列は評価されません)にアスキー形式のUARTメッセージを入力します。出力はPKT...
となります。
先頭の項目について解説します。
必要な標準ライブラリヘッダとMWM5ライブラリヘッダを読み込みます。
MWM5ライブラリでは細かく名前空間が使用されていますが、利用時には煩雑ですのですべてusing namespace
により省略可能とします。
このサンプルでは標準入力から1バイトずつ入力(std::cin::get()
)して、これをASCIIパーサーに投入します。
標準入力ではシステムによって改行コードが異なりますが、ここでは'r'
または'\n'
のいずれが来ても'\r'
を投入するようにしています。本パーサーは末尾の'\r'
のみを評価するためです。
投入後書式が完了した場合はparse_ascii
はtrue
を戻します。ここでデータを解釈します。
ASCIIパーサーにより得られたバイト列は.get_payload()
メソッドにより配列SmplBuf_Byte
型として取り出すことが出来ます。
このサンプルでは得られたバイト列を解釈して、どの種別のUARTメッセージなのか、何が格納されているのかを取り出せるようにします。
バイト列を解釈する手続きはnewTwePacket()
にバイト列payl
を与えます。戻り値としてクラスオブジェクトpkt
を生成します。このオブジェクトはspTwePacket
型の(メモリ管理を行う)スマートオブジェクトで、TwePacket
型のオブジェクトを格納します。
実際にはpkt
は種別に応じたTwePacket
型の派生クラスのインスタンスが格納されています。この派生クラスの種別を確認するのがidentify_pkt_type()
で、パケット種別としてE_PKT
型の値を返します。
パケット種別が得られたら、パケット種別ごとの表示関数print_???(spTwePacket)
を呼び出しています。
ここから先はパケット種別ごとに手続きが違います。以下にApp_Tweliteの解釈例、App_PALの解釈例を示します。
App_Twelite の UARTメッセージの解釈を行います。まずspTwePacket
型のままでは、App_Twelite特有のデータにアクセスできません。
TWELITE PALのUARTメッセージを解釈します。TWELITE PALは接続される基板によって異なるUARTメッセージが出力されます。このためデータ取得も一旦PALとして解釈してから、さらに個別のPAL基板のデータを取り出します。
最初にPAL共通データをrefTwePacketPal()
により取り出します。
最初にイベントパケットかどうかの判定を行います。イベントパケットは例えば通知(NOTICE)PALの加速度センサーが静止状態から加速度を検出した(タップ)といった現象をイベント番号として伝えるものです。イベントパケットにも様々なデータが付加されますが、通常はイベント番号を参照します。
イベントパケットでなかった場合は、いずれかのPAL基板の標準的なパケットデータが含まれます。どの基板であるかを判定するには.u8palpcb
を参照します。
PAL基板の種別がわかったら、PAL基板の種別に応じた手続き(.get_PalMag()
など)により、PAL基板特有のデータが含まれるクラスオブジェクトを得ます。
上記の例では開閉センサーPALの磁気センサーの状態を得ています。
: App_Wings(または各アプリのUART出力)を解釈して、各パケットメッセージの概要を表示します。
解説 についても参照ください。
のクラスインスタンスを生成しておきます。
まずrefTwePacketTwelite()
を呼びます。戻り値はの参照型です。App_TweliteのUARTメッセージを解釈した特有のデータが含まれます。例えば.DI1
はDI1のHigh/Low状態を示します。
定義 | 内容 |
| 必須。標準入出力のみでビルドしたい場合に必要な定義です。 |
| システム時間[ms]を得る ※ |
定義名 |
CXX | g++-9 など実行名が違う場合に書き換えます。 ※ Makefile 中で動作環境を判定している部分があり、この部分に定義が含まれます。 |
DEFINES | 必要に応じて。 |
CFLAGS | 必要に応じて。コンパイルオプションをコンパイラに与えます。 |
ライブラリの使用
ソースコード上でライブラリを使用するには #include <mwm5.h>
をソースコード上に記述します。
Arduino.h, M5Stack.h は mwm5.hより後でインクルードしてください。
mwm5.hにはusing namespace
を用いて、ライブラリ中の名前空間を可視にし省略できる宣言が含まれています。これら名前空間を明示的に記述したい場合は替わりに#include <twelite.hpp>
を記述してください。
ここでは、以下の解説が含まれます。
項目 | 内容 |
Typ= |
Lq= | LQI値が格納されます。 |
Ad= | 32bitの送信元アドレスと8bitの送信元論理アドレスが格納されます。 |
Vmv= | 電源電圧です。 ※ メッセージにデータがない場合は 0000 となります。 |
Tms= | メッセージを受信したシステム時間が格納されます。 ※ |
です。
PAL基板種別
下記のPAL基板に対応します。
名前
解説
NOPCB
基板未接続、エラー
MAG
マグネットセンサー付きのMAG (開閉センサーパル)
AMB
温湿度センサー、照度センサー付きのAMB (環境センサーパル)
MOT
加速度センサー付きのMOT (動作センサーパル)
NOTICE
LED付きのMOT (通知パル)
環境センサーパル(AMB)のセンサーデータ
エスケープシーケンス
エスケープシーケンスは ESC 文字 '\033' で始まり何文字かで完結する制御コードです。
本ライブラリが動作するプログラム上や、シリアルポートの先にあるマイコンから制御文字をターミナルに投入することで、様々な画面制御(画面のクリア、カーソルの移動、色などの表示属性の変更)を行うことが出来ます。
以下に対応するエスケープシーケンスを記述します。表中の ESC はエスケープ文字 '\033'、イタリックの n や m は数字の入力です。
ITerm
で対応するエスケープシーケンスは、ANSIターミナル互換を目的としたものではありません。解釈や仕様には違いがあります。
エスケープシーケンス
意味
ESC [ n A
カーソルをn行上に移動する。(n省略時は1行)
ESC [ n B
カーソルをn行下に移動する。(n省略時は1行)
ESC [ n C
カーソルをn列右に移動する。(n省略時は1列)
ESC [ n D
カーソルをn列左に移動する。(n省略時は1列)
ESC [ n G
カーソルのカラムnの位置に移動する (n省略時は1カラム目=行頭)
ESC [ n ; m H
カーソル位置を行n列mに移動する。先頭位置の場合は1を指定します。n;mを省略した場合は左上ホームポジションにカーソルを移動します。
ESC [ n ; m f
ESC [ n ; m Hに同じ。
ESC [ 2 J
画面をクリアしてカーソルをホームポジションに移動する。
ESC [ n K
n=0 または省略 カーソル行より後ろを削除する ※ 背景色を変更して呼び出すと行末まで指定した背景色でクリアします。
n=1 カーソル行より前を削除する
n=2 行全体を削除する
ESC [ n1 ; n2 ; ...; n4 m
描画属性の設定を行う。n1 .. n4 は任意数指定できる。
1 → 太字
7 → 反転
30 .. 37 → 文字色
40 .. 47 → 背景色
0 → 属性抹消
環境
以下の環境で開発しています。
動作等の不都合がある場合は、下記の環境を参考にしてください。
環境
内容
OS
Windows10 バージョン1903
M5Stack ハードウェア
M5stack BASIC
M5Stackライブラリ
0.2.9
ハードウェア接続
MONOSTICK または TWELITE-R と TWELITE モジュールを接続し、必要に応じて各OS向けのデバイスドライバの設定を行います。
TWELITE DIPとの接続例です。シリアルポート(UART)のTX,RXのみのシンプルな接続です。この接続では TWELITE 上のファームウェアの書き込みなどが行えません。
以下の配線をすることで PGM/RESET/SET ピンが接続されます。TWELITE STAGEアプリケーションを利用する場合は、下記の配線を行ってください。
ハードウェアの接続構成によっては、結線してはいけない場合もあります。ハードウェアの接続については M5Stack の資料も参考の上、十分注意して行ってください。
例: M5Stack faces の GPIO05 ピンは、キーパッドの割り込みピン(出力)が接続されているため、M5Stack側で出力制御を行うことはできません(故障の原因になりえます)。TWELITE STAGEアプリケーションでは、キーパッドに対応するI2Cデバイスを検出した場合は、出力制御しないようにしています。
変更履歴、ダウンロード
ビューア一覧表示に[ウェブ]ボタンを追加し、関連サイトを開く機能を追加
ビューア>コマンダーの追加
標準アプリ 0x80 コマンド
NOTICE PALのLED制御 (App_Wingsにコマンドを送付)
ビューア>PALビューアのNOTICE PAL対応。
Actエクストラのメニューを追加
Act_samplesより高度なもの
外部のオープンソースライブラリ(センサー手続きなど)を利用したもの
マウスによる操作を拡大 (リスト、ボタン、タブ)
マウス移動でフォーカス、左クリックで確定、右クリックは[ESC]キー入力
画面表示負荷の低減
アプリケーションがバックグラウンドの時はスクリーンセーバーを無効にした
アプリケーションがバックグラウンドの時は、描画回数を減らして CPU 負荷を減らした
ビルドプロジェクト(Act, TWE_Apps, Actエクストラ)の一覧の機能強化
項目選択時に下部に概要を表示 (000desc.txtを読み込む。TWE_Descクラスにより処理)
プロジェクトフォルダを開く(またはVSCodeで開く)機能
関連ウェブサイトを開く機能
ALt+Shift+m mwxライブラリ、Alt+Shift+t twesettingsライブラリを開く機能
ビルドメニュー中で選択中のフォルダやビルドエラーファイルを開けるようにした。
ログ(シリアルポート入出力)機能の追加
(Alt/Cmd+L)でログの開始・終了
ログファイルを {TWELITE_Stage 実行形式のあるディレクトリ}/log に格納
ファイル名は twestage_{日付-時刻}.log
Shift+Alt/Cmd+L でログファイルディレクトリを開く
その他、変更・修正など
シリアル(FTDI)デバイス名、IDの表示方法を変更
App_UARTでインタラクティブモードに遷移しなかった問題を修正
ディレクトリドロップ時の挙動を変更した (これまではバイナリ書き込みになる場合があったが、メニュー遷移とした)
ターミナル長押し時[C]でリセットに加え、画面クリアするようにした。
NOTICE PALへの対応 (パーサー)
パーサーを標準入出力で動作できるようにビルド定義やソースを調整 (examples_con
/glancer
)
ITerm
の機能追加、不具合修正
すでに文字列が表示されている部分にダブルバイト文字を上書きしたとき、上書きした以降の表示が左右にズレていたが、完全ではないながらズレを抑制するコードを追加
ITerm::clear_line()
を追加。行表示を抹消と、空白で埋める(表示は変わらないが
空白データが行末まで追加される)
ITerm::move_cursor()
を追加。エスケースシーケンスの記述が煩雑であったため。
GUI関連クラスの追加
TWE_Widget
: ウィジェットの基底クラス
TWE_WidSet_Buttons
: 複数ボタンの一括管理
TWE_WidSet_Tabs
: タブ選択
TWE_Buttons
: ボタンクラス
TWE_ListView
: リスト、機能拡張
ステータスラインを設定できるように(最終行をページ番号とページ移動用のボタンとした)
listView
でエントリ数がページ行数の整数倍の時の振る舞いの不具合対応
その他変更、修正など
the_app.set_nextapp()
を廃止し the_app.exit()
に統合
the_keyboard.peek_a_byte()
を追加
アプリハンドラーのデータコンテキストを APP_HNDLR_DC
, APP_HNDLR::use()
を追加
アプリハンドラーを用いる場合、サブアプリのデストラクタで APP_HNDLR::on_close()
を呼ぶように変更。
SimpleBuffer<uint8_t>::c_str()
を uint8_t*
ではなく const char*
型を戻すメンバ関数として再定義
SimpleBuffer<wchar_t>(const wchar_t (&)[N])
のコンストラクタに不具合があった
文字列比較 beginsWith()
, beginsWith_NoCase()
を追加
ウインドウアイコンの追加
BINファイル一覧画面での最大リスト数の制約を緩和 (win/linux/mac)
Glancerビューアの追加
解説文面等の調整
コンソール画面の描画の調整
ファーム書き込み後の移動先画面(インタラクティブモードかターミナルか)の設定が動作していなかった
Alt(or Cmd)+W の割り当てを変更
その他不具合の修正
TWELITE STAGE (MWSDK) 2020-04 linux版に収録
TWELITE STAGE (MWSDK) 2020-04 に収録
TWELITE STAGE アプリを追加
Windows10, macOS, Linux 用のビルド対応
設定ライブラリ twesettings を追加
初期バージョン