2023/09/08

ATOM SPP を作ってみた (Bluetooth SPP を使った WiFi とは違う AZ-GTi の無線化)

はじめに



だいぶ前に SynScan USB を作ってみた。という記事を書きましたが、今度はその無線版です。

作ってみたものの、なんか通信エラー出るなと思ってたんですが、ファームを変更し、Windows のシリアルの設定を変更したらまぁまぁ安定するようになってきた気がします。でもまだまだ感は否めず。

AZ-GTi はもともと WiFi (無線)で接続できるのに何それ?と思うかもしれませんが、AZ-GTi に WiFi 接続する方法は二つあって、AZ-GTi を WiFi のサーバーとして携帯もしくは PC を接続する方法と、AZ-GTi を既存の WiFi ネットワークにぶら下げて、携帯もしくは PC からそのネットワーク経由で AZ-GTi に接続する方法の二通りがあります。

前者だと AZ-GTi がサーバーになってしまうので接続した携帯または PC は外部ネットワークに接続することができなくなってしまいます。後者だと WiFi ネットワークの電波が AZ-GTi を動かしたい場所まで飛んでいないと使えないという不便さがあります。

したがってその不便さを解消するために今までは AZ-GTi を接続するのに SynScan USB (もどき) でシリアル+USB ケーブルにて接続していました。ケーブル接続の方が無線より確実!かもしれないのですが、アライメントをとってる最中とか、導入先を変えるときに PC を持って移動するとケーブルひっかけて接続が切れる。。ことがたまにありました。なので大量のデータを流すカメラはともかくコントローラ程度に対して有線にこだわりは全くなくて。

ちなみに架台さえ対応していれば SynScan Pro で BLE でも接続できるようですが、AZ-GTi は対応してなさげですね。

Bluetooth SPP

では別な無線化の方法を提案してみます。まず AZ-GTi とは HAND CONTROLLER のポートを使ってシリアルで通信ができるのでこれを利用します。Bluetooth には SPP という Bluetooth を介してシリアル制御を行えるという通信規約があります。これをサポートするモジュールを HAND CONTROLLER ポートに接続することによって Bluetooth 経由でシリアル接続することができます。PC でこれらモジュールを Bluetooth デバイスとして追加してあげるとその後はあたかもシリアルポートが追加されたように見えます。Windows だと COMxx、macOS だと /dev/cu.xx のような感じで。


制作

それほどは難しくないです。Bluetooth SPP をサポートするモジュールを用意して、HAND CONTROLLER のポートにつなぐだけです。今回は手持ちの ATOM lite (M5Stack) を使いました。スイッチサイエンスさんなどで入手できます。便利につかうには電源を HAND CONTROLLER ポートからいただくので、三端子レギュレータ(またはDC-DCレギュレータ)も付けます。

部品

ATOM lite (スイッチサイエンス) ... 1,496yen

低損失三端子レギュレーター 5V 500mA (秋月電子) ... 100yen
もしくは BP5293-50 5V 2A (秋月電子)... 240yen こちらの方がおすすめ。

6極6芯モジュラージャック DIP 化キット(秋月電子) ... 100yen

基板(適当)(秋月電子) ... 40yen

ピンヘッダ 1x40 (秋月電子) ... 35yen

半田少々

線材少々

モジュラーコード 6極4芯 (絶対4芯あるのにしてください)

ファームウェア

ATOM lite のプログラムです。すっごく簡単です。RX を 19, TX を 22 ピンにアサインしました。AZ-GTi とのシリアル通信は 9600bps, 8bit, パリティなしです。また ATOM-SPP という名前のデバイスにしました。loop() の delayMicroseconds(105) は ATOM->AZ-GTi のデータ転送速度が間に合うよう 1/9600sec の wait を入れてます。もう少し短くしてもいいかもしれないけど。delay(1) だと 1ms で長すぎで、AZ-GTi からのデータが多いと取りこぼす可能性あるのかなと。

/*
*******************************************************************************
* Copyright (c) 2023 by Tatsuro Sato
*
* describe:ATOM SPP module
* date:2023/9/6
*******************************************************************************
*/
#include "M5Atom.h"
#include "BluetoothSerial.h"

#define RX_PORT 19
#define TX_PORT 22
#define AZ_GTI_SERIAL_SPEED 9600

BluetoothSerial SerialBT;

void setup() {
  M5.begin(true, false, true);
  Serial2.begin(AZ_GTI_SERIAL_SPEED, SERIAL_8N1, RX_PORT, TX_PORT);
  SerialBT.begin("ATOM-SPP");
  M5.dis.drawpix(0, 0x000099);
}

void loop() {
  if (SerialBT.available()) {
    Serial2.write(SerialBT.read());
  }
  if (Serial2.available()) {
    SerialBT.write(Serial2.read());  
  }
  delayMicroseconds(105);
}

回路図




接続は、
  • モジュラージャック 2 pin (TX) - ATOM lite G19 (RX)
  • モジュラージャック 3 pin (Vpp+ 7.5~14V) - TA48M05F(BP5293-50) 1 pin (input)
  • モジュラージャック 4 pin (RX) - ATOM lite G22 (TX)
  • モジュラージャック 5 pin (GND) - TA48M05F(BP5293-50) 3 pin (GND) - ATOM lite GND
  • TA48M05F(BP5203-50) 2 pin (5V out) - ATOM lite 5V
これにコンデンサ二個つけるだけです(BP5293-50 の時はいらない)。
すいません、最初にアップした回路図の TA48M05F のピン番号 2 と 3 が逆でした。真ん中が 3 です。ちなみに TA48M05F は 12V->5V と結構電圧降下があるのでとても熱くなります。Rohm の BP5293-50 に変えてみたのですが、外付けのコンデンサは無くてよく、熱くもならないのでこちらの方がお勧めです。端子は同じなので置き換えるだけ。若干大きいのがいまいちですが。

使い方

  1. AZ-GTi に上記モジュールを接続し、電源を入れる
  2. PC で Bluetooth のデバイスの追加を行う
    ATOM-SPP というデバイスが見つかるのでそれを追加する
    macOS の場合、一旦接続になり数秒で切断されるが気にしない。
    通信を再開させると自動的に接続される。
  3. PC のデバイス設定を確認する
    • Win
      デバイスマネージャーのポート(COM と LPT)に Bluetooth リンク経由の標準シリアルが二つ追加されている。どっちが有効かわからないので両方ためしてみる。
    • macOS
      ターミナルソフトなどで ls /dev とやると、cu.ATOM-SPP というのがみつかるはずです。
  4. SynScan Pro を立ち上げ設定をする
    設定→接続の設定→ Serial Port に設定します。


    • Win
      上記で調べた COMxx を選択します
    • macOS
      /dev/cu.ATOM-SPP
      を書き込みます
  5. 接続
    接続する
    で接続できる。。と思います。

あれ?接続できない?不安定かも?と思ったら

まだ検証開始したばかりなので何とも言えないんですが、OS では認識してるっぽいのに、SynScan Pro で接続できない場合がありました。何度か接続を試すと繋がります。繋がったらほぼ安定している感じです。

対処1
デバイスマネージャーで、シリアルの通信速度確認してみてください。115200 にしてください。ほかの設定も合わせること。8ビット、パリティなし、ストップビット 1、フロー制御なし。


対処2
詳細設定から、FIFO バッファーの設定を変えます。どちらかを試してみてください。
まずは受信を最大。送信を 1 にする。


FIFO バッファーを使用しない。


AZ-GTi は 9600bps, SPP は 115200bps と速度が違うので、取りこぼしがないように受信にはバッファを設けた方がよさげな気がします。送信はたまったデータが一気にいかないように 1バイトにした方がいいのかな。。というのが前者の設定。

対処3
Windows の SynScan で、COM ポート名に文字化けした文字列がくっつくケースがあります。この部分を削除した値を設定してください。