You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/ja/3-transport/lessons/1-location-tracking/virtual-device-gps-sensor.md

8.5 KiB

GPSデータを読み取る - 仮想IoTハードウェア

このレッスンのこの部分では、仮想IoTデバイスにGPSセンサーを追加し、その値を読み取ります。

仮想ハードウェア

仮想IoTデバイスは、シリアルポートを介してUARTでアクセス可能なシミュレートされたGPSセンサーを使用します。

物理的なGPSセンサーには、GPS衛星からの電波を受信するためのアンテナがあり、GPS信号をGPSデータに変換します。仮想版では、緯度と経度を設定したり、生のNMEA文を送信したり、複数の位置を含むGPXファイルをアップロードして順次返すことができます。

🎓 NMEA文については、このレッスンの後半で説明します。

CounterFitにセンサーを追加する

仮想GPSセンサーを使用するには、CounterFitアプリにセンサーを追加する必要があります。

タスク - CounterFitにセンサーを追加する

CounterFitアプリにGPSセンサーを追加します。

  1. gps-sensorというフォルダーに単一のファイルapp.pyを含む新しいPythonアプリを作成し、Python仮想環境を設定して、CounterFitのpipパッケージを追加します。

    ⚠️ 必要に応じて、レッスン1のCounterFit Pythonプロジェクトの作成と設定に関する手順を参照してください。

  2. シリアル接続を介してUARTベースのセンサーと通信できるCounterFitシムをインストールするための追加のPipパッケージをインストールします。この操作は、仮想環境が有効化されたターミナルで行ってください。

    pip install counterfit-shims-serial
    
  3. CounterFitウェブアプリが実行中であることを確認します。

  4. GPSセンサーを作成します

    1. SensorsペインのCreate sensorボックスで、Sensor typeドロップダウンを開き、UART GPSを選択します。

    2. Portは*/dev/ttyAMA0*のままにします。

    3. Addボタンを選択して、ポート/dev/ttyAMA0にGPSセンサーを作成します。

    GPSセンサーの設定

    GPSセンサーが作成され、センサーリストに表示されます。

    作成されたGPSセンサー

GPSセンサーをプログラムする

仮想IoTデバイスは、仮想GPSセンサーを使用するようにプログラムできます。

タスク - GPSセンサーをプログラムする

GPSセンサーアプリをプログラムします。

  1. gps-sensorアプリがVS Codeで開かれていることを確認します。

  2. app.pyファイルを開きます。

  3. CounterFitにアプリを接続するために、以下のコードをapp.pyの先頭に追加します:

    from counterfit_connection import CounterFitConnection
    CounterFitConnection.init('127.0.0.1', 5000)
    
  4. 必要なライブラリをインポートするために、以下のコードをその下に追加します。これには、CounterFitシリアルポート用のライブラリも含まれます

    import time
    import counterfit_shims_serial
    
    serial = counterfit_shims_serial.Serial('/dev/ttyAMA0')
    

    このコードは、counterfit_shims_serial Pipパッケージからserialモジュールをインポートします。その後、仮想GPSセンサーがUARTポート用に使用するシリアルポート/dev/ttyAMA0に接続します。

  5. シリアルポートからデータを読み取り、値をコンソールに出力するために、以下のコードをその下に追加します:

    def print_gps_data(line):
        print(line.rstrip())
    
    while True:
        line = serial.readline().decode('utf-8')
    
        while len(line) > 0:
            print_gps_data(line)
            line = serial.readline().decode('utf-8')
    
        time.sleep(1)
    

    print_gps_dataという関数が定義され、渡された行をコンソールに出力します。

    次に、コードは無限ループで動作し、各ループでシリアルポートから可能な限り多くのテキスト行を読み取ります。各行に対してprint_gps_data関数を呼び出します。

    すべてのデータが読み取られた後、ループは1秒間スリープし、再試行します。

  6. このコードを実行します。CounterFitアプリが実行中のターミナルとは別のターミナルを使用して実行してください。CounterFitアプリが引き続き実行されるようにします。

  7. CounterFitアプリからGPSセンサーの値を変更します。以下のいずれかの方法で行うことができます

    • SourceLat/Lonに設定し、明示的な緯度、経度、およびGPS固定に使用される衛星の数を設定します。この値は一度だけ送信されるため、データを毎秒繰り返すにはRepeatボックスをチェックします。

      緯度経度が選択されたGPSセンサー

    • SourceNMEAに設定し、NMEA文をテキストボックスに追加します。これらの値はすべて送信され、各新しいGGA位置固定文が読み取られる前に1秒の遅延があります。

      NMEA文が設定されたGPSセンサー

      nmeagen.orgのようなツールを使用して、地図上で描画してこれらの文を生成できます。これらの値は一度だけ送信されるため、すべて送信された後に1秒間隔でデータを繰り返すにはRepeatボックスをチェックします。

    • SourceをGPXファイルに設定し、トラック位置を含むGPXファイルをアップロードします。AllTrailsのような人気のある地図やハイキングサイトからGPXファイルをダウンロードできます。これらのファイルにはトレイルとして複数のGPS位置が含まれており、GPSセンサーは1秒間隔で各新しい位置を返します。

      GPXファイルが設定されたGPSセンサー

      これらの値は一度だけ送信されるため、すべて送信された後に1秒間隔でデータを繰り返すにはRepeatボックスをチェックします。

    GPS設定を構成したら、Setボタンを選択してこれらの値をセンサーにコミットします。

  8. GPSセンサーからの生データ出力が以下のように表示されます

    $GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67
    $GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67
    

💁 このコードはcode-gps/virtual-deviceフォルダーにあります。

😀 GPSセンサーのプログラムが成功しました

免責事項:
この文書は、AI翻訳サービス Co-op Translator を使用して翻訳されています。正確性を期すよう努めておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。元の言語で記載された原文が公式な情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。