EV3RTでログをリアルタイムに見る方法


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 )
ログレベルの定義は以下のようになっています。

hrp2/include/t_syslog.h
/*
 *  ログ情報の重要度の定義
 */
#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を使えば良いと思います)

escキー+zでメニューが表示されます。

Lキー押すを以下のような画面になるので、ログファイルの名前を指定してください。

ファイル名を入力してenterキーを押すと、ログファイルの書き込みが開始します。
もう一度Lキーを押すとログのファイル書き込みが終了します。