M5Stack Atom Liteのスリープ時の消費電力を測ってみた

今年はM5Stack Atom Liteで給水ポンプを制御する水やり装置を作ってみようとしましたが、7日経たずに電池が切れたのでどこで電力を消費しているのかと調べてみたところ、M5Stack系はスリープ時も10mA前後消費するという記事をいくつか見つけました。

ちなみに昨年のobniz版の記事はこちらです。
obniz Board 1Yで自動水やりの屋外対応版を工作してみた

そこで自分も、実際に1.2vのニッケル水素電池 3本、おおよび3.7vくらいの電源をAtom Liteにつなぎ、スリープ時に流れている電流を測ってみたので記録しておきます。

こちら、起動時に計測した電流です。44mAほど流れています。

次に、スリープ(Hibernate)時に計測した電流は、6mA強です。こちらは、電源電圧が大きいともう少し大きくなります。

計測した際に使ったスケッチはこちら、一応Hibernateするようにしていますが、とくにオプション有効のままのディープスリープでも流れている電流は同程度でした。

#define TIME_TO_SLEEP 6 * 60 * 60
#define TIME_TO_WATERING 20 * 1000

void setup() {
  unsigned long starttime = millis();

  esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF);
  esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_SLOW_MEM, ESP_PD_OPTION_OFF);
  esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_FAST_MEM, ESP_PD_OPTION_OFF);
  esp_sleep_pd_config(ESP_PD_DOMAIN_MAX, ESP_PD_OPTION_OFF); 

  // long long型を指定する
  uint64_t sleeptime = TIME_TO_SLEEP * 1000000ULL - (millis() - starttime) * 1000;
  esp_sleep_enable_timer_wakeup(sleeptime);
  esp_deep_sleep_start();
}

void loop() {
}

ところで、esp_sleep_enable_timer_wakeup関数の引数は、マイクロ秒を型uint64_t(64bit符号なし整数)で指定しますが、はじめ以下のように「1000000」のままにしていたところ計算結果が32bit整数になってしまいどんなに長い時間を指定しても2分程度で復帰するというミスに少々ハマってしまいました。。

uint64_t sleeptime = TIME_TO_SLEEP * 1000000 - (millis() - starttime) * 1000;

正しくは、以下のようにULLをつけて符号なし64bit整数を式に含めることで長い時刻をちゃんと計算できるようになります。

uint64_t sleeptime = TIME_TO_SLEEP * 1000000ULL - (millis() - starttime) * 1000;

参考: ESP32 – Deep Sleep for over 3 hours

IoTデータ 可視化サービスAmbientにENV III UNITのデータを送る

以前から触ってみようと思ってやっていなかったIoTデータを可視化するサービスAmbientを試してみました。

https://ambidata.io/

使い方は、書籍「IoT開発スタートブック ── ESP32でクラウドにつなげる電子工作をはじめよう!」やAmbientの公式ドキュメントに詳しく書かれていますが、試した内容をメモとして残しておきます。

Githubリポジトリ ESP8266/ESP32用Arduino・Ambientライブラリー にもサンプルが掲載されているのでこちらも参考になります。

センサーは、M5Stick-C ENV III Unitを使います。

ENV III Unit with Temperature Humidity Air Pressure Sensor (SHT30+QMP6988)
ENV III SKU:U001-C Description ENV III is an environmental sensor that integrates SHT30 and QMP6988 internally to detect temperature, humidity, and atmospheric pressure data. SHT30 is a high-precision and low-power digital temperature and humidity sensor, and supports I2C interface (SHT30:0x44 , QMP6988:0x70).QMP6988 is an absolute air pressure sensor specially designed for mobile applications, with high accuracy and stability, suitable for environmental data collection and detection types of projects.Product Features Simple and easy to use High accuracy I2C communication interface HY2.0-4P interface, support platform UIFlow , Arduino 2x LEGO compatible holes Include 1x ENV-III Unit 1x HY2.0-4P Cable Applications Weather station Storage barn environment monitoring Specification Resources Parameter Maximum temperature measurement range -40 ~ 120 ℃ Highest measurement accuracy 0 ~ 60 ℃/±0.2℃ Humidity measurement range/error 10 ~ 90 %RH / ±2% Maximum measured value of air pressure/resolution/error 300 ~ 1100hPa / 0.06Pa / ±3.9Pa Communication protocol I2C: SHT30(0x44), QMP6988(0x70) Working temperature 32°F to 104°F (0°C to 40°C ) Net weight 5g Gross weight 17g Product Size 24.2*32.2*8.1mm Package Size 67*53*12mm Case Material Plastic ( PC ) ENV version scheme comparison ENV I ENV II ENV III DHT12+BMP280 SHT30+BMP280 SHT30+QMP6988 PinMap M5Core(PORT A) GPIO22 GPIO21 5V GND ENV III Unit SCL SDA 5V GND Schematic Related Link Datasheet QMP6988 SHT30 Learn M5stack based PFD (Primary Flight Display) An attempt to create a realtime “Artificial Horizon” on the M5. Matrix Shelly Thermostat: A Serverless Approach A modular WiFi smart thermostat that doesn’t need you to maintain any infrastructure: deploy it everywhere, integrate with everything. M5Stack COM. LoRaWAN Using Arduino IDE M5Stack recently released an updated LoRaWAN module. This tutorial teaches you how to connect it to The Things Network using Arduino IDE. Smart Plant with M5Stack Make your plants smart and monitor water, temperature and humidity! M5StickC with HomeKit Automation Used StickC with ESPHap library to connect to HomeKit Smart Planting System Building a smart planting system using M5Stack to monitor the lights, humidity, temperature, watering your plant automatically. 3 in 1 Sanitiser Dispenser We have devised with an innovation that dispenses hand sanitiser, measures the temperature of user, shows the count of people in vicinity. CovidStop A technology which increases efficiency in signing in or out during peak hour areas when entering the campus while the SafeEntry implies. SEAM [Safe-Entry Access Machine] An automatic system to perform the tasks of Safe Entry. It consist an adjustable Thermometer, RFID / QR Code Check in and Counting. Example Arduino ENV III Unit Test

shop.m5stack.com

No Image


“IoTデータ 可視化サービスAmbientにENV III UNITのデータを送る” の続きを読む

M5Stack ENV III Unit 温湿度気圧センサ (SHT30+QMP6988) の使い方

M5StickC ENV-HAT IIが壊れてしまい[ENV III Unit 温湿度気圧センサー (SHT30+QMP6988)]を買ったので使い方をメモしておきます。

ENV III Unit with Temperature Humidity Air Pressure Sensor (SHT30+QMP6988)
ENV III SKU:U001-C Description ENV III is an environmental sensor that integrates SHT30 and QMP6988 internally to detect temperature, humidity, and atmospheric pressure data. SHT30 is a high-precision and low-power digital temperature and humidity sensor, and supports I2C interface (SHT30:0x44 , QMP6988:0x70).QMP6988 is an absolute air pressure sensor specially designed for mobile applications, with high accuracy and stability, suitable for environmental data collection and detection types of projects.Product Features Simple and easy to use High accuracy I2C communication interface HY2.0-4P interface, support platform UIFlow , Arduino 2x LEGO compatible holes Include 1x ENV-III Unit 1x HY2.0-4P Cable Applications Weather station Storage barn environment monitoring Specification Resources Parameter Maximum temperature measurement range -40 ~ 120 ℃ Highest measurement accuracy 0 ~ 60 ℃/±0.2℃ Humidity measurement range/error 10 ~ 90 %RH / ±2% Maximum measured value of air pressure/resolution/error 300 ~ 1100hPa / 0.06Pa / ±3.9Pa Communication protocol I2C: SHT30(0x44), QMP6988(0x70) Working temperature 32°F to 104°F (0°C to 40°C ) Net weight 5g Gross weight 17g Product Size 24.2*32.2*8.1mm Package Size 67*53*12mm Case Material Plastic ( PC ) ENV version scheme comparison ENV I ENV II ENV III DHT12+BMP280 SHT30+BMP280 SHT30+QMP6988 PinMap M5Core(PORT A) GPIO22 GPIO21 5V GND ENV III Unit SCL SDA 5V GND Schematic Related Link Datasheet QMP6988 SHT30 Learn M5stack based PFD (Primary Flight Display) An attempt to create a realtime “Artificial Horizon” on the M5. Matrix Shelly Thermostat: A Serverless Approach A modular WiFi smart thermostat that doesn’t need you to maintain any infrastructure: deploy it everywhere, integrate with everything. M5Stack COM. LoRaWAN Using Arduino IDE M5Stack recently released an updated LoRaWAN module. This tutorial teaches you how to connect it to The Things Network using Arduino IDE. Smart Plant with M5Stack Make your plants smart and monitor water, temperature and humidity! M5StickC with HomeKit Automation Used StickC with ESPHap library to connect to HomeKit Smart Planting System Building a smart planting system using M5Stack to monitor the lights, humidity, temperature, watering your plant automatically. 3 in 1 Sanitiser Dispenser We have devised with an innovation that dispenses hand sanitiser, measures the temperature of user, shows the count of people in vicinity. CovidStop A technology which increases efficiency in signing in or out during peak hour areas when entering the campus while the SafeEntry implies. SEAM [Safe-Entry Access Machine] An automatic system to perform the tasks of Safe Entry. It consist an adjustable Thermometer, RFID / QR Code Check in and Counting. Example Arduino ENV III Unit Test

shop.m5stack.com

No Image

今回HATじゃなくてUNITの方にした理由としては、M5StackやATOMなどでも使い回したいという理由でUTNIにしてみました。
“M5Stack ENV III Unit 温湿度気圧センサ (SHT30+QMP6988) の使い方” の続きを読む

ESP32で回路を追加せずを使って電源電圧を計測する

電源電圧の計測方法について調べてみたところ、ESP8266であればESP.getAcc関数で電源の電圧を取得できることがわかりましたが、ESP32では使えないことがわかり代替の方法は無いか調べてみました。

結果としては、公式に公開されているAPIはないがrom_phy_get_vdd33関数をWIFIまたはBLEがオンのときに実行すると取得可能という情報を見つけて検証してみたところ、使えなくもなさそうだということがわかりました。

検証の目的としては電池駆動の際にしきい値より小さくなったら通知を送って電池交換を促す用途に使えないかを確認したかったというところです。

今回の検証には、開発ボードESPr Developer32を使用しました。

ESPr® Developer 32 – スイッチサイエンス
Wi-Fi + Bluetoothモジュール、ESP-WROOM-32とUSB-シリアル変換ICを搭載した開発ボードです。別売りのピンソケットを実装すれば、ESPr® Developer用に開発した拡張ボードをESPr Developer 32でもそのままお使いいただけます。

www.switch-science.com

No Image

以下、rom_phy_get_vdd33()の呼び出し方についてと計測した値をambientに送ってグラフ化してみた結果について解説しています。
“ESP32で回路を追加せずを使って電源電圧を計測する” の続きを読む

obniz Board 1Yで自動水やりの屋外対応版を工作してみた

昨年から夏は庭で野菜をプランターで栽培してるので家を空けたときにも心配要らないように、obniz Board 1Yを使って自動水やり装置を作ってみました。

作ってみたものはこんな感じです。

やっていることは定期的にバケツの水をポンプで汲み上げるだけです。

基本的なところはobniz公式ブログの記事「obniz Board 1Yのスリープ機能を使った省電力な水やりデバイス」をベースにし、屋外に設置可能なようにobniz Boardと電池をケースに収めて風雨対策をしています。
また、使用した給水ポンプはobnizのブログで紹介されているものとは別のもので、obniz内臓のモータードライバでは動きませんでした。そこで電池から直に電源を供給するようにMOSFETをobnizで制御して給水ポンプをOn/Offしています。
“obniz Board 1Yで自動水やりの屋外対応版を工作してみた” の続きを読む

obnizでTTLシリアルJPEGカメラでハマって解消したメモ

だいぶ前にAdafruitのJpegカメラを秋月電子通商で購入してobnizで試したんですが「あれ全然撮れないぞ?」となって以来ずっとパーツを眠らせていたところ、先日のIoTLTでの発表資料を拝見させていただいて解決法が判ったので自分でも忘れないうちにメモしておくことにしました。

参考にした資料: ピンのピッチ幅で苦しんだ #obniz や #gwhack の話 #iotlt

パーツは発表の中でも出てきたobnizのパーツライブラリJpegSerialCamで紹介されている製品で、秋月電子通商の小型TTLシリアルJPEGカメラ(NTSCビデオ出力付)から購入できます。
“obnizでTTLシリアルJPEGカメラでハマって解消したメモ” の続きを読む

距離センサー VL53L0X の使い方 (Arduino、ESP32)

スイッチサイエンスで、PololuのVL53L0Xモジュールを購入してArduinoとESP32で試してみたメモです。

PololuのVL53L0Xモジュールのピンアサイン

Pololuのピンホールは7つあります。

シルク 説明
VDD 電源
VIN 主電源 (基本こちらを使う)
GND グランド
SDA I2Cのシリアルデータ
SCL I2Cのシリアルクロック
XSHOT ハードウェアスタンバイ
GP01 ???

“距離センサー VL53L0X の使い方 (Arduino、ESP32)” の続きを読む

Amazon FreeRTOS ESP32-DevKit-CでMQTT Hello World (Mac版)

Amazon FreeRTOSをESP32開発ボードESP32-DevKit-Cにセットアップして、マイコンからMQTTのメッセージを送信し、AWS IoTのコンソール上で確認するHello Worldサンプルを動かしてみたので手順をまとめてみました。

FreeRTOSのセットアップ手順は公式ドキュメントの「Espressif ESP32-DevKitC と ESP-WROVER-KIT の開始方法」を参考にしています。
このドキュメントではESP-IDF v3とESP-IDF v4を利用したセットアップ方法が記載されていますが、今回は「ESP-IDF v4」の手順を選択しました。
“Amazon FreeRTOS ESP32-DevKit-CでMQTT Hello World (Mac版)” の続きを読む

小型のMP3プレーヤーモジュールDFPLayerの使い方

コピペテックで技術書典Vol8向けに書いた「ESP32 と obnizOS で作る IoT 電子工作」で使ったMP3プレーヤーモジュールのDFPlayer Miniの使い方についてまとめてみました。

ピンアサインの確認

こちらは、DFPlayerのデータシートに記載されているピンのラベル付きの写真です。

本記事で使用するピンは以下の通りです。

ピン 用途 備考
VCC 電源電圧 動作電圧は3.2から5.0Vに対応
RX UARTの入力信号端子
TX UARTの出力信号端子
SPK_1 スピーカー端子+ 3W以下
GND グランド
SPK_2 スピーカー端子- 3W以下
IO1 トリガーポート1 短く押すと前の曲、長く押すとボリュームを下げる
IO2 トリガーポート2 短く押すと次の曲、長く押すとボリュームを上げる
BUSY 再生ステータス LOWのときに再生中

“小型のMP3プレーヤーモジュールDFPLayerの使い方” の続きを読む

NeoPixelリングに使えるエフェクト実装例集

NeoPixelリングに使えそうなエフェクトをいろいろと自作してみました。
テープ状のLEDとリング上のLEDで向いているエフェクトがちょっと異なる気もしますが、今回はリング向けです。

サンプルは、Arduino UNOで動作を確認しています。

事前準備

Arduino IDEのセットアップして、ArduinoとNeoPixelリングを接続します。

NeoPixel制御用ライブラリのインストール

ライブラリはAdafruit_NeoPixelを使用します。
以下の手順で追加します。

  1. Arduino IDEのメニューから[ツール] > [ライブラリを管理…]を選択してライブラリマネージャを開きます。
  2. 「NeoPixel」で検索して「Adafruit NeoPixel by Adafruit」をインストールします。

Arduino UNOとNeoPixelリングを接続

以下の配線図に従ってArduino UNOとNeoPixelリングをつなぎます。

対応表

Arduino NeoPixelリング
DIGITAL 6 IN
5V V+
GND GND

Adafruit_NeoPixelの基本的な使い方

Adafruit_NeoPixelの使い方を以下のスケッチ例を使って説明します。

こちらは、GithubのREADMEにも載っている例simpleと同じです。

#include <Adafruit_NeoPixel.h>
#define PIN        6 // 信号用のピンを指定
#define NUMPIXELS 16 // LEDの数を指定

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
#define DELAYVAL 500

void setup() {
  pixels.begin(); // NeoPixel出力ピンの初期化
}

void loop() {
  pixels.clear(); // すべてのLEDの色を0にセット

  for(int i=0; i<NUMPIXELS; i++) {
    pixels.setPixelColor(i, pixels.Color(0, 150, 0));
    pixels.show();
    delay(DELAYVAL);
  }
}

“NeoPixelリングに使えるエフェクト実装例集” の続きを読む