Vorrei controllare l'apertura di 4 cancelli automatici, situati in 4 differenti strutture ben lontane tra loro.
Il controllo avverebbe da un'altra struttura, tramite pagina web su un server ubuntu.
All'interno di ogni struttura ho i contatti puliti del cancello automatico con accanto presa lan.
Vorrei collocare, per ogni struttura, accanto alla presa lan, una board con ethernet e con relè che comandi i contatti del cancello.
Ogni board avrebbe un proprio indirizzo ip statico.
La pagina web che controllerebbe i dispositivi è scritta in php e lancerebbe eventuali comandi bash.
Per quanto riguarda lato web, php, bash ubuntu, non ci sono problemi.
Il problema nasce con i dispositivi hardware da collegare per ogni struttura e ralativo codice arduino da caricare.
Non so se ho ben reso l'idea del tutto.
Spero vivamente nell'aiuto di qualcuno.
Grazie anticipatamente.
Devi spiegarti meglio, magari anche con un qualche schema, perché vorrei ricordarti il REGOLAMENTO ed in particolare il punto 15.4 "Modifica ad altri impianti e/o macchinari" che dice:
Così come per il punto 15.3, richieste relative alla modifica di "impianti e/o macchinari", come ad esempio la modifica di macchine presenti in officine, cancelli elettrici di casa, ecc. ecc., essendo anche esse soggette a normativa (difatti le modifiche possono essere fatte soloda personale qualificato ed autorizzato, in grado di rilasciare/modificare i necessari "fascicoli tecnici", "dichiarazioni di conformità" e qunt'altro richiesto dalla legge) non saranno ammesse ed i relativi post/thread, chiusi e cancellati.
Chiarisci quindi meglio l'ambito per favore. Grazie.
Assumiamo che tu voglia soltanto aggiungere un selettore a chiave "remoto" in parallelo a quello già presente sugli impianti e quindi di fatto non si tratta di una modifica sostanziale.
Se ogni board ha il suo IP statico (e quindi presumo anche il server) allora le cose si semplificano enormemente.
Potresti installare OpenVPN sul tuo server Ubuntu cosi da aumentare nel complesso la sicurezza del sistema poiché solo i client facenti parte della VPN potranno accedere ai cancelli ed in più le comunicazioni sono crittografate.
A quel punto, per quanto riguarda il protocollo di comunicazione hai tutte le opzioni disponibili e devi solo scegliere quello che ti risulta più comodo da usare sul tuo server Ubuntu: Telnet, HTTP etc etc.
Visto che parli di PHP immagino che ci sarà interazione con il server Ubuntu attraverso una pagina web e quindi probabilmente la cosa più semplice (e su cui trovi più materiale online) è configurare anche i tuoi 4 nodi/cancelli come server web che saranno risorse esterne per la tua pagina da richiamare con un semplice GET o POST.
Per quanto riguarda la scelta dell'hardware, il mio consiglio è di prendere un microcontrollore "moderno" con le risorse necessarie per gestire una connessione crittografata.
In sostanza lascia perdere le obsolete shield pensate per Arduino Uno o simili, e prendi una board che sia già dotata di connessione Erhernet onboard: ci sono molti microcontrollori che hanno il controller ethernet integrato come ESP32, STM32, RP2350 etc etc a cui basta aggiungere un semplice transceiver.
Il problema è che sono poco diffusi negli store più famosi e ti toccherà aspettare un po' di tempo in più per la consegna.
Se il cancello ha il classico radiocomando le condizioni di cui parli devono essere già soddisfatte, altrimenti non sarebbero delle installazioni a norma.
Aggiungere un'apertura remota a questo punto è concettualmente analogo all'uso del telecomando in quanto quest'ultimo può funzionare senza problemi anche se non si ha il cancello a vista.
No
Cambia il cablaggio e si aggiumgono possibili problemi di isolamento, terre, correnti di terra e disturbi
Senza considerare che si collega al cancello un apparecchio a microprocessore, il che probabilmente richiede la revisione della certificazione EMC
Usare un secondo telecomando è una cosa, tirare fili "nuovi" è un'altra, molto differente
Ciao, questa era la strada che volevo intraprendere, più o meno.
Per quanto riguarda il punto "Modifica ad altri impianti e/o macchinari", non andrei a modificare niente di ciò.
Accanto la presa lan ho i fili puliti per i pulsanti apri/cancello, quindi andrei ad intercettare questi.
La mia idea era di mettere delle board con ethernet e relè e interagire con queste tramite chiamate GET o POST.
Ma il problema è che non so su che hardware puntare e il codice da buttargli giù.
Per quanto la sicurezza i dispositivi e il server sono sotto vpn.
Sul sito Waveshare ad esempio (fornitore cinese, ma piuttosto affidabile e che documenta molto bene i prodotti che vende) ci sono diverse soluzioni che integrano la porta Ethernet come ad esempio:
Se dovessi scegliere, io opterei per l'ESP32 perché con questa famiglia di microcontrollori ci sono una gran quantità di librerie disponibili per creare dei webserver (tra cui un paio che ho scritto io).
Nel 99% degli esempi useranno il WiFi perché è integrato, ma layer fisico di trasporto dati a parte, tutto quello che c'è si può facilmente adattare per usare la connessione Ethernet.
Trovi tante altre soluzioni anche su Aliexpress, probabilmente a prezzi molto più economici, però meno documentate.
Su Amazon c'è poca roba e al doppio del costo, ma se hai fretta ad esempio questa è la scheda Waveshare
Alla fine ho optato per questa scelta:
ESP32-S3-ETH
Però ho subito avuto problemi nel configurare un semplice webserver.
Usando la libreria ethernet e il seguente codice mi risulta come indirizzo ip 255.255.255.255 (sia impostando manualmente che automaticamente nel begin):
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xA2, 0x85, 0xE3, 0xE6, 0xC6, 0xD5 };
IPAddress ip(192, 168, 1, 115);
//crea un server ETH sulla porta 80
EthernetServer server(80);
void setup() {
Serial.begin(9600);
Ethernet.begin(mac);
server.begin();
Serial.print("server IP: ");
Serial.println(Ethernet.localIP());
}
void loop() {
EthernetClient client = server.available();
if (client) {
boolean blank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.print(c);
if ((c == '\n') && blank){
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close"); // the connection will be closed after completion of the response
//client.println("Refresh: 5"); // refresh the page automatically every 5 sec
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<H1>Hello Arduino!</H1>");
client.println("</html>");
break;
}
if (c == '\n') {
blank = true;
} else if (c != '\r') {
blank = false;
}
}
}
delay(1);
client.stop();
Ethernet.maintain();
}
}
Non stai inizializzando correttamente l'interfaccia Ethernet.
Come ti dicevo, sul sito waveshare c'è un ottimo WiKi per ciascun prodotto venduto, prendi quello come riferimento nel futuro.
In fondo alla pagina c'è anche un file zip che contiene librerie e sketch di esempi.
La libreria usata per l'interfaccia Ethernet è la libreria ETHClass che in teoria sarebbe già inclusa nel core anche se nel file dell'esempio c'è scritto che è una versione modificata.
Io proverei ad usare come prima cosa quella inclusa nel core originale cosi da avere teoricamente meno problemi di compatibilità nel futuro dovuti ad aggiornamenti.
Questo esempio, una volta modificati i valori dei pin usati dalla tua scheda, dovrebbe funzionare.
Infine, piuttosto che il setup consigliato nel Wiki io userei lo schema di partizione che ti consente di usare tutta la memoria flash disponibile.
Con l'ESP32 infatti puoi usare la memoria flash oltre che per memorizzare il firmware, anche per salvare qualsiasi tipo di file tu voglia.
Questo ti consente di realizzare dei webserver molto avanzati caricando i sorgenti HTML/CSS/Javascript direttamente nella memoria del microcontrollore a differenza di ciò che viene mostrato nella maggior parte degli esempi, dove le risorse web vengono create a runtime usando delle stringhe (io di solito uso un PC per sviluppare l'interfaccia web e poi trasferisco i file sull'ESP32 solo alla fine).
Chiaramente si tratta di risorse statiche e non script server-side tipo PHP o simili, ma con Javascript ti assicuro che si fanno delle gran belle cosette, ma immagino tu lo sappia già .
Come accennavo precedentemente, anche io ho scritto due librerie che sfruttano proprio questa opzione, se sei interessato ad approfondire fammi sapere.