乐鑫技术交流
直播中

云中云

8年用户 921经验值
私信 关注
[问答]

如何确保GPIO即使在重置ESP8266期间仍保持在给定状态的信息?

你好
我希望这是发布此查询的正确位置。

我正在寻找有关如何确保GPIO即使在重置ESP8266期间仍保持在给定状态的信息

硬件:nodeMCU V1.0 上的 ESP-12E。通过Arduino IDE编程

D7 GPIO13 引脚通过 1k 电阻连接到 NPN 晶体管 (2N2222) 基极。
集电极通过白色 LED 传输至 3.3V
发射器接地。
D5 GPIO14 pin is grounded => the LED if off when in the loop() of the sketch.


目前,当 ESP 退出深度睡眠模式并重新启动时,LED 会亮一会儿。一旦草图进入 setup(),它当然会按照编码的方式关闭。
我想避免这种情况并在复位过程中强制 GPIO13 变为低电平。

我在 Expressif 数据表中阅读了以下文本:

对于低功耗操作,还可以将 GPIO 设置为保持其状态。例如,当芯片断电时,所有输出使能信号均可设置为保持低电平。

第 4.1 章第 13 页 -ESP8266EX 数据表 v5.7

我搜索了利用此漏洞的方法,但找不到任何信息。
是否可以通过在库中实现的命令来控制这种行为?哪一个?
还有其他线索吗?

输入
GPIO14 - nodeMCU 上的 D5
#define PIN_PIR 14


输出
//  GPIO13 - D7 on nodeMCU
#define LED_TOP     13

int Led                 = LED_TOP;
int pirState;


无效设置() {
  
  pinMode(Led, OUTPUT);
  digitalWrite(Led, LOW);
  pinMode(PIN_PIR, INPUT);

}

void loop() {
  
  pirState = digitalRead(PIN_PIR);
  if (pirState == 1) {
    digitalWrite(Led, HIGH);
  }
  else {
    digitalWrite(Led, LOW);   
  }

  if (millis() > 5000) {
    digitalWrite(Led, LOW);
    ESP.deepSleep(5000000, WAKE_RF_DEFAULT);
    delay(15);
  }
}

回帖(1)

吴凡

2024-7-10 17:49:44
要确保GPIO在ESP8266重置期间保持给定状态,您可以使用以下方法:

1. 使用外部上拉或下拉电阻:在GPIO引脚上添加外部上拉或下拉电阻,以确保在重置期间引脚保持所需的状态。在您的情况下,您可以在GPIO13上添加一个上拉电阻(例如10kΩ),以确保在重置期间引脚保持高电平。

2. 使用外部存储器:您可以使用外部存储器(如EEPROM)来存储GPIO状态,并在设备启动时读取该状态。这样,您可以在重置期间保持GPIO状态,并在设备启动时恢复该状态。

3. 使用硬件看门狗:您可以使用硬件看门狗来检测设备是否已经重置,并在这种情况下保持GPIO状态。但是,这种方法可能需要额外的硬件和编程。

4. 使用内部上拉或下拉电阻:ESP8266具有内部上拉和下拉电阻。您可以通过设置GPIO配置寄存器来启用内部上拉或下拉电阻。例如,要启用GPIO13的内部上拉电阻,您可以使用以下代码:

```cpp
pinMode(D7, INPUT_PULLUP);
```

这将确保GPIO13在重置期间保持高电平。

5. 修改启动代码:您可以修改设备的启动代码,以便在启动时立即设置GPIO状态。这样,您可以确保在设备启动时立即恢复所需的GPIO状态。

在您的情况下,我建议尝试使用外部上拉电阻或内部上拉电阻,因为这些方法相对简单且不需要额外的硬件。如果您需要更可靠的解决方案,可以考虑使用外部存储器或硬件看门狗。
举报

更多回帖

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