乐鑫技术交流
直播中

何夏庄

7年用户 958经验值
私信 关注
[问答]

如何在ESP8266 E12 WiFi模块上使用自动调制解调器睡眠?

我想在我的 ESP8266 E12 WiFi 模块上使用自动调制解调器睡眠 (AT SLEEP=2)。如何在站点和服务器端实现它?我目前正在以 500 毫秒的间隔从ESP8266站向 AP 服务器发送一个数据包。我希望在此空闲时间内保持调制解调器睡眠状态(~15 mA 电流消耗)。不幸的是,电流消耗始终约为 ~70 mA。如何使用信标在两个 DtiM 信标间隔内闭合 Wi-Fi 模块电路,以节省电力, 并在下一个 Beacon 到达之前自动唤醒?有没有实施的例子?

回帖(1)

周煌煦

2024-7-16 17:35:28
要在ESP8266 E12 WiFi模块上使用自动调制解调器睡眠,您可以按照以下步骤操作:

1. 首先,确保您的ESP8266模块已正确连接并设置。

2. 使用AT命令设置自动调制解调器睡眠模式。在这种情况下,您希望使用AT SLEEP=2模式。通过串行监视器发送以下命令:

   ```
   AT+SLEEP=2
   ```

   这将使ESP8266进入自动调制解调器睡眠模式。

3. 为了在空闲时间内保持调制解调器睡眠状态,您可以设置一个定时器,以便在发送数据包后等待一段时间。例如,您可以使用以下代码片段:

   ```c
   #include

   const char* ssid = "您的SSID";
   const char* password = "您的密码";

   void setup() {
     Serial.begin(115200);
     WiFi.begin(ssid, password);

     while (WiFi.status() != WL_CONNECTED) {
       delay(500);
       Serial.print(".");
     }

     Serial.println("WiFi connected");  
     Serial.println("IP address: ");
     Serial.println(WiFi.localIP());

     // 设置自动调制解调器睡眠模式
     sendCommand("AT+SLEEP=2");
   }

   void loop() {
     sendPacket();
     delay(500);
     sendCommand("AT+SLEEP");
   }

   void sendPacket() {
     // 发送数据包到AP服务器
   }

   void sendCommand(const char* command) {
     Serial.print("发送命令: ");
     Serial.println(command);
     WiFi.print(command);
     delay(100);
   }
   ```

4. 在此示例中,我们在发送数据包后等待500毫秒,然后发送AT+SLEEP命令以进入睡眠模式。这将使ESP8266在空闲时间内保持低功耗状态。

5. 关于使用信标在两个DTIM信标间隔内闭合Wi-Fi模块电路的问题,这通常由AP(接入点)控制。您可以在AP设置中调整DTIM间隔,以实现更频繁的信标传输。但是,这可能不会直接影响ESP8266的功耗。

6. 请注意,ESP8266在睡眠模式下的功耗仍然可能高于您期望的15mA。这是因为ESP8266在睡眠模式下仍然需要消耗一定的电流来维持其内部电路。要进一步降低功耗,您可能需要考虑使用其他低功耗Wi-Fi模块,如ESP32-C3。

总之,通过使用AT SLEEP=2命令和设置适当的定时器,您可以在ESP8266 E12 WiFi模块上实现自动调制解调器睡眠。然而,要实现更低的功耗,您可能需要考虑使用其他低功耗Wi-Fi模块。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分