跳至主要内容

虛擬單板計算機

不用購買IoT器件,包括 sensor 和 actuator,您可以使用自己的電腦來模擬IoT硬體。CounterFit專案 允許您在本地上運行應用程序,模擬IoT硬體如sensor和actuator,並使用與您在Raspberry Pi上使用物理硬體時相同的語法,從本地Python程式碼訪問sensor和actuator。

设置

為了使用CounterFit,您需要在您的電腦上安裝一些免費軟件。

任務

安裝所需的軟件。

  1. 安裝Python。請參考Python下載頁面以安裝Python的最新版本。

  2. 安裝Visual Studio Code (VS Code)。這是您將使用來使用Python編寫虛擬設備程式碼的編輯器。請參考VS Code文檔以安裝VS Code的指令。

    💁 您可以使用任何Python IDE或編輯器進行這些課程,如果您有自己的偏好工具,但這些課程將根據使用VS Code的指示進行。

  3. 安裝VS Code Pylance擴展。這是VS Code的一個擴展,用於為Python提供語言支持。請參考Pylance擴展文檔以安裝此擴展在VS Code中。

將在作業指導書中的相關時間給出安裝和配置CounterFit應用的指令,因為它是根據項目進行安裝的。

Hello World

在開始新的編程語言或技術時,先創建一個'Hello World'应用程序是最傳統的做法——一個輸出像"text 'Hello World'"的小应用程序,以顯示所有工具都已正确配置。

虛擬IoT硬體的Hello World应用程序將確保您已正确安裝Python和Visual Studio code。它還將連接到CounterFit以虛擬IoT感應器和actuator。它不會使用任何硬體,它只是連接到證明everything is working。

這個應用程序將在名為nightlight的文件夹中,並將在這個作業的後階段使用不同的代碼重新使用來建立夜燈應用程序。

配置Python虛擬環境

Python的一個強大功能是可以安裝Pip包——這些是由其他人撰寫並在互聯網上公布的包。您可以使用一個命令將Pip包安裝到您的電腦上,然後在您的代碼中使用該包。您將使用Pip安裝與CounterFit通信的包。

默認情況下,當您安裝包時,它可以在您的電腦上任何地方可用,這可能會導致包版本的問題——比如一個應用程序依賴於某個包的一個版本,而您為另一個應用程序安裝的新版本會破壞它。為了解決這個問題,您可以使用Python虛擬環境,實際上是一個專為Python創建的副資料夾的Python副本,當您安裝Pip包時,它們僅在那個資料夾中安裝。

💁 如果您在Raspberry Pi上使用,則沒有為管理Pip包在該設備上設置虛擬環境,而是使用全局包,因為Grover包是通過安裝腳本全局安裝的。

任務 - 配置Python虛擬環境

配置Python虛擬環境,並安裝CounterFit的Pip包。

  1. 在您的終端或命令行中,運行以下命令在您選擇的位址創建和_nav到一個新目錄:

    mkdir nightlight
    cd nightlight
  2. 現在運行以下命令以在.venv資料夾中創建虛擬環境:

    python3 -m venv .venv

    💁 您需要明確使用python3來創建虛擬環境,以防您除了Python 3還安裝了Python 2(最新版本)。如果您安裝了Python2,則只會使用Python 2而不是Python 3去呼叫。

  3. 激活虛擬環境:

    • 在Windows上:

      • 如果您正在使用命令提示符或通过Windows Terminal使用命令提示符,則運行:

        .venv\Scripts\activate.bat
      • 如果您正在使用PowerShell,則運行:

        .\.venv\Scripts\Activate.ps1

        如果您收到關於在這個系統上啟用運行腳本的錯誤,您將需要設定合適的執行策略。您可以通過以管理員身份啟動PowerShell,然後運行以下命令來執行此操作:

        Set-ExecutionPolicy -ExecutionPolicy Unrestricted

        請當您被要求確認時輸入Y。然後重新啟動PowerShell並再次試一次。

        您可以在之後的時間重新設定這個執行策略。您可以在Microsoft Docs上的執行策略頁面中閱讀相關內容。

    • 在macOS或Linux上,運行:

      source ./.venv/bin/activate

    💁 這些命令應該從您運行創建虛擬環境的命令的位置運行。您永遠不需要進入虛擬環境資料夾,您應該永遠運行激活命令和任何安裝包或運行程式命令從您在創建虛擬環境時所在的資料夾。

  4. 一旦虛擬環境被激活,默認的python命令將運行用於創建虛擬環境的Python版本。運行以下命令來獲取版本:

    python --version

    輸出應包含以下內容:

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

    💁 您的Python版本可能不同——只要它是3.6或更高版本,您就沒問題。如果不是,刪除這個資料夾,安裝較新版本的Python,然後再次嘗試。

  5. 運行以下命令以安裝CounterFit的Pip包。這些包包括主要的CounterFit應用程序以及為Grove硬體提供的shim。這些shim允許您像使用物理sensor和actuator從Grove硬體生态系统編程時一樣編寫代碼,但連接到虛擬IoT設備。

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

    这些pip包將只安裝在虛擬環境中,並不在其外部可用。

编写代码

一旦Python虛擬環境已準備就緒,您可以為'Hello World'應用程序編寫代碼

任務 - 编写代码

創建一個Python應用程序將"text 'Hello World'"打印到控制台。

  1. 在您的終端或命令行中,運行以下命令從虛擬環境中創建一個名為app.py的Python文件:

    • 在Windows上運行:

      type nul > app.py
    • 在macOS或Linux上運行:

      touch app.py
  2. 打開當前資料夾在VS Code中:

    code .

    💁 如果您的終端返回command not found在macOS,這意味著VS Code尚未添加到您的PATH。您可以通过參考VS Code文檔中的從命令行啟動部分來將VS Code添加到您的PATH,然後運行該命令。VS Code在Windows和Linux上默認已添加到PATH。

  3. 当VS Code啟動時,它將激活Python虛擬環境。選定的虛擬環境將出現在底部狀態條中:

    VS Code顯示選定的虛擬環境

  4. 如果VS Code啟動時終端已經運行,則終端不會激活虛擬環境。最簡單的方法是使用Kill the active terminal instance按鈕結束終端:

    VS Code Kill the active terminal instance button

    您可以通過終端提示的虛擬環境名稱来識別是否激活了虛擬環境。例如,它可能像這樣:

    (.venv) ➜  nightlight

    如果您鈕的提示沒有.venv作為前置,則虛擬環境未在終端中激活。

  5. 構建一個新的VS Code終端,選擇*Terminal -> New Terminal,或按下 CTRL+`。新終端將加載虛擬環境,並在終端中出現激活虛擬環境的調用。終端提示也將有虛擬環境的名稱(.venv):

    ➜  nightlight source .venv/bin/activate
    (.venv) ➜ nightlight
  6. 打開app.py文件從VS Code檢索器,並添加以下代碼:

    print('Hello World!')

    print 函數將什麼傳遞給它都打印到控制台。

  7. 在VS Code終端中,運行以下命令以運行您的Python應用程序:

    python app.py

    輸出將是:

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

😀 您的 'Hello World' 程序成功了!

連接 '硬體'

作為'Hello World'的第二步,您將運行CounterFit應用程序並將您的代碼連接到它。這是虛擬版的將某種IoT硬體插入開發板中的過程。

任務 - 連接 '硬體'

  1. 在VS Code終端中,運行以下命令來啟動CounterFit應用程序:

    counterfit

    應用程序將開始運行並在瀏覽器中打開:

    在瀏覽器中運行的Counter Fit應用程序

    它將被標記為Disconnected,上角的LED燈熄滅。

  2. app.py的頂部添加以下代碼:

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

    此代碼從counterfit_connection模塊導入CounterFitConnection類,該模塊屬於您先前安装的counterfit-connectionpip包。然後,它初始化到正在運行在127.0.0.1(您可總是使用這個IP地址來訪問您的本地電腦,通常稱為localhost),端口5000上的CounterFit應用程序的連接。

    💁 如果您在端口5000上運行其他应用程序,您可以通過在代碼中更新端口來更改這一點,並使用CounterFit --port <port_number>運行CounterFit,將<port_number>替換為您想要的端口。

  3. 您需要通過選擇Create a new integrated terminal按鈕在VS Code中構建一個新的整合終端。這是因為CounterFit應用程序正在當前終端中運行。

    VS Code Create a new integrated terminal button

  4. 在這個新的終端中,像以前一樣運行app.py文件。CounterFit的狀態將更改为Connected,且LED燈亮起。

    Counter Fit顯示Connected狀態

💁 您可以在code/virtual-device資料夾中找到這段代碼。

😀 您與硬體的連接成功了!