Sun SPOT Small Programmable Object Technology L o Stefano Sanna Senior Engineer & Java ME Tech Lead @ beeweeb technologies http://www.gerdavax.it Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 1 Agenda ● Presentazioni! :-) ● Program the world, the Internet of things! ● Introduzione ai Sun SPOT ● Code & Demo ● Concorso Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 2 Speaker ● Senior Engineer & Java ME Tech Lead – ● Autore del libro “Java Micro Edition” – ● beeweeb technologies – http://www.beeweeb.com Hoepli Informatica, novembre 2007 Supporter @ JUG Sardegna, JMDF, JIA Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 3 Programmare il mondo reale ● ● Le reti wireless di sensori offrono scenari applicativi avvincenti: – controllo pervasivo dell'ambiente – intelligenza distribuita massiva – urban smart objects Oggetti programmabili per il mondo reale – connessi: the Internet of Things – autonomi: CPU, memoria e codice locali – sensibili all'ambiente: sicuri, robusti, con sensori Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 4 Sensori: nuova frontiera ● ● ● Essere connessi e programmabili non basta! La possibilità di “percepire” l'ambiente circostante rappresenta la nuova frontiera dell'interazione Console di gioco, telefoni cellulari, apparati veicolari, sistemi embedded: ogni oggetto programmabile deve “sentire” e agire di conseguenza in base alla grandezza fisica percepita... Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 5 I sensori nel mondo Java ME ● ● ● Java ME è la tecnologia leader per lo sviluppo di applicazioni per dispositivi mobili Un ricco insieme di API standard fornisce accesso alle funzioni multimediali, grafica 2D e 3D, connettività locale e remota, localizzazione, RFID (NFC)... Il Java Community Process ha pubblicato la Mobile Sensor API (JSR 256) per l'accesso a periferiche quali accelerometri, termometri... Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 6 Introduzione ai Sun SPOT ● ● ● ● Small Programmable Object Technology Progetto sviluppato dai Laboratori di Ricerca Sun Piattaforma per reti wireless di sensori intelligenti Laboratorio “live” per realizzare nuovi scenari applicativi: – The (Inter)net of Things – “Program the world” Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 7 Hardware ● Processor Board – 180 MHz 32 bit ARM920T core – 512K RAM/4M Flash – 2.4 GHz IEEE 802.15.4 radio – Interfaccia USB – Batteria ricaricabile agli ioni di litio 3.7V, 720 mAh – 32 uA deep sleep mode Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 8 Hardware ● Demo Sensor Board – Accelerometro 2G/6G 3-axis – Sensore di temperatura – Sensore di luminosità – 8 LED tricolori – 6 input analogici, 2 switch – 5 general purpose I/O pin – 4 uscite da 100mA Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 9 SPOTs Software ● Squawk Virtual Machine – Compatibile J2ME CLDC 1.1 – Java VM con funzionalità di sistema operativo – VM esegue il bytecode direttamente dalla memoria flash – Device driver scritti in Java – Gestione automatica consumo energetico Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 10 Sun SPOT goes open source! ● Il codice sorgente sella Squawk Virtual Machine e delle librerie dei Sun SPOT è stato recentemente rilasciato sotto licenza open source: https://spots.dev.java.net/ ● Non solo software! Anche l'hardware è disponibile con licenza open. Schemi, PCB, diagrammi di assemblaggio... do it yourself: https://spots-hardware.dev.java.net/ Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 11 Free-range e Base Station ● Il Sun SPOT Development Kit fornisce: – Due SPOT free-range equipaggiati con processor board, interfaccia radio, demo sensor board e batteria – Una Base Station, con processor board e interfaccia radio – SDK per Windows, Mac OS X e Linux – Cavo USB Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 12 Sviluppo ● ● ● L'SDK comprende librerie e utility per la compilazione, il packaging del bytecode, l'aggiornamento del firmware degli SPOT e per lanciare le applicazioni L'SDK è basato su Ant e la gestione dei progetti può essere automatizzata in qualsiasi IDE Gli SPOT supportano installazione, esecuzione e debugging remoti attraverso la connessione wireless Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 13 SPOTManager http://www.sunspotworld.com/SPOTManager Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 14 Solarium Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 15 Sun SPOT & Netbeans ● Sono disponibili alcuni plug-in per Netbeans 6.x che consentono di utilizzare l'SDK dei Sun SPOT all'interno dell'IDE Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 16 Due tipi di applicazioni ● ● Sun SPOT Application – Eseguite sui free-range SPOT – Modello applicativo basato su CLDC 1.1 e IMP 1.0 – Accesso completo alle periferiche e alla demo board Sun SPOT Host Application – Eseguite su uno SPOT configurato come basestation – Modello applicativo stand-alone – Accesso simultaneo alle librerie Sun SPOT e JSE Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 17 Classi, dispositivi, sensori ● ● La libreria standard dei Sun SPOT conta oltre 400 classi ed interfacce (circa il triplo di MIDP!) La libreria contiene driver e classi di alto livello per accedere alle interfacce fisiche dei dispositivi e alle periferiche: – ILed, ILightSensor, IAccelerometer3D, IFlashMemoryDevice, IPowerController, IPWMOutput, IAT91_PIO, IAT91_IAC... Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 18 Radio Communication ● ● I Sun SPOT sono equipaggiati di un modulo radio IEEE 802.15.4 per comunicazioni a corto raggio La Communication API è basata sul Generic Connection Framework fornisce: – RadioConnection (radio://) per scambio dati attraverso stream – RadiogramConnection (radiogram://) per comunicazione a datagrammi Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 19 Attenzione al saldatore! ● ● ● Progettare circuiti ed effettuare cablaggi e saldature richiede una certa esperienza Un assemblaggio errato o un corto circuito accidentale possono danneggiare le periferiche o lo stesso Sun SPOT Come sfruttare le potenzialità dei Sun SPOT senza la necessità di attrezzarsi con un laboratorio di elettronica? Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 20 Divertimento per tutti! ● ● La basestation permette di utilizzare il PC come gateway per qualsiasi risorsa USB, IP, Bluetooth Il kit LEGO Mindstorms NXT fornisce: – Un sistema semplice e flessibile – 4 ingressi e 3 uscite – Interfacce USB e Bluetooth – La libreria Java open source iCommand consente un accesso immediato alle API per il controllo remoto del modulo NXT Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 21 Controllo gestuale Bluetooth 802.15.4 radio USB Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 22 Descrizione progetto ● ● Gesture Controller – “Gira” su uno SPOT free-range – Legge l'inclinazione sugli assi X e Y – Invia i messaggi al Vehicle Controller Vehicle Controller – “Gira” sulla basestation – Riceve i messaggi dal Gesture Controller – Invia i comandi al vehicle LEGO Mindstorms NXT Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 23 Gesture Controller /1 public class SunSpotApplication extends MIDlet { private IAccelerometer3D accelerometer = EDemoBoard.getInstance().getAccelerometer(); private ISwitch switch1; private int st=0; private RadiogramConnection conn; protected void startApp() throws MIDletStateChangeException { switch1 = EDemoBoard.getInstance().getSwitches()[0]; runSwitchWatcher(); } Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 24 Gesture Controller /2 protected void pauseApp() { // This will never be called by the Squawk VM } protected void destroyApp(boolean unconditional) throws MIDletStateChangeException { } Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 25 Gesture Controller /3 private void runSwitchWatcher() { Thread t1 = new Thread() { public void run() { sw1.waitForChange(); if (conn == null) { try { conn = (RadiogramConnection) Connector.open("radiogram://broadcast:133"); startAccelerometerWatcher(); } catch (Exception e) { } } } }; Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 26 Gesture Controller /4 public void startAcceWatchThread(){ Thread t2 = new Thread() { public void run() { while(true){ readTiltAndSend(); } } }; t2.start(); } Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 27 Gesture Controller /5 private void readTiltAndSend() { try { int tiltX = (int) Math.toDegrees(acc.getTiltX()); int tiltY = (int) Math.toDegrees(acc.getTiltY()); String data = Integer.toString(tiltX) + "#" + Integer.toString(tiltY); send(data); } catch (IOException ex) { } try { Thread.sleep(100); } catch (InterruptedException ex) { Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 } 28 Gesture Controller /6 private synchronized void send(String data) { if (conn != null) { try{ Datagram datagram = conn.newDatagram(conn.getMaximumLength()); datagram.writeUTF(data); conn.send(datagram); } catch(IOException e){ } } } } Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 29 Controller del veicolo /1 public class SunSpotHostApplication { private static final int FORWARD = 0; private static final int BACKWARD = 1; private static final int RIGHT = 2; private static final int LEFT = 3; private static final int STOP = 4; private int last = STOP; private static Pilot pilot; // iCommand Java NXT Library public static void main(String[] args) { SunSpotHostApplication app = new SunSpotHostApplication(); startNXT(); app.start(); Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 30 Controller del veicolo /2 private static void startNXT() { try { NXTCommand.open(); pilot = new Pilot(2.1f,4.4f,Motor.A, Motor.C,true); } catch(Exception e) { e.printStackTrace(); } } Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 31 Controller del veicolo /3 public void run() { try{ RadiogramConnection conn = (RadiogramConnection) Connector.open("radiogram://:133"); Datagram dg = conn.newDatagram(conn.getMaximumLength()); while(true){ dg.reset(); conn.receive(dg); String rawData = dg.readUTF(); String[] tokens = rawData.split("#"); moveVehicle(tokens[0], tokens[1]); } }catch(IOException e){ e.printStackTrace(); } Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 32 Controller del veicolo /4 private void moveVehicle(String accelX, String accelY) { int tiltX = (int) Double.parseDouble(accelX); int tiltY = (int) Double.parseDouble(accelY); if (tiltY > 15) { if (last != BACKWARD) { pilot.backward(); last = BACKWARD; } } else if (tiltY < -15) { if (last != FORWARD) { pilot.forward(); last = FORWARD; } } Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 33 Controller del veicolo /5 } else if (tiltX < -25) { if (last != RIGHT) { pilot.rotate(30); last = RIGHT; } } else if (tiltX > 25) { if (last != LEFT) { pilot.rotate(-30); last = LEFT; } } else { if (last != STOP) { pilot.stop(); last = STOP; } } Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 34 Sun SPOT Open Grant Program ● Are you a professor, student, or hobbyist? Would you like to use wireless sensors in your curriculum, research or project? Please send us your interesting, creative proposals for wireless sensor and embedded hardware and software projects. Sun Labs will award Sun SPOT Java Development Kits to the projects we think will be most effective in inspiring and expanding the Sun SPOT Open Source community. http://www.sunspotworld.com/proposals Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 35 Conclusioni ● ● ● L'uso massivo di sensori è la nuova frontiera dell'interazione I Sun SPOT sono la “cool Java way” per creare “laboratori live” con i quali sperimentare scenari di computazione ubiqua e pervasiva Una ricca libreria di classe e la possibilità di utilizzare il PC come gateway consentono l'integrazione con servizi Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 36 Risorse ● ● ● Sun SPOT – http://www.sunspotworld.com – https://spots.dev.java.net/ Sun SPOTs and Java robotics on java.net – https://sunspot-robotics.dev.java.net/ – http://community.java.net/robotics/ LEGO Mindstorms NXT – http://mindstorms.lego.com – http://lejos.sourceforge.net Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 37 Contatti ● Stefano Sanna – ● http://www.gerdavax.it JUG Sardegna ONLUS – http://www.jugsardegna.org Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 38 Grazie per l'attenzione. Stefano Sanna, Sun SPOT Sun Technology Day 2008, Cagliari, 13 Giugno 2008 39