Come visto in precedenza la costruzione del protocollo può rivelarsi piuttosto articolato, anche perchè ora è arrivato il momento di implementarlo davvero!

Ho incontrato molti problemi nella comunicazione client - server tramite porta seriale, in particolare nella manipolazione dei dati.
Ho trovato sul sito ufficiale di Arduino delle librerie dedicate alla comunicazione tra microcontroller e un host computer.

Protocollo "Firmata"

Firmata sembra proprio essere un protocollo di comunicazione fatto apposta per il mio progetto, il sito ufficiale di questo protocollo offre inoltre una ricca spiegazione di come è strutturato e alcuni esempi pratici che dopo parecchie ore di analisi sono anche riuscito a comprendere !!
ArdFirmVB Ho provato gli esempi messi a disposizione ed alcuni esempi sviluppati in Visual Basic .NET che permettono subito di poter avere un ottimo controllo di arduino tramite interfaccia grafica su PC.

La particolarità di questo protocollo è la "leggerezza" ! Sì, infatti è molto ottimizzato in modo da trasferire il minor numero di dati possibile. Offre librerie per poter essere integrate con qualsiasi linguaggio di programmazione.

Questa soluzione è pensata però per comandare e gestire in modo integrale la scheda Arduino mediante host computer. Se invece volete delegare al lato host soltanto alcune logiche e mantenere un firmware "pensante" anche nel microcontrollore (Arduino), allora qui iniziano i primi grattacapi!!

Io ho provato a modificare il protocollo (sia lato Arduino che lato host) in modo da introdurre comandi e variabili specifici per il mio progetto ma ho dovuto abbandonare l'idea dopo parecchie serate di studio e tests.

Ora non voglio entrare troppo nei dettagli sui problemi che ho incontrato, voglio citarne soltanto uno che mi ha fatto piuttosto impazzire! Era una mia esigenza quella di leggere variabili (e non segnali) da Arduino e trasmetterli al computer host.
La computazione di byte e bit è stata una bella complicazione siccome alla base del protocollo il trasferimento su basa su singoli bytes, valori interi più grandi di 255 devono essere gestiti con pacchetti "multi-bytes" per poi essere ricomposti dall'altra parte (in questo caso sul PC).
Dopo numerosi test e tentativi sono riuscito in questo intento, utilizzando appunto il calcolo binario (in Visual Basic ad esempio il simbolo "<<" è il corrispondente della funzione "shift", ovvero la proprietà di spostare a sinistra tutti i bit.

TestProtocolloSeriale25-05-2013

 

Niente di male comunque, questo test mi ha permesso di capire in modo piuttosto approfondito la struttura di questo protocollo e affermare la manipolazione dei flussi di dati binari.

Per chi volesse approfondire questo protocollo suggerisco alcune fonti:

 

icona protocollo

PlainProtocol - un protocollo più semplice da capire

Dopo lunghe peripezie ho quindi deciso di abbandonare il protocollo Firmata, altamente performante e ottimizzato, ma altrettanto complesso e articolato da adattare, e quindi cercare altre soluzioni.

Dopo lunghe ricerche ho finalmente trovato un'idea piuttosto semplice che poteva essere utilizzato per il mio progetto.

Anche questo protocollo è pensato per essere utilizzato per la trasmissione seriale wireless (Zigbee, Wi-Fi, BlueTooth, ...) e ha una sintassi piuttosto semplice.

La struttura originale di questo protocollo è la seguente:

plainProtocol original frame

Se volete approfondire questo protocollo, a me hanno aiutato parecchio questi riferimenti:

Infine allego i file con la libreria originale e alcuni esempi per arduino.