2017-07-30 14 views
1

ESP8266とESP8266HTTPClientライブラリでHTTPリクエストを作成しようとしています。私はloop()関数で、100%完璧に動作する5秒ごとにリクエストを行う要求を持っています。しかし、私はまた、このような割り込み設定を持っています:ESP8266割り込み時にHTTPリクエストが失敗する

void interrupt() { 
    if(WiFiMulti.run() == WL_CONNECTED) { 
    Serial.println("Knock!"); 
    HTTPClient http; 

    knockhttp.begin(http_address + "/knock"); 
    int httpCode = http.GET(); 

    if(httpCode > 0) { 
     Serial.println(http.getString()); 
    } else { 
     Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str()); 
    } 

    http.end(); 
    } 
} 

これは失敗します。私は割り込みがトリガするたびに "接続が拒否されました"というエラーが出ます。これは、ループ内の要求と同じサーバーに接続しています。別のパスです。

+0

割り込みは何を起していますか? – Defozo

+0

おっと、申し訳ありません。それについてもっと明確にすべきだった。立ち下がりエッジでトリガするデジタルIOピンからの外部割り込みです。私も助けにならなかったデバウンシングを試みました。 – mdszy

答えて

2

さて、私はそれを修正しました。

何らかの理由で、ESP8266HTTPClientライブラリとHTTP要求が割り込み内で動作していないので、ここで私はそれを思いついた解決策が働いています:割り込みにいくつかのブール値のフラグを設定し

  1. を。
  2. フラグはフラグをリセット
  3. と一致したときにメインループ
  4. 中フラグはメインループにHTTPリクエストを実行していることを確認します。

これは、同じ奇妙な問題に遭遇する他の人に役立ちます。

関連する問題