我正在使用esp32(从站)和rf24l01模块做无线传感器节点。我的下一步是使我的奴隶进入睡眠模式(也许是深度睡眠)。我可以在项目中使用深度睡眠吗?
他们说
该内存中存储的所有内容都会被清除,无法访问。
那么我所有的void setup()
代码都被清除了吗?还是只是擦掉我的pack0.temp,潮湿,土壤?
我的代码附在下面
struct package0
{
float temperature = 0;
float humidity = 0;
int soil = 0;
};
typedef struct package0 Package0;
Package0 pack0;
/**********************************/
/**************RF24****************/
RF24 radio(25,26);
RF24Network network(radio);
const uint16_t this_node = 01;
const uint16_t master00 = 00;
const unsigned long interval = 3000;
/**********************************/
void setup() {
dht.begin();
radio.begin();
network.begin(90, this_node);
radio.setPALevel(RF24_PA_MIN);
radio.setDataRate(RF24_250KBPS);
}
void loop() {
// put your main code here, to run repeatedly:
network.update();
unsigned long now = millis();
if (now - last_sent >= interval)
{
last_sent = now;
send();
}
}
void send()
{
pack0.humidity = dht.readHumidity();
pack0.temperature = dht.readTemperature();
pack0.soil = map(analogRead(SOILPIN), 0, 4096, 100, 0);//convert to percentage
if (isnan(pack0.humidity) || isnan(pack0.temperature))
{
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
RF24NetworkHeader header(master00);
bool ok = network.write(header, &pack0, sizeof(pack0));
}
答案 0 :(得分:2)
ESP32进入深度睡眠时,它将关闭正在运行您的代码的处理器。内存的内容和处理器的当前状态均丢失。维护内存的内容和CPU状态会消耗大量电源,而深度睡眠的重点是节省尽可能多的电源,因此它将停止为这些设备供电。
因此,当它从深度睡眠中重新启动时,就好像刚通电一样。您的setup()
函数将再次运行,并且需要再次进行任何初始化。
有两种方法可以在整个睡眠周期中保持状态。
很明显,您可以使用EEPROM
或SPIFFS
将数据存储在闪存中。写入闪存的速度很慢,并且耗费大量电量,因此,如果电池电量不足,这并不好。
您还可以将数据存储在实时时钟(RTC)的静态RAM中。该RAM内置于ESP32中,并在深度睡眠期间进行维护。 ESP32掉电或闪烁时,其内容将丢失或清除。
您可以使用RTC_DATA_ATTR
声明一个要驻留在RTC RAM中的变量。例如:
RTC_DATA_ATTR unsigned wakeups;
void setup() {
wakeups++;
Serial.begin(115200);
Serial.printf("%u wakeups\n", wakeups);
// do other stuff and enter deep sleep
}
只有8KB的静态RAM,因此您不能在其中存储大量数据。
您还需要小心使用它。几乎肯定可以肯定的是,在深度睡眠重新启动后,将复杂的C ++对象存储在其中将无法正常工作。存储指向数据的指针(例如指向C字符串的char*
)将不起作用,因为从深度睡眠重启后,指针所指向的数据将丢失。
深度睡眠如何影响连接到ESP32的任何电子设备都很难预测。 ESP32将在深度睡眠期间停止为其GPIO线供电。设备是否保持通电以及它们如何对浮动的GPIO线做出反应取决于设备。如果它们保持供电,则它们可以保持上一个周期的状态。这实际上取决于设备和电路。
This article是一个很好的深度睡眠教程,并提供了更多信息。