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