ESP32S31.14寸TFT 低功耗
三种功耗模式
由于 ESP32 的多种睡眠模式,该开发板可用于低功耗。乐鑫芯片有三种基本工作状态:正常、浅度睡眠和深度睡眠。
正常
正常:您可以按照您的喜好使用芯片并运行代码 - 连接 WiFi、读取传感器等。
浅度睡眠
浅度睡眠:有点像“冬眠”——功耗极低,WiFi 会断开,但内部时钟和内存会保留。这意味着您可以根据需要在代码中间从上次中断的地方唤醒。您仍然需要重新初始化所有断开连接的外部硬件和 WiFi,但这通常比从深度睡眠中唤醒要快
深度睡眠
深度睡眠:最低功耗,但代价是所有内存和状态都会丢失 - 唯一正在运行的是可以唤醒芯片的实时时钟。当被唤醒时,芯片就像被物理重置一样启动——从代码的开头开始。如果您想每次都有一个新的开始,这会很有帮助
一个粗略的计算:
- 正常功率:100mA+ 可以根据需要提供功率,并在 WiFi 连接期间出现尖峰。
- 浅睡眠:2mA(假设所有外部硬件均已断电)
- 深度睡眠:100uA(假设所有外部硬件均已断电)
开启低功耗
ESP32-S3 1.14寸 TFT 上有两个电源引脚:TFT_I2C_POWER(1.14寸TFT显示屏)、 和N EOPIXEL_POWER(RGB灯)。
在 CircuitPython 和 Arduino 中,默认情况下启用两个电源引脚,因此如果需要,您必须在代码中手动禁用它们以达到较低功耗模式。
这是我们用于所有主板的通用代码,其中包含用于启用和禁用所有外部供电元件的宏定义部分。例如,如果有 NeoPixels、I2C 端口、TFT 等的电源引脚……我们会在进入浅睡眠或深度睡眠之前将其关闭!这将最大限度地减少电力使用。
注意
确保将代码从 Arduino IDE 上传到 ESP32-S3 后按下重置按钮。
开启低功耗代码
// SPDX-FileCopyrightText: 2022 Limor Fried for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#include <Adafruit_NeoPixel.h>
// While we wait for Feather ESP32 V2 to get added to the Espressif BSP,
// we have to select PICO D4 and UNCOMMENT this line!
//#define ADAFRUIT_FEATHER_ESP32_V2
// then these pins will be defined for us
#if defined(ADAFRUIT_FEATHER_ESP32_V2)
#define PIN_NEOPIXEL 0
#define NEOPIXEL_I2C_POWER 2
#endif
#if defined(PIN_NEOPIXEL)
Adafruit_NeoPixel pixel(1, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800);
#endif
void setup() {
Serial.begin(115200);
// Turn on any internal power switches for TFT, NeoPixels, I2C, etc!
enableInternalPower();
}
void loop() {
LEDon();
delay(1000);
disableInternalPower();
LEDoff();
esp_sleep_enable_timer_wakeup(1000000); // 1 sec
esp_light_sleep_start();
// we'll wake from light sleep here
// wake up 1 second later and then go into deep sleep
esp_sleep_enable_timer_wakeup(1000000); // 1 sec
esp_deep_sleep_start();
// we never reach here
}
void LEDon() {
#if defined(PIN_NEOPIXEL)
pixel.begin(); // INITIALIZE NeoPixel
pixel.setBrightness(20); // not so bright
pixel.setPixelColor(0, 0xFFFFFF);
pixel.show();
#endif
}
void LEDoff() {
#if defined(PIN_NEOPIXEL)
pixel.setPixelColor(0, 0x0);
pixel.show();
#endif
}
void enableInternalPower() {
#if defined(NEOPIXEL_POWER)
pinMode(NEOPIXEL_POWER, OUTPUT);
digitalWrite(NEOPIXEL_POWER, HIGH);
#endif
#if defined(NEOPIXEL_I2C_POWER)
pinMode(NEOPIXEL_I2C_POWER, OUTPUT);
digitalWrite(NEOPIXEL_I2C_POWER, HIGH);
#endif
#if defined(ARDUINO_ADAFRUIT_FEATHER_ESP32S2)
// turn on the I2C power by setting pin to opposite of 'rest state'
pinMode(PIN_I2C_POWER, INPUT);
delay(1);
bool polarity = digitalRead(PIN_I2C_POWER);
pinMode(PIN_I2C_POWER, OUTPUT);
digitalWrite(PIN_I2C_POWER, !polarity);
pinMode(NEOPIXEL_POWER, OUTPUT);
digitalWrite(NEOPIXEL_POWER, HIGH);
#endif
}
void disableInternalPower() {
#if defined(NEOPIXEL_POWER)
pinMode(NEOPIXEL_POWER, OUTPUT);
digitalWrite(NEOPIXEL_POWER, LOW);
#endif
#if defined(NEOPIXEL_I2C_POWER)
pinMode(NEOPIXEL_I2C_POWER, OUTPUT);
digitalWrite(NEOPIXEL_I2C_POWER, LOW);
#endif
#if defined(ARDUINO_ADAFRUIT_FEATHER_ESP32S2)
// turn on the I2C power by setting pin to rest state (off)
pinMode(PIN_I2C_POWER, INPUT);
pinMode(NEOPIXEL_POWER, OUTPUT);
digitalWrite(NEOPIXEL_POWER, LOW);
#endif
}
监控视图如下图所示
大脉冲是正常模式,您可以看到 ESP32 启动,加载代码,然后暂停 1 秒。然后大幅下降一秒进入浅睡眠,最后再停顿一秒进入深度睡眠。
ESP32-S3 1.14 TFT的功耗
下图显示了 ESP32-S3 TFT Feather 在正常功耗模式、浅度睡眠模式和深度睡眠模式下的功耗。
正常电源模式
正常运行(无 WiFi)时的功耗为 40mA。
浅睡眠模式
轻度睡眠模式下的功耗为 2mA。
深度睡眠模式
深度睡眠模式下的功耗约为 70uA。