#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 кнопок была нажата
судя по коду, вы в одном скетче создаете и сервер, и клиент который этот сервер опрашивает. А в клиенте и передаете данные серверу о кнопках и запрашиваете их обратно. Потом ответ сервера просто выкидываете в помойку.
Это так задумано?
и на разных 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 лучше не трогать без понимания особенностей их использования.
Под кнопки?
Их и “с пониманием” не стоит на вход использовать.