Http-запрос в прерывании esp8266 не работает

Итак, у меня есть этот код, который всякий раз, когда я нажимаю кнопку, начинается прерывание. В этом прерывании я хочу сделать запрос на получение веб-сервера.

Дело в отдельном коде, код прерывания работает и без прерывания http запрос тоже работает. Но когда я собрал это вместе, это не так.

Кто-нибудь знает, почему это не работает?

// Библиотеки
#include <ESP8266HTTPClient.h>
#include<ESP8266WiFi.h>

char ssid[] = "";
char pass[] = "";

int ledpin = 5; // D1(gpio5)
int button = 4; //D2(gpio4)
int buttonState=0;


ICACHE_RAM_ATTR void ISR() {
  static unsigned long last_interrupt_time = 0;
  unsigned long interrupt_time = millis();

  if (interrupt_time - last_interrupt_time > 200)
  {
      Serial.println("Drukknop ingedruk");
      Serial.println("Sending message to server");
       if (WiFi.status()==WL_CONNECTED)
      {
        HTTPClient http;
        String url="<httpurl>";
        http.begin(url);
        http.addHeader("Content-Type","text/plain");
        int httpCode=http.GET();
        Serial.println(httpCode);
        String payload=http.getString();
        Serial.println("While sending I received this from server : "+payload);
        http.end();
      }
      else
      {
        Serial.println("Internet Problem!");
      }    
  }
  last_interrupt_time = interrupt_time;  
}




void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid,pass);

  while(WiFi.status() !=WL_CONNECTED)
  {
    delay(500);
    Serial.println("Waiting for connection");
  }

  Serial.println("Connected...");
  delay(1000);
  if (WiFi.status() ==WL_CONNECTED)
  {
    Serial.println("Wi-Fi Connected!");
  }
  delay(5000);
  Serial.println("ok");
  pinMode(button, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(button), ISR, RISING);

}
void loop() {

}

, 👍0


1 ответ


Лучший ответ:

1

Выполнять такую сложную задачу, как HTTP-запрос в прерывании, — очень глупая идея. Вместо этого установите флаг в процедуре прерывания и проверьте его в основной функции loop() для выполнения вашего HTTP-запроса.

,

Спасибо, это работает, @Thomas Van Raemdonck

@ThomasVanRaemdonck, если это работает (и должно), пожалуйста, примите ответ Маженко как правильный; это помогает другим пользователям увидеть правильный ответ и отдает должное Майенко., @romkey