From 01aabcfebcb62bfc78b2ba2816a5f858b0597971 Mon Sep 17 00:00:00 2001 From: Mori Naoyuki Date: Mon, 4 Mar 2019 23:22:39 +0900 Subject: [PATCH] =?UTF-8?q?Following=20change=20point=20(M5stack=20#124)?= =?UTF-8?q?=20=E3=83=BBfixed=20ad=20Add=20some=20API=20document.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/api/power.md | 248 +++++++++++++++++++++++++++++++++++++++ docs/en/api/system.md | 73 ++++++++---- docs/ja/api/power.md | 248 +++++++++++++++++++++++++++++++++++++++ docs/ja/api/system.md | 71 ++++++++--- docs/zh_CN/api/power.md | 230 ++++++++++++++++++++++++++++++++++++ docs/zh_CN/api/system.md | 71 ++++++++--- 6 files changed, 881 insertions(+), 60 deletions(-) create mode 100644 docs/en/api/power.md create mode 100644 docs/ja/api/power.md create mode 100644 docs/zh_CN/api/power.md diff --git a/docs/en/api/power.md b/docs/en/api/power.md new file mode 100644 index 00000000..ef3e2de9 --- /dev/null +++ b/docs/en/api/power.md @@ -0,0 +1,248 @@ +# Power + +## setPowerBoostKeepOn() + +**Syntax:** + +bool setPowerBoostKeepOn(bool en); + +**Description:** + +This function sets enable/disable power mode. + +**Definition:** + +```arduino +bool setPowerBoostKeepOn(bool en){ + uint8_t data; + Wire.beginTransmission(IP5306_ADDR); + Wire.write(IP5306_REG_SYS_CTL0); + Wire.endTransmission(); + + if(Wire.requestFrom(IP5306_ADDR, 1)) + { + data = Wire.read(); + + Wire.beginTransmission(IP5306_ADDR); + Wire.write(IP5306_REG_SYS_CTL0); + if (en) Wire.write(data | BOOST_OUT_BIT); + else Wire.write(data &(~BOOST_OUT_BIT)); + Wire.endTransmission(); + return true; + } + return false; +} +#endif +``` + +## setCharge() + +**Syntax:** + +bool setCharge(bool en); + +**Description:** + +This function sets enable/disable charge mode. + +**Definition:** + +```arduino +bool POWER::setCharge(bool en){ + uint8_t data; + Wire.beginTransmission(IP5306_ADDR); + Wire.write(IP5306_REG_SYS_CTL0); + Wire.endTransmission(); + + if(Wire.requestFrom(IP5306_ADDR, 1)) + { + data = Wire.read(); + + Wire.beginTransmission(IP5306_ADDR); + Wire.write(IP5306_REG_SYS_CTL0); + if (en) Wire.write(data | CHARGE_OUT_BIT); + else Wire.write(data &(~CHARGE_OUT_BIT)); + Wire.endTransmission(); + return true; + } + return false; +} +``` + +## isChargeFull() + +**Syntax:** + +bool isChargeFull(bool en); + +**Description:** + +This function check battery level. + +**Definition:** + +```arduino +bool isChargeFull(){ + uint8_t data; + Wire.beginTransmission(IP5306_ADDR); + Wire.write(IP5306_REG_READ1); + Wire.endTransmission(false); + if(Wire.requestFrom(IP5306_ADDR, 1)) + { + data = Wire.read(); + if (data & (1 << CHARGE_FULL_BIT)) return true; + else return false; + } + return false; +} +``` + +## canControl() + +**Syntax:** + +bool canControl(); + +**Description:** + +This function checks the existence of the battery controller + +**Definition:** + +```arduino +bool canControl(){ + uint8_t data; + Wire.beginTransmission(IP5306_ADDR); + Wire.write(IP5306_REG_READ0); + return(Wire.endTransmission()==0); +} +``` + +## isCharging() + +**Syntax:** + +bool isCharging(){ + +**Description:** + +This function checks the state of the charge + +**Definition:** + +```arduino +bool canControl(){ + uint8_t data; + Wire.beginTransmission(IP5306_ADDR); + Wire.write(IP5306_REG_READ0); + return(Wire.endTransmission()==0); +} +``` + + +## setWakeupButton() + +**Syntax:** + +void setWakeupButton(uint8_t button){ + +**Description:** + +This function set the port to exit sleep + +**Definition:** + +```arduino +void setWakeupButton(uint8_t button) { + _wakeupPin = button; +} +``` + +## reset() + +**Syntax:** + +void reset() + +**Description:** + +This function reset the CPU. + +**Definition:** + +```arduino +void POWER::reset() { + esp_restart(); +} +``` + + +## batteryMode() + +**Syntax:** + +bool batteryMode(bool en) + +**Description:** + +This function controls battery supply + +**Definition:** + +```arduino +bool batteryMode(bool en){ + + uint8_t data; + Wire.beginTransmission(IP5306_ADDR); + Wire.write(IP5306_REG_READ1); + Wire.endTransmission(); + + if(Wire.requestFrom(IP5306_ADDR, 1)) + { + data = Wire.read(); + + Wire.beginTransmission(IP5306_ADDR); + Wire.write(IP5306_REG_READ1); + if (en) Wire.write(data | BOOST_ENABLE_BIT); + else Wire.write(data &(~BOOST_ENABLE_BIT)); + Wire.endTransmission(); + return true; + } + return false; +} +``` + + +## deepSleep() + +**Syntax:** + +void deepSleep() + +**Description:** + +This function shifts to deep sleep mode + +**Definition:** + +```arduino +void deepSleep(){ + + #ifdef M5STACK_FIRE + // Keep power keep boost on + setPowerBoostKeepOn(true); + #endif + + // power off the Lcd + M5.Lcd.setBrightness(0); + M5.Lcd.sleep(); + + // ESP32 into deep sleep + esp_sleep_enable_ext0_wakeup((gpio_num_t)_wakeupPin , LOW); + + while(digitalRead(_wakeupPin) == LOW) { + delay(10); + } + esp_deep_sleep_start(); +} +``` \ No newline at end of file diff --git a/docs/en/api/system.md b/docs/en/api/system.md index ac79c7ca..4c8fc497 100644 --- a/docs/en/api/system.md +++ b/docs/en/api/system.md @@ -4,42 +4,67 @@ **Syntax:** -void begin(bool LCDEnable=true, bool SDEnable=true, bool SerialEnable=true); +void begin(bool LCDEnable=true, bool SDEnable=true, bool SerialEnable=true,bool I2CEnable=false); **Description:** -This function sets enable/disable LCD, TF Card and Serial port. +This function sets enable/disable LCD, TF Card,Serial port and I2C port. **Definition:** ```arduino -void M5Stack::begin(bool LCDEnable, bool SDEnable, bool SerialEnable) { - if (isInited) return; - else isInited = true; - if (SerialEnable) { - Serial.begin(115200); - Serial.flush(); - delay(50); - Serial.print("M5Stack initializing..."); - } - if (LCDEnable) { - Lcd.begin(); - } - if (SDEnable) { - SD.begin(TFCARD_CS_PIN, SPI, 40000000); - } - setWakeupButton(BUTTON_A_PIN); +void M5Stack::begin(bool LCDEnable, bool SDEnable, bool SerialEnable,bool I2CEnable) { + + // Correct init once + if (isInited) return; + else isInited = true; + + // UART + if (SerialEnable) { + Serial.begin(115200); + Serial.flush(); + delay(50); + Serial.print("M5Stack initializing..."); + } + + // LCD INIT + if (LCDEnable) { + Lcd.begin(); + } + + // TF Card + if (SDEnable) { + SD.begin(TFCARD_CS_PIN, SPI, 40000000); + } + + // TONE + // Speaker.begin(); + + // Set wakeup button + Power.setWakeupButton(BUTTON_A_PIN); + + // I2C init + if(I2CEnable) + { + Wire.begin(21, 22); + } + + if (SerialEnable) { + Serial.println("OK"); + } } -``` -**Example:** +void M5Stack::update() { -```arduino -#include + //Button update + BtnA.read(); + BtnB.read(); + BtnC.read(); -void setup() { - M5.begin(); + //Speaker update + Speaker.update(); } + ``` ## update() diff --git a/docs/ja/api/power.md b/docs/ja/api/power.md new file mode 100644 index 00000000..f9949d96 --- /dev/null +++ b/docs/ja/api/power.md @@ -0,0 +1,248 @@ +# Power + +## setPowerBoostKeepOn() + +**構文:** + +bool setPowerBoostKeepOn(bool en); + +**説明:** + +電源供給状態を設定します。 + +**定義:** + +```arduino +bool setPowerBoostKeepOn(bool en){ + uint8_t data; + Wire.beginTransmission(IP5306_ADDR); + Wire.write(IP5306_REG_SYS_CTL0); + Wire.endTransmission(); + + if(Wire.requestFrom(IP5306_ADDR, 1)) + { + data = Wire.read(); + + Wire.beginTransmission(IP5306_ADDR); + Wire.write(IP5306_REG_SYS_CTL0); + if (en) Wire.write(data | BOOST_OUT_BIT); + else Wire.write(data &(~BOOST_OUT_BIT)); + Wire.endTransmission(); + return true; + } + return false; +} +#endif +``` + +## setCharge() + +**構文:** + +bool setCharge(bool en); + +**説明:** + +充電状態を設定します。 + +**定義:** + +```arduino +bool POWER::setCharge(bool en){ + uint8_t data; + Wire.beginTransmission(IP5306_ADDR); + Wire.write(IP5306_REG_SYS_CTL0); + Wire.endTransmission(); + + if(Wire.requestFrom(IP5306_ADDR, 1)) + { + data = Wire.read(); + + Wire.beginTransmission(IP5306_ADDR); + Wire.write(IP5306_REG_SYS_CTL0); + if (en) Wire.write(data | CHARGE_OUT_BIT); + else Wire.write(data &(~CHARGE_OUT_BIT)); + Wire.endTransmission(); + return true; + } + return false; +} +``` + +## isChargeFull() + +**構文:** + +bool isChargeFull(bool en); + +**説明:** + +満充電かを判定します + +**定義:** + +```arduino +bool isChargeFull(){ + uint8_t data; + Wire.beginTransmission(IP5306_ADDR); + Wire.write(IP5306_REG_READ1); + Wire.endTransmission(false); + if(Wire.requestFrom(IP5306_ADDR, 1)) + { + data = Wire.read(); + if (data & (1 << CHARGE_FULL_BIT)) return true; + else return false; + } + return false; +} +``` + +## canControl() + +**構文:** + +bool canControl(); + +**説明:** + +電源コントローラが使用可能かを判断します + +**定義:** + +```arduino +bool canControl(){ + uint8_t data; + Wire.beginTransmission(IP5306_ADDR); + Wire.write(IP5306_REG_READ0); + return(Wire.endTransmission()==0); +} +``` + +## isCharging() + +**構文:** + +bool isCharging(){ + +**説明:** + +充電中かを返答します + +**定義:** + +```arduino +bool canControl(){ + uint8_t data; + Wire.beginTransmission(IP5306_ADDR); + Wire.write(IP5306_REG_READ0); + return(Wire.endTransmission()==0); +} +``` + + +## setWakeupButton() + +**構文:** + +void setWakeupButton(uint8_t button){ + +**説明:** + +スリープ復帰信号ポートを設定します + +**定義:** + +```arduino +void setWakeupButton(uint8_t button) { + _wakeupPin = button; +} +``` + +## reset() + +**構文:** + +void reset() + +**説明:** + +CPUをリセットします + +**定義:** + +```arduino +void POWER::reset() { + esp_restart(); +} +``` + + +## batteryMode() + +**構文:** + +bool batteryMode(bool en) + +**説明:** + +バッテリーの供給状態を設定します + +**定義:** + +```arduino +bool batteryMode(bool en){ + + uint8_t data; + Wire.beginTransmission(IP5306_ADDR); + Wire.write(IP5306_REG_READ1); + Wire.endTransmission(); + + if(Wire.requestFrom(IP5306_ADDR, 1)) + { + data = Wire.read(); + + Wire.beginTransmission(IP5306_ADDR); + Wire.write(IP5306_REG_READ1); + if (en) Wire.write(data | BOOST_ENABLE_BIT); + else Wire.write(data &(~BOOST_ENABLE_BIT)); + Wire.endTransmission(); + return true; + } + return false; +} +``` + + +## deepSleep() + +**構文:** + +void deepSleep() + +**説明:** + +省エネモードに移行します + +**定義:** + +```arduino +void deepSleep(){ + + #ifdef M5STACK_FIRE + // Keep power keep boost on + setPowerBoostKeepOn(true); + #endif + + // power off the Lcd + M5.Lcd.setBrightness(0); + M5.Lcd.sleep(); + + // ESP32 into deep sleep + esp_sleep_enable_ext0_wakeup((gpio_num_t)_wakeupPin , LOW); + + while(digitalRead(_wakeupPin) == LOW) { + delay(10); + } + esp_deep_sleep_start(); +} +``` \ No newline at end of file diff --git a/docs/ja/api/system.md b/docs/ja/api/system.md index 4dbe2741..b2ee7798 100644 --- a/docs/ja/api/system.md +++ b/docs/ja/api/system.md @@ -4,32 +4,67 @@ **説明:** -LCD、TFカード、シリアルポートの有効化/無効化を設定します。 +LCD、TFカード、シリアルポート、I2Cの有効化/無効化を設定します。 **構文:** -void begin(bool LCDEnable=true, bool SDEnable=true, bool SerialEnable=true); +void begin(bool LCDEnable=true, bool SDEnable=true, bool SerialEnable=true,bool I2CEnable=false); **定義:** ```arduino -void M5Stack::begin(bool LCDEnable, bool SDEnable, bool SerialEnable) { - if (isInited) return; - else isInited = true; - if (SerialEnable) { - Serial.begin(115200); - Serial.flush(); - delay(50); - Serial.print("M5Stack initializing..."); - } - if (LCDEnable) { - Lcd.begin(); - } - if (SDEnable) { - SD.begin(TFCARD_CS_PIN, SPI, 40000000); - } - setWakeupButton(BUTTON_A_PIN); +void M5Stack::begin(bool LCDEnable, bool SDEnable, bool SerialEnable,bool I2CEnable) { + + // Correct init once + if (isInited) return; + else isInited = true; + + // UART + if (SerialEnable) { + Serial.begin(115200); + Serial.flush(); + delay(50); + Serial.print("M5Stack initializing..."); + } + + // LCD INIT + if (LCDEnable) { + Lcd.begin(); + } + + // TF Card + if (SDEnable) { + SD.begin(TFCARD_CS_PIN, SPI, 40000000); + } + + // TONE + // Speaker.begin(); + + // Set wakeup button + Power.setWakeupButton(BUTTON_A_PIN); + + // I2C init + if(I2CEnable) + { + Wire.begin(21, 22); + } + + if (SerialEnable) { + Serial.println("OK"); + } } + +void M5Stack::update() { + + //Button update + BtnA.read(); + BtnB.read(); + BtnC.read(); + + //Speaker update + Speaker.update(); +} + ``` **使用例:** diff --git a/docs/zh_CN/api/power.md b/docs/zh_CN/api/power.md new file mode 100644 index 00000000..3b1e5f26 --- /dev/null +++ b/docs/zh_CN/api/power.md @@ -0,0 +1,230 @@ +# Power + +## setPowerBoostKeepOn() + +**函数原型:** + +bool setPowerBoostKeepOn(bool en); + +**功能:BOOST输出常开功能** + +**函数实现:** + +```arduino +bool setPowerBoostKeepOn(bool en){ + uint8_t data; + Wire.beginTransmission(IP5306_ADDR); + Wire.write(IP5306_REG_SYS_CTL0); + Wire.endTransmission(); + + if(Wire.requestFrom(IP5306_ADDR, 1)) + { + data = Wire.read(); + + Wire.beginTransmission(IP5306_ADDR); + Wire.write(IP5306_REG_SYS_CTL0); + if (en) Wire.write(data | BOOST_OUT_BIT); + else Wire.write(data &(~BOOST_OUT_BIT)); + Wire.endTransmission(); + return true; + } + return false; +} +#endif +``` + +## setCharge() + +**函数原型:** + +bool setCharge(bool en); + +**功能:设置充电状态** + +**函数实现:** + +```arduino +bool POWER::setCharge(bool en){ + uint8_t data; + Wire.beginTransmission(IP5306_ADDR); + Wire.write(IP5306_REG_SYS_CTL0); + Wire.endTransmission(); + + if(Wire.requestFrom(IP5306_ADDR, 1)) + { + data = Wire.read(); + + Wire.beginTransmission(IP5306_ADDR); + Wire.write(IP5306_REG_SYS_CTL0); + if (en) Wire.write(data | CHARGE_OUT_BIT); + else Wire.write(data &(~CHARGE_OUT_BIT)); + Wire.endTransmission(); + return true; + } + return false; +} +``` + +## isChargeFull() + +**函数原型:** + +bool isChargeFull(bool en); + +**功能:确认完全充电** + +**函数实现:** + +```arduino +bool isChargeFull(){ + uint8_t data; + Wire.beginTransmission(IP5306_ADDR); + Wire.write(IP5306_REG_READ1); + Wire.endTransmission(false); + if(Wire.requestFrom(IP5306_ADDR, 1)) + { + data = Wire.read(); + if (data & (1 << CHARGE_FULL_BIT)) return true; + else return false; + } + return false; +} +``` + +## canControl() + +**函数原型:** + +bool canControl(); + +**功能:确认可以使用电源控制器** + +**函数实现:** + +```arduino +bool canControl(){ + uint8_t data; + Wire.beginTransmission(IP5306_ADDR); + Wire.write(IP5306_REG_READ0); + return(Wire.endTransmission()==0); +} +``` + +## isCharging() + +**函数原型:** + +bool isCharging(){ + +**功能:确认是否正在充电** + +**函数实现:** + +```arduino +bool canControl(){ + uint8_t data; + Wire.beginTransmission(IP5306_ADDR); + Wire.write(IP5306_REG_READ0); + return(Wire.endTransmission()==0); +} +``` + + +## setWakeupButton() + +**函数原型:** + +void setWakeupButton(uint8_t button){ + +**功能:设置睡眠返回端口** + +**函数实现:** + +```arduino +void setWakeupButton(uint8_t button) { + _wakeupPin = button; +} +``` + +## reset() + +**函数原型:** + +void reset() + +**功能:执行CPU重置** + +**函数实现:** + +```arduino +void POWER::reset() { + esp_restart(); +} +``` + + +## batteryMode() + +**函数原型:** + +bool batteryMode(bool en) + +**功能:设置电池供电状态** + +**函数实现:** + +```arduino +bool batteryMode(bool en){ + + uint8_t data; + Wire.beginTransmission(IP5306_ADDR); + Wire.write(IP5306_REG_READ1); + Wire.endTransmission(); + + if(Wire.requestFrom(IP5306_ADDR, 1)) + { + data = Wire.read(); + + Wire.beginTransmission(IP5306_ADDR); + Wire.write(IP5306_REG_READ1); + if (en) Wire.write(data | BOOST_ENABLE_BIT); + else Wire.write(data &(~BOOST_ENABLE_BIT)); + Wire.endTransmission(); + return true; + } + return false; +} +``` + + +## deepSleep() + +**函数原型:** + +void deepSleep() + +**功能:进入 deep sleep 状态** + +**函数实现:** + +```arduino +void deepSleep(){ + + #ifdef M5STACK_FIRE + // Keep power keep boost on + setPowerBoostKeepOn(true); + #endif + + // power off the Lcd + M5.Lcd.setBrightness(0); + M5.Lcd.sleep(); + + // ESP32 into deep sleep + esp_sleep_enable_ext0_wakeup((gpio_num_t)_wakeupPin , LOW); + + while(digitalRead(_wakeupPin) == LOW) { + delay(10); + } + esp_deep_sleep_start(); +} +``` \ No newline at end of file diff --git a/docs/zh_CN/api/system.md b/docs/zh_CN/api/system.md index d3f1547c..08d95e83 100644 --- a/docs/zh_CN/api/system.md +++ b/docs/zh_CN/api/system.md @@ -4,31 +4,66 @@ **函数原型:** -void begin(bool LCDEnable=true, bool SDEnable=true, bool SerialEnable=true); +void begin(bool LCDEnable=true, bool SDEnable=true, bool SerialEnable=true,bool I2CEnable=false); -**功能:清串口缓冲区,设置串口波特率为 115200;初始化 LCD;初始化 SD 卡;设置按键 A 是睡眠唤醒按键。** +**功能:清串口缓冲区,设置串口波特率为 115200;初始化 LCD;初始化 SD 卡;初始化 I2C;设置按键 A 是睡眠唤醒按键。** **函数实现** ```arduino -void M5Stack::begin(bool LCDEnable, bool SDEnable, bool SerialEnable) { - if (isInited) return; - else isInited = true; - if (SerialEnable) { - Serial.begin(115200); - Serial.flush(); - delay(50); - Serial.print("M5Stack initializing..."); - } - if (LCDEnable) { - Lcd.begin(); - } - if (SDEnable) { - SD.begin(TFCARD_CS_PIN, SPI, 40000000); - } - setWakeupButton(BUTTON_A_PIN); +void M5Stack::begin(bool LCDEnable, bool SDEnable, bool SerialEnable,bool I2CEnable) { + + // Correct init once + if (isInited) return; + else isInited = true; + + // UART + if (SerialEnable) { + Serial.begin(115200); + Serial.flush(); + delay(50); + Serial.print("M5Stack initializing..."); + } + + // LCD INIT + if (LCDEnable) { + Lcd.begin(); + } + + // TF Card + if (SDEnable) { + SD.begin(TFCARD_CS_PIN, SPI, 40000000); + } + + // TONE + // Speaker.begin(); + + // Set wakeup button + Power.setWakeupButton(BUTTON_A_PIN); + + // I2C init + if(I2CEnable) + { + Wire.begin(21, 22); + } + + if (SerialEnable) { + Serial.println("OK"); + } } + +void M5Stack::update() { + + //Button update + BtnA.read(); + BtnB.read(); + BtnC.read(); + + //Speaker update + Speaker.update(); +} + ``` **例程**