私はESP8266(WeMos D1 Mini Pro)を購入したので、いくつかのIOTをしたいと思っていました。ESP8266プッシュボタンピンの状態は同じです
ボタンを押すだけで、私のサーバーに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
になります。したがって、メッセージの送信を停止することはできません。しかし、私がボタンを放すと、ピンは状態を変えるべきですか?
pinState = !pinState;
をifに追加しようとしましたが、それ以降は状態がLOW
のままです。
どうすればこの問題を解決できますか?
あなたは状態が変更されていない、またはそれだけではありよろしいですループを回るのにかかる時間は、ボタンを押したり放したりするよりもはるかに速いため、ダウン状態を何度も読み取ることができますか? – hardillb
状態がHIGHから....ボタンを押すとメッセージが送信されますXXX回 – Ragnar
[プルアップ/プルダウン抵抗](https://www.arduino.cc/ja/tutorial/button)が必要です。 'INPUT_PULLUP'](https://www.arduino.cc/en/Tutorial/InputPullupSerial) –