P10Panel/panel.ino
2025-02-17 19:47:18 +03:00

139 lines
3.9 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <WiFi.h>
#include <WebServer.h>
#include <DMD32.h>
#include <fonts/Font_BOLD.h>
#include <FS.h>
#define FONT Font_BOLD
#define DISPLAYS_ACROSS 1
#define DISPLAYS_DOWN 1
DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);
bool panel = true;
const char* ssid = "SKBKIT";
const char* password = "skbkit2024";
WebServer server(80);
IPAddress staticIP(10, 131, 170, 4);
IPAddress gateway(10, 131, 170, 1);
IPAddress subnet(255, 255, 255, 0);
String displayText = "Привет из СКБ \"КИТ\"";
//String displayText = "Пизда с членом разлучились(";
hw_timer_t* timer = NULL;
void IRAM_ATTR triggerScan() {
dmd.scanDisplayBySPI();
}
void reader() {}
void setup() {
Serial.begin(115200);
dmd.selectFont(Font_BOLD);
WiFi.begin(ssid, password);
//WiFi.config(staticIP, gateway, subnet);
if (!WiFi.config(staticIP, gateway, subnet)) {
Serial.println("Failed to configure Static IP");
} else {
Serial.println("Static IP configured!");
}
// if(!SPIFFS.begin()){
// Serial.print("An occurred ERROR");
// log_e("OCCURRED ERROR");
// return;
// }
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConnected to WiFi");
Serial.println(WiFi.localIP());
// Обрабатываем GET запрос для главной страницы с формой
server.on("/", HTTP_GET, []() {
panel = true;
server.send(200, "text/html",
"<!DOCTYPE html>"
"<html lang='ru'>"
"<head>"
"<meta charset='UTF-8'>"
"<title>Panel text</title>"
"</head>"
"<body>"
"<h2>Введите текст для отображения на экране:</h2>"
"<form action='/api/text' method='post'><input name='text'><input type='submit'></form>"
"</body>"
"</html>");
});
server.on("/api/led", HTTP_GET, [](){
if(panel){
server.send(200, "application/json", "{\"state\": \"true\"}");
}else if(!panel){
server.send(200, "application/json", "{\"state\": \"false\"}");
};
});
server.on("/api/led", HTTP_POST, [](){
String panelState = server.arg("plain");
Serial.println(panelState);
if (panelState == "{\"led\": \"on\"}"){
Serial.println("Panel on!");
panel = true;
//scanDisplayBySPI();
}else if(panelState == "{\"led\": \"off\"}"){
panel = false;
Serial.println("Panel off!");
SPI.end();
}
server.send(200, "text/html", "");
});
// Обрабатываем POST запрос для изменения текста
server.on("/api/text", HTTP_POST, []() {
panel = true;
if (server.hasArg("text")) {
// Получаем текст с формы без преобразования в HTML-сущности
displayText = server.arg("text");
}
// Отправляем ответ с правильной кодировкой UTF-8
server.send(200, "text/html; charset=UTF-8",
"<html><body><h2>Text set to:</h2><p>" + displayText + "</p></body></html>");
});
server.begin();
uint8_t cpuClock = ESP.getCpuFreqMHz();
timer = timerBegin(0, cpuClock, true);
timerAttachInterrupt(timer, &triggerScan, true);
timerAlarmWrite(timer, 300, true);
timerAlarmEnable(timer);
dmd.clearScreen(true);
}
void loop() {
server.handleClient(); // Обработка запросов от клиента
// // Очистка экрана и вывод текста
// dmd.clearScreen(true);
// dmd.drawMarquee(displayText.c_str(), displayText.length(), (32 * DISPLAYS_ACROSS) - 1, 0);
// long start = millis();
// long timer = start;
// boolean ret = false;
// while (!ret) {
// if ((timer + 30) < millis()) {
// ret = dmd.stepMarquee(-1, 0); // Прокрутка текста
// timer = millis();
// }
// }
}