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);
Другие вопросы по тегам