py32l020-i2c-m5pm1-config-1.ino
Initialise le bus I2C et configure le circuit de charge M5PM1 pour un courant faible, tout en affichant l'état de la batterie.
Ce code utilise la bibliothèque Wire pour communiquer avec le M5PM1 à l'adresse 0x6E. Il configure d'abord les broches GPIO 21 et 22 pour le SDA/SCL. Il envoie ensuite une commande pour régler le courant de charge. Les registres spécifiques doivent être adaptés selon la datasheet exacte du M5PM1. Une vérification de connexion est effectuée au démarrage.
py32l020-i2c-m5pm1-config-1.ino
#include <Arduino.h>
#include <Wire.h>
// M5PM1 I2C Configuration
#define I2C_SDA_PIN 21
#define I2C_SCL_PIN 22
#define M5PM1_ADDR 0x6E
// Register definitions (Simulated based on typical PMIC structure)
#define REG_CHG_CURRENT 0x02
#define REG_BATT_STATUS 0x01
void setup() {
Serial.begin(115200);
Wire.begin(I2C_SDA_PIN, I2C_SCL_PIN);
Serial.println("M5Stamp Timer Power 2 - I2C Config Test");
// Check communication
Wire.beginTransmission(M5PM1_ADDR);
if (Wire.endTransmission() != 0) {
Serial.println("Error: M5PM1 not found!");
while(1);
}
Serial.println("M5PM1 detected.");
// Set Charge Current to 180mA (Example value 0x00 often maps to lowest setting)
// Note: Specific bitfield depends on exact datasheet of M5PM1
Wire.beginTransmission(M5PM1_ADDR);
Wire.write(REG_CHG_CURRENT);
Wire.write(0x00); // 180mA setting example
Wire.endTransmission();
Serial.println("Charge current set to 180mA.");
}
void loop() {
// Read Battery Status
Wire.beginTransmission(M5PM1_ADDR);
Wire.write(REG_BATT_STATUS);
Wire.endTransmission(false); // Repeated start
Wire.requestFrom(M5PM1_ADDR, 1);
if (Wire.available()) {
uint8_t status = Wire.read();
Serial.print("Battery Status Register: 0x");
Serial.println(status, HEX);
}
delay(2000);
}