Buongiorno,
ho un progetto già realizzato e perfettamente funzionante di centralina per controllo e gestione di pompe sommerse (verifica livello acqua, assorbimento pompe, scambio alternato, corto, ecc.).
Volevo completarlo con una interfaccia web, in modo da avere un controllo e lettura da remoto dei parametri suddetti.
Ho realizzato l'interfaccia e (dentro casa, rete locale) funziona perfettamente. Prima di integrarla nella centralina pero' devo capire come posso accedervi dall'esterno, altrimenti è tutto inutile.
Sono giorni che cerco info in rete ma non trovo nulla, siccome non sono pratico di protocollo HTTP, qualcuno mi aiuta a capire come fare?
La cosa è piuttosto facile e non ha nulla a che vedere con HTTP ...
... su tuo router devi cercare il NAT ( network address translation) ovvero come mappare un indirizzo interno privato (che è l'indirizzo IP della tua scheda Arduino nella tua LAN) nell'indirizzo pubblico del tuo router ed una specifica porta.
IP interno : port 80 (web) <--- rimappato ---> IP pubblico del router : port da te scelto
Ovviamente questo comporta il dover conoscere l'indirizzo pubblico del "router" che, salvo che tu non abbia acquistato un IP fisso, nel tempo cambia. A questo punto occorre appoggiarsi ad un servizio che renda disponibile alla rete pubblica un nome logico associato dinamicamente e sempre aggiornato, all'indirizzo fisico del "router". Io, per fare questo, uso DynDNS che, però, è un servizio a pagamento ... so comunque che ce ne sono di equivaleneti anche di gratuiti ... devi cercare su Google.
Detto quanto sopra ... occhio ad aprire pubblicamente su internet l'accesso alla tua scheda ... di sicuro ti esponi ad un infino numero di attacchi per cercare di fare qualch cosa sul tuo piccolo web server, attacchi che potrebbero essere così tanti da mandare in crash o bloccare Arduino.
Purtroppo, quando si crea un accesso su Internet ... un semplice Arduino con un piccolo web server NON è praticamente utilizzabile ... occorre un Arduino con certe potenzialità, in grado di gestire sistemi di autenticazione ed il protocollo HTTPS ed, anche così, occorre prendere tutte le precauzioni.
Ricorda che ci sono BOT che, in continuazione, fanno controlli su internet alla ricerca di indirizzi e porte aperte ... su cui fare danni ...
porca l'oca... mi hai stroncato... non sono assolutamente in grado (ne ho il tempo soprattutto) per realizzare un sistema sicuro. per cui se le cose stanno come dici mi tocca rinunciare.
... beh ... è sotto gli occhi di tutti, basta informarsi un minimo e si scopre che gli attacchi ad oggetti IoT sono cosa quotidiana e BOT che cercano in rete "cose" non protette, ne girano un'infinità.
E ... pensare invece di usare un prodotto sicuro per l'accesso da remoto al proprio desktop? In questo modo Arduino sarebbe visibile sempre solo dall'interno della tua rete, ma tu, da fuori, accedendo ad un tuo PC, potreti vedere le informazioni. Un ottimo prodotto, ad esempio, è TeamViewer che, per uso privato e non commerciale, è gratuito ed è multipiattaforma (accedi a qualsiasi OS da qualsiasi OS).
purtroppo io devo fare l'opposto, dal mio PC o smartphone dovrei accedere alla centralina.
dovrei installare un PC nella centralina. mi tocca tornare al vecchio sistema di massaggistica sms, non ha le stesse potenzialità, ma mi avvisa solo in caso di problemi, via SMS.
volevo eliminare il problema della SIM.
Ho visto che ci sono queste a costo quasi zero della "1nce" (tedesche), se funziona ripristino questo sistema.
Grazie mille cmq delle info.
Mah ... ormai ci sono dei PC che sono dei "mattoncini" piccolissimi, a basso costo, adatti proprio a fare queste cose ... lo metti sulla stessa LAN e lo colleghi al router, da fuori tu ti colleghi a questo mini-PC e e lui, internamente, si collega alla centralina e ti ci da accesso. E' una possibilità ... poi vedi un po' tu, anche in funzione dei costi
Mmm ... non so se su una schedina come la Raspberry Zero gira un qualche cosa per fare "remote desktop" ... potrebbe essere, ci vorrebbe qualcuno che conosce bene Linux ...
Io ho provato xrdp su Armbian (sia Raspberry che Zero che Orange Pi). Essendo più conoscitore di Windows, uso "Connessione Remote Desktop" (RDP) e xrpd è versione per Linux. Da PC windows mi collego al Linux tramite "Connessione Remote Desktop" (ma anche da Android che app simil-RDP)
Mah ... non conosco la "Raspberry Zero", ma se ha un'interfaccia GUI dove puoi lanciare un browser ed aprire una pagina web e, da un PC remoto, ti puoi collegare e lavorare come se fossi in locale, alllora va benone
Sfruttando un servizio "terzo" in cloud che fa da gateway puoi realizzare questa cosa in tutta sicurezza e con i meccanismi più affidabili.
Ci sono servizi semplici da usare come il famoso Blynk (che io non amo e non uso) sia a pagamento che gratuiti (almeno per ora).
Sei un po' vincolato dal punto di vista dell'interfaccia perché sono comunque pensati a "componente", ma con un po' di fantasia fai quello che serve.
oppure ad esempio per "diletto" io ho fatto una GUI completamente custom per ESP32/8266 che sfruttando un real time database di Google Firestone consente di interagire fa remoto con la MCU senza fare cose "strane" con il router.
SI, usando un servizio "terzo", che implementa lui tutti i meccanismi di sicurezza, può essere una buona soluzione ... probabilmente la cosa è possibile anche con il servizio di "Arduino IoT Cloud", ma è tutto da verificare
Ammetto di non aver ancora esplorato per nulla questo servizio, ma esiste la possibilità di creare un'interfaccia web per i progetti?
Come ben sai, io per questi aspetti sono sempre del partito "faccio tutto da me" perché mi piace avere il controllo completo di aspetto e comportamento della GUI (ed anche perché mi diverto di più, lo ammetto).
grazie a tutti per le risposte... mi hanno un po scoraggiato, un po per il mio skill, un po per il tempo a mia disposizione...
una curiosità in chiusura: ho acquistato una videocamera TAPO da interni collegata al cellulare.
E senza fare niente, aprire porte, settare router, modem, protocolli, minacce di pericoli non ne leggo,. Semplicemente l'ho collegata e vedo le immagini ovunque mi trovi.
magari fosse cosi pure con i nostri progettini....
Ovvio perché ... la telecamera si collega ai server del produttore e invia a lui lo streaming video e tu, con l'applicazione, vai a collegarti a detti server e vedi quello che la telecamera invia.
Se la volessi usare SENZA l'applicazione del produttore (le Tapo sono standard Onvif e quindi collegabili a qualsiasi software che rispetta tale standard), all'interno della tua rete non avresti problemi, al di fuori ... avresti gli stessi che hai con Arduino.
Io ho fatto con ESP32 un countdown per una palestra di Boxe, con i vari timer a seconda dell'allenamento che devono eseguire, con uscita a video VGA(collegato a un 32 pollici) e audio che suona a ogni step.
Esp32 configurato come access point invia una pagina web al client (per modificare i valori dei vari timer) per cui puoi collegarti sia da uno smartphone che da un PC o altro conoscendo la password dell'access point(per cui un minimo di sicurezza).
Ho utilizzato ESP32 sia perchè ci son delle librerie per la VGA, sia perchè la pagina web da inviare occupa abbastanza memoria(poi dipende dalla dimensione della pagina che vuoi fare), inoltre ha già il wifi o BT incorporato.
Ad esempio, questa è la routine che parte alla pressione di un tasto collegato ad ESP32:
void AscoltoClient() {
Suono = 0; ledcWrite(0, 0);// VOLUME AZZERATO
gfx.setFont(&FreeSerif9pt7b);
vga.clear(vga.RGBA(0, 0, 255));
vga.setTextColor(vga.RGB(0xffffff));
gfx.setCursor(0, 15);
gfx.println("Pannello di controllo: Countdown V1.0");
gfx.println("1) Ricerca e connettiti alla rete Wi-Fi TIMER 1");
gfx.println("2) Con il browser vai alla pagina http://192.168.4.1");
vga.show();
delay(400);
vga.clear(vga.RGBA(0, 0, 255));
vga.setTextColor(vga.RGB(0xffffff));
gfx.setCursor(0, 15);
gfx.println("Pannello di controllo: Countdown V1.0");
gfx.println("1) Ricerca e connettiti alla rete Wi-Fi TIMER 1");
gfx.println("2) Con il browser vai alla pagina http://192.168.4.1");
vga.show();
do {
server.handleClient();
// if (ClientHaFinito == 0) {
// gfx.print(".");
// vga.show();
// }
delay (1000);
} while (ClientHaFinito != 3);
vga.clear(vga.RGBA(0, 0, 255));
gfx.setCursor(0, 20);
gfx.println("Attendi qualche secondo per il riavvio...");
vga.show();
//WiFi.softAPdisconnect (true);
delay(5000);
ESP.restart();
}
I comandi inviati alla VGA sono doppi perchè quella libreria non ha una gestione del doppio buffer se si usano anche le Adafruit graphics libraries che mi servivano per usare font personalizzati (mega font tipo digitali), mentre poi nelle routine di countdown si sovrascrive per cui non c'è quel problema.