首页 > 解决方案 > 使用 ESP32 和 Mongoose OS 检测按钮按下/GPIO 下拉

问题描述

对于 ESP32,在 Mongoose OS 下,我正在尝试编写一些代码来检测按钮是否被按下(GPIO 引脚被拉到 GND)。我写了下面的代码,但它不断打印按钮被按下,所以它认为按钮总是被按下,除非我真的按下它。当我按住它时,输出停止。该按钮连接在 GPIO 引脚和 GND 之间,没有上拉电阻,因为有内部上拉。我想知道我的代码是否错误,并感谢您的意见,谢谢。

我在下面粘贴了相关代码:

// GPIO 36
#define BTN_MOB 36

#ifdef BTN_MOB
mgos_gpio_set_mode(BTN_MOB, MGOS_GPIO_MODE_INPUT);
#endif

static void button_cb(int pin, void *pParam)
{
  if(pin == BTN_MOB)
    LOG(LL_INFO, ("***** BUTTON PRESSED\r\n"));
}

mgos_gpio_set_button_handler(BTN_MOB,
                  MGOS_GPIO_PULL_UP,
                  MGOS_GPIO_INT_EDGE_NEG, 
                  100 /* debounce ms */,
                  button_cb, /* callback handler */
                  NULL); /* arguments to callback handler */

标签: esp32mongoose-os

解决方案


事实证明,GPIO 引脚 34、35、36 和 39 实际上是 GPI - 仅输入,没有内部上拉或下拉电阻。我用内部上拉切换到不同的 GPIO,这解决了问题。


推荐阅读