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で回路を追加せずを使って電源電圧を計測する” の続きを読む

Laravel PassportでOAuthサーバーを実装、クライアントアプリでAPIアクセスを確認

OAuthサーバーをLaravel Passportで実装する手順について解説します。

仕事では、Laravelでサービスを運用しているわけではないですが、クラウド プラットフォームのOAuthクライアント機能を調べたりするときにOAuthサーバーがわでデバッグしたいときなどに、Laravel Passportは簡単に実装してサーバーを立てられるのでとても便利に使っています。

以下、Laravelプロジェクトを新規に作るところから、PassportでOAuthサーバーを実装し、クライアントアプリからPassportサーバーに認可コードフローでアクセストークンを取得し、それを使ってAPIからユーザ情報を取得するまで、実装して確認してみます。

Laravel Passportとは

Laravel Passportは、Laravelプロジェクト公式のOAuthサーバー実装です。
OAuthサーバーというとざっくりですが、APIへのアクセス認可とアクセストークンを発行を管理するサーバーのことという理解で良いかと思います。

Laravel Passport provides a full OAuth2 server implementation for your Laravel application in a matter of minutes. Passport is built on top of the League OAuth2 server that is maintained by Andy Millington and Simon Hamp.

ドキュメントに記載されていますが、SPAやモバイルアプリの認証とトークン発行への用途の場合は、Laravel Sanctumの仕様を推奨されています。
“Laravel PassportでOAuthサーバーを実装、クライアントアプリでAPIアクセスを確認” の続きを読む

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

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

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

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

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

Apache Cordova Android Push通知の実装と確認手順まとめ

Apache CordovaでPush通知をAndroidで実装してみてのまとめです。

iOS版は以前の記事「Apache CordvaによるPush通知の実装 iOS版」でまとめてみましたが、2015年の時点からは使用するプラグインが変わっています。
また、Apache CordovaでAndroid用の開発環境をセットアップしてAndroidの実機で動作させるまでの手順については前回の記事「MacにApache Cordova Androidプラットフォーム環境構築する」にまとめていますのでこちらも参照ください。

Push通知実装の流れを確認

Push通知の流れは以下のとおりです。

  1. FMCにデバイスを登録
  2. サーバーのプログラムよりメッセージをFMC経由で送信 (Firebase Notification Composerを使用)
  3. メッセージをデバイスで受信
  4. 受信したメッセージで生成した通知をデバイスに表示
    “Apache Cordova Android Push通知の実装と確認手順まとめ” の続きを読む

MacにApache Cordova Android用の開発環境を構築

elchikaに投稿した記事「obniz Board 1Yと距離センサー VL53L0X 使用した鍵閉め忘れ通知アプリ」では、センサーから取得したデータからドアの鍵を開閉状態を表示、また開きっぱなしだったら通知するといった簡単なアプリをPWAで作ってみました。
しかし、PWAではiOS版ではPUSH通知が利用できないことがわかり、ステータスを表示する簡単なUIと通知を受け取るくらいのアプリをさっと作る方法を改めて考えています。

この内容だと、ネイティブで作っても難しくないアプリですが、XCodeはたまにしか使わないとどこに何があるのか調べるのが面倒ですし、iOS/Androidに対応していてVSCodeなどのエディタで開発できるものが自分としては良いです。とすると、2021年7月時点では選択肢は以下の2つくらいでしょうか

あとは、Xamarinなどもありますが最近はだいぶ目にしなくなりました、Cordovaもメンテされ続けるのか不安ですが、MicrosoftとIBMが多少頑張ってそうなのでもう少し大丈夫かもしれません。
“MacにApache Cordova Android用の開発環境を構築” の続きを読む

Firebase Cloud MessagingからPWAにPUSH通知 (Androidのみ)

先日obniz IoTコンテストに参加して「obniz Board 1Yと距離センサー VL53L0X 使用した鍵閉め忘れ通知アプリ」という作品を投稿したのですが、その中でFirebaseを利用してPWAへのPUSH通知を実装しました。
コンテストでは時間が限られていたので、通知をタップしてアプリのページを開くなど実装できなかった機能があったため改めて調べ直してまとめてみました。

ところで、2021年5月現在、PWAでPUSH通知を受けられるのはモバイルだとAndroidのみでiOSは残念ながらできません。iOS向けにPUSH通知をしたい場合はやはりアプリを提供する必要があります。
また、PWAはAndroidとデスクトップのChromeで若干実装が異なっているので注意が必要です。
“Firebase Cloud MessagingからPWAにPUSH通知 (Androidのみ)” の続きを読む

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

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

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

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