ESP8266 按钮 - 引脚状态保持不变

ESP8266 Push button - pin State stay the same

想做一些物联网的东西所以我买了一个 ESP8266 (WeMos D1 Mini Pro)。

我只想在按下按钮时向我的服务器发送一条 MQTT 消息。

我将按钮的一侧连接到 GNR,另一侧连接到 D6 (GPIO12)。

我设置pinMode(12, INPUT);

在循环内:

void loop() {

  if (!client.connected()) {
    reconnect();
  }
  client.loop();

  boolean pinState = digitalRead(12);

  Serial.printf("Start State: %s",(pinState)?"HIGH":"LOW");
  Serial.println();
  if (pinState == LOW) {
    const char* test2 = "Test";
    Serial.print("Publish message: ");
    Serial.println(test2);
    client.publish("iPub", test2);
  }
}

pinState 从 HIGH 开始,我可以看到它在循环。当我按下按钮时,它变为 LOW(发送消息),输入 if 语句,pin 状态继续为 LOW。所以它不能停止发送消息。但是当我释放按钮时,图钉应该改变它的状态?

我试图在 if 中添加一个 pinState = !pinState;,但在那之后状态保持 LOW

我该如何解决这个问题?

除非你用电阻将引脚拉到 VCC 或 GND,否则引脚会浮动并且可能会受到其他引脚、电线甚至你的手指的影响。

您可以使用外部 pulldown/pullup 电阻:

或使用内部上拉电阻:

pinMode(12, INPUT_PULLUP);