ESP32 прекращает цикл после двух циклов

esp32 loop

Мой код: https://pastebin.com/UmdK33U2

Я создал меню, чтобы можно было отправлять команды. Сначала я подключаюсь к Wi-Fi, а затем отправляю команду на отправку запроса.

Затем, когда он обнаружит ключ datos(); выполняется, поэтому цикл обнаруживает это и начинает отправлять запросы. После двух запросов это просто не продолжается.

Что я могу сделать?

Кстати, я использую ESP32.

Спасибо!

boolean datos = false;

#include <WiFi.h>
#include <HTTPClient.h>

const char* ssid = "ssid";
const char* password = "pass";

//удален пароль и ssid для безопасности, он был там раньше.
void setup() {
  pinMode(2, OUTPUT);
  Serial.begin(115200);

  while (!Serial)
    ;
  Serial.println("===================================================");
  Serial.println("Welcome to the menu, choose what do you want to do:");
  Serial.println("1º Connect to the Wifi | W");
  Serial.println("2º Scan Wifi | S");
  Serial.println("3º Send data to Website | D");
  Serial.println("===================================================");
  Serial.println("Made by Francine and Javi.");
  Serial.println("===================================================");
}

void scanwifi() {
  int n = WiFi.scanNetworks();
  Serial.println("===================================================");
  Serial.println("Scan have been finished.");
  Serial.println("===================================================");
  if (n == 0) {
    Serial.println("===================================================");
    Serial.println("No networks have been found.");
    Serial.println("===================================================");
  } else {
    Serial.print(n); // импортировать серийный номер порта # de redes encontradas
    Serial.println(" networks have been found.");
    for (int i = 0; i < n; ++i) {
      // SSID: имя сети; RSSI: мощность сети в дБм.
      Serial.print(i + 1); //запускаем в сети №1...
      Serial.print(": ");
      Serial.print(WiFi.SSID(i)); //Распечатываем имя сети
      Serial.print(" (");
      Serial.print(WiFi.RSSI(i)); //Распечатываем мощность сигнала в дБм
      Serial.print(")");
      byte encryption = WiFi.encryptionType(i); // в переменной шифрования сохраняем тип шифрования сети
      Serial.print(" Encryption Type: ");
      Serial.println(encryption, HEX); // выводим тип шифрования: 2: WPA, 5: WEP и т. д.
      delay(10);
    }
  }
}

void conectarsealwifi() {
  Serial.begin(115200);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);

    Serial.println("Connecting to WiFi..");
  }

  Serial.println("Connected to the WiFi network");
  delay(1000);
  setup();
}

void loop() {
  if (Serial.available()) {
    char ch = Serial.read();
    if (ch == 'w' || ch == 'W') {
      conectarsealwifi();
    }
    if (ch == 'S' || ch == 's') {
      scanwifi();
    }
    if (ch == 'd' || ch == 'D') {
      datos = true;
      Serial.println(datos);
    }
    if (datos == true) { // если вы умеете отправлять данные haz
      //случайныйN = случайный(200);
      if (WiFi.status() == WL_CONNECTED) {
        digitalWrite(2, HIGH);
        HTTPClient http;

        http.begin("removedtheurl"); //Указываем URL
        int httpCode = http.GET();                            //Сделаем запрос

        if (httpCode > 0) { //Проверяем возвращаемый код

          String payload = http.getString();
          Serial.println(httpCode);
          Serial.println(payload);
          Serial.println("===================================================");

        } else {
          Serial.println(
              "Error on HTTP request, reminder maybe its cloudflare shit.");
        }
        http.end(); //Освобождаем ресурсы
        digitalWrite(2, LOW);
      }
      delay(2000);

    } else {

    }
  }
}

, 👍0

Обсуждение

Если вы исправите отступы, вы скоро обнаружите свою проблему., @Majenko

@Маженко Привет, спасибо за ответ. Я не понимаю вашего ответа, я не владею иностранным языком, не могли бы вы объяснить лучше решение моей проблемы?, @unknown Javi

Базовая компоновка (отступы) вашей программы — это беспорядок. Если вы исправите это и правильно расположите, вы сможете лучше следить за ходом своей программы, и причина ее поведения станет очевидной., @Majenko

@Majko Что я проверил, так это то, что если я ничего не набираю и отправляю это, циклы продолжаются в течение 1 строки, а затем возвращаются в нормальное состояние., @unknown Javi

Я знаю. Я вижу это, просто взглянув на ход вашей программы (после исправления отступов). Если вы не знаете, как правильно делать отступы, воспользуйтесь функцией автоматического форматирования в IDE, чтобы сделать это за вас., @Majenko

Я, кстати, вижу, что Юрай исправил это для вас в своем посте. Взгляните на эту версию и скажите мне, в чем проблема., @Majenko


1 ответ


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

0

Вы отправляете из Serial Monitor символ, за которым следует символ новой строки. Эти два символа доступны. Больше нечего вводить в блок if (Serial.available()) {.

,

Благодарю за ваш ответ. Как я могу применить это к своему коду?, @unknown Javi

переместив блок if (datos) { из блока if (Serial.available()) {?, @Juraj

Спасибо, это работает. Хорошего дня., @unknown Javi