nanoFramework ESP32 Не просыпается после сна с помощью клавиатуры
Я делаю проект с цифровой клавиатурой, ESP32, запрограммированным в nanoFramework (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,3 В:
Sleep.EnableWakeupByPin(Sleep.WakeupGpioPin.Pin32, 1);
col3.SetDriveMode(GpioPinDriveMode.OutputOpenDrainPullUp);
Sleep.StartLightSleep();
Итак, ESP32 переходит в спящий режим, как и ожидалось, но я не могу его разбудить с помощью контакта 32.
Что я пробовал:
- Нумерация выводов кажется немного странной, когда речь идет о выводах RTC. Pin32 кажется RTC-Pin9. Но
WakeupGpioPin
-enum содержит только обычные номера GPIO. - Пытался поменять местами два, Pin12 как WakeupPin и Pin32 как Pullup.
- Вытягивание штифта снаружи вверх или вниз - никакого эффекта
- Параметр "уровень" в
EnableWakeupByPin
в соответствии с документами espressif, похоже, это уровень напряжения, а 1 - ВЫСОКИЙ. Однако я также пробовал 0.
1 ответ
Нумерация контактов указана в документации Espressif. Вам не нужно настраивать контакты GPIO перед вызовом EnableWakeupByPin, если они не используются приложением.
Я протестировал это, и похоже, что Sleep.EnableWakeupByPin() не работает. Мы рассмотрим причину и исправим ее.
Попробуйте использовать Sleep.EnableWakeupByMultiPins(). Я протестировал, и это работает.
Sleep.EnableWakeupByMultiPins(Sleep.WakeupGpioPin.Pin32, Sleep.WakeupMode.AnyHigh);