1

我正在做一个带有数字键盘的项目,一个在 nanoFramework 中编程的 ESP32(CoreLibrary 1.9.0 p5,Esp32 1.3.2 p9)。现在我想通过按键之一唤醒控制器。处理矩阵的代码工作正常,按钮响应良好:

var row4 = controller.OpenPin(32);
row4.SetDriveMode(GpioPinDriveMode.Output);
...
var col3 = controller.OpenPin(12);
col3.SetDriveMode(GpioPinDriveMode.InputPullDown);

在睡觉之前,我将驱动模式重新定义为一个引脚为 3.3V:

Sleep.EnableWakeupByPin(Sleep.WakeupGpioPin.Pin32, 1);
col3.SetDriveMode(GpioPinDriveMode.OutputOpenDrainPullUp);
Sleep.StartLightSleep();

所以ESP32按预期进入睡眠状态,但我无法用pin 32唤醒它。

我试过的:

  • 当涉及到 RTC 引脚时,引脚编号似乎有点奇怪。Pin32 似乎是 RTC-Pin9。但WakeupGpioPin-enum 仅包含正常的 GPIO 编号。
  • 尝试交换两者,Pin12 作为 WakeupPin,Pin32 作为 Pullup。
  • 从外部将引脚拉高或拉低 - 无效
  • 根据espressif Docs的说法, “电平”参数EnableWakeupByPin似乎是电压电平和 1 蜂鸣高。但是,我也尝试了 0。
4

1 回答 1

1

引脚编号根据 Espressif 文档。除非应用程序使用,否则您无需在调用 EnableWakeupByPin 之前配置 GPIO 引脚。

我已经对此进行了测试,看起来 Sleep.EnableWakeupByPin() 不起作用。我们将调查原因并修复它。

尝试使用 Sleep.EnableWakeupByMultiPins()。我已经测试过了,这是有效的。

Sleep.EnableWakeupByMultiPins(Sleep.WakeupGpioPin.Pin32, Sleep.WakeupMode.AnyHigh);
于 2020-10-19T19:53:29.963 回答