EV3RTのBluetooth通信とsyslogを使うと無線で動作中のログを取得することができます。
ETロボコンの倒立ロボットなど、動かしながらセンサーの値の現在値を見たりすることもできて便利です。
ログタスクを使って、ログを取得する
EV3RTのログタスクを使用してログを出力すると、空き時間を利用してログを送信することができます。
ログメッセージを出力する
void syslog(uint_t prio, const char *format, ...);
使用例)
syslog(LOG_INFO, "Unresolved event packet %d", packet[0]);
1番目の引数はログレベル、2番目以降はログに出力するメッセージをprintfみたいな感じでフォーマット付きで指定することができます。
ログレベル
(2018/10/30 修正 Thanks to @koushiro )
ログレベルの定義は以下のようになっています。
/*
* ログ情報の重要度の定義
*/
#define LOG_EMERG UINT_C(0) /* シャットダウンに値するエラー */
#define LOG_ALERT UINT_C(1)
#define LOG_CRIT UINT_C(2)
#define LOG_ERROR UINT_C(3) /* システムエラー */
#define LOG_WARNING UINT_C(4) /* 警告メッセージ */
#define LOG_NOTICE UINT_C(5)
#define LOG_INFO UINT_C(6)
#define LOG_DEBUG UINT_C(7) /* デバッグ用メッセージ */
EV3RTの場合は、デフォルト設定で、ログレベルに「LOG_NOTICE」より上(数字が小さいもの)が出力される仕様になっています。
(LOG_INFO, LOG_DEBUGは出力されないので注意)
TODO:出力するログレベルの変更方法
PC側の設定
PC側で「Bluetoothで送信したログを受信できるアプリ」を準備してください。
macの場合はminicomが無難でしょう。
設定方法は Mac OS X でETロボコンに出よう!(Bluetooth編) を参考にしてください。
windowsの場合はTeratermがよいと思います。
SDカードにある設定情報を変更
SDカードにある設定情報を変更します。
ev3rt/etc/rc.conf.ini にあるDefaultPortにBTを指定すると、Bluetooth経由でログが送信されるようになります。
TODO:LCD,シリアルポート経由で出力する場合についてかく
[Debug]
DefaultPort = BT
ログを送信する
ログメッセージを出力できるようにしたアプリを作成し、SDカードのappsにコピーしておいてください。
EV3RTを起動します。
(初回の場合はPCとペアリングが必要な場合があります)
minicom(Macの場合)を起動します。
Welcome to minicom 2.7.1
OPTIONS:
Compiled on May 17 2017, 15:29:14.
Port /dev/tty.MindstormsEV3-SerialPor, 22:58:44
Press Meta-Z for help on special keys
接続できた場合は上記のようなメッセージが出力されます。
Press Meta-Z for help on special keys
が表示されたら、EV3RTのメニューからアプリを実行するとログが出力されます。
ログを保存する
ここではPC側にBluetooth経由で送信したデータをminicomで保存する方法を紹介します。
(Windowsの人はTeraTermを使えば良いと思います)
Lキー押すを以下のような画面になるので、ログファイルの名前を指定してください。
ファイル名を入力してenterキーを押すと、ログファイルの書き込みが開始します。
もう一度Lキーを押すとログのファイル書き込みが終了します。