【解決】PlatformIOのMinitermでANSIエスケープシーケンス制御できなかった件について


PlatformIOのMinitermでANSIエスケープシーケンス制御できない?

ESP32やArduinoで遊んでいて、moniter(Miniterm)にエスケープシーケンス制御できないので、2時間ほどはまっていた。

ひょんなことから解決してしまった。そんなんしらんがなー。
同じ愚かなドハマリを他の人にしてほしくないので、メモ程度に書いておきます。

PlatformIOのplatformio.iniでmonitor_filtersを設定してください。

これだけです。
monitor画面をよく見ると、書いとるがな。しらんがなー!!
賢明なあなたは、monitor_filtersをGoogle先生にすぐに聞きに行ってください。

 しらんがな

--- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time

どうやら、次のフィルター設定があるようですねぇ。

  • colorize
  • debug
  • default
  • direct
  • hexlify
  • log2file
  • nocontrol
  • printable
  • send_on_enter
  • time

で、初期設定はdefaultになっているようです。なので、ANSIエスケープシーケンスの文字制御がMinitermでできていなかった。ということになります。しらんがな。

かいけつ

direct

次の設定をplatformio.iniへ追加してから、monitorをみてください。エスケープシーケンス制御が有効になっていると思います。
log2fileとtimeは要らなければ削除してください。

monitor_filters = log2file, time, direct

default

\033\x1bなどは、「ESC」のようにmoniterに表示されて文字は制御されません。

monitor_filters = log2file, time, default

debug

よくわかりませんが、送受信で何を送ったのかrawデータが見れるようです。

monitor_filters = log2file, time, debug

その他

次の説明は本家のページの英訳です。(DeepL先生監修)

ESP32, ESP8266のエクセプションデコーダフィルタ名は次の表には書いてません。

Name Description
colorize 受信時とエコー時で異なる色を適用
hexlify データの16進数表示(各文字のコードポイント)
log2file 現在の作業ディレクトリにあるファイル "platformio-device-monitor-%date%.log "にデータを記録する。
nocontrol CR+LFを含むすべてのコントロールコードの削除
printable すべての非ASCII文字の10進コードを表示し、ほとんどの制御コードを置き換えます。
time 新しい行ごとにミリ秒単位のタイムスタンプを追加する
send_on_enter ENTERでデバイスにテキストを送信

さいごに

なんで、今頃になって気づいたんやろ。しらんかった。。
調べるの疲れた。👍
少しでもお役に立てれば何よりです。

(了)