Chiarimento riguardo sistema client/server e MQTT

Buongiorno community!

Ho bisogno del vostro aiuto per chiarirmi le idee riguardo ai sistemi client/server in maniera particolari applicati ad Arduino.

Premetto di essere abbastanza bravo a programmare Arduino ma finora non mi sono mai spinto seriamente nella comunicazione web.
Vorrei però lavorare ora ad un progetto dove diverse ESP8266 (o anche Arduino con Ethernet shield) devono comunicare con quello che mi verrebbe da chiamare server, capace di elaborare dati e gestire anche gli I/0 delle ESP8266 che mi verrebbe di chiamare client.

Il dubbio mi sorge quando leggo che il client effettua la richiesta al server che di conseguenza risponde. Finché sono gli ESP8266 ad inviare i dati degli input quando rilevano dei cambiamenti (e quindi in un qualsiasi momento) tutto torna, ma cosa succede se io vorrei che anche suddetto server sia capace di effettuare esso stesso una richiesta ad una scheda ESP8266 per andare a gestire un output in un qualunque momento? E’ possibile farlo? dipende dal protocollo di comunicazione?

Io sarei orientato ad utilizzare HTTP su TCP/IP perchè la maggior parte degli esempi che ho trovato funzionano così però ho visto che esistono innumerevoli protocolli ed uno interessante mi sembrava MQTT perchè se non ho capito male permetterebbe ad un device di pubblicare e sottoscrivere allo stesso tempo.
Cosa ne pensate?

Inoltre mi suggerite se ci sono altri protocolli di facile implementazione che potrebbero fare al caso mio?

Se un domani dovessi per forza utilizzare un modulo GSM o 3G avrei difficoltà nell’adattare questi protocolli a tale tecnologia?

enomis10:
Vorrei però lavorare ora ad un progetto dove diverse ESP8266 (o anche Arduino con Ethernet shield) devono comunicare con quello che mi verrebbe da chiamare server, capace di elaborare dati e gestire anche gli I/0 delle ESP8266 che mi verrebbe di chiamare client.

Ciao enomis10, hai scritto di voler utilizzare diverse ESP8266 senza specificarne il numero. Come avrai sicuramente letto per gestire il protocollo MQTT serve un Broker che, se non vuoi utilizzare quelli in cluod, dovrai realizzare con almeno un Raspberry. Risulta possibile implementarlo anche con un ESP8266 o ESP32 ma, per problemi di memoria, riusciranno a gestire poche unità di client. ( Tutto ciò che riguarda MQTT l'ho letto ma mai provato )
Una alternativa all'MQTT è l'utilizzo dei Websocket. (Descrizione WebSocket)
Anche questi permettono una comunicazione full-Duplex tra client e server e sono gestiti in maniera nativa da ogni client su cui gira un WebBrowser di ultima generazione. ( questi ho cominciato da poco a testarli e devo dire che li trovo comodissimi sia come semplicità di utilizzo che come velocità). Anche in questo caso ci sono dei limiti nel numero di client gestibili da un ESP ( mi sembra al massimo 10/16 ).
Io li ho provati con server ESP32 e con client Web+Javascript ma ho visto che si trovano delle librerie per poterli utilizzare anche con client realizzati da ESP8266/32 o simili.

Buono studio!

Ciao Diego e grazie per l'aiuto prima di tutto.

hai scritto di voler utilizzare diverse ESP8266 senza specificarne il numero.

Di preciso non lo so ma sicuramente non 10 o 20 ma molte di più. Si potrebbe parlare anche di qualche centinaio quindi avrei bisogno di un broker per quanto riguarda l'MQTT
Comunque mi sono anche andato ad informare per quanto riguarda il websocket e lo ritendo un ottimo strumento per quello di cui necessito e la terrò in considerazione se dovessi scartare l'opzione MQTT che presto proverò.
Per quanto riguarda il broker MQTT invece avrei una domanda. Devo per forza appoggiarmi ad un cloud esterno o posso crearne uno da per me? Avete delle guide a riguardo?

Ribadisco che io non l'ho ancora sperimentato ma ho visto varie guide per installare, in diverse piattaforme hardware, il broker MQTT opensource Mosquitto. Questo può essere installato anche su di un Raspberry. Logicamente più aumenta il "traffico" più la macchina deve essere potente.
Speriamo che qualcuno che l'ha già utilizzato possa esserti più di aiuto.

enomis10:
Per quanto riguarda il broker MQTT invece avrei una domanda. Devo per forza appoggiarmi ad un cloud esterno o posso crearne uno da per me? Avete delle guide a riguardo?

Nulla ti vieta di utilizzare il tuo pc come broker o anche una rasp come ti è stato detto, dipende sempre cosa devi farci... :roll_eyes: le prestazioni e l'affidabilità di un server sono leggermente diverse da quelle del tuo pc, idem per la rete. :smiley:

Io dal canto mio ti consiglio il programma MQTT.fx con il quale puoi fare tutte le prove e di broker free ce ne sono parecchi a cui agganciarsi per fare test.

Dai un occhiata a questa guida introduttiva poi se vuoi approfondire ci sarebbe il libro MQTT Essential - a lightweight iOT protocol (lo considero discreto).

Una mia piccola nota/curiosità: ma se parli di parecchi device e poi di un broker locale, non è che stai parlando comunque di una rete locale (ossia tutti i device sono connessi alla stessa rete TCP/IP, via Ethernet o WiFi che sia)?

Perché in tal caso non hai bisogno di cose particolari, ti basta inventarti (progettarti) un protocollino che poi usi in UDP (o TCP se ti serve una connessione diretta).

docdoc:
Una mia piccola nota/curiosità: ma se parli di parecchi device e poi di un broker locale, non è che stai parlando comunque di una rete locale (ossia tutti i device sono connessi alla stessa rete TCP/IP, via Ethernet o WiFi che sia)?

No, devo collegarmi ad internet, sono dispositivi che non si trovano nello stesso luogo. Anzi forse dovrò utilizzare in alcuni casi dei moduli GSM se non ho a disposizione una Wi-Fi (sperando che su GSM il discorso non cambi!!!).

Prova a dare un'occhiata qua.

Ciao,
P.