中華タブレット用GPSを作ってみました

以前購入した中華Androidタブレットがあるのですがが、(WiFiタブレット全般に)GPSが付いていません。そこで、外付けのGPSユニットを作ってみました。

IMG_3104s

外付けGPSについて調べてみると、PL2303をUSB-UARTコンバータとして使用しているUSB接続GPS機器をAndroidで使うための「You Are Here GPS」というソフトがあることがわかりました。そこから察するにNMEA-0193フォーマットでUARTにデータを吐くGPSモジュールをPL-2303に接続すれば良さそうです。ただ、You Are Here GPSを動かしてみたところ、シリアルの速度は4800bpsか9600bpsしか選べません。ここはGPSモジュール選定の際の要注意事項です。

実際の回路はGPSはaitendoでGM-242iというモジュールとGPSHMX-039というパッシブアンテナ、USB-TTL2303-5PというUSB-UART変換モジュールを購入して、小さな基板上に5VからGPSの電源の3.3Vを生成する三端子レギュレータとバックアップ用のコイン形リチウム電池を載せました。

まずは、LinuxMintをインストールしたPCに接続してGM-242iのデフォルトの通信速度である38400bps、ビット長8、パリティなし、ストップビット1ビットで接続します。ソフトはmoserialを使用しました。

$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30 
$GPGSV,1,1,00*79 
$GPGLL,,,,,,V,N*64 
$GPRMC,,V,,,,,,,,,,N*53 
$GPVTG,,,,,,,,,N*30 
$GPGGA,,,,,,0,00,99.99,,,,,,*48 
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30 
$GPGSV,1,1,00*79 $GPGLL,,,,,,V,N*64 
$GPRMC,,V,,,,,,,,,,N*53 
$GPVTG,,,,,,,,,N*30 
$GPGGA,,,,,,0,00,99.99,,,,,,*48 
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30 
$GPGSV,1,1,00*79 $GPGLL,,,,,,V,N*64 
$GPRMC,,V,,,,,,,,,,N*53 
$GPVTG,,,,,,,,,N*30 
$GPGGA,,,,,,0,00,99.99,,,,,,*48 
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30 
$GPGSV,1,1,00*79 $GPGLL,,,,,,V,N*64 
$GPRMC,,V,,,,,,,,,,N*53 
$GPVTG,,,,,,,,,N*30 
$GPGGA,,,,,,0,00,99.99,,,,,,*48 
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30

こんな感じのGPSメッセージが流れているのが確認できますので、以下のコマンドをASCIIで送信して速度を9600bpsに変更します。

$PUBX,41,1,0007,0003,9600,0*10

変更したら、moserial側も一旦切断して速度を9600bpsに変更して再接続します。引き続きHEXで以下のUBXコマンドを送って、コイン形リチウム電池でバックアップされるBBRAM領域に設定を保存します。

B56206090D0000000000FFFF0000000000001731BF

B5 62 06 09でCFG-CFGコマンド(コンフィギュレーションのクリア、保存、読み出し)を指定します。続く「0D 00」がリトルエンディアンなので0x000Dで長さ13を示しています。続く「00 00 00 00」=0x00000000でクリアするものはなし、「FF FF 00 00」=0x0000FFFFですべて保存、「00 00 00 00」=0x00000000でロードするものはなし、次の17で保存できるデバイスすべてを指定しています。

参考まで、UBXコマンドのチェックサムを付加・算出するPythonスクリプトを置いておきます。

#!/usr/bin/env python
# coding: utf-8

#              CLS  ID   LENGTH    clearMask           saveMask            loadMask            deviceMask
CMDSAVE     = [0x06,0x09,0x0D,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x17]

cmd = CMDSAVE
CK_A = 0
CK_B = 0
STR = "B562"	# HEADER
for x in cmd:
	CK_A = CK_A + x
	CK_B = CK_B + CK_A
	STR = STR + format(x,'02X')
STR = STR + format(CK_A & 0xff,'02X') + format(CK_B & 0xff,'02X')
print STR

これで電源をOFFしても電源投入時点から9600bpsで動作します。この状態で中華タブレットに接続し、 You Are Here GPSを動作させます。設定で通信速度を9600bpsにセットして「connect」を押すとNMEA-0193メッセージが1秒周期で表示されます。
カタログスペックでは衛星捕捉-142dBm、トラッキング-159dBmの感度があることになっていますが、残念ながら鉄筋コンクリートの室内では測位できないようです(スマートフォンでは何とか衛星捕捉から可能なようなのですが・・・)。近いうちに外で測位させてみたいと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)