PC-G850用Bluetooth通信ボードを作ろう!
2021/6/18更新 (プルダウン抵抗を1K→10KΩに変更)

■はじめに

前にポケコン用のUSB通信ケーブルの作り方を記事にしましたが、今回はこれをBluetoothで無線化してみました。

ちなみにBluetoothとは、PCとデバイスを近距離で無線化するための規格で、マウスやキーボードなどの入力機器を接続したり、ヘッドフォンやヘッドセットを接続して音楽を聴いたり通話したりすることが出来ますが、これにはプロファイルという通信のためのプロトコルが決められており、同じプロファイルに対応したもの同士が接続出来るという仕組みになっています。

例えばマウスやキーボードなどの入力デバイス用にHID(Human Interface Device)というプロファイルが、また音声チャットやスマフォなどで使用するヘッドセット用にA2DP(Advanced Audio Distribution)といったプロファイルが用意されており、それ以外にも用途に合わせていろいろなプロファイルが定義されています。

通常は各機器は基本的にその用途に合ったプロファイルしか持っていないため、例えばヘッドセットにHIDプロファイルは入っていないため、HIDしか対応していない機器にヘッドセットを接続することは出来ません。
(そもそも音を扱えない機器なら音は出せない)

なお、ノートPC内蔵のBluetoothモジュールやUSB型のBluetoothアダプタは、OS側にあらかじめHIDやA2DPなど一般的なプロファイルが入っているため、特に気にせずどんな機器にも接続することが可能です。

そして、この中にSPP(Serial Port Profile)というシリアルポートをBluetooth化するためのプロファイルが含まれており、このプロファイルに対応したBluetooth機器と接続することで、PC側からは通常のCOMポートとして扱うことが出来ます。

ということで、今回はSPPに対応したBluetoothモジュールを使い、ポケコンと無線で通信するためのボードを作ってみました。

というか、USBによるシリアル通信もこなれた感があってもうあんまり面白くないのと、流行りのBluetoothを使って何か出来ないかと思い、昔SPP対応モジュールを買ってたのを思い出して、ここはいっちょ誰もやったことないことをやってみようかと思っただけで、正直モジュールの値段が3000円もしてコスパは全然よろしくないので、素人にはまったくおススメ出来ませんw

■Bluetoothモジュール

ここではSPPに対応したBluetoothモジュールの「SparkFun BlueSMiRF Silver」というパーツを使います。


このモジュールのうち青い基板の部分がBluetooth本体で、これが乗っている赤い基板は電圧変換用の回路が入っているだけです。
元々はArduinoなどの5V機器に対応したBluetoothモジュールということで登場したものですが、実はBluetooth本体は3.3V駆動であり直接接続が来ないため、5Vを3.3Vに変換するためのレギュレータや、I/Oの電圧を合わせるためのFETなどを実装した構成になっています。

このモジュールは端子側に制御したいデバイスを接続しますが、通信速度などの設定はこのモジュール内に書き込んでおく必要があります。

本来はCOMオープン時のパラメータをそのままリアルタイムに反映出来れば、このような手間は必要無いはずですが、SPPの仕様なのかあくまでもモジュール側の値を使って通信を行うようで、この辺りがちょっと不便で気になるところではあります。

なお、設定を書き換えるにはBluetoothか直接端子にケーブルを繋いで通信を開始し、特定のコマンドを入力してコマンドモードに入ることで行います。ただし、コマンドモードに入るためには現在の通信設定に合わせて接続する必要があるため、通信速度を変更したあと再び設定を変更したい場合は、最後に設定した速度で接続しなければなりません。
※もし現在の通信設定が分からなくなった場合は、ハードウェアリセットを行うことで初期状態に戻すことが可能です

初期状態では以下の設定になっています。
Baud Rate 115,200bps
Data Bits 8 Bits
Stop Bits 1 Bit
Parity None
Flow Control None

ポケコンと通信を行うには、このうちボーレートを変更する必要があります。(後述)
※現時点でFlow ControlをRS/CSに変更する方法が不明のため、このモジュールを使用する場合はフロー制御は無しで行います

■インバーター(反転)IC

ポケコンのシリアル通信用の端子は一般のシリアル通信と違って電位が反転しています。
前にUSBシリアル通信で使用したチップでは、チップ内部に反転機能を持っていましたが、今回のBluetoothモジュールにはそのような機能は無いため、手動で反転をする必要があります。

なお、ポケコンが通信で使用する端子は4つあり、トランジスタを使って反転となると部品点数や制作の手間が増えるため、今回は反転回路が6個入った定番の「74HC04」というICを使用することにしました。


このICは最大7Vまで対応しているので、ポケコンと直接接続することが可能です。
また応答速度も速いので、シリアル通信レベルの用途ならまったく問題無く使うことが出来ます。

■回路図

以下は今回作成したボードの接続図です。

※電源確認用LEDは含まれていません
※抵抗は全て10KΩです

ここではポケコン側の出力全てにプルダウン抵抗を入れていますが、機種によっては無くても動作はするようです。
逆に、Bluetoothモジュール側はレベル変換回路で既にプルアップされているようなので、特に何もしていません。

結果的には反転だけしてそのままポケコンに接続すれば問題無く動作するようなので、パーツ的にはBluetoothモジュールとインバーターICのみがあれば問題無さそうですが、前のUSB通信ケーブル時にポケコン側の出力が浮いていたことがあったため、ここでは念のため抵抗を入れています。

■パーツリスト

以下はボードを作成するのに使用したパーツです。
項番 パーツ名 価格 備考
1 マザーツール UP-203
ユニバーサル基板
105 最終的にカットするため穴数が15x19以上あれば何でも良い。
こちらでもOKだが角にも穴があるのでカット時に穴数を要確認。
(ピンヘッダがポケコンにささるならカットしなくても良い)
2 SparkFun WRL-12577
Bluetooth Modem - BlueSMiRF Silver
3,056円 Gold(通信クラスが上)やMate(端子違い)のバージョンがあるため要確認。
3 6回路インバータ TC74HC04AP(F) 30円 今どき使う人はいないと思うけど、
ジャンクボードなどから抜き取った74LS04でもOK。
4 ICソケット (14P) (10個入) 100 10個入りだが1個だけ使用。
こちらでもOK。
5 カーボン抵抗(炭素皮膜抵抗) 1/6W
10kΩ (100本入)
100 100本入っているが2本だけ使用。
※電源確認のLED用としても使用可
6 カーボン抵抗(炭素皮膜抵抗) 1/6W
100Ω (100本入)
100 100本入っているが1本だけ使用。
※LEDの電流制限用だが、これだと超まぶしいので
 好みで100Ω~10KΩの抵抗を取り付ける
7 超高輝度5mmピンク色LED
OSK54K5111A(10個入)
250円 10個入りだが1個だけ使用。
※電源確認用なので自分の好きな色でOK(というか無くてもOK)
8 ピンヘッダ (オスL型) 1×40 (40P) 50円 11ピン分を折って使用。
9 ピンヘッダ 1×40 (40P) 35円 6+1ピン分を折って使用。
10 分割ロングピンソケット 1×42 (42P) 80円 6+1ピン分を折って使用。

これ以外にジャンパ用の銅線やスズメッキ線などが必要で、さらにブレッドボードがあると一部はんだ付けが楽になります。

■通信ボードの作成

①Bluetoothモジュールのピンのはんだ付け

まずはL字ではないまっすぐのピンヘッダを6ピンと1ピンにカットし、以下のようにBluetoothモジュールにはんだ付けします。


なお、うまくはんだ付け出来ない場合は、ブレッドボードを利用するのも手です。
この場合は先にブレッドボードにピンを指して置き、その上にこのBluetoothモジュールを乗せてはんだ付けすることで、ブレッドボードの穴の位置ぴったりに固定出来るので、ブレッドボードでモジュールのテストをしたい場合にも便利です。


なお、実はPIO4に取り付ける1ピンは他の穴と若干ズレていますが、ブレッドボード上ではんだ付けすることでこのズレを補正することが出来ます。

これ以降のユニバーサル基板に取り付ける際も若干ズレた状態になるため、このピンはなるべくブレッドボードを使ってはんだ付けすることをおススメします。

②ユニバーサル基板のカット

ここでは基板をカットすることでなるべくコンパクトに仕上げるつもりですが、見栄えを気にしないのであれば特にカットしなくても以降の作業は可能です。この場合はカット後の位置に合わせてパーツを配置するようにしてください。

まずは以下のように穴のある部分をカットします。


カットすると以下のようになります。

※カット後は手をケガしないようにフチを紙やすりなどで削っておいてください

③部品のはんだ付け

以下は表面の部品図です。

※2021/6/17 プルダウン抵抗を1K→10KΩに変更(PC-G850無印での転送エラー対策)

まずはL字型のピンヘッダを11ピンにカットして取り付けますが、実は今回使用した基板は穴 のサイズが若干小さいようで、すんなりと刺さりませんでした。このためピンを左右に動かしながら穴を広げる感じで徐々に押し込んでいくことで、ようやく差し込むことが出来ました。

次に抵抗やジャンパ線などの背の低い部品を取り付けます。なお、ジャンパ線は銅線かスズメッキ線を使いますが、スズメッキ線を使う場合はジャンパごとにカットせず、裏面の配線も一緒に行うことで基板へのはんだ付けを省略することも出来ます。
※太くて固いスズメッキ線だと思い通りに配線するのが結構大変なので、初心者は別々に作業した方が楽だと思います

ICは直接取り付けるのではなくICソケットを使用してください。また接続確認用のLEDは好きな色のものを使用することが出来ますが、電流制限用の抵抗値が小さいほどまぶしくて目に悪いので、ある程度抵抗値の多いものを使用することをおススメします。
(そもそも超高輝度LEDを使うのが間違っているともw)

最後に下側のピンソケットですが、そのまま取り付けようとするとグラグラしてうまくはんだ付け出来ないことがあるので、この場合はまずピンソケットを6ピンと1ピンにカットしてBluetoothモジュールに刺し、その状態で基板に固定することでうまくはんだ付けすることが出来ます。

④裏面の配線

以下は裏面の配線図です。


部品の足やスズメッキ線を使って配線を行います。
なお、表面の部品の取り付け時に部品の足を切らず、そのまま足を配線として使うことも出来ます。

⑤ドッキング

基板が完成したらICを取り付け、最後にBluetoothモジュールをドッキングさせて完了です。


■Bluetoothモジュールのペアリング

ここではPCからこのモジュールにアクセス出来るようペアリングを行います。

今回作成したボードをポケコンに接続してBluetoothモジュールに給電してください。
給電されるとモジュール上の赤いLEDが点滅するので、この時にPC側からペアリング操作を行います。
※ペアリングしてもCOMをオープンしない限りは赤LEDは点滅したままとなります

ペアリング方法を知っている場合はこの項目はスキップしてかまいません。
デバイス名は「RNBT-****」という形で、後方はデバイスIDの先頭2バイトが16進数で表示されたものになっています。

Windows10でのペアリング方法

まずはBluetoothが使えるようにPCにUSBアダプタを接続したり、ノートPCの場合はキーボード操作などでBluetoothを有効にしてください。

なお、Bluetoothはハードウェア側のON/OFFの他にOS側にもON/OFF設定があります。
もしデバイスを正しく接続にしているにも関わらず認識しない場合は、OS側で無効となっている可能性があるので、その場合は「スタート」→「設定(歯車アイコン)」→「デバイス」→「Bluetoothとその他のデバイス」を開け、Bluetoothが「オン」になっているかを確認してください。


Windows上でBluetoothが使用可能になると、タスクバーの右側にBluetoothのアイコンが現れます。
もし表示が隠れている場合は上三角アイコンを押してください。

※このBluetoothのアイコンをダブルクリックすると、上記のBluetoothの設定画面を直接開くことが出来ます

Bluetoothが使用出来る状態であればペアリングが可能なので、Bluetoothの設定画面を出し「+Bluetoothまたはその他のデバイスを追加する」をクリックします。


するとどのデバイスを追加するか選択ウィンドウが出るので、ここで「Bluetooth」をクリックします。


デバイスが見つかったらそのデバイス名をクリックします。


接続時にピンコードの確認が表示されますが、ここでは確認しようが無いので気にせず接続ボタンをクリックします。


接続が成功すると確認画面が表示されるので、完了ボタンを押してダイアログを閉じます。


正しくペアリングが出来たかは、この設定画面をスクロールして「その他のデバイス」に含まれるかを確認してください。

※ちなみにここをクリックすると「デバイスの削除」が表示されるので、これでペアリングを解除することが可能です

■通信設定の変更

モジュールを購入した直後は通信速度がデフォルトの115,200bpsとなっており、このままではポケコンと通信することが出来ないため、まずはこのモジュールの設定を変更する必要があります。

モジュールの設定はBluetoothによる接続か端子に接続した機器から行えますが、ポケコンの速度は最大でも9600bps(PC-G850の場合)しか出せないため、今回はPC上からBluetooth経由で行うことにします。

ここでは既にペアリングが完了している状態で作業を行います。まだペアリングを行っていない場合は、上記のペアリングの項目を確認してください。

まずはシリアル通信を行うためのソフトとして「Tera Term」を使用するので、このソフトをDLしてインストールしてください。
※exe版はインストーラー付き、zip版はインストール無しのスタンドアロンで、よく分からなければexe版をDLしてください
※この記事を書いた時の最新版は「v4.105」です

インストールしたらTera Termを起動します。
標準ではデスクトップにTera Termのアイコンが表示されるので、これをダブルクリックします。

デスクトップに存在しない場合はスタートボタンを押し、アプリリストからTera Termを探して実行してください。
(zip版の場合はttermpro.exeを実行してください)

起動すると新しい接続のダイアログが表示されますが、ここではまだ通信設定を行っていないのでいったんキャンセルします。


上のメニューから「設定」→「シリアルポート」をクリックします。


シリアルポートの接続設定ダイアログが表示されるので、ここで接続するCOMポートとスピードを指定します。
ちなみにBluetoothで使用可能なCOMポートは1つだけとは限らず、複数存在させることが出来ます。
今回使用したUSBアダプタはCOM6とCOM7の2つが認識されており、そのうちCOM6の方で接続出来ましたが、これは環境により変わるので、もし接続出来なかった場合は他のポートも試してみてください。


設定をしたら「新規オープン」ボタンをクリックすると、実際にBluetooth経由でモジュールと通信が始まります。
そして接続が完了するとモジュール上の緑色のLEDが光るので、これでCOMポートのオープンが完了したことになります。


ポートがオープン出来たらコンソール上で「$$$」(エンター無し)と入力します。
※入力した文字は画面に表示されないので間違えないでください

正しくコマンドモードに入れた場合は「CMD」と表示され、モジュール上の赤色LEDが高速に点滅します。


次に「SU,96」(エンター無し)と入力します。
※同じく画面に何も表示されません

これで設定は完了なので、「ファイル」→「接続断」をクリックします。


モジュールの緑LEDが消灯し、再び赤LEDが点滅したら切断完了です。

ちなみに再度Tera Termにて設定を行いたい場合は、次から通信速度を9600bpsに設定する必要があります。
また標準ではTera Termは最後に設定した情報を保存してくれないため、上記の流れをもう一度行う必要があります。
※現在の設定を保存するには「設定」→「設定の保存」を選択し、exe直下にある「TERATERM.INI」に上書きします

■データ通信

Bluetooth経由でデータの送受信を行う場合、純正のPCGLinkではうまく通信出来なかったため、
ここでは自作の通信ソフト「PCGTool」を使用してデータの送受信を行います。

まずはトップサイトの「SOFTWARE」→「ポケコンの部屋」にある「PCGTool」をDLしてください。
※PCGTool v1.02以下はBluetooth接続時のみ、転送完了後にCOMポートを閉じるタイミングが速いと
 最後の終端メッセージが送られないのか、完了したことにならずにずっと待機状態となったままだったので、
 v1.03以降では閉じる時間を指定するための機能が実装されています

PCGToolが起動したら以下のように設定を行ってください。


まずはCOMポート番号と通信速度を指定し、フロー制御のチェックを外してください。
※現状Bluetoothモジュールのフロー制御を変更する方法が見当たらなかったため、ここでは無しに設定しています

ポケコン側もこれと同じ設定にしてください。
ポケコンの通信設定はBASICモードの状態で以下の操作を行います。
 ①「TEXT」ボタンを押します
 ②「S」キーを押してSio(Serial I/O)画面に入ります
 ③「F」キーを押してSio設定画面に入ります
 ④操作説明が表示されるのでここで何かキーを押すか、7秒ほど待つと設定画面に入ります
 ⑤「baud rate」をカーソルキーで「9600」に設定しEnterキーを押します
 ⑥下にスクロールして「flow」を「none」に設定しEnterキーを押します
これで設定は終わりなので、「BASIC」キーを押してBASICモードに戻ります。

PCからポケコンに送信する場合(BASICなどのテキストデータの場合)

まずはポケコンを受信状態にします。
 ①「TEXT」ボタンを押します
 ②「S」キーを押してSio画面に入ります
 ③「L」キーを押して受信待機状態にします
この状態でPCGToolから「送信」を選び、送信したいファイルを選択すると通信が開始されます。
※送信開始時にBluetoothモジュールとの接続に1、2秒の待ち時間が発生します

受信したデータをBASICとして実行したい場合は、「TEXT」→「Basic」→「Basic←text」を押して、テキストデータをBASICに変換する必要があります。

PCからポケコンに送信する場合(IHXファイルの場合)

まずはポケコンを受信状態にします。
 ①「MON」と入力してEnterキーを押します
 ②必要なユーザーメモリを「USER」コマンドで確保します
  ※1000H分の領域を確保する場合は「USER1000」と入力しEnterキーを押します(常に16進数)
 ③「R」キーを押して受信待機状態にします
この状態でPCGToolから「送信」を選び、送信したいIHXファイルを選択すると通信が開始されます。
※送信開始時にBluetoothモジュールとの接続に1、2秒の待ち時間が発生します

ポケコンからPCに送信する場合(BASICなどのテキストデータの場合)

BASICの場合は先にテキストデータに変換しておく必要があります。
「TEXT」→「Basic」→「Text←Basic」と入力するとBASICのコードがテキストにコピーされます。

まずはPCGToolにて「受信」を選び、受信したデータを保存するファイルを指定します。ここでファイルを指定すると受信待ち状態になりますが、Bluetoothの接続前にポケコンからデータを送信してしまうと、それまでのデータが破棄されてしまうため、送信操作は必ずBluetoothモジュールの緑LEDが点灯してから行ってください。

緑色のLEDが点灯したらあとはポケコンから送信操作を行います。
 ①「TEXT」ボタンを押します
 ②「S」キーを押してSio画面に入ります
 ③「S」キーを押して送信を開始します
通信が完了するとTEXTメニューに戻ります。

ポケコンからPCに送信する場合(IHXファイルの場合)

まずはPCGToolにて「受信」を選び、受信したデータを保存するファイルを指定します。ここでファイルを指定すると受信待ち状態になりますが、Bluetoothの接続前にポケコンからデータを送信してしまうと、それまでのデータが破棄されてしまうため、送信操作は必ずBluetoothモジュールの緑LEDが点灯してから行ってください。

緑色のLEDが点灯したらあとはポケコンから送信操作を行います。
 ①「MON」と入力してEnteキーを押します
 ②送信したいメモリエリアを「W」コマンドで指定します
  ※100H~FFFHまでを転送する場合は「W100,FFF」と入力しEnterキーを押します(常に16進数)
通信が完了するとMONの状態に戻ります。

■BlueSMiRF Silverのハードウェアリセット

ここではおまけとして、このモジュールのハードウェアリセットの方法について説明します。
ポケコンと通信が出来なくなったり、コマンドを間違えたなどでモジュールの設定がおかしくなった場合は、ハードウェアリセットの操作を行うことで初期状態に戻すことが出来ます。

ちなみにリセットの方法を調べると、英語の説明やYouTubeでの解説は見つかりますが、日本語での解説を見つけることは出来なかったので、参考としてこれまで調べた内容をまとめてみました。

必要なのは5Vの電源とPIO4の端子に接続するためのケーブルのみですが、今回作成したモジュールはそのままブレッドボードに刺すことが出来るので、一緒にブレッドボードとワイヤーのセットを用意しておくと作業が簡単になります。また、端子へのON/OFFを繰り返す必要があるため、ブレッドボード用のケーブルも用意しておいてください。

まずは全ての通電を切った状態にしておきます。

①PIO4の端子に電源の+を接続します。(この状態ではまだ電源には繋がないでください)
 ポケコンとブレッドボードを使う場合は以下のように配線します。
  

②次にこの状態で5V電源に接続します。
 すると一瞬だけ赤色LEDが高速に点滅し、そのあとはゆっくりと点滅します。

③最後にオレンジ色のジャンパワイヤーを、1秒くらいの間隔で抜き差しを3回ほど行います。
 すると赤色LEDが一瞬高速に点滅しますが、これでハードウェアリセットが完了となります。
 

終わったら電源から外し、再度初期設定からやり直してください。
※115,200bpsに戻っているのでTera Termもそのように設定してください