Отправить запрос с помощью NODEMCU при нажатии клавиши

Привет, я хочу отправить запрос на сервер с помощью метода get с параметрами URL, когда клавиша нажата с помощью nodemcu. Но я не могу сделать эту работу, я получил следующую ошибку от последовательного монитора:

Я получаю эту ошибку от последовательного монитора

 ets Jan  8 2013,rst cause:4, boot mode:(3,7)

wdt reset
load 0x4010f000, len 1384, room 16 
tail 8
chksum 0x2d
csum 0x2d
v951aeffa
~ld

Мой основной код

#include <ESP8266WiFi.h> 
const char* ssid = "MobinNet1365"; 
//заменить на свой собственный wifi ssid
const char* password = "G12229M1Q64"; //заменить на свой собственный //wifi ssid password
const char* host = "webhook.site";

const int button = 8;
int temp = 0;

void setup() { 
  
  Serial.begin(115200); 
  pinMode(button, INPUT);
  delay(10);
  Serial.println(); 
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED){
    delay(500);
    Serial.print(".");
  }
  
  Serial.println("");
  Serial.println("WiFi connected"); 
  Serial.println("IP address: "); 
  Serial.println(WiFi.localIP()); 
} 


void loop() {
  
  temp = digitalRead(button);  
  if (temp == HIGH) {       
    Serial.println(host);
    WiFiClient client;
    const int httpPort = 80;
    
    String url = "/df35c8cd-0398-4c92-b55f-b9e36629b309";
    url += "?switche=";
    url += "1";  
       
    client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");      
  }
}

мой код отправки запроса приведен ниже:

#include <ESP8266WiFi.h> 
const char* ssid = "your-ssid";
const char* password = "your-password";
const char* host = "";

void setup() { 
    Serial.begin(115200); 
    delay(10); 
    Serial.println(); 
    Serial.print("Connecting to ");
    Serial.println(ssid);   
    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED)
    {
        delay(500);
        Serial.print(".");
    }

    Serial.println("");
    Serial.println("WiFi connected"); 
    Serial.println("IP address: "); 
    Serial.println(WiFi.localIP()); 
} 
int value = 0; 
void loop() { 
    delay(5000);
    ++value;
    Serial.print("connecting to ");
    Serial.println(host);
    WiFiClient client;
    const int httpPort = 80;
    if (!client.connect(host, httpPort)) {
        Serial.println("connection failed");
        return;
    }



    String url = "/";
    /* url += "?param1=";
    url += param1;
    url += "?param2=";
    url += param2;
    */
    Serial.print("Requesting URL: ");
    Serial.println(url);
    client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
    unsigned long timeout = millis();
    while (client.available() == 0) {
        if (millis() - timeout > 5000)
        {
            Serial.println(">>> Client Timeout !");
            client.stop(); 
            return;
        } 
    }

    while (client.available())
    {
        String line = client.readStringUntil('\r'); Serial.print(line);
    }
    
    Serial.println();
    Serial.println("closing connection"); 
}

И мой детектор кода нажатия клавиши находится ниже:

const int button = 8;
int temp = 0;

void setup() {
  Serial.begin(9600);
  pinMode(button, INPUT);
}

void loop() {
  temp = digitalRead(button);
     
   if (temp == HIGH) {
      Serial.println("LED Turned ON");
      delay(1500);
   }
   else {
      Serial.println("LED Turned OFF");
      delay(1500);
   }
}

И моя схема такова:

NodeMCU => Микропереключатель

VIN => C

D0 => НЕТ

G => 10k => НЕТ

Как я могу сделать так, чтобы при нажатии этой клавиши он отправлял запрос?

, 👍0

Обсуждение

Я не совсем понимаю-что такое фактический код ypur? Один кусок кода никогда не инициализирует "хост", другой-нет. Каков фактический код, вызывающий ошибку? Вы делаете запрос между двумя NodeMCU?, @Dave Newton

Нет,это просто для отправки запроса на сервер при нажатии клавиши, но я получаю "ets Jan 8 2013, первая причина:4, режим загрузки:(3,7) wdt сброс нагрузки 0x4010f000, len 1384, номер 16 хвост 8 chksum 0x2d csum 0x2d v951aeffa ошибка ~ld", и этот код имеет заголовок с именем main code, является моим фактическим кодом, @Alirezaaraby

Пожалуйста, укажите только соответствующий код., @Dave Newton

почему вы считаете,что сообщение "ets Jan 8 2013, rst cause:4, boot mode:(3,7) ..." является сообщением об ошибке?, @jsotola


1 ответ


1

ИМХО, некоторые соображения :

  1. const int button = 8; const int button = 5; // ИЗМЕНИТЬ НА Pin "D1 GPIO5"

GPIO8 используется для подключения флэш-чипа, вы можете перейти на вывод "D1", который является GPIO 5.

  • Сверьтесь с распиновкой вашей платы.
  1. чтобы предотвратить непрерывный вызов внутри цикла, вы можете использовать millis();

например :

void GetUrl() {
    temp = digitalRead(button);  
  if (temp == HIGH) {       
    Serial.println(host);
    WiFiClient client;
    const int httpPort = 80;
    
    String url = "/df35c8cd-0398-4c92-b55f-b9e36629b309";
    url += "?switche=";
    url += "1";  

    String link = String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n";
//    Serial.println( "link : " + link );
    client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");      
  }
}


unsigned long previousMillis = 0;
const long interval = 1000 * 0.5; // 500ms (0.5 sec)

void loop() {
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    GetUrl();
  }
}

Ссылка :

https://www.arduino.cc/en/Tutorial/BuiltInExamples/BlinkWithoutDelay

https://iotbyhvm.ooo/gpio-pins-esp8266/

,