出典1:M5StickCのバッテリー管理
 内蔵I2Cの接続デバイス、まずは電源管理用のAXP192から
 中国語のデータシートしかなく、出典1では必要箇所を翻訳しまとめてあり、とても助かった。
 ただ、中国語のデータシートを翻訳する時代がくるとはビックリ。 自分が知らないだけでこの分野ではもはや当たり前のことなのだろうか。
 失われた10年、20年という言葉があるが、技術の分野でもこの表現があたっているとしたら。 安易に中国や東南アジアに生産拠点を移したツケが廻ってきた結果がこれかも、考え過ぎか。

バッテリー電源とバッテリーレベル

main.cpp
#include <M5Core2.h>
AXP192 power;
void setup(){
  M5.begin();
  M5.Lcd.setTextSize(2);
}
void loop(){
  M5.Lcd.printf("%3.4f V %3.1f %%\n",power.GetBatVoltage(),power.GetBatteryLevel());
  delay(2000);
}
AXP192.cpp
float AXP192::GetBatVoltage()
{
    float ADCLSB = 1.1 / 1000.0; //Battery Voltage 000H:0mV step:1.1mV	FFFH:4.5045V
    uint16_t ReData = Read12Bit(0x78); //ADCデータの上位8bit、下位4bit合わせて12bitを読む。
    return ReData * ADCLSB;//12bitデータ×1.1 / 1000.0で電池電圧
}

// Get current battery level 
float AXP192::GetBatteryLevel(void)
{
    const float batVoltage = GetBatVoltage();
    const float batPercentage = 
        (batVoltage < 3.248088) //なぜこういう式になるのか全くわからない。
        ? (0) 
        : (batVoltage - 3.120712) * 100;       
    return (batPercentage <= 100) ? batPercentage : 100;    
}