Проблемы с Guru Meditation Error

#include <WiFiClient.h>
#include <WebServer.h>

const char* ssid = "LAPTOP-R06VPJU9 2512";
const char* password = "8>44t4R7";

int buttonPins[20] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21};

IPAddress serverIP(192, 168, 137, 193);

WebServer server(80);

void setup()
{
  Serial.begin(9600);

  // Соединяемся с Wi-Fi
  WiFi.begin("LAPTOP-R06VPJU9 2512", "8>44t4R7");
  Serial.println("Connecting to WiFi");
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(1000);
    Serial.println("Connecting...");
  }
  Serial.println("Connected to WiFi");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  // Настройка кнопок
  setupButtons();

  // Начинаем прослушивать порт 80
  server.on("/", handleRoot);
  server.begin();
}

void loop()
{
  // Находим, какая кнопка была нажата
  int buttonNumber = getPressedButton();
  if (buttonNumber >= 0)
  {
    // Формируем запрос на сервер
    WiFiClient client;
    if (client.connect(serverIP, 80))
    {
      client.print("GET /?button=");
      client.print(buttonNumber);
      client.println(" HTTP/1.1");
      client.println("Connection: close");
      client.println();
      while (client.connected())
      {
        String line = client.readStringUntil('\n');
        if (line == "\r")
        {
          break;
        }
      }
      client.stop();
    }
  }
  server.handleClient();
}

void setupButtons()
{
  for (int i = 0; i < 20; i++)
  {
    pinMode(buttonPins[i], INPUT_PULLUP);
  }
}

int getPressedButton()
{
  for (int i = 0; i < 20; i++)
  {
    if (digitalRead(buttonPins[i]) == LOW)
    {
      return i;
    }
  }
  return -1;
}

void handleRoot()
{
  String message;
  if (server.hasArg("button"))
  {
    int buttonNumber = server.arg("button").toInt();
    message = "Button " + String(buttonNumber) + " was pressed!";
  }
  else
  {
    message = "Hello ESP32";
  }
  message += "<p>Press one of the following buttons:</p>";
  message += "<ul>";
  for (int i = 0; i < 20; i++)
  {
    message += "<li><a href='/?button=" + String(i) + "'>Button " + String(i) + "</a></li>";
  }
  message += "</ul>";
  server.send(200, "text/html", message);
}``` при попытке загрузить скетч в serial monitor выводит Connecting...
Connecting...
Connecting...
Connected to WiFi
IP address: 
192.168.137.193
Guru Meditation Error: Core  1 panic'ed (LoadProhibited). Exception was unhandled как исправить? В теории код должен создавать локольный сервер и сайт на котором можно смотреть какая из 20 кнопок была нажата

судя по коду, вы в одном скетче создаете и сервер, и клиент который этот сервер опрашивает. А в клиенте и передаете данные серверу о кнопках и запрашиваете их обратно. Потом ответ сервера просто выкидываете в помойку.
Это так задумано?

1 лайк

и на разных IP адресах к тому жеж
ЗЫ а если замаркировать строку 30 (инициализация пинов) то что?

Ну чисто на теории должно выводить инфу о том какая кнопка была нажата

куда выводить-то? В недра микроконтроллера? Вы запрашиваете данные внутри той же программы и даже не читаете ответ.

Логика в этом коде, на мой взгляд, отсутствует напрочь.

бесконечно пытается к вайфаю подключиться

скорее всего перезагружается

ну да, пины то назначены от балды, хотя бы так:

const uint8_t buttonPins[19] = {2, 4, 5, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33};

Из этого ряда 2, 5, 12, 14, 15 лучше не трогать без понимания особенностей их использования.

я трогал, у меня работает

Под кнопки?

Их и “с пониманием” не стоит на вход использовать.