跳至主要内容

建立夜燈 - 虛擬物聯網硬體

在本課程的這一部分,你將為你的虛擬物聯網設備添加一個光傳感器。

虛擬硬體

夜燈需要一個傳感器,在 CounterFit 應用中創建。

這個傳感器是一個光傳感器。在物理物聯網設備中,它將是一個光電二極管,將光轉換為電信號。光傳感器是模擬傳感器,發送一個整數值,表示相對的光量,這個值不對應於任何標準的測量單位,如lux

將傳感器添加到 CounterFit

要使用虛擬光傳感器,你需要將其添加到 CounterFit 應用中

任務 - 將傳感器添加到 CounterFit

將光傳感器添加到 CounterFit 應用中。

  1. 確保 CounterFit 網頁應用正在運行,如果沒有,啟動它。

  2. 創建一個光傳感器:

    1. 傳感器窗格的創建傳感器框中,打開傳感器類型框並選擇

    2. 單位設置為無單位

    3. 確保引腳設置為0

    4. 選擇添加按鈕,在引腳 0 上創建光傳感器

    光傳感器設置

    光傳感器將被創建並出現在傳感器列表中。

    光傳感器創建

編程光傳感器

現在可以編程設備以使用內置的光傳感器。

任務 - 編程光傳感器

編程設備。

  1. 在 VS Code 中打開你在本課程的上一部分創建的夜燈項目。如果需要,終止並重新創建終端以確保它正在使用虛擬環境運行。

  2. 打開 app.py 文件

  3. app.py 文件的頂部添加以下代碼與其他 import 語句一起導入一些所需的庫:

    import time
    from counterfit_shims_grove.grove_light_sensor_v1_2 import GroveLightSensor

    import time 語句導入了 Python 的 time 模塊,這個模塊將在本課程的後面使用。

    from counterfit_shims_grove.grove_light_sensor_v1_2 import GroveLightSensor 語句從 CounterFit Grove shim Python 庫中導入 GroveLightSensor。這個庫有與 CounterFit 應用中創建的光傳感器交互的代碼。

  4. 在文件底部添加以下代碼以創建管理光傳感器的類的實例:

    light_sensor = GroveLightSensor(0)

    light_sensor = GroveLightSensor(0) 行創建了一個 GroveLightSensor 類的實例,連接到引腳 0 - 光傳感器連接到的 CounterFit Grove 引腳。

  5. 在上面的代碼後添加一個無限循環以輪詢光傳感器值並將其打印到控制台:

    while True:
    light = light_sensor.light
    print('光照水平:', light)

    這將使用 GroveLightSensor 類的 light 屬性讀取當前的光照水平。這個屬性從引腳讀取模擬值。然後這個值將被打印到控制台。

  6. while 循環的末尾添加一個一秒的小睡眠,因為光照水平不需要連續檢查。睡眠可以減少設備的功耗。

    time.sleep(1)
  7. 從 VS Code 終端運行以下命令來運行你的 Python 應用:

    python3 app.py

    光照值將輸出到控制台。最初這個值將是 0。

  8. 從 CounterFit 應用中更改光傳感器的值,應用將讀取該值。你可以通過以下兩種方式進行更改:

    • 在光傳感器的框中輸入一個數字,然後選擇設置按鈕。你輸入的數字將是傳感器返回的值。

    • 勾選隨機複選框,並輸入最小最大值,然後選擇設置按鈕。每次傳感器讀取值時,它將讀取一個介於最小最大之間的隨機數。

    你設置的值將輸出到控制台。更改隨機設置以使值發生變化。

    (.venv) ➜  GroveTest python3 app.py 
    Light level: 143
    Light level: 244
    Light level: 246
    Light level: 253

💁 你可以在 code-sensor/virtual-device 文件夾中找到這段代碼。

😀 你的夜燈程序成功了!