πŸ“– 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

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

ElioKit(String macAddress, String brokerHost, int brokerPort, String username, String password)
Crea un'istanza ElioKit con autenticazione MQTT.
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 (null se non richiesto)
password
Password per l'autenticazione MQTT (null se non richiesto)
ElioKit(String macAddress, String brokerHost, int brokerPort)
Crea un'istanza ElioKit senza autenticazione.

Connessione

void connect()
Connette al broker MQTT e sottoscrive automaticamente ai topic di risposta del device (/MAC/values, /MAC/ircode, /MAC/photo).

Lancia MqttException se la connessione fallisce.

void disconnect()
Disconnette dal broker MQTT.
boolean isConnected()
Verifica se il client Γ¨ connesso al broker.

Ritorna true se connesso.

void close()
Disconnette e chiude il client MQTT. La classe implementa AutoCloseable, quindi puΓ² essere usata con try-with-resources.

Listener eventi

void addListener(ElioKitListener listener)
Registra un listener per ricevere eventi dal device.

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

void setLed(int id, LedColor color, int duration)
Accende un LED al colore specificato.
id
0 = tutti i LED, 1-17 = LED singolo
color
Colore dall'enum LedColor (vedi tabella colori)
duration
Durata in secondi. 0 = resta acceso all'infinito
void setLed(int id, LedColor color, int duration, int brightness)
Accende un LED con luminositΓ  controllata.
brightness
LuminositΓ  da 0 (spento) a 100 (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

void ledOff(int id)
Spegne un LED specifico.
id
0 = tutti, 1-17 = specifico
void allLedsOff()
Spegne tutti i LED.

Buzzer

void buzzer(int frequency, int volume, int duration)
Attiva il buzzer.
frequency
Frequenza in Hz (es. 1000 = 1kHz)
volume
Volume da 0 a 100
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

void buzzerOff()
Spegne il buzzer.

Vibrazione

void vibrate(int durationMs, int pauseMs, int repetitions)
Attiva la vibrazione con pattern personalizzato.
durationMs
Durata della vibrazione in millisecondi
pauseMs
Pausa dopo la vibrazione in millisecondi
repetitions
Numero di ripetizioni (-1 = infinito)
void vibrate(int durationMs)
Vibrazione singola.
void vibrateOff()
Ferma la vibrazione.

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

void say(String text)
Pronuncia un testo tramite text-to-speech (voce di default).
text
Testo da pronunciare (es. "Ciao, sono ElioKit!")
void say(String text, String voice)
Pronuncia un testo con una voce specifica.
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

void playAudio(String url)
Riproduce un file audio da URL.
url
URL del file audio (MP3, WAV, ecc.)

Audio β€” Radio

void radioPlay(String url)
Avvia la riproduzione di uno stream radio da URL.
url
URL dello stream radio (es. URL di un flusso Icecast/Shoutcast)
void radioPlay(int channel)
Avvia una radio per numero di canale.
channel
Numero del canale radio
void radioStop()
Ferma la riproduzione della radio.

Esempio:

board.radioPlay("http://icecast.radiodeejay.it/dj.mp3");
Thread.sleep(10000);
board.radioStop();

Audio β€” Volume

void setVolume(int volume)
Imposta il volume audio.
volume
Livello volume da 0 (muto) a 8 (massimo)
void volumeUp()
Alza il volume di un livello.
void volumeDown()
Abbassa il volume di un livello.
⚠️ Nota: Il volume va impostato dopo l'avvio dello streaming audio. Impostarlo prima non ha effetto.

Sensori β€” Lettura

SensorValues fetchValues()
Richiede i valori dei sensori e attende la risposta (sincrono, timeout 5 secondi).

Ritorna un oggetto SensorValues con tutti i valori, o null se timeout.

SensorValues fetchValues(long timeoutMs)
Come sopra con timeout personalizzato.
timeoutMs
Timeout in millisecondi
void readValues()
Richiede i valori dei sensori (asincrono). La risposta arriva nel listener onValuesReceived().
SensorValues getLastValues()
Restituisce l'ultimo snapshot dei valori ricevuti, senza fare una nuova richiesta.

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.

double getTemperature()
Temperatura interna in Β°C.
double getTemperatureF()
Temperatura interna in Β°F.
double getTemperatureOut()
Temperatura esterna (barometro) in Β°C.
double getHumidity()
UmiditΓ  relativa in %.
double getPressure()
Pressione atmosferica in mbar (hPa).
double getAltitude()
Altitudine calcolata dal barometro in metri.
double getLight()
LuminositΓ  ambientale in lux.
int getLightRed() / getLightGreen() / getLightBlue()
Componenti RGB della luce ambientale.
int getIrLight()
Luce infrarossa.
double getProximity()
Distanza dal sensore di prossimitΓ  in mm.
double getTvoc()
TVOC (Total Volatile Organic Compounds) in ppb.
int getCubePosition()
Faccia del cubo attualmente in alto (1-6).
double getBatteryVoltage()
Tensione batteria in Volt.
boolean isPlugged()
Ritorna true se il device Γ¨ alimentato da USB.
int getGyroX() / getGyroY() / getGyroZ()
VelocitΓ  angolare del giroscopio sugli assi X, Y, Z in Β°/s.
int getAccelX() / getAccelY() / getAccelZ()
Accelerazione sugli assi X, Y, Z in mG (millesimi di G).
int getDigitalPort(int port)
Legge lo stato di una porta digitale.
port
Numero della porta (1-5)

Ritorna 0 (LOW) o 1 (HIGH).

double getLatitude() / double getLongitude()
Coordinate GPS approssimate (geolocalizzazione IP).
String getIp()
Indirizzo IP del device.

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

void takePhoto(int resolution)
Scatta una foto (asincrono). Il risultato arriva nel listener onPhotoReceived(byte[] jpegData).
resolution
Risoluzione: 0=QQVGA, 1=QVGA, 2=VGA, 3=SVGA, 4=XGA, 5=SXGA (vedi tabella)
void takePhoto()
Scatta una foto con risoluzione VGA (default).

Camera β€” Scatta foto (sincrono)

byte[] takePhotoSync(int resolution, long timeoutMs)
Scatta una foto e attende la ricezione (bloccante).
resolution
Risoluzione (0-5)
timeoutMs
Timeout massimo in millisecondi

Ritorna i byte JPEG dell'immagine, o null se timeout.

byte[] takePhotoSync()
Scatta una foto VGA con timeout 15 secondi.

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

void setPort(String port, int value)
Imposta l'output di una porta digitale.
port
Nome della porta: "D1"-"D5", "LED", "IO39", "IO40", "IO41", "IO02", "IO44"
value
0 = LOW, 1 = HIGH

Esempio:

board.setPort("D1", 1);  // porta D1 HIGH
board.setPort("D1", 0);  // porta D1 LOW

I/O β€” Infrarosso

void irSend(int address, int command)
Invia un codice infrarosso NEC.
address
Indirizzo NEC del dispositivo
command
Comando NEC da inviare

I/O β€” Webhook

void webhook(String url, boolean sendValues)
Esegue una chiamata HTTP GET/POST verso un endpoint esterno.
url
URL dell'endpoint
sendValues
Se true, allega i valori dei sensori alla richiesta

Sistema β€” Riavvio

void restart()
Riavvia il dispositivo ElioKit.

Sistema β€” Programmi JSON

void runProgram(String programJson)
Invia un programma JSON per esecuzione immediata (live, senza salvare).
programJson
JSON completo del programma (es. {"do":[...]})
void installProgram(String programJson)
Installa un programma JSON nel device (salva in NVS e riavvia).

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

void pressVirtualButton(String buttonName)
Simula la pressione di un tasto touch virtuale.
buttonName
Nome del pulsante: "touchPlus", "touchMinus", "touchLeft", "touchRight", "touchCircle", "touchSquare", "touchTriangle", "touchX", "touch0"-"touch9"

Riferimento β€” Tabella Colori LED

EnumIndiceColore
LedColor.OFF0Spento
LedColor.WHITE1Bianco
LedColor.ORANGE2Arancione
LedColor.YELLOW3Giallo
LedColor.LIGHT_GREEN4Verde chiaro
LedColor.GREEN5Verde
LedColor.TEAL6Teal
LedColor.CYAN7Ciano
LedColor.LIGHT_BLUE8Azzurro
LedColor.BLUE9Blu
LedColor.PURPLE10Viola
LedColor.MAGENTA11Magenta
LedColor.RED12Rosso

Riferimento β€” Risoluzioni Camera

ValoreNomeRisoluzione
0QQVGA160 Γ— 120
1QVGA320 Γ— 240
2VGA640 Γ— 480 (default)
3SVGA800 Γ— 600
4XGA1024 Γ— 768
5SXGA1280 Γ— 1024