Windows Remote Arduino parte uno.

Introduzione.

 
Con questo mini articolo e con la mia esperienza iniziale, vorrei porre una breve panoramica della libreria di Windows Remote Arduino, una delle tecnologie utilizzate nella Più grande sfida Arduino Maker del mondo.
 
 

Cos’è Windows Remote Arduino.

 
. La libreria consente agli sviluppatori di poter integrare i sensori Arduino nei progetti Windows, e gestire attività o applicativi di una certa complessità dove con il solo Arduino non sarebbe possibile realizzare a pieno. Trovate la libreria Windows Remote  Arduino sulla pagina GitHubdedicata, all’interno di un repository intitolato “remote-wiring”. Per coloro che si avvicinano per la prima volta al mondo Windows, Arduino o generalizzando all’Internet of Things, qui di seguito trovate un buon punto di partenza. Di seguito, vediamo in dettaglio cosa e quali funzionalità la libreria Windows remote Arduino, è in grado di controllare:
  • GPIO Pin analogici e digitali di I/O.
  • La funzione DigitalWrite().
  • La funzione DigitalRead().
  • Ingressi analogici (PWM) mediante funzione AnalogRead().
  • Uscite analogiche (PWM) mediante funzione AnalogWrite().
  • Impostazione dei pin, quindi dichiarandoli come input o output.
  • Ricezione di eventi quando i valori dei pin subiscono una variazione di stato logico.
  • Inviare e ricevere dati tra dispositivi mediante protocollo I2C.
 
 

Uno sguardo più da vicino.

 
Ora che abbiamo visto un po’ di quello che Windows Remote Arduino può fare, prima di scrivere codice o iniziare a spiegarne qualcosa, esploriamo come funziona il tutto. In questa sezione vedremo il processo che sta alla base della progettazione della libreria, dando uno sguardo da vicino alla struttura e come detto, passando alla parte pratica dai prossimi articoli con esempi di codice. Vedremo sia la parte hardware sia la parte software. Per coloro che invece intendono proseguire il percorso di sviluppo sin da subito, le istruzioni di installazione complete ed esempi di codice possono essere trovati a questo link.
 
 

Le decisioni che stanno alla base della progettazione.

 
Discutiamo in merito alla progettazione delle API di Windows Remote Arduino. Per esempio, partendo dalle funzioni pinMode e digitalWrite, familiari agli sviluppatori Arduino che, anziché reinventarle, sono rimaste invariate allo scopo di lasciare ciò che è già familiare senza stravolgere la sintassi agevolando così la fase di sviluppo.
Le API sono state realizzate per rispecchiare il più possibile quelli che sono i concetti Arduino. Ci sono naturalmente dei cambiamenti, poiché il WinRT è fondamentalmente diverso dal Wiring base utilizzato negli sketch Arduino. Tuttavia, con un po’ di riorganizzazione, è possibile utilizzare gran parte della logica e comandi di uno sketch Arduino in un applicativo Windows 10 UWP.
Dopo aver progettato le API, è necessario un protocollo per facilitare la comunicazione tra Windows 10 e una scheda della famiglia Arduino, il protocollo utilizzato e Firmata, a mio avviso è stata la scelta più sensata. Anche in questo caso, si tratta di un progetto open – source che è stato implementato in molti altri linguaggi, tra cui Arduino Wiring, incluso oltretutto di default nei progetti Arduino.
 
 

Architettura.

 
Per quanto ho letto e capito, Windows Remote Arduino, è suddiviso in tre strati. Il primo denominato Stream comunication, ossia la comunicazione fisica, lo strato iniziale, necessario per lo scambio di dati e  informazioni tra Windows e il dispositivo Arduino. Al di sopra del livello iniziale  di comunicazione, abbiamo il protocollo Firmata che abbiamo discusso precedentemente, che si occupa di decodificare i dati grezzi in arrivo e renderli messaggi comprensibili. Infine, l’ultimo strato denominato RemoteWiring, il quale astrae tutti i messaggi di protocollo è consente così il controllo remoto delle schede Arduino da Windows.
 
 

Concetti iniziali per lo sviluppo con la libreria.

 
Per tutti i casi di utilizzo, la classe RemoteDevice contenuta nello strato RemoteWiring, e il punto di partenza, il punto iniziale che lo sviluppatore deve utilizzare per l’interazione tra i due dispositivi. Per interagire, abbiamo a disposizione le seguenti implementazioni IStream che dobbiamo necessariamente utilizzare al momento che creiamo un oggetto RemoteDevice:  usbserial, BluetoothSerial, NetworkSerial o DfRobotBleSerial, contenuti nello strato Stream comunication menzionato precedentemente. Dopo aver invocato il metodo begin() sull’oggetto Stream, tutte le successive chiamate delle API vengono effettuate tramite l’istanza RemoteDevice creata.  Possiamo così impostare i modi o stati dei pin, leggere i valori di pin digitali e/o analogici, avviare la comunicazione I2C ad altri dispositivi che supportano questo protocollo, e pilotare anche servo esempio motori stepper o altro hardware semplicemente utilizzando questa singola classe.
 
 

Espandere le funzionalità di Windows Remote Arduino.

 
Per gli utenti più esperti, Windows Remote Arduino consente anche di personalizzare i comandi e funzionalità, questo mediante Firmata SysEx – ulteriori informazioni possono essere reperite a questo Link. Per esempio la gestione della comunicazione SPI, è possibile tramite comandi SysEx. I comandi SysEx consentono agli sviluppatori di scrivere codice complesso e/o personalizzato che può essere eseguito con Windows Remote Arduino.
 
 

L’aggiunta del supporto SPI.

 
Solitamente, vi sono due metodi di comunicazione  (I2C e SPI)  che microcontrollori tipicamente usano per comunicare con altri dispositivi. Questo è comunemente richiesto per molti sensori, e altro hardware che hanno una propria MCU. Ciascuno di questi due metodi hanno i loro pro e contro, ma entrambi sono ampiamente supportati con Arduino.
Adesso, la libreria Windows Remote Arduino dipende dal protocollo Firmata per funzionare. Uno degli svantaggi di usare Firmata è che non vi è alcun supporto SPI esistente – ora le operazioni SPI con Windows Remote Arduino sono possibili utilizzando i comandi avanzati SysEx come menzionato prima. Fortunatamente, l’architettura a tre strati consentirebbe allo strato Firmata da scambiare informazioni in maniera relativamente semplice con un’altra implementazione del protocollo. Da lì, la classe RemoteDevice potrebbe essere modificata per accettare il nuovo protocollo, o una nuova implementazione di RemoteDevice potrebbe essere scritta per utilizzare il nuovo livello di protocollo.
 
 

Conclusione.

 
In questo primo articolo, ho cercato sulle basi della mia iniziale esperienza con Windows Remote Arduino, di dare dei cenni iniziali, su cosa e, cosa possiamo fare, come funziona, quali sono i pro e contro che ogni cosa purtroppo ha. Sono fiducioso che pian piano diventerà un’ottima scelta per gestire da Windows 10 i sensori della famiglia Arduino, non che pilotare qualcosa di più complesso come servomotori, motori stepper e altro hardware che in questo momento richiede uno sviluppo più accurato. Nei prossimi articoli, inizieremo la parte pratica, partendo dalla creazione dei un progetto UWP, e installare la libreria Windows Remote Arduino mediante Nuget.
 
 

Ulteriori risorse.

 
Di seguito lascio ulteriori link per approfondire in dettaglio come funziona la libreria Windows Remote Arduino.

 

 

 

 

 

Articoli Correlati

BitLocker è veramente sicuro? Ecco 4 pro e contro

FIX DXGI_ERROR_DEVICE_REMOVED in Windows

FIX RESULT_CODE_KILLED_BAD_MESSAGE in Edge