ESP32-PlatformIOのSerial Monitor結果をファイル出力した場合の改行コード問題

PlatformIOのESP-IDFモードで開発したプログラムで、printf(“\n”)を使い出力した結果をファイルで保存したら、改行コードがおかしくなってしまった。

PlatformIOの環境設定

以下のような環境でプログラムを構築、シリアルモニタでファイル化している。
ファイルかはmonitor_filtersのlog2fileを使っている。

platformio.iniの内容

[env:esp32dev]
platform = espressif32
board = esp32dev
framework = espidf
monitor_speed = 115200
monitor_filters = log2file, default

sdkconfigの内容(抜粋)

CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y

実際の出力内容

VSCodeのターミナル上は以下のような形で表示される。

特に問題ない。

ファイルに出力されたものを見ると以下のような形で表示される。

余計な改行が入っている。

このファイルの改行部分をバイナリダンプすると、以下のようなコードになっていた。

0x0D, 0x0D, 0x0A

つまり、<CR><CR><LF>といった感じか。

一応、設定上は<CR><LF>で出しているはずなのだが、ファイルに落とされた時点で<CR>が付与されているようだった。

ファイルへの保存方法

シリアルモニタの結果をファイルに保存する処理は、log2file.pyというフィルタを使用しているよだった。
このファイルは、PlatformIOのインストール先のplatformio\penv\Lib\site-packages\platformio\commands\device\filters\log2file.pyにある。

中身を見てみると、Pythonのioを使い、ファイルにwriteしているようだった。

対応方法

log2file.pyのio.openの引数に、newline=”を追加するだけで、とりあえず余計な<CR>が付与されることはなくなった。

疑問点として、この件、検索して探してみたのだが、情報が全く上がってこなかった。
ということは、私の環境の問題なのだろうか。

インストールされているPythonに問題があるのか?

コメント

タイトルとURLをコピーしました