GUIDE / TERMINAL

SerialFlow Terminalの検索・正規表現・マルチルールフィルターを組み合わせて、ノイズの多いシリアル出力から必要なメッセージを効率的に抽出する方法を解説します。

シリアルモニターのフィルター機能を活用して必要な情報を素早く見つける方法

ESP32やESP8266、STM32などの組み込みマイコン開発において、UARTシリアル通信は最も基本的かつ強力なデバッグインターフェースです。しかし、FreeRTOSやWi-Fiスタック、MQTTプロトコル、各種センサーの読み取りタスクが同時に稼働すると、毎秒数十行から数百行のログがシリアルポートへ高速出力され、画面はあっという間にログの洪水で埋め尽くされます。

こうしたノイズの中から、たまにしか発生しないクラッシュログやWi-Fi切断の原因を目視だけで見つけ出すのは極めて困難です。

Android向けシリアルモニターアプリ SerialFlow Terminal は、現場やデスクワークでの快適なデバッグを実現するために設計されています。本ガイドでは、キーワード検索、正規表現(Regex)、およびマルチルールフィルターを駆使して、必要なメッセージを素早く抽出・分析する実践テクニックを解説します。


検索とフィルターの違いを理解する

シリアルログの調査を効率化する第一歩は、「検索(Search)」と「フィルター(Filter)」の役割分担を把握することです。

  1. 検索(Search):過去ログの探索

    • 既に受信したバッファ内の文字列を探す機能です。
    • 前後の一致箇所へジャンプ(Previous / Next)し、大文字・小文字の区別や正規表現に対応しています。
    • 「起動時にIPアドレスが正しく取得できたか」「エラーコードが何回出力されたか」をピンポイントで確認する用途に適しています。
  2. フィルター(Filter):リアルタイムのノイズ除去

    • 画面上に流れるストリームログを動的に選別する機能です。
    • 条件に一致しない行を非表示にし、重要なサブシステムや重大度(Severity)のメッセージのみをリアルタイムで残します。
    • 肯定条件(抽出)だけでなく、除外条件(非表示)を組み合わせることが可能です。

SerialFlow Terminalでの実践的なフィルター設定手順

ステップ1:基板との接続と基本設定

AndroidスマートフォンにUSB OTGアダプターを介してESP32基板を接続し、SerialFlow Terminal を起動します。

  1. 認識されたUSBシリアルデバイス(CP2102、CH340、FT232、またはESP32-S3等の内蔵USB-CDC)を選択します。
  2. ファームウェア側で設定したボーレート(一般的には 115200)と通信パラメータ(8データビット、1ストップビット、パリティなし)を合わせます。
  3. 接続を開き、シリアル出力が正しく受信されていることを確認します。

関連ツール: デバッグ前に新しいファームウェアバイナリを書き込む場合は、Androidアプリ ESPFlash を使えばPC不要で直接USB OTG経由のフラッシュ書き込みが可能です。

ステップ2:キーワードによるサブシステムの分離

ESP-IDFやArduinoのログには、通常 [I](Info)、[W](Warn)、[E](Error)などのタグが付与されています。

  • エラーのみを監視する: フィルター入力に [E] または ERROR を設定します。日常的な動作ログがすべて隠され、異常発生行のみが画面に残ります。
  • Wi-Fiイベントに集中する: wifiIP_EVENT で絞り込むことで、アクセスポイントへの接続試行や認証失敗(Auth Expiredなど)の経緯を即座に把握できます。
  • MQTT通信の追跡: MQTTPUBLISH を指定し、ブローカーとの接続維持やメッセージ送受信のタイミングを確認します。

ステップ3:正規表現(Regex)によるクラッシュ検知

予期せぬ再起動やウォッチドッグリセットの原因を特定するには、正規表現によるパターンマッチングが威力を発揮します。

SerialFlow Terminalで正規表現モードを有効にし、以下のパターンを入力します。

(Guru Meditation|panic|assert|watchdog|Backtrace)

この設定により、ESP32で発生する主要なクラッシュパターンを一度に網羅できます。

  • Guru Meditation / panic: メモリ保護違反や不正ポインタ参照による致命的例外。
  • assert: 条件不成立による意図的な停止。
  • watchdog: FreeRTOSタスクのハングアップに伴うタイムアウト。
  • Backtrace: クラッシュ発生時のコールスタックアドレス。

画面が流れてクラッシュ行を見失う心配がなくなり、スタックトレースを確実に保存・確認できます。

ステップ4:マルチルールによる複合ノイズ除去

「ネットワーク関連のログは見たいが、1秒ごとに出るセンサーポーリングのログは邪魔」という場合、単一キーワードでは対応しきれません。

SerialFlow Terminalのマルチルールフィルターを活用します。

  1. 抽出ルール(Include): (wifi|mqtt) を指定して通信関連行を対象にします。
  2. 除外ルール(Exclude): (tick|heartbeat|sensor_read) を指定して定期的な無意味な行を除外します。

この組み合わせにより、不要なログが画面から一掃され、通信切断の前後数行のコンテキストだけが鮮明に浮かび上がります。


トラブルシューティング:フィルター使用時の注意点

  • 文字化けが発生する: 出力が意味不明な記号ばかりになる場合は、ボーレートの不一致が原因です。コード内の Serial.begin(...) の値とアプリの設定値を再確認してください。
  • フィルターを設定すると何も表示されない: 「大文字・小文字を区別(Case Sensitive)」が有効になっていないか確認してください。小文字で error と入力していると、ログ側の ERROR はマッチしません。
  • 起動直後のメッセージが取得できない: 端末の接続完了後に基板上の EN(リセット)ボタンを1回押してください。リセット直後に出力されるブートローダーのログやパーティション読み込みログが正確にキャッチできます。

まとめ

ノイズの多いシリアル出力も、適切なフィルタリングを行えば極めて有用な診断情報源になります。SerialFlow Terminal の強力な検索・正規表現・マルチルール機能を活用することで、組み込みデバッグの生産性は大幅に向上します。

不具合の原因を特定してコードを修正した後は、ESPFlash を使って現場のAndroidスマートフォンから即座にファームウェアを再書き込みし、検証サイクルを迅速に回しましょう。