それでも、車の位置に関する情報を保存することについての考えが私の頭の中を回っていました。 これらの考えに基づいて、私はいわゆるを購入することにしました。 個人用GPSトラッカー。 私はモデルを詳しく調べませんでしたが、すべてがほぼ同じですが、列挙された候補の多くには、独自のサーバーのセットアップなどの非常に重要な機能がありませんでした。 その結果、私の選択は、中国の会社Xexun-Xexun TK102-2の個人用GPSトラッカーでした。 すべてがどのように設定されているか、さまざまなマニュアルの山をさらに数時間検索した後、私はそれを購入してそれが何であるかを見る必要があると決めました。 トラッカーに関する情報やトラッカー用の独自の「サーバー」の作成に興味のある方は、ぜひご参加ください。
GPS監視サービスを提供するさまざまな企業の形態について、彼らは多くの偽物が歩いていて、彼らにぶつかる可能性があり、明らかに彼らを区別できないなど、あなたが彼らと商品に優先順位を付けなかった場合、書き、警告しましたが、私は証明された道を行きました私はebayでPribludaを注文しました。本当に4週間待たなければなりませんでしたが、まあ-来ました。
トラッカーについて簡単に:
通信規格:GSM 850、GSM 900、GSM 1800、GSM 1900
GPSチップセット:SiRF Star III
衛星航法システム:GPS
仕様:
トラッキング感度:-159 dBm
ホットスタート2秒
コールドスタート35秒
5メートルの精度
-10〜+65°の動作温度
機能
SMSリモートコントロール
速度制御、動きの始まり
低バッテリー信号
寸法と重量
長さ64 mm
幅46mm
厚さ17 mm
重さ50 g
記憶
SDカードのサポート
GPRSデータ転送
ホットキーと表示
パニックボタン:現在の座標を送信し、SMSでSOS信号を送信します
表示:緑色のLED
バッテリー
バッテリータイプLi-ion
860 mAhのバッテリー容量
最大12時間の通常動作時間
最大80時間のスタンバイ時間
デバイスは、偶然にもかなりうまくいった箱に入っていました。
デバイス自体は、ソフトタッチのゴム引きプラスチックでできています。
SIMカードがすでに取り付けられた内部ビュー。
キットには、取り外し可能なバッテリーとトラッカー自体の充電器も含まれていました。
残念ながら、トラッカーのパフォーマンスを確認するためのソフトウェアがボックスにありませんでしたが、単純な(トートロジーについてはごめんなさい)人が自分自身とデバイスを登録し、それがどのように機能するかを比較的簡単に確認できるサービスがいくつかありますが、これは私にとってはありませんトピックの冒頭に書いた。
それでは、テストの時間です。 ためらうことなく、私はバルコニーに行ってトラッカーを起動しました、私はそれを設定しようとした指示を読んだ後、トラッカーに送るために指示が非常に不十分で、多くのタイプミスとチーム自身のタイプミスが書かれていたので、変数で私に与えられました、私はロシア語版が見つかりましたが、設定はすぐにエラーなく完了しました。
まず、SMSでトラッカーに問い合わせてみました-座標を取得し、マップですぐに確認しました-うまくいきました。次のステップはサーバーを構成することですが、自分のサーバーを持っていないので、ためらうことなく白いIPを持っているので、Cでコンソールアプリケーションを作成しました#そしてそこのトラッカーから何が来るのかを決めることにし、次の行がトラッカーから来ました:
"130402213013、+ 79637 ** 3 ***、GPRMC、173013.000、A、6146.4979、N、03421.2399、E、1.92,21.48,020413 ,,, A * 5B、F ,, imei:******* ******、00、-16.4、F:3.73V、0,139,49646,250,99,1478,68A7 \ n \ r "
電話番号(2)のフィールドと、具体的に書いたimeiフィールドのアスタリスク。
実際、この行の説明は命令自体にもありましたが、すべてではありませんが、何かに対処する必要がありました。たとえば、GPRMCとは何かを調べるためですが、これも難しくありません 情報満載。
私が理解できない主な瞬間の1つは、通常の座標のSMSがすぐに到着しますが、座標が数十キロメートル横に正確に届かないことです。 これはかなり面倒でした。その時までに、すべてを解析してxmlファイルに保存する小さなプログラムをすでに作成していたためです(詳細は後ほど)。 ソリューションは表面にありませんでした。必要な情報を見つけるためにGoogleでリクエストを作成する方法がわからなかったからです。数日続けて、GPS受信機の操作に関するナビゲーションと記事だけでなく、海事に関するさまざまな技術仕様を読みました。 すべてが非常にシンプルで、座標はWGS-84形式であり、「通常の」座標、つまりYandex Mapsに適した座標に変換する必要があることが判明しました。 実際、WGS-84の出現により、円は狭くなり、数式がすぐに見つかり、すべてがカウントされました。
それとは別に、トラッカーからデータを受信するために夜に行ったプログラムについて書きたいと思います。 私はc#言語を自分にとって最も便利な言語として選択しましたが、大学では、見かけの単純さからラボを作成することを好みました。 しかし、大学で教えられたすべてのことと私が自分で勉強したことは、このプロジェクトでは役に立ちませんでした。 たとえば、C#についてのコースでマルチスレッドについて聞いたことがありません。 はい、はい。 ネットワークに関する作業もありませんでした。 一般的に、私は自分ですべてを理解し、読む必要がありました。
まず最初に。
まず、ServerStartメソッドが起動します。これにより、接続ソースをリッスンさせ、「クライアント」を予期する新しいスレッドを生成するメソッドを起動します。 クライアントが接続すると、トラッカーからデータを受信する別のストリームが生成されます。 すべてが非常に簡単です。
public void ServerStart() { isServerRunning = true; listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // , IPAddress.Any Point = new IPEndPoint(IPAddress.Any, port); // listener.Bind(Point); // listener.Listen(10); socketAccepter(); } public void socketAccepter() { // , Thread th = new Thread(delegate() { while (isServerRunning) { // , // , - Socket client = listener.Accept(); //client.ReceiveTimeout = 20000; // , client, . // , clients.Add(client); // Thread thh = new Thread(delegate() { messageReciever(client); }); thh.Name = "Recieving bags " + DateTime.Now.ToString(); thh.Start(); threads.Add(thh); } }); th.Name = "Accepting Connecton " + threads.Count; th.Start(); threads.Add(th); }
メッセージを受け入れるメソッド。 私は経験の不足、より正確にはこの問題のリテラシーではないことを考慮して、「無限のサイクルのためにあなたは危機にburnしている必要がある」と何度も耳にしました。 実際、プロセッサを貪り始めたことに気づきませんでしたが、このサイクルのためにプロセスによって1つのコアが完全にロードされることがありましたが、その後、デバッグして、トラッカーからのメッセージが到着するまでスレッドを停止するRecieveメソッドを使用し始めました一般に、listener.Accept()と同じロジックが使用されます。
public void messageReciever(Socket client) { int i = 0, av = 0; double t = 0; string[] data; string[] messages; char[] spliter = { '\n', '\r' }; string message = ""; while (isServerRunning && client.Connected == true) { try { // byte[] bytes = new byte[2048]; // av = client.Receive(bytes); if (av != 0) { message = Encoding.UTF8.GetString(bytes).Remove(av); messages = message.Split(spliter, System.StringSplitOptions.RemoveEmptyEntries); for (i = 0; i < messages.Length; i++) { data = messages[i].Split(','); if (double.TryParse(data[0], out t)) saver.parseData(data); //else //MessageBox.Show(messages[i].ToString()); } } else { continue; } } catch //(Exception e) { //MessageBox.Show(e.Message + " " + e.StackTrace, " Message Reciever"); } } threads.Remove(Thread.CurrentThread); Thread.CurrentThread.Abort(); }
一般に、これを終了したいのですが、追加したいのは、データをxmlファイルに保存することを拒否することだけです。なぜなら、お互いのフローを同期する方法が実際にはわからず、ファイルが1つによって開かれたことがよくあるからですストリーム、および別のストリームがすでにそれに到達しようとしています。 ロックの問題はDBMS-MySQLに割り当てられました。 そうそう、コンマで区切られたデータの解析も特別な方法で必要ではないと思います。C#をMySQLに接続することは、MySQLがすべてのコネクタを提供するため特に簡単でフレンドリーです。
現時点では、とにかく動きを視覚化するために、このアプリケーションの機能を拡張し、Webフェイスを配布する予定です。 また、Webマズルには特定の困難があります。つまり、実際にAPIマップを調査するために、どのカードを使用するかが決定されました。 カードのAPIを使用した経験はありませんが、ゆったりと、夕方にはすべてが研究されると思います。
読んでくれた人に感謝し、UFOに特に感謝します。
アプリ