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

时间:2017-06-02 12:05:32

标签: button esp8266

想要做一些物联网的东西所以我买了一台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语句,引脚状态继续为LOW。所以它无法停止发送消息。但是当我释放按钮时,引脚应该改变它的状态?

我尝试在if中添加pinState = !pinState;,但之后状态为LOW

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

除非您使用电阻将引脚拉至VCC或GND,否则引脚将浮动并受到其他引脚,电线甚至手指的影响。

您可以使用外部下拉/上拉电阻:

enter image description here

或使用内部上拉:

pinMode(12, INPUT_PULLUP);