2017-06-02 13 views
0

私は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のままです。

どうすればこの問題を解決できますか?

+0

あなたは状態が変更されていない、またはそれだけではありよろしいですループを回るのにかかる時間は、ボタンを押したり放したりするよりもはるかに速いため、ダウン状態を何度も読み取ることができますか? – hardillb

+0

状態がHIGHから....ボタンを押すとメッセージが送信されますXXX回 – Ragnar

+1

[プルアップ/プルダウン抵抗](https://www.arduino.cc/ja/tutorial/button)が必要です。 'INPUT_PULLUP'](https://www.arduino.cc/en/Tutorial/InputPullupSerial) –

答えて

1

抵抗を使ってピンをVCCまたはGNDにプルしない限り、ピンはフローティングになり、他のピン、ワイヤ、または指の影響を受ける可能性があります。

あなたは、外部のプルダウン/プルアップ抵抗を使用できます:

enter image description here

や内部プルアップを使用します。

pinMode(12, INPUT_PULLUP); 
関連する問題