Mi piace mischiare la tecnologia con la manualità, il virtuale con il fisico. Non appena è stata rilasciata l’app Code Connection mi sono chiesto quale sarebbe potuto essere il servizio che avrei voluto vedere integrato. Forse Microbit e Minecraft ? Forse Arduino e Minecraft ? Sicuramente Microbit e Minecraft !

Mi sarebbe davvero piaciuto avere la possibilità di azionare qualcosa su qualche scheda arduino-compatibile e vedere una reazione in Minecraft e viceversa ovviamente.
I tre servizi di coding disponibili ad interfacciarsi con Minecraft: Education Edition all’epoca erano Make Code, Tynker e Scratch (e solo dopo si è aggiunto Code.org).

Dando uno sguardo approfondito al sito web MakeCode notai che anche altre soluzioni hardware adottavano proprio quell’ambiente di coding: quelle soluzioni hardware che mi piacevano tanto tipo Arduino e Micro:bit.
Per circa due mesi ho atteso che venisse dagli sviluppatori di Microbit l’idea di creare l’estensione necessaria per permettere al loro hardware di interfacciarsi con Minecraft. E’ tutto pronto li… serve solo implementare i comandi opportuni come già fanno i quattro servizi disponibili (Make Code, Tynker, Scratch e Code.org).
Un giorno infine ho deciso di provare da solo e vedere fino a che punto questa integrazione era realizzabile.
Microbit e Minecraft: sniffare il traffico di rete
E’ chiaro che MakeCode può comunicare con Minecraft in qualche modo. Io devo solo capire come. Il primo esperimento l’ho fatto con ciò che sembrava l’esperimento più semplice e veloce.
Quando selezioni MakeCode da Code Connection non viene aperto un browser web, ma tutto “gira” nella tua macchina localmente: l’idea allora è quella di mettersi semplicemente in ascolto tra l’applicativo Code Connection e Minecraft Education Edition (MEE). Apparentemente sembra infatti che MEE reagisce a delle indicazioni che giungono dall’esterno (MakeCode in questo caso avviato da Code Connection).
Mi sono dunque messo a sniffare il traffico tra i due applicativi residenti sul mio PC, ma non sono riuscito ad intercettare qualcosa di leggibile. Sospettando l’utilizzo di una comunicazione criptata mi sono messo nella condizione migliore per analizzare il tutto di nuovo.
Diversamente da MakeCode, se da Code Connection si seleziona Tynker o Scratch viene avviato un classico browser web dal quale sembrano partire i comandi diretti ad MEE. E nel momento in cui inserisco una linea di codice in Scratch via web questa parte in chiaro nello “strato” più alto del browser.
Poi se il browser sa come criptare il tutto buon per lui, ma io avendo accesso ai tool di sviluppo del browser posso vedere in chiaro ciò che è in procinto di essere criptato dal browser e poi spedito a Minecraft Education Edition.
Microbit con Minecraft: network tools
Una volta avviato Scratch tramite Code Connection ed aperto il browser ho avviato i tool dello sviluppatore, focalizzando l’attenzione sulla scheda Network.


Perchè non avevo semplicemente provato da subito ad eseguire un controllo delle porte di ascolto utilizzate dal mio PC?
Ho avviato come amministratore il prompt dei comandi DOS e digitato: netstat -ab
Code Connection è in ascolto su ben due porte: una è la porta 8080 come indicato lato browser e l’altra è la stessa porta che ho utilizzato per connettermi con MEE. Hai presente quando avvii Code Connection prima di MEE ? Cosa ti mostra ? Guarda la schermata seguente e confronta la porta di ascolto con l’output del comando netstat -ab

Sembra proprio che Code Connection faccia da ponte. Code Connection for Minecraft.exe è in ascolto localmente sulla porta 8080 e sulla porta 19131

Microbit con Minecraft: l’analisi continua
Scratch parla con Code Connection il quale parla con MEE che esegue l’azione. Mi piace.
Inserisco due semplici comandi in Scratch e li eseguo, sempre monitorando il traffico lato browser. Il comando Scratch Move FORWARD viene tradotto in una chiamata http del tipo http://localhost:8080/move?direction=forward Una chiara corrispondenza tra il blocco Scratch eseguito ed il comando intercettato, no? Ed allora il comando Scratch Move RIGHT? Viene trasformato nella chiamata http://localhost:8080/turn?direction=right

E cambiando i comandi il risultato non cambia: anzi è ancora più chiaro. E’ sufficiente che qualcuno digiti l’indirizzo della mia macchina, la porta 8080 e un’appropriata sequenza di comandi interpretabili da Minecraft. Qualcuno tipo un browser per esempio. Non ho neanche più bisogno di Scratch. Digito nel mio browser http://localhost:8080/turn?direction=right ed ottengo: lato browser l’esito del comando inviato e lato CodeConnection/MEE il mio robottino che ha girato verso la sua destra.
Se un browser esegue quelle chiamate e il robottino reagisce di conseguenza, non mi resta altro da fare che provare a sostituire il browser con qualcosa che mi torna più comodo. Un’app per esempio.
La sviluppo velocemente con AppInventor e creo dei pulsanti che quando premuti mi effettuano delle opportune chiamate HTTP GET. L’app deve agganciarsi alla stessa rete su cui è connesso il PC su cui gira MEE. Dovendo la mia app chiamare Code Connection in esecuzione sul PC necessito sapere qual’e’ l’indirizzo IP del PC e poterlo configurare nella mia app. E dall’app – come puoi vedere dal primo rettangolo rosso – è possibile specificarlo puntualmente.
Con i pulsanti sotto MOVE e DESTROY puoi invece far muovere il robottino in varie direzioni e distruggere i blocchi.
E’ ora tutto pronto per connettere la micro:bit con Minecraft Education Edition ed utilizziamo l’app per fare da ponte.
Farlo tramite seriale sarebbe stato molto più semplice. Bastava creare un piccolo server in python in ascolto sulla seriale, ma a me piaceva l’idea del “senza fili” e dunque sfruttando la connettività bluetooth presente in Micro:bit.
Micro:bit si connette all’app tramite bluetooth e l’app riceve le variazioni della micro:bit. Ad ogni variazione l’app effettua le opportune chiamate HTTP GET verso il PC su cui stanno girando Code Connection ed MEE.
Per mettere in contatto la micro:bit con l’app e’ sufficiente “accoppiarli” secondo questa procedura.
Dall’app utilizzando i pulsanti in alto – Scan, Stop Scan, Connect, Disconnect – è poi possibile agganciarla e disconnetterla facilmente.
Di seguito trovi alcune immagini del codice inserito nell’app, mentre sia l’apk (se vuoi soltanto installarla) che il codice sorgente dell’app (e secondo la licenza Creative Commons BY-SA) sono disponibili qui

