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();

  reconnectWiFi();
  retrieveNtpTime();
  initializeMQTT();
}

void loop()
{
  if (gatherHumidityAndTemperature() == DATA_CNT_FOR_UPLOAD) {
    reconnectWiFi();
    while(!sendMQTT()) {
      delay(1000);
    }
    mqttClient.loop();

    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: 实际情况里,不会用到那么久,他会因为升压转换造成能量损失,也会因为电池电压随时间而降低造成无法使用到全部的容量。