web_relais.ino

Arduino Opta (micro PLC, STM32H747) · Archivo : web_relais.ino · Lenguaje : Arduino · Uso : Commander la PLC depuis une page web embarquée

Una página web servida por la propia Opta: estado de los relés y entrada analógica a la vista, botones de mando como enlaces HTTP simples. Diagnóstico remoto de la máquina sin abrir el armario, con cero dependencias de software.

Hardware

Una Opta PLC de STMicroelectronics (STM32H747 en tiempo real + coprocesador seguro i.MX RT1052) programada con el entorno Arduino PLC, alimentada a 24 V DIN. Opta en la red; un navegador (PC del taller o móvil con Wi-Fi del taller).

Cableado

Cable RJ45; anotar la IP estática del setup en la puerta del armario. No exponer este servidor a Internet sin VPN.

Funcionamiento

El servidor analiza la línea GET: /relais?n=&etat= aplica la orden al relé y devuelve la página HTML con el estado en directo.

Ejecución

Instala el gestor de placas Arduino PLC, selecciona «Opta PLC», conecta USB/DFU y vuelca el programa. El sketch corre por el STM32H747 en tiempo real.

Variantes

Añadir un token en la URL para restringir el acceso, un refresco automático (meta refresh) o un botón de parada de emergencia prioritario.

web_relais.ino

// Opta PLC : mini serveur web embarqué — page de commande des relais.
// GET /            -> page HTML   GET /relais?n=1&etat=on -> commande
#include "PLCContainer.h"
#include <Ethernet.h>

PLCContainer PLC;
EthernetServer serveur(80);

void page(EthernetClient &c) {
  c.println("HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=utf-8\r\n"
            "Connection: close\r\n\r\n"
            "<h2>Opta PLC</h2><ul>");
  for (int i = 0; i < 2; i++) {
    c.print("<li>RO"); c.print(i + 1);
    c.print(PLC.Relay[i].state() ? " : <b>ON</b> " : " : OFF ");
    c.print("<a href=\"/relais?n="); c.print(i);
    c.println(PLC.Relay[i].state() ? "&etat=off\">couper</a></li>"
                                   : "&etat=on\">activer</a></li>");
  }
  c.print("</ul>AI1 = "); c.print(PLC.AnalogIn.read(OPTA_AI_1));
  c.println(" mV"); c.stop();
}

void setup() {
  PLC.begin();
  byte mac[] = { 0x00, 0x80, 0xE1, 0x14, 0x22, 0x35 };
  PLC.Eth.begin(mac, IPAddress(192, 168, 1, 62), IPAddress(192, 168, 1, 1));
  serveur.begin();
}

void loop() {
  EthernetClient c = serveur.available();
  if (!c) return;
  String req = c.readStringUntil('\n');       // ligne GET /...
  if (req.startsWith("GET /relais")) {
    int n = req.substring(req.indexOf("n=") + 2).toInt();
    bool on = req.indexOf("etat=on") > 0;
    if (n >= 0 && n < 2) PLC.Relay[n].write(on);
  }
  page(c);
  delay(5); c.stop();
}

← Volver a la ficha