Ameba Arduino: [RTL8195] Power Management – 將DHT資料上傳到LASS之後進入睡眠

材料準備

  • Ameba x 1
  • DHT11/DHT22/DHT21 x 1
範例說明
使用Ameba通常都會使用到它的Wifi功能,實際的省電使用情況也會因為使用wifi功能而有不同。
這個範例裡,會先量測DHT的溫濕度數據,打開wifi並連上AP,取得NTP時間,連上LASS的MQTT server,將量測的溫濕度數據上傳,再進入deepsleep。每10分鐘重覆這樣的動作。
打開範例 “File” -> “Examples” -> “AmebaPowerSave” -> “DeepSleepWithDHTLass”
修改程式裡相關的設定,包括:
- DHT的型號:DHT11/DHT22/DHT21
- 連上AP的方式:ssid, password
- 目前的GPS位置:latitude & longitude
編譯並上傳之後,量測到的耗電會因為許多因素而影響,包括wifi網路環境是否乾淨、網路連線是否順暢、Server是否馬上回應。但一般應該會在十多秒內完成。
範例測試的結果裡,我在上傳所花的時間是13s,量得的Ameba module耗電平均為1.3mA。
這個數據比範例 “DeepSleepWithDHT” 要大上許多,因為Ameba在工作模式下的耗電通常大於29mA,甚至在wifi連線時至少會大於68mA,與deepsleep的0.018 mA相比,我們要讓Ameba儘量待在deepsleep才會取得最大的省電效益。
為了比較未省電的情況,我們將程式碼修改如下,讓它平常保持網路連線,每10分鐘量一次,量完再上傳至LASS的MQTT Server

void setup()
{
  dht.begin();

  initializeWiFi();
  initializeMQTT();
}

void loop()
{
  if (gatherHumidityAndTemperature() == DATA_CNT_FOR_UPLOAD) {
    retrieveNtpTime();
    if (!client.connected()) {
      reconnectMQTT();
    }

    publishResults();
    pDhtData->dataCount = 0;
  }

  // store data back to flash memory
  FlashMemory.update();
  delay(measureInterval * 1000);
}

這種方式量測到的平均耗電為67mA
我們用2顆AA電池來比較耗電 (實驗所使用的電錶為Keysight 34465A)
1
可以看到沒省電的情況下只能用一天,但經過省電並且單獨供電給Ameba module可以使用2.8個月。

NOTE: 實際情況裡,不會用到那麼久,它會因為升壓轉換造成能量損失,也會因為電池電壓隨時間而降低造成無法使用到全部的容量。