Arduinoのシリアルモニタが文字化けする原因と直し方

プログラミング・電子工作






Arduinoのシリアルモニタが文字化けする原因と直し方|初心者向け解説




YOFUKASI LAB|Arduino・電子工作

Arduino / トラブルシューティング

Arduinoのシリアルモニタが文字化けする原因と直し方――初心者にもわかりやすく解説。

画面いっぱいの変な記号、焦らなくて大丈夫です。ほとんどの文字化けは、たった1つの数字を合わせるだけで直ります。原因の見分け方から、日本語特有の文字化けまでやさしく解説します。

YOFUKASI LAB編集部 | 更新日:2026年8月18日 | 読了目安:約11分

Chapter 01 — Introduction

01文字化けは怖くない、まず落ち着いて確認しよう

文字化け=故障ではない

結論から言うと、原因のほとんどは「ボーレート」というたった1つの数字のズレです。壊れたわけでも、コードが間違っているわけでもないことが多いです。ですから、まずは落ち着いて設定を見直してみましょう。

実例を1つ紹介します。M5Stick-Cという小型のマイコンを、シリアルモニタで確認しようとしました。すると、画面が意味不明な記号だらけになってしまった、という体験談です。Arduino IDEのシリアルモニターで文字化けが起きたので通信速度を変更してみた(そう備忘録)によれば、最初は文字コードの指定を疑ったそうです。しかし、実際の原因は単純でした。通信速度を115200bpsに変更すると、文字化けが収まったと報告されています。

編集部見解:シリアルモニタの文字化けは、初めて見ると「壊れてしまった」と不安になりやすいトラブルです。しかし実際には、原因のパターンはそれほど多くありません。ですから、落ち着いて1つずつチェックしていけば、多くの場合は数分で解決できると考えられます。
― YOFUKASI LAB編集部

本記事の読み方

この記事では、文字化けが起こる仕組みをやさしく説明します。難しい専門用語は、できるだけ避けています。そのうえで、実際に直すための手順を紹介します。ですから、Arduinoを触り始めたばかりの方でも読み進められる内容になっています。



Chapter 02 — Background

02シリアルモニタと文字化けの基礎知識

まず、言葉の意味から確認しましょう。シリアルモニタとは、Arduinoが送ってきた文字や数字を確認できるツールです。パソコンの画面で表示され、Arduino IDEに標準で付いています。たとえば、センサーの値をたしかめたいときなど、電子工作では欠かせない機能です。

やさしい用語の整理

  • ボーレート(baud rate):1秒間にどれだけの速さでデータをやり取りするかを表す数字。「通信速度」と考えると分かりやすいです。
  • Serial.begin():スケッチの中で「これから通信速度は〇〇にします」と決める命令。カッコの中の数字がボーレートです。
  • 文字コード:文字を数字に変換するための「対応表」のようなもの。この対応表が送り側と受け取り側で違うと、文字化けが起こります。

文字化けの多くは、このボーレートの不一致が原因です。Arduino IDEでシリアルモニタの出力が文字化けする(工学系窓使いの雑記)にも、同様の報告があります。ボーレートを一致させたら、文字化けが直ったそうです。逆に、スケッチ側とシリアルモニタ側で違う値にすると、出力が文字化けします。たとえば、スケッチ側を115200bps、シリアルモニタ側を9600bpsにした場合です。

なお、Arduinoの基礎からもう一度確認したい場合は、以下の記事も参考になります。Arduinoのコードの書き方の基礎はこちらの記事で詳しく解説している

Chapter 03 — Mechanism

03なぜ文字化けするのか、やさしい仕組みの話

ボーレートがずれると、なぜ文字化けするのでしょうか。イメージは、「早口で話す人」と「ゆっくり聞き取る人」の会話に近いです。話す速さと聞き取る速さが合っていないと、言葉の区切りを間違えてしまいます。そのため、意味の通らない音の羅列に聞こえてしまうのです。シリアル通信でも、これと同じことが起こります。送る側と受け取る側の速度がずれると、データの区切りを間違えて読んでしまいます。結果として、画面には記号のような文字が並んでしまうのです。

void setup() {
  Serial.begin(9600); // ← ここの数字が「話す速さ」
}
void loop() {
  Serial.println("Hello!");
  delay(1000);
}

上のコードなら、シリアルモニタ側も「9600 baud」に合わせるだけで直ります。設定はシリアルモニタの画面の右下(または上部)にあるプルダウンメニューから選べます。

日本語だけが化けるケースは少し違う

ボーレートを揃えても、日本語の部分だけ文字化けする場合は、別の原因が考えられます。それが「文字コード」の違いです。WROOMでUTF-8文字コードをShift_JIS変換して日本語漢字表示してみました(mgo-tec電子工作)では、次のように説明されています。Arduino IDEのスケッチ内部は、UTF-8コードで処理されています。しかし、Windows環境のシリアルモニターでは、Shift_JISコードとして扱われてしまいます。そのため、スケッチ中に漢字を入力すると、文字化けが起こるのです。

かんたんに言うと
アルファベットや数字は、どんな文字コードでも同じように表示されます。そのため、問題になりにくいのです。一方で、日本語の漢字やひらがなは「変換ルール」が食い違うと表示が崩れやすい、というイメージです。英語だけのメッセージなら正常なのに、日本語を混ぜたとたんに化ける場合は、この文字コードのズレを疑ってみましょう。

ボーレートを疑うのが一番の近道

似た相談も見られます。Wi-Fi接続のサンプルコードを試した際に、画面全体が文字化けしてしまったというケースです。arduino ideで文字化けしてしまう(teratail)では、コードの中身は間違っていないのに文字化けが起きた、という相談が寄せられています。この件では、プログラムとIDEのボーレートの値が異なることが原因でした。つまり、原因が分からないときほど、まずはボーレートを疑うのが近道だと分かります。



Chapter 04 — Comparison

04文字化けのタイプ別・原因の見分け方

画面に表示された文字化けの「見た目」によって、疑うべき原因が変わります。以下の表で、自分のケースがどれに近いか確認してみてください。

見た目の特徴 A. 画面全体が記号だらけ B. アルファベットは正常、日本語だけ変 C. 起動直後の数文字だけ変
主な原因 ボーレートの不一致 文字コード(UTF-8/Shift_JIS)の不一致 起動時の自動リセットによる一時的な乱れ
直し方の方向性 Serial.begin()の数字とシリアルモニタの設定を揃える 日本語表示の実装方法を見直す 多くの場合は無視して問題ない
緊急度 高い(全体が読めない) 中程度(一部だけ読めない) 低い(それ以降は正常なことが多い)

※症状と原因の対応関係は、複数の実例を踏まえた編集部の整理です。必ずしもこの通りとは限らない点に、ご留意ください。なお、ボーレート不一致の一般的な解決策はArduinoシリアル通信 文字化けはボーレートで解決!(openillumi)も参考になる。

まずはA(画面全体が記号だらけ)かどうかを確認するのが第一歩です。そこが直れば、多くの文字化けは解消します。

Chapter 05 — Practice

05実践:文字化けを直す5ステップ

ここでは、記号だらけで表示された状況を例にします。直すための手順を、順番にやさしく紹介します。ぜひ、1つずつ試してみてください。

  1. STEP1. スケッチの中のSerial.begin()を探す

    Arduino IDEでスケッチを開き、Serial.begin(という文字を探します。カッコの中に書かれている数字が、そのスケッチのボーレートです。

    具体的には:「Serial.begin(9600);」と書いてあれば、ボーレートは9600です。
  2. STEP2. シリアルモニタの設定を同じ数字にする

    シリアルモニタの画面を開き、右下(または上部)にある通信速度の設定を、STEP1で見つけた数字と同じにします。

    この場合:プルダウンメニューから「9600 baud」を選びます。
  3. STEP3. 一度シリアルモニタを閉じて開き直す

    設定を変えただけでは反映されないことがあります。そのため、シリアルモニタを一度閉じてから、もう一度開き直しましょう。

    実際の手順:設定変更後に画面右上の「×」で閉じ、再度シリアルモニタのアイコンをクリックして開いた。
  4. STEP4. まだ化ける場合は日本語表示を疑う

    アルファベットは正常なのに日本語だけ化けている場合は、文字コードのズレが原因かもしれません。まず、日本語の部分だけコメントアウトしましょう。そのうえで、アルファベットだけの状態で正常に表示されるか確認します。

    一例として:「Serial.println(“こんにちは”);」を一時的に「Serial.println(“Hello”);」に変えて試したところ、正常に表示された(編集部想定シナリオ)。
  5. STEP5. それでも直らない場合はケーブル・ポートを疑う

    ボーレートと文字コードを確認しても直らない場合は、他にも原因があるかもしれません。たとえば、USBケーブルやパソコン側の設定です。そこで、別のケーブルやUSBポートに差し替えて試してみましょう。

    実例:充電専用のUSBケーブルを使っていたため、通信ができていませんでした。データ転送対応のケーブルに替えたところ、正常に表示された(編集部想定シナリオ)。

Arduino IDE自体のインストールがまだの場合は、以下の記事も参考になります。

Arduino IDEのダウンロード・インストール方法はこちらの記事で解説している

Chapter 06 — Pitfalls

06注意点・よくある勘違い

最後に、文字化けをめぐってよくある3つの勘違いを整理しておきます。あらかじめ知っておくと、余計な不安を減らせます。

勘違いその1:文字化け=故障ではない

!勘違い1. 文字化け=Arduinoが壊れたサイン

文字化けが起きても、Arduino本体が故障したわけではないことがほとんどです。設定の数字が1つずれているだけ、というケースが大半です。ですから、まずは落ち着いてボーレートを確認しましょう。

勘違いその2・3:ボーレートと日本語表示

!勘違い2. ボーレートはどの数字でもとりあえず動く

スケッチとシリアルモニタのボーレートは、必ず同じ数字に揃える必要があります。「だいたい近い数字なら大丈夫」ということはありません。ぴったり一致していないと、文字化けが起こります。

!勘違い3. 日本語表示はどんな状況でも普通に使える

アルファベットや数字は問題なく表示できます。しかし、日本語の漢字やひらがなは、パソコンの環境によって文字コードの扱いが違うため、化けやすい傾向があります。そこで、まずはアルファベットだけで動作確認しましょう。そのあとで日本語表示を試すと、原因の切り分けがしやすくなります。



Chapter 07 — FAQ

07FAQ

Q.シリアルモニタが文字化けする一番多い原因は何ですか。
A.一番多い原因は「ボーレート」という通信速度の設定のズレです。スケッチ側とシリアルモニタ側で、数字がずれていることが多いのです。Serial.begin()に書いた数字と、シリアルモニタ右下の数字を同じにしましょう。それだけで、多くの場合は直ります。

Q.ボーレートを揃えたのに、日本語だけ文字化けするのはなぜですか。
A.その場合は、ボーレートではなく文字コードの違いが原因であることが多いです。Arduino IDEのスケッチは、UTF-8という文字コードで書かれています。一方、Windowsのシリアルモニタは、別の文字コード(Shift_JISなど)で表示しようとします。そのため、日本語の部分だけ記号のように化けてしまうのです。

Q.ボーレートは何の数字に合わせればよいですか。
A.基本は、スケッチの中にあるSerial.begin(数字)の「数字」に合わせます。例えばSerial.begin(9600)と書いてあれば、シリアルモニタ右下の表示も9600bpsに設定してください。なお、使っているセンサーやモジュールに指定のボーレートがある場合は、そちらを優先します。

Q.起動直後だけ少し変な文字が表示されるのは故障ですか。
A.故障とは限りません。Arduinoは、シリアルポートを開いた瞬間に自動でリセットがかかることがあります。その一瞬だけ通信が不安定になり、数文字だけ乱れて見えることがあるのです。その後の表示が正常であれば、多くの場合は特に問題ありません。

Q.何をしても文字化けが直らない場合、次は何を確認すればよいですか。
A.ボーレートと文字コードを確認しても直らない場合は、他の原因も考えられます。たとえば、USBケーブルの不良や、パソコン側のドライバの不具合です。そこで、別のUSBケーブルやUSBポートに差し替えて試しましょう。あるいは、パソコンを再起動してから試す方法もおすすめです。

Q.文字化けを防ぐために、普段から気をつけられることはありますか。
A.Serial.begin()に書く数字を、いつも同じ値(たとえば9600)に統一しておきましょう。そうすれば、シリアルモニタ側の設定を毎回変える手間が減ります。また、文字化けにも気づきやすくなります。日本語表示が多いプロジェクトでは、あらかじめアルファベットだけで動作確認してから日本語表示を足す、という順番もおすすめです(編集部見解)。

参考文献

関連記事(内部リンク)


関連記事

特集記事

コメント

この記事へのコメントはありません。

TOP
CLOSE