AndroidからWindowsへのGPSデータ転送(NMEA)





はじめに



Windowsでは、COMポートを介して送信されるGPSデバイスからのNMEAメッセージを必要とするアプリケーションがあります。 Androidでは、APIを使用してこのようなメッセージを生成できます。 一般に、Androidから仮想COMポートにデータを配信するというアイデアがありました。 これがどのように実装されたかに興味があるなら、猫をお願いします。





何をする必要がありましたか?



以下を実装する必要がありました。





TCP / IP接続



接続はRevers有線テザーを使用して編成されました。このため、電話でルート権限が取得され、 android-wired-tetherプログラムを使用して、PCへのTCP / IP接続が作成されました。 なぜWiFi経由ではないのですか? はい、そのような機会があります。Windows7で仮想WiFiアダプターを作成でき、Androidから既にそれに接続されます。 しかし、5分間の接続後、私のAtheros AR5B95アダプターはシステムをブルースクリーンに導きました。そのため、ワイヤーを介してすべて同じ接続を作成することが決定されました。また、デバイスを充電します。これは、GPSが動作しているときは重要ではありません(電力の点では非常に重要です)。



AndroidからのNMEAデータ、受信および送信



Androidのデータは、次のコードで取得されました。

//NMEA listener

LocationManager LM = (LocationManager) getSystemService(Context.LOCATION_SERVICE); ((LocationManager)getSystemService(Context.LOCATION_SERVICE)).requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,new LocationListener(){

@Override

public void onLocationChanged(Location loc) {}

@Override

public void onProviderDisabled(String provider) {}

@Override

public void onProviderEnabled(String provider) {}

@Override

public void onStatusChanged(String provider, int status,Bundle extras) {} });



LM.addNmeaListener(new GpsStatus.NmeaListener() {

public void onNmeaReceived(long timestamp, String nmea) {

SendNmea2UDP(nmea);

}});







そして、PCのUDPポートに送信するSendNmea2UDPメソッドに転送されました。

public void SendNmea2UDP(String nmeastring)

{

message = nmeastring;

msg_length=message.length();

messageB = message.getBytes();

nmeapacket = new DatagramPacket(messageB, msg_length,local,server_port);

try

{

socket.send(nmeapacket);

}

catch(Exception e) {}

}









PC上のNMEAデータ



データを受信して​​コンピューターからCOMポートに送信するために、単純なアプリケーションがC#で作成されました。

Virtual Serial Ports Emulatorプログラムを使用して、2つの接続された仮想COMポートが作成され、そのうちの1つはPC上のプログラムからデータを受信し、2つ目の仮想COMポートでは、必要な任意の位置ですでに取得できます。



おわりに



プログラムのソースコードに興味がある人は、 AndroidWindowsにあります。



その結果、COMポートからNMEAデータを理解するプログラムを実行できます。



右下には、AndroidからUDPを受け入れ、NMEAを仮想COMポートにさらに転送するプログラムがあります。 upd2comプログラムはポート3に送信します。たとえば、この場合、SAS Planetはポート4から受け入れます(これはVSPEを使用して編成されます)。 小さな赤い点は、私が今それをすべてテストしているところです。

ご清聴ありがとうございました。この記事がおもしろかったと思います。



使用したソース



NMEAデータ

Wired_tether_1_4.apk

仮想シリアルポートエミュレータ

UDPリスナーC#サンプル

テザリングと逆テザリング

HBOT 0.93を使用したルートHTCの欲求



All Articles