micro:bitを使ってプライベートなチャットシステムを作ってみる
はじめに
本記事ではmicro:bitの無線機能を使用し、簡易的なチャットシステムを作成します。
チャットしたいパソコンにマイクロビットを接続するだけでインターネット環境がなくてもチャットが楽しめる画期的(?)なシステムになります。
本当に機密性のあるプライベートなわけではないのでご注意下さい。
やってみよう
構成について
以下のような構成とします。
主役となるマイクロビットにはシリアル通信で送受信したデータと、無線データの変換を行います。パソコン上ではTeratermを立ち上げ、チャットを行うための文字列の入力・出力を行います。
プログラムについて
「最初だけ」のブロックを以下のように設定します。
「無線グループを設定」:こちらは任意のグループを指定してもらえれば問題ありませんが、なるべく他の人ととは重複しないように選択して下さい。ただし、チャットをやり取りしたい人とは同じグループを設定して下さい。
「シリアル通信」:こちらはUSBのインタフェースでパソコンと接続していますので、画像のように設定頂くのが良いかと思います。
「ReadStringBuffer/WriteStringBuffer」こちらは変数名となります。それぞれシリアル通信で読み込んだ文字列、書き込み予定の文字列を格納するための一時的な置き場という風に考えて頂くのが良いかと思います。それぞれ初期値は不要なので、画像のようにご設定下さい。
次はTeratermで入力した文字列をmicro:bitで受信した際の処理内容についてです。改行コードの文字コードをシリアル通信で受信した場合に:
- 無線にてReadStringBufferのデータを送信します。
- 送信した文字列が何であったかをTeratermに出力するために、ReadStringBufferを書きだします。
- 文字列入力を受け付けていることを示すために"SHELL> “をTeraterm上に表示します。
こちらは無線データを受信したときの処理です。受信する度に:
- 無線データとして受信した内容が「改行コード」だけでないことをチェックするために「文字列の長さ」をチェックするようにしています。
- 無線で受信したデータを「WriteStringBuffer」という変数に格納します。
- 文字列が改行コードだけでなく、何かしらの文字を含んでいる場合には「>>> “受信した文字列"」という形式でTeraterm上に表示するようにしています。受信したデータが改行コードのみであった場合には何も処理を行わないこととします。
- 文字列入力を受け付けていることを示すために"SHELL> “をTeraterm上に表示します。
プログラムとしてはこれで以上となります。
ここまでプログラムが出来たら通信したい2台以上のパソコンにこのプログラムを書き込んだmicro:bitを接続してみてください。この時、シリアルポートの通信スピードは115200となっていることをご確認下さい。
2023/08/10 追記
こちらの動作確認ではTeratermの改行コードを以下のように変更する必要があります。Teratermの設定メニューから"端末"を選択し、以下のように改行コードを変更して下さい。
動作確認
チャットを行いたいPCでそれぞれmicro:bitの接続を行い、Teratermを起動してください。
正常にパソコンとmicro:bitが接続されていれば、コンソール上に”SHELL > ”の文字が表示されているはずです。2台以上のパソコンで、パソコンにmicro:bitが接続された状態を作れば、準備は完了です。
SHELL> と書かれたコンソール上に何か文字をタイプしてEnter Keyを押下してください。
タイプした文字列が自分のコンソールに表示されるだけでなく、micro:bitを接続した他のメンバーのTeraterm上にも同様の文字列が表示されているかと思います。お互いに文字を入力し、チャットとしての機能を果たせているかをご確認下さい。
最後に
プライベートなチャットシステムは作成出来ましたでしょうか?
このシステムであれば、micro:bitを使うのみで例えインターネットに接続されていなくとも、複数のパソコン間でプライベートなチャットを実施することが可能となりますので、是非遊んでみてください。
少し説明を簡略化しているところもありますので、何か不明点がありましたらお気軽にお問合せ下さい。
ディスカッション
コメント一覧
いつも参考にさせて頂き、ありがとうございます。
度々の問い合わせ申し訳ございません。
こちらのチャットシステムのプログラムを入力したのに、どうしても動作いたしませんでした。
もし可能でしたら、プログラムを公開していただけませんでしょうか?
とりあえず自分なりに色々試した結果、
「シリアル通信 つぎのいずれかの文字を受信したとき 改行コード」
のブロック全体が上手く動作しません。
そこでこのブロックの「改行コード」を「リターンコード」に変更して
「変数 ReadStringBuffer を シリアル通信 1行読み取る にする」部分を
「変数 ReadStringBuffer を シリアル通信 文字列を読み取る」に変更しました。
この変更を加えたため、送信部分と受信部分に
「シリアル通信 文字列を書き出す 文字コード 13 の文字」
「シリアル通信 文字列を書き出す 文字コード 10 の文字」
を追加しております。
プログラムを変更して何とか同じような動作をするようになりました。
以下の URL にそのプログラムを公開いたしました。
もし、よろしければコメントをお願いいたします。
https://makecode.microbit.org/_RHD16dieofyP
尾崎様
こちら確認・回答が遅くなり申し訳御座いません。
こちらブログの記載が不十分だったようで、尾崎様のご確認された事象はTeratermの設定差分によるものかと思われます。
Teratermの設定メニューから”端末”を選択し、改行コードをCR+LFにして動作をご確認頂けますでしょうか?
ブログの方にも注意書きを追加致します。ご不便をおかけして申し訳ありませんでした。
今後とも宜しくお願い致します。
以上
ご連絡、誠にありがとうございました。
追加情報通り、Tera Term: 端末の設定「改行コード」を変更しましたところ上手く通信が出来るようになりました。
まだまだ危険な暑さが続いておりますが、どうぞご自愛下さい。
尾崎様
いつも返信が遅くなり申し訳御座いません。
また、いつもご丁寧にご連絡頂き有難うございます。
コロナもまた増えてきているようですので、尾崎様もお身体にはお気をつけてお過ごしください。
宜しくお願い致します。