#include <WiFi.h>
#include <WebServer.h>
#include <WiFiClientSecure.h>
#include <LiquidCrystal_I2C.h>
// Configuración de Wi-Fi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Configuración del servidor externo
const char* host = "tfgjcp1c-3000.use2.devtunnels.ms";
const int httpsPort = 3000;
// Crear una instancia del servidor web en el puerto 80
WebServer server(80);
// Configuración de la pantalla LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // Dirección I2C 0x27, 16 columnas y 2 filas
// Página HTML
const char* htmlPage = R"(
<!DOCTYPE html>
<html>
<body>
<h2>Enviar mensaje a la pantalla LCD</h2>
<form action="/postmcu/" method="POST">
Mensaje: <input type="text" name="message">
<input type="submit" value="Enviar">
</form>
</body>
</html>
)";
// Función para manejar la conexión Wi-Fi
void setupWiFi() {
Serial.print("Conectando a ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("Conectado a Wi-Fi");
Serial.print("Dirección IP: ");
Serial.println(WiFi.localIP());
}
// Función para enviar el mensaje al servidor HTTPS
bool sendMessageToServer(const String& message) {
WiFiClientSecure client;
client.setInsecure(); // No verificar el certificado, para pruebas
Serial.print("Conectando a ");
Serial.println(host);
if (!client.connect(host, httpsPort)) {
Serial.println("Conexión fallida");
return false;
}
String url = "/postmcu/";
String body = "message=" + message;
// Construir la solicitud HTTP
client.print(String("POST ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Content-Type: application/x-www-form-urlencoded\r\n" +
"Content-Length: " + body.length() + "\r\n" +
"Connection: close\r\n\r\n" +
body);
while (client.connected()) {
String line = client.readStringUntil('\n');
if (line == "\r") {
break;
}
}
String response = client.readString();
Serial.println("Respuesta del servidor:");
Serial.println(response);
return true;
}
// Función para manejar la petición POST
void handlePost() {
if (server.hasArg("message")) {
String message = server.arg("message");
Serial.println("Mensaje recibido: " + message);
// Mostrar el mensaje en la pantalla LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(message);
// Enviar el mensaje al servidor HTTPS
if (sendMessageToServer(message)) {
server.send(200, "text/html", "Mensaje enviado correctamente.<br>" + String(htmlPage));
} else {
server.send(500, "text/html", "Error al enviar el mensaje al servidor.<br>" + String(htmlPage));
}
} else {
server.send(400, "text/html", "No se recibió ningún mensaje.<br>" + String(htmlPage));
}
}
void setup() {
Serial.begin(115200);
// Configurar la pantalla LCD
lcd.begin();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Conectando...");
setupWiFi();
// Iniciar el servidor web y definir la ruta para manejar peticiones POST
server.on("/postmcu/", HTTP_POST, handlePost);
// Servir la página HTML al acceder a la raíz
server.on("/", HTTP_GET, []() {
server.send(200, "text/html", htmlPage);
});
server.begin();
Serial.println("Servidor web iniciado");
// Mostrar mensaje de inicio en la pantalla LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Servidor iniciado");
lcd.setCursor(0, 1);
lcd.print("Esperando...");
}
void loop() {
server.handleClient();
}