ESP32: Randoms прерывает GPIO без изменения ввода - PullRequest
0 голосов
/ 05 августа 2020

Сценарий:

  • Китайский ESP32 Devkit C.
  • Micro python 1.12.
  • GPIO21 подключен к кнопке.

введите описание изображения здесь

Это main.py (boot.py пуст):

import time
import machine

def kill(pin):
    pin.irq(handler=None)
    if pin.value() == 0:
        print("Button pressed")
    else:
        print("Empty interrupt", pin)

print("Test Interrupt")    
pin = machine.Pin(21, machine.Pin.IN, machine.Pin.PULL_UP)
pin.irq(handler=kill, trigger=machine.Pin.IRQ_FALLING)
while True:
    time.sleep(1)

Эта программа ничего не делает, пока не будет нажата кнопка, но даже пока никто не касается кнопки, функция kill по-прежнему вызывается в случайное время, как показано здесь:

MPY: soft reboot
Test Interrupt
Empty interrupt Pin(21)
Empty interrupt Pin(21)
Empty interrupt Pin(21)
Empty interrupt Pin(21)
Empty interrupt Pin(21)
Empty interrupt Pin(21)
Empty interrupt Pin(21)
Empty interrupt Pin(21)
Empty interrupt Pin(21)

(все сообщения «пустое прерывание» печатаются сразу).

Функция kill - это вызывается только с задним фронтом сигнала входного контакта, но когда мы читаем контакт, он все еще ВЫСОКИЙ.

Вопрос: Почему у меня возникает прерывание, когда входной контакт не меняет состояние? Я предполагаю, что «спадающий фронт» означает «теперь вывод НИЗКОГО».

Примечания:

  • Я запустил ОС c с падающим триггером на выводе 3,3 В, чтобы выбросить возникла проблема с питанием.
  • В противном случае кнопка работает должным образом.
...