micro:bit でプライベートチャットシステムを作る — 無線通信とシリアル通信で実現する手順
目次
はじめに
「インターネット環境がない場所でも、手元のパソコン同士でちょっとしたメッセージをやり取りしたい」——そんな場面で役立つのが micro:bit の無線(ラジオ)通信機能です。本記事では、micro:bit と Tera Term を組み合わせて、USB シリアル通信と無線通信を橋渡しする簡易チャットシステムを作る手順を解説します。
パソコンに micro:bit を接続するだけでチャットができる、ちょっと変わった工作を楽しみたい方の参考になる内容です。なお、本当に機密性の高い通信ではないため、重要な情報のやり取りには使わないようご注意ください。
前提環境
| カテゴリ | ツール・技術 | 役割 |
|---|---|---|
| マイコンボード | micro:bit(2台以上) | シリアル通信と無線通信を中継するハブ |
| プログラミング環境 | MakeCode | ブロックエディタでプログラムを作成・書き込み |
| ターミナルソフト | Tera Term | パソコン側でチャットの入出力を行うコンソール |
| 通信方式 | USB シリアル通信 + 無線(ラジオ)通信 | パソコン⇔micro:bit、micro:bit間のデータ伝送 |
micro:bit でプライベートチャットシステムを作る手順
1. システム構成を理解する
課題:パソコン同士を直接つなぐ手段がない環境で、文字列をやり取りする仕組みが必要。
解決策:micro:bit を「シリアル通信で受け取った文字列」と「無線データ」の変換役として使う。
全体のイメージは以下のとおりです。

主役となる micro:bit は、シリアル通信で送受信したデータと無線データの変換を行います。パソコン上では Tera Term を立ち上げ、チャット用の文字列の入力・出力を行います。

2. 無線通信とシリアル通信の初期設定を行う
課題:無線グループやシリアル通信のインタフェース、文字列を一時的に保持する変数を用意する必要がある。
解決策:「最初だけ」ブロックで無線グループ・シリアル通信・変数の初期値をまとめて設定する。
「最初だけ」のブロックを以下のように設定します。
- 無線グループを設定:任意のグループ番号を指定して問題ありませんが、なるべく他の人と重複しない番号を選びます。ただし、チャットをやり取りしたい相手とは同じグループ番号に揃える必要があります
- シリアル通信:USB インタフェースでパソコンと接続するため、画像のように設定します
- ReadStringBuffer / WriteStringBuffer:それぞれ「シリアル通信で読み込んだ文字列」「無線で書き込み予定の文字列」を一時的に格納しておく変数です。初期値は不要なので、画像のように空の状態で設定します

3. シリアル受信時(自分の入力を送信する側)の処理を実装する
課題:Tera Term に入力した文字列を、無線経由で他の micro:bit に届ける必要がある。
解決策:改行コードを受信したタイミングで、無線送信と Tera Term への表示をまとめて行う処理を組む。
Tera Term で入力した文字列を micro:bit が受信した際の処理です。改行コードの文字コードをシリアル通信で受信したタイミングで、以下を行います。
- 無線にて ReadStringBuffer のデータを送信する
- 送信した文字列が何であったかを Tera Term に表示するため、ReadStringBuffer を書き出す
- 文字列入力を受け付けていることを示すため、Tera Term 上に「SHELL> 」を表示する

4. 無線受信時(相手のメッセージを表示する側)の処理を実装する
課題:相手から届いた無線データを、意味のある文字列だけ Tera Term に表示したい(改行コードのみの空データを除外したい)。
解決策:受信した文字列の長さをチェックし、内容がある場合だけ表示する処理を組む。
無線データを受信したときの処理です。受信するたびに、以下を行います。
- 無線データとして受信した内容が「改行コードだけ」でないことを確認するため、文字列の長さをチェックする
- 無線で受信したデータを「WriteStringBuffer」という変数に格納する
- 文字列が改行コードだけでなく何らかの文字を含んでいる場合は「>>> “受信した文字列"」という形式で Tera Term 上に表示する。改行コードのみだった場合は何も表示しない
- 文字列入力を受け付けていることを示すため、Tera Term 上に「SHELL> 」を表示する

5. Tera Term を設定して動作確認する
課題:シリアルポートの通信速度や改行コードの設定が合っていないと、正しく動作しない。
解決策:通信速度を 115200 に設定し、Tera Term の改行コードも環境に合わせて変更する。
プログラムができたら、通信したい 2 台以上のパソコンにこのプログラムを書き込んだ micro:bit を接続します。このとき、シリアルポートの通信スピードが 115200 になっていることを確認してください。

2023年8月追記:動作確認には Tera Term の改行コードの変更が必要です。Tera Term の設定メニューから「端末」を選択し、以下のように改行コードを変更してください。

チャットしたいパソコンでそれぞれ micro:bit を接続し、Tera Term を起動します。正常に接続できていれば、コンソール上に「SHELL> 」の文字が表示されます。2 台以上のパソコンでこの状態を作れば準備完了です。
「SHELL> 」と表示されたコンソール上に文字を入力して Enter キーを押すと、自分のコンソールに表示されるだけでなく、micro:bit を接続した他のメンバーの Tera Term 上にも同じ文字列が表示されます。お互いに文字を入力し、チャットとして機能しているかを確認してみてください。

まとめ:micro:bit でプライベートチャットシステムを作るポイント
本記事で解説した手順をまとめます。
- micro:bit はシリアル通信で受け取った文字列と無線データを相互変換する「橋渡し役」として動作する
- 「最初だけ」ブロックで無線グループ・シリアル通信・一時保存用の変数をまとめて初期設定する
- 送信側はシリアル受信(改行コード検知)で無線送信、受信側は無線受信時に文字列の長さをチェックして表示するという2方向の処理を実装する
- シリアルポートの通信速度は 115200、Tera Term の改行コード設定も動作確認の前提条件として確認しておく
- インターネット接続なしでも、micro:bit を挿すだけで複数パソコン間のチャットが楽しめる
※本システムは暗号化などのセキュリティ対策を施したものではないため、本当に機密性の高いやり取りには使用しないでください。






ディスカッション
コメント一覧
いつも参考にさせて頂き、ありがとうございます。
度々の問い合わせ申し訳ございません。
こちらのチャットシステムのプログラムを入力したのに、どうしても動作いたしませんでした。
もし可能でしたら、プログラムを公開していただけませんでしょうか?
とりあえず自分なりに色々試した結果、
「シリアル通信 つぎのいずれかの文字を受信したとき 改行コード」
のブロック全体が上手く動作しません。
そこでこのブロックの「改行コード」を「リターンコード」に変更して
「変数 ReadStringBuffer を シリアル通信 1行読み取る にする」部分を
「変数 ReadStringBuffer を シリアル通信 文字列を読み取る」に変更しました。
この変更を加えたため、送信部分と受信部分に
「シリアル通信 文字列を書き出す 文字コード 13 の文字」
「シリアル通信 文字列を書き出す 文字コード 10 の文字」
を追加しております。
プログラムを変更して何とか同じような動作をするようになりました。
以下の URL にそのプログラムを公開いたしました。
もし、よろしければコメントをお願いいたします。
https://makecode.microbit.org/_RHD16dieofyP
尾崎様
こちら確認・回答が遅くなり申し訳御座いません。
こちらブログの記載が不十分だったようで、尾崎様のご確認された事象はTeratermの設定差分によるものかと思われます。
Teratermの設定メニューから”端末”を選択し、改行コードをCR+LFにして動作をご確認頂けますでしょうか?
ブログの方にも注意書きを追加致します。ご不便をおかけして申し訳ありませんでした。
今後とも宜しくお願い致します。
以上
ご連絡、誠にありがとうございました。
追加情報通り、Tera Term: 端末の設定「改行コード」を変更しましたところ上手く通信が出来るようになりました。
まだまだ危険な暑さが続いておりますが、どうぞご自愛下さい。
尾崎様
いつも返信が遅くなり申し訳御座いません。
また、いつもご丁寧にご連絡頂き有難うございます。
コロナもまた増えてきているようですので、尾崎様もお身体にはお気をつけてお過ごしください。
宜しくお願い致します。