• Non ci sono risultati.

Dato che i nodi non sono programmati per ricevere comandi dalla Companion App ci concentreremo solamente sul nodo sink.

L’utente, tramite la stessa app utilizzata per l’installazione, seleziona la schermata di controllo e avvia la connessione al nodo.

L’applicazione in esecuzione sul nodo principale è in grado di interpretare il comando GET_AVG_LIGHT perciò l’utente lo seleziona fra quelli predefiniti (al- ternativamente lo stesso comando può essere scritto anche nel campo “Custom”) e lo invia al nodo cliccando sul bottone “Send command”.

5.4 Gestione dalla Companion App 51

Figura 5.5: L’installazione dell’infuso tramite la Companion App.

Figura 5.6: La fase di connessione della Companion App al nodo.

Una volta ricevuto il comando, il nodo tenta di contattare gli altri nodi vicini chiedendo il valore di luminosità da loro rilevato. Calcola la media dei valori e la restituisce alla Companion App che, a sua volta, la notifica all’utente. Una volta che il sistema è stato installato, l’utente può ripetere la procedura di interrogazione a piacimento.

Il caso d’uso descritto è funzionale a mostrare alcune delle caratteristiche più interessanti fra quelle sviluppate in questo lavoro, come il controllo tramite la Companion App, la gestione della comunicazione di rete, il procedimento di installazione e così via. Ciò non toglie che lo stesso paradigma descritto possa essere applicato a scenari e applicazioni diversi e arbitrariamente complessi.

52 5.4 Gestione dalla Companion App

Figura 5.7: L’invio del comando GET_AVG_LIGHT al nodo.

Capitolo 6

Conclusioni e sviluppi futuri

Questa tesi descrive la realizzazione di un sistema di sviluppo e controllo per applicazioni di una rete di sensori wireless VirtualSense.

Sviluppare software per una WSN è un compito spesso riservato a pro- grammatori esperti che hanno specifiche competenze tecniche nell’ambito della produzione di software per sistemi embedded. La piattaforma in esame è stata concepita con lo scopo di permettere la programmazione dei nodi di una WSN anche a chi ha poche o nessuna conoscenza di sviluppo su sistemi integrati.

Per raggiungere questo scopo sono state impiegate tecniche di progetta- zione e programmazione web, mobile ed embedded. Gli strumenti software sviluppati sono in grado di facilitare l’utente lungo tutto il percorso che va dalla programmazione dell’applicazione al suo deployment nei nodi della rete. Non solo, è stata realizzata anche un’applicazione che permettere il controllo del comportamento dei nodi da un comune smartphone Android.

I possibili sviluppi della piattaforma sono molteplici: citiamo solamente i più interessanti fra quelli che riguardano l’estensione delle funzionalità già implementate.

Per quanto riguarda l’App Maker, in futuro verrà esteso il set di primitive per la gestione della comunicazione nodo a nodo. In particolare, si stanno già progettando le astrazioni grafiche adatte per modellare eventi specifici di una WSN, anche complessi, come l’associazione e la disassociazione dei nodi dalla rete. Un altro sviluppo, più strettamente legato alla facilità di utilizzo dello strumento di programmazione visuale, riguarda il meccanismo tramite il quale l’utente viene notificato di errori nel codice sviluppato.

Le funzionalità implementate nella Companion App, possono essere estese in tre modi: il layout della schermata di controllo può essere definito dinami- camente in base al codice prodotto nell’App Maker; grazie all’utilizzo del fra- mework di sviluppo Xamarin, la stessa applicazione mobile può essere portata sulle altre piattaforme mobili, come iOS e Windows Phone, rendendo acces- sibili le funzionalità implementate ad un insieme di utenti ancora maggiore; le stesse funzioni messe a disposizione dalla Companion App possono essere

54 Conclusioni e sviluppi futuri

pacchettizzate in una libreria ridistribuita liberamente, in modo da rendere personalizzabile l’interfaccia di una app mobile collegata ad una particolare applicazione sviluppata per una rete di nodi VirtualSense.

L’architettura software e hardware dei nodi VirtualSense è attualmente in una importante fase di sviluppo e nelle prossime versioni si prevede l’integra- zione di funzionalità avanzate per la diffusione virale delle applicazioni fra i nodi. Parallelamente si considera di aggiungere dei controlli di sicurezza nel processo di programmazione over the air.

Il codice sviluppato nell’arco di questo lavoro sarà rilasciato pubblicamente sotto licenza open-source1 ed inserito nella repository ufficiale del progetto VirtualSense, raggiungibile all’indirizzo http://virtualsense.it.

Appendice A

Allegato A

A.1

Codice sorgente dell’applicazione sink

import java.lang.*; import javax.virtualsense.powermanagement.*; import javax.virtualsense.sensors.*; import javax.virtualsense.digitalio.*; import javax.virtualsense.digitalio.bus.*; import javax.virtualsense.concurrent.*; import javax.virtualsense.actuators.*; import javax.virtualsense.network.*; import javax.virtualsense.network.protocols.minpath.*; import javax.virtualsense.*; import javax.virtualsense.VirtualSense; import javax.virtualsense.utils.*; import javax.virtualsense.platform.InfoMsg;

class SerialReceiver extends Thread { public void run() {

System.out.println("Starting serial receiver thread!!!"); while(true){ String r = UART.readline(); String buffer = r; if(buffer != null) { if(buffer.equals("GET_AVG_LIGHT")) { System.out.println("GET_AVG_LIGHT"); CommandHandler_GET_AVG_LIGHT trd = new CommandHandler_GET_AVG_LIGHT(); trd.start(); }

56 A.1 Codice sorgente dell’applicazione sink

} } } }

class CommandHandler_GET_AVG_LIGHT extends Thread { private String strCmd = "GET_AVG_LIGHT";

public void run(){ NodeList.clear();

SharedVariables.totLight = 0;

InterestMsg intMsg = new InterestMsg(); intMsg.epoch = 1; intMsg.hops = 0; intMsg.nodeID = VirtualSense.getNodeId(); intMsg.label = DataMsg.LIGHT; VSenseApp.network.send(intMsg); Leds.setLed(0,true); Thread.sleep((8)*1000); Leds.setLed(0,false); short avgLight = 0; if ((NodeList.size()) != 0) {

avgLight = (short)(SharedVariables.totLight / (NodeList.size())); } CompanionApp.sendValue(avgLight); } } class Procedures { } class SharedVariables { static short totLight; }

public class VSenseApp {

static public Network network = new Network(Protocol.NULL); public static void motemain() {

A.2 Codice sorgente dell’applicazione nodo 57

Documenti correlati