π ElioKit Java SDK
Documentazione completa della libreria Java per controllare dispositivi ElioKit via MQTT.
Iniziare
L'ElioKit Java SDK permette di controllare una scheda ElioKit da qualsiasi applicazione Java. La comunicazione avviene tramite MQTT: l'SDK si connette al broker e invia/riceve messaggi JSON.
Requisiti
- Java 11 o superiore
- Maven (per la gestione delle dipendenze)
- Accesso al broker MQTT (host, porta, credenziali)
- MAC address della scheda ElioKit (ottenibile dalla pagina Configura)
Aggiungere al progetto Maven
Opzione 1: JAR locale (fat JAR con tutte le dipendenze)
Copia il file eliokit-sdk-1.0.0-all.jar nella cartella libs/ del tuo progetto, poi aggiungi al pom.xml:
<dependency>
<groupId>com.eliokit</groupId>
<artifactId>eliokit-sdk</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/eliokit-sdk-1.0.0-all.jar</systemPath>
</dependency>
Opzione 2: Installazione locale Maven
Se hai i sorgenti dell'SDK, installalo nel repository Maven locale:
cd eliokit-java-sdk
mvn clean install
Poi nel pom.xml del tuo progetto:
<dependency>
<groupId>com.eliokit</groupId>
<artifactId>eliokit-sdk</artifactId>
<version>1.0.0</version>
</dependency>
Esempio rapido
import com.eliokit.sdk.*;
public class Main {
public static void main(String[] args) throws Exception {
// Crea l'istanza con MAC address, broker, porta, user, password
try (ElioKit board = new ElioKit("3485184647BC", "89.38.128.18", 1883, "mqttuser", "password")) {
board.connect();
Thread.sleep(2000); // attendi connessione
// Accendi tutti i LED di rosso per 3 secondi
board.setLed(0, LedColor.RED, 3);
// Emetti un bip
board.buzzer(1000, 50, 500);
// Leggi temperatura
double temp = board.getTemperature();
System.out.println("Temperatura: " + temp + " Β°C");
// Pronuncia un testo
board.say("Ciao, sono ElioKit!");
Thread.sleep(5000);
} // disconnect automatico
}
}
Costruttore
macAddress- MAC address della scheda, senza separatori (es.
"3485184647BC"). Lo puoi leggere dalla pagina Configura. brokerHost- IP o hostname del broker MQTT (es.
"89.38.128.18") brokerPort- Porta TCP del broker (tipicamente
1883) username- Username per l'autenticazione MQTT (
nullse non richiesto) password- Password per l'autenticazione MQTT (
nullse non richiesto)
Connessione
/MAC/values, /MAC/ircode, /MAC/photo).Lancia MqttException se la connessione fallisce.
Ritorna true se connesso.
AutoCloseable, quindi puΓ² essere usata con try-with-resources.Listener eventi
L'interfaccia ElioKitListener ha i seguenti metodi (tutti default, implementa solo quelli che servono):
public interface ElioKitListener {
void onConnected(); // connessione MQTT stabilita
void onDisconnected(Throwable cause); // connessione persa
void onValuesReceived(SensorValues values); // valori sensori ricevuti
void onIrCodeReceived(String irCode); // codice IR ricevuto
void onPhotoReceived(byte[] jpegData); // foto JPEG ricevuta
void onMessageReceived(String topic, String payload); // messaggio generico
void onError(String message, Throwable cause); // errore
}
LED β setLed
id0= tutti i LED,1-17= LED singolocolor- Colore dall'enum
LedColor(vedi tabella colori) duration- Durata in secondi.
0= resta acceso all'infinito
brightness- LuminositΓ da
0(spento) a100(massimo)
Esempio:
board.setLed(0, LedColor.RED, 5); // tutti i LED rossi per 5 secondi
board.setLed(1, LedColor.BLUE, 0); // LED 1 blu infinito
board.setLed(0, LedColor.GREEN, 3, 50); // tutti verdi, 3 sec, luminositΓ 50%
LED β Spegnimento
id0= tutti,1-17= specifico
Buzzer
frequency- Frequenza in Hz (es.
1000= 1kHz) volume- Volume da
0a100 duration- Durata in millisecondi (es.
500= mezzo secondo)
Esempio:
board.buzzer(1000, 50, 500); // bip a 1kHz, volume 50%, durata 500ms
board.buzzer(2000, 80, 1000); // bip a 2kHz, volume 80%, durata 1 secondo
Buzzer β Spegnimento
Vibrazione
durationMs- Durata della vibrazione in millisecondi
pauseMs- Pausa dopo la vibrazione in millisecondi
repetitions- Numero di ripetizioni (
-1= infinito)
Esempio:
board.vibrate(200); // vibrazione singola 200ms
board.vibrate(100, 200, 5); // 100ms vibra, 200ms pausa, 5 volte
board.vibrate(500, 500, -1); // vibrazione continua 500ms on/off
Audio β Text-to-Speech
text- Testo da pronunciare (es.
"Ciao, sono ElioKit!")
text- Testo da pronunciare
voice- Nome della voce AWS Polly (es.
"Carla","Giorgio")
Esempio:
board.say("Ciao mondo!");
board.say("Hello world!", "Giorgio");
Audio β Riproduzione file
url- URL del file audio (MP3, WAV, ecc.)
Audio β Radio
url- URL dello stream radio (es. URL di un flusso Icecast/Shoutcast)
channel- Numero del canale radio
Esempio:
board.radioPlay("http://icecast.radiodeejay.it/dj.mp3");
Thread.sleep(10000);
board.radioStop();
Audio β Volume
volume- Livello volume da
0(muto) a8(massimo)
Sensori β Lettura
Ritorna un oggetto SensorValues con tutti i valori, o null se timeout.
timeoutMs- Timeout in millisecondi
onValuesReceived().Ritorna null se non Γ¨ mai stata fatta una lettura.
Esempio:
SensorValues v = board.fetchValues();
if (v != null) {
System.out.println("Temperatura: " + v.getTempC() + " Β°C");
System.out.println("UmiditΓ : " + v.getHumidity() + " %");
System.out.println("Pressione: " + v.getPressure() + " mbar");
System.out.println("ProssimitΓ : " + v.getProximity() + " mm");
System.out.println("Luce: " + v.getLight() + " lux");
}
Sensori β Metodi singoli (shortcut)
Ogni metodo esegue internamente un fetchValues() e restituisce il valore richiesto. Ritorna Double.NaN o 0 in caso di errore.
true se il device Γ¨ alimentato da USB.port- Numero della porta (
1-5)
Ritorna 0 (LOW) o 1 (HIGH).
SensorValues β ProprietΓ
L'oggetto SensorValues restituito da fetchValues() contiene tutti i campi con getter:
SensorValues v = board.fetchValues();
// Ambiente
v.getTempC() // double β temperatura Β°C
v.getTempF() // double β temperatura Β°F (calcolata)
v.getTempOutC() // double β temperatura esterna Β°C
v.getHumidity() // double β umiditΓ %
v.getPressure() // double β pressione mbar
v.getAltitude() // double β altitudine m
v.getTvoc() // double β TVOC ppb
v.getLight() // double β luminositΓ lux
v.getLightRed() // int β componente rossa luce
v.getLightGreen() // int β componente verde luce
v.getLightBlue() // int β componente blu luce
v.getIrLight() // int β luce IR
// ProssimitΓ
v.getProximity() // double β distanza mm
// Movimento
v.getGyroX/Y/Z() // int β giroscopio Β°/s
v.getAccelX/Y/Z() // int β accelerometro mG
v.getCubePosition() // int β faccia cubo (1-6)
// Alimentazione
v.getBatteryVoltage() // double β tensione batteria V
v.isPlugged() // boolean β alimentato USB
v.isWirelessCharging()// boolean β ricarica wireless
// Porte digitali
v.getD1() ... v.getD5() // int β stato porte (0/1)
// Rete e posizione
v.getIp() // String β indirizzo IP
v.getMac() // String β MAC address
v.getLatitude() // double β latitudine
v.getLongitude() // double β longitudine
v.getCity() // String β cittΓ
v.getRegion() // String β regione
v.getCountry() // String β paese
v.getSsid() // String β nome rete WiFi
v.getVersion() // String β versione firmware
Camera β Scatta foto
onPhotoReceived(byte[] jpegData).resolution- Risoluzione:
0=QQVGA,1=QVGA,2=VGA,3=SVGA,4=XGA,5=SXGA (vedi tabella)
Camera β Scatta foto (sincrono)
resolution- Risoluzione (
0-5) timeoutMs- Timeout massimo in millisecondi
Ritorna i byte JPEG dell'immagine, o null se timeout.
Esempio:
byte[] jpeg = board.takePhotoSync(2, 15000);
if (jpeg != null) {
java.io.FileOutputStream fos = new java.io.FileOutputStream("foto.jpg");
fos.write(jpeg);
fos.close();
System.out.println("Foto salvata: " + jpeg.length + " bytes");
}
I/O β Porte digitali
port- Nome della porta:
"D1"-"D5","LED","IO39","IO40","IO41","IO02","IO44" value0= LOW,1= HIGH
Esempio:
board.setPort("D1", 1); // porta D1 HIGH
board.setPort("D1", 0); // porta D1 LOW
I/O β Infrarosso
address- Indirizzo NEC del dispositivo
command- Comando NEC da inviare
I/O β Webhook
url- URL dell'endpoint
sendValues- Se
true, allega i valori dei sensori alla richiesta
Sistema β Riavvio
Sistema β Programmi JSON
programJson- JSON completo del programma (es.
{"do":[...]})
Esempio:
// Esegui un programma che accende i LED rossi al tap
String program = "{\"do\":[{\"on\":{\"tap\":[{\"led\":{\"color\":12,\"duration\":2,\"id\":0}}]}}]}";
board.runProgram(program);
Sistema β Pulsanti virtuali
buttonName- Nome del pulsante:
"touchPlus","touchMinus","touchLeft","touchRight","touchCircle","touchSquare","touchTriangle","touchX","touch0"-"touch9"
Riferimento β Tabella Colori LED
| Enum | Indice | Colore |
|---|---|---|
LedColor.OFF | 0 | Spento |
LedColor.WHITE | 1 | Bianco |
LedColor.ORANGE | 2 | Arancione |
LedColor.YELLOW | 3 | Giallo |
LedColor.LIGHT_GREEN | 4 | Verde chiaro |
LedColor.GREEN | 5 | Verde |
LedColor.TEAL | 6 | Teal |
LedColor.CYAN | 7 | Ciano |
LedColor.LIGHT_BLUE | 8 | Azzurro |
LedColor.BLUE | 9 | Blu |
LedColor.PURPLE | 10 | Viola |
LedColor.MAGENTA | 11 | Magenta |
LedColor.RED | 12 | Rosso |
Riferimento β Risoluzioni Camera
| Valore | Nome | Risoluzione |
|---|---|---|
0 | QQVGA | 160 Γ 120 |
1 | QVGA | 320 Γ 240 |
2 | VGA | 640 Γ 480 (default) |
3 | SVGA | 800 Γ 600 |
4 | XGA | 1024 Γ 768 |
5 | SXGA | 1280 Γ 1024 |