メインコンテンツまでスキップ

仮想シングルボードコンピュータ

センサーやアクチュエーターを備えたIoTデバイスを購入する代わりに、コンピュータを使用してIoTハードウェアをシミュレートすることができます。CounterFitプロジェクトを使用すると、センサーやアクチュエーターのようなIoTハードウェアをエミュレートするローカルアプリを実行できます。これらのセンサーやアクチュエーターには、物理的なハードウェアを備えたRaspberry Piで使用するコードと同様に記述されたローカルPythonコードからアクセスできます。

セットアップ

CounterFitを始めるには、コンピュータにいくつかの無料ソフトウェアをインストールする必要があります。

タスク

必要なソフトウェアをインストールします。

  1. Pythonをインストールします。最新バージョンのPythonをインストールする手順については、Pythonダウンロードページを参照してください。

  2. Visual Studio Code (VS Code) をインストールします。これは、Pythonで仮想デバイスコードを記述するために使用するエディタです。インストール手順については、VS Codeドキュメントを参照してください。

    💁 これらのレッスンではVS Codeを使用する手順に基づいていますが、好みのPython IDEやエディタを使用することもできます。

  3. VS Code Pylance拡張機能をインストールします。この拡張機能は、VS CodeでPython言語サポートを提供します。インストール手順については、Pylance拡張機能ドキュメントを参照してください。

CounterFitアプリのインストールと設定の手順は、プロジェクトごとにインストールされるため、適切なタイミングで課題の指示に従って提供されます。

Hello World

新しいプログラミング言語や技術を始めるときには、「Hello World」アプリケーションを作成するのが慣例です。この小さなアプリケーションは、すべてのツールが正しく構成されていることを確認するために「Hello World」のようなテキストを出力します。

仮想IoTハードウェアのHello Worldアプリは、PythonとVisual Studio Codeが正しくインストールされていることを確認します。また、CounterFitに接続して仮想IoTセンサーやアクチュエーターを使用します。ハードウェアは使用せず、すべてが正常に動作していることを確認するために接続するだけです。

このアプリは「nightlight」というフォルダにあり、この課題の後の部分でナイトライトアプリケーションを構築するために異なるコードで再利用されます。

Python仮想環境の設定

Pythonの強力な機能の1つは、他の人が書いてオンラインで公開したコードのパッケージであるPipパッケージをインストールできることです。1つのコマンドでPipパッケージをコンピュータにインストールし、コードで使用できます。CounterFitと通信するためのパッケージをインストールするためにPipを使用します。

デフォルトでは、パッケージをインストールすると、コンピュータ全体で利用可能になりますが、これによりバージョンの競合が発生する可能性があります。あるアプリケーションはあるバージョンのパッケージに依存しているが、別のアプリケーションのために新しいバージョンをインストールすると壊れることがあります。これを避けるために、Python仮想環境を使用できます。これは、専用フォルダ内のPythonのコピーです。Pipパッケージをインストールすると、それらはそのフォルダ内にのみインストールされます。

💁 Raspberry Piを使用している場合、そのデバイスでPipパッケージを管理するために仮想環境を設定しません。代わりに、グローバルパッケージを使用しています。Groveパッケージはインストーラースクリプトによってグローバルにインストールされます。

タスク - Python仮想環境の設定

Python仮想環境を設定し、CounterFitのPipパッケージをインストールします。

  1. ターミナルまたはコマンドラインから、次のコマンドを任意の場所で実行して新しいディレクトリを作成し、移動します:

    mkdir nightlight
    cd nightlight
  2. 次のコマンドを実行して、.venvフォルダに仮想環境を作成します:

    python3 -m venv .venv

    💁 Python 2がインストールされている場合に備えて、仮想環境を作成するためにpython3を明示的に呼び出す必要があります。Python 2がインストールされている場合、pythonを呼び出すとPython 2が使用されます。

  3. 仮想環境をアクティブにします:

    • Windowsの場合:

      • コマンドプロンプトまたはWindowsターミナル経由のコマンドプロンプトを使用している場合、次のコマンドを実行します:

        .venv\Scripts\activate.bat
      • PowerShellを使用している場合、次のコマンドを実行します:

        .\.venv\Scripts\Activate.ps1

        スクリプトの実行がこのシステムで無効になっているというエラーが表示された場合、適切な実行ポリシーを設定してスクリプトの実行を有効にする必要があります。これを行うには、管理者としてPowerShellを起動し、次のコマンドを実行します:

        Set-ExecutionPolicy -ExecutionPolicy Unrestricted

        確認を求められたらYを入力します。その後、PowerShellを再起動して再試行します。

        必要に応じて、後でこの実行ポリシーをリセットできます。詳細については、Microsoft Docsの実行ポリシーページを参照してください。

    • macOSまたはLinuxの場合、次のコマンドを実行します:

      source ./.venv/bin/activate

    💁 これらのコマンドは、仮想環境を作成するためにコマンドを実行したのと同じ場所から実行する必要があります。.venvフォルダに移動する必要はありません。仮想環境をアクティブにするコマンドやパッケージをインストールするコマンド、コードを実行するコマンドは、仮想環境を作成したフォルダから実行します。

  4. 仮想環境がアクティブになると、デフォルトのpythonコマンドは仮想環境を作成するために使用されたPythonのバージョンを実行します。次のコマンドを実行してバージョンを確認します:

    python --version

    出力は次のようになります:

    (.venv) ➜  nightlight python --version
    Python 3.9.1

    💁 Pythonのバージョンは異なる場合があります。バージョン3.6以上であれば問題ありません。そうでない場合は、このフォルダを削除し、新しいバージョンのPythonをインストールして再試行してください。

  5. 次のコマンドを実行して、CounterFitのPipパッケージをインストールします。これらのパッケージには、メインのCounterFitアプリとGroveハードウェア用のシムが含まれています。これらのシムを使用すると、物理的なセンサーやアクチュエーターを使用しているかのようにコードを記述できますが、仮想IoTデバイスに接続されます。

    pip install CounterFit
    pip install counterfit-connection
    pip install counterfit-shims-grove

    これらのPipパッケージは仮想環境内にのみインストールされ、外部では利用できません。

コードを書く

Python仮想環境が準備できたら、「Hello World」アプリケーションのコードを書くことができます。

タスク - コードを書く

コンソールに「Hello World」を表示するPythonアプリケーションを作成します。

  1. 仮想環境内でターミナルまたはコマンドラインから次のコマンドを実行して、app.pyというPythonファイルを作成します:

    • Windowsの場合、次のコマンドを実行します:

      type nul > app.py
    • macOSまたはLinuxの場合、次のコマンドを実行します:

      touch app.py
  2. 現在のフォルダをVS Codeで開きます:

    code .

    💁 macOSでcommand not foundと表示された場合、VS CodeがPATHに追加されていないことを意味します。VS CodeをPATHに追加するには、VS Codeドキュメントのコマンドラインからの起動セクションの手順に従い、その後コマンドを実行します。VS CodeはWindowsおよびLinuxではデフォルトでPATHにインストールされます。

  3. VS Codeが起動すると、Python仮想環境がアクティブになります。選択された仮想環境は、下部のステータスバーに表示されます:

    VS Code showing the selected virtual environment

  4. VS Codeターミナルが起動時に既に実行されている場合、仮想環境はターミナルでアクティブになりません。最も簡単な方法は、Kill the active terminal instanceボタンを使用してターミナルを終了することです:

    VS Code Kill the active terminal instance button

    ターミナルに仮想環境がアクティブになっているかどうかは、ターミナルプロンプトのプレフィックスに仮想環境の名前が表示されることで確認できます。例えば、次のようになります:

    (.venv) ➜  nightlight

    プロンプトに.venvがプレフィックスとして表示されていない場合、ターミナルで仮想環境がアクティブになっていません。

  5. Terminal -> New Terminalを選択するか、CTRL+`を押して新しいVS Codeターミナルを起動します。新しいターミナルは仮想環境をロードし、アクティブ化の呼び出しがターミナルに表示されます。プロンプトには仮想環境の名前(.venv)が表示されます:

    ➜  nightlight source .venv/bin/activate
    (.venv) ➜ nightlight
  6. VS Codeエクスプローラーからapp.pyファイルを開き、次のコードを追加します:

    print('Hello World!')

    print関数は、渡されたものをコンソールに表示します。

  7. VS Codeターミナルから次のコマンドを実行してPythonアプリを実行します:

    python app.py

    出力は次のようになります:

    (.venv) ➜  nightlight python app.py 
    Hello World!

😀 「Hello World」プログラムが成功しました!

「ハードウェア」を接続する

2番目の「Hello World」ステップとして、CounterFitアプリを実行し、コードを接続します。これは、IoTハードウェアを開発キットに接続する仮想的な手順です。

タスク - 「ハードウェア」を接続する

  1. VS Codeターミナルから次のコマンドを実行してCounterFitアプリを起動します:

    counterfit

    アプリが実行され、ウェブブラウザで開きます:

    The Counter Fit app running in a browser

    右上のLEDがオフになっており、「Disconnected」と表示されます。

  2. app.pyの先頭に次のコードを追加します:

    from counterfit_connection import CounterFitConnection
    CounterFitConnection.init('127.0.0.1', 5000)

    このコードは、以前にインストールしたcounterfit-connectionpipパッケージからCounterFitConnectionクラスをインポートします。次に、127.0.0.1で実行されているCounterFitアプリに接続を初期化します。これは、ローカルコンピュータに常にアクセスできるIPアドレス(localhostとも呼ばれます)で、ポート5000を使用します。

    💁 ポート5000で他のアプリが実行されている場合、コード内のポートを更新し、CounterFit --port <port_number>を使用してCounterFitを実行することでこれを変更できます。<port_number>を使用したいポートに置き換えます。

  3. CounterFitアプリが現在のターミナルで実行されているため、Create a new integrated terminalボタンを選択して新しいVS Codeターミナルを起動する必要があります。

    VS Code Create a new integrated terminal button

  4. この新しいターミナルで、前と同じようにapp.pyファイルを実行します。CounterFitのステータスがConnectedに変わり、LEDが点灯します。

    Counter Fit showing as connected

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

😀 ハードウェアへの接続が成功しました!