๐Ÿ“– ElioKit Java SDK

Documentazione completa della libreria Java per controllare dispositivi ElioKit via MQTT.

โฌ‡๏ธ Download SDK

Fat JAR con tutte le dipendenze incluse (Paho MQTT + Gson).
Pronto all'uso, nessuna dipendenza aggiuntiva necessaria.

๐Ÿ“ฆ Scarica eliokit-sdk-1.0.0-all.jar

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)

๐Ÿ“ฆ Scarica il JAR, poi copialo nella cartella libs/ del tuo progetto e 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 italiana di default: it_IT-paola-medium).
text
Testo da pronunciare (es. "Ciao, sono ElioKit!")
void say(String text, String voice)
Pronuncia un testo con una voce specifica (stringa).
text
Testo da pronunciare
voice
Nome della voce Piper TTS (es. "it_IT-paola-medium"). Vedi tabella voci per l'elenco completo.
void say(String text, Voice voice)
Pronuncia un testo con una voce dall'enum Voice. Piรน comodo e type-safe rispetto alla variante con stringa.
text
Testo da pronunciare
voice
Voce dall'enum Voice (es. Voice.IT_PAOLA_MEDIUM). Vedi tabella voci per l'elenco completo.
๐Ÿ’ก Voci Piper TTS: Il sistema utilizza Piper, un motore text-to-speech open source e self-hosted. Se passi un nome voce non valido o vuoto, verrร  usata la voce di default (it_IT-paola-medium).

Esempio:

board.say("Ciao mondo!");                            // voce di default (paola)
board.say("Benvenuto a casa!", Voice.IT_PAOLA_MEDIUM);  // voce italiana Paola (enum)
board.say("Hello!", Voice.EN_US_AMY_MEDIUM);            // voce inglese Amy (enum)
board.say("Benvenuto!", "it_IT-paola-medium");           // voce italiana Paola (stringa)

Riferimento โ€” Voci Text-to-Speech

Voci disponibili sul server Piper TTS tramite l'enum Voice. Altre voci possono essere aggiunte scaricandole da Piper Voices.

EnumNome PiperLinguaGenereQualitร 
Voice.IT_PAOLA_MEDIUMit_IT-paola-medium๐Ÿ‡ฎ๐Ÿ‡น ItalianoFemminileMedia (default)
Voice.IT_RICCARDO_FASOL_X_LOWit_IT-riccardo_fasol-x_low๐Ÿ‡ฎ๐Ÿ‡น ItalianoMaschileBassa
Voice.EN_US_AMY_MEDIUMen_US-amy-medium๐Ÿ‡บ๐Ÿ‡ธ English (US)FemaleMedium
Voice.EN_US_RYAN_MEDIUMen_US-ryan-medium๐Ÿ‡บ๐Ÿ‡ธ English (US)MaleMedium
Voice.EN_GB_ALBA_MEDIUMen_GB-alba-medium๐Ÿ‡ฌ๐Ÿ‡ง English (GB)FemaleMedium
โ„น๏ธ Aggiungere voci: Per aggiungere una nuova voce, scarica il file .onnx e .onnx.json dal repository Piper Voices e copiali nella cartella voices/ del server TTS. Sono disponibili voci in molte lingue: italiano, inglese, francese, tedesco, spagnolo e altre. Puoi usare voci non presenti nell'enum passandole come stringa a say(String text, String voice).

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(int resolution, int brightness)
Scatta una foto con luminositร  regolata (asincrono).
resolution
Risoluzione (0-5)
brightness
Luminositร  della camera da -2 (piรน scuro) a +2 (piรน luminoso). 0 = default
void takePhoto()
Scatta una foto con risoluzione VGA e luminositร  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(int resolution, int brightness, long timeoutMs)
Scatta una foto con luminositร  regolata e attende la ricezione (bloccante).
resolution
Risoluzione (0-5)
brightness
Luminositร  della camera da -2 a +2 (0 = default)
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 e luminositร  default.
๐Ÿ’ก Luminositร  camera: Se le foto risultano troppo scure (ad esempio in ambienti con poca luce), usa il parametro brightness con valore 1 o 2 per schiarirle. I valori ammessi sono da -2 (molto scuro) a +2 (molto luminoso).

Esempio:

// Foto con luminositร  default
byte[] jpeg = board.takePhotoSync(2, 15000);

// Foto con luminositร  aumentata (+2) โ€” utile in ambienti bui
byte[] jpegBright = board.takePhotoSync(2, 2, 15000);

// Foto asincrona con luminositร  aumentata
board.takePhoto(2, 2);  // VGA, brightness +2

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

Servo Motore

void servo(int angle)
Muove un servo motore (SG90 o compatibile) all'angolo specificato. Utilizza il pin GPIO di default (GPIO39). Il segnale PWM resta attivo.
angle
Angolo da 0 a 180 gradi
void servo(int angle, int gpio)
Muove un servo motore all'angolo specificato su un pin GPIO personalizzato. Il segnale PWM resta attivo.
angle
Angolo da 0 a 180 gradi
gpio
Numero del pin GPIO a cui รจ collegato il servo (default: 39)
void servo(int angle, int gpio, int duration)
Muove un servo motore all'angolo specificato, mantiene la posizione per la durata indicata, poi spegne il segnale PWM.
angle
Angolo da 0 a 180 gradi
gpio
Numero del pin GPIO (39 = default)
duration
Durata in millisecondi prima di spegnere il PWM. 0 = mantieni il segnale attivo
void servoCommand(int angle)
Muove il servo inviando un comando MQTT diretto (piรน rapido, senza passare dal programma JSON). Usa il GPIO di default (39).
angle
Angolo da 0 a 180 gradi
void servoCommand(int angle, int gpio, int duration)
Muove il servo inviando un comando MQTT diretto con GPIO e durata personalizzati.
angle
Angolo da 0 a 180 gradi
gpio
Pin GPIO
duration
Durata in ms (0 = mantieni attivo)
๐Ÿ’ก Collegamento servo SG90: Il servo richiede un segnale PWM a 50Hz. Il filo arancione (segnale) va collegato al pin GPIO indicato (default GPIO39), il filo rosso a 5V e il filo marrone a GND. Il duty cycle varia da 0.5ms (0ยฐ) a 2.5ms (180ยฐ).

Esempio Java SDK:

// Muovi servo a 90ยฐ (default GPIO39, PWM resta attivo)
board.servo(90);

// Muovi servo a 45ยฐ su GPIO 40
board.servo(45, 40);

// Muovi servo a 0ยฐ, spegne PWM dopo 2 secondi
board.servo(0, 39, 2000);

// Comando diretto MQTT (piรน veloce, senza programma JSON)
board.servoCommand(180);
board.servoCommand(90, 40, 1000);

Esempio JSON (programma):

// Muovi servo a 90ยฐ sul pin di default
{"do":[{"servo":{"angle":90}}]}

// Muovi servo a 45ยฐ sul GPIO 40, mantieni per 2 secondi
{"do":[{"servo":{"angle":45, "gpio":40, "duration":2000}}]}

// Muovi servo a 0ยฐ e poi a 180ยฐ con timer
{"do":[
  {"servo":{"angle":0}},
  {"task":{"id":0, "after":2, "do":[{"servo":{"angle":180}}]}}
]}
โš ๏ธ Nota: Il servo motore utilizza il canale LEDC 2 del timer 2. Assicurati che non ci siano conflitti con altri dispositivi PWM sullo stesso timer/canale.

Configurazione Task

Il dispositivo ElioKit esegue diversi task FreeRTOS per gestire sensori, attuatori e comunicazione. รˆ possibile abilitare o disabilitare i singoli task per ridurre il carico del processore. La configurazione viene salvata in memoria permanente (NVS) e applicata al successivo avvio.

void getTaskConfig()
Richiede la configurazione corrente dei task (asincrono). La risposta arriverร  tramite il callback onTaskConfigReceived(String) del listener.
String fetchTaskConfig()
Richiede la configurazione corrente dei task e attende la risposta (sincrono, timeout 5 secondi).
String fetchTaskConfig(long timeoutMs)
Richiede la configurazione corrente dei task e attende la risposta con timeout personalizzato.
timeoutMs
Timeout in millisecondi
void setTaskConfig(String taskConfigJson)
Imposta la configurazione dei task e riavvia il device. I campi non presenti nel JSON non vengono modificati (aggiornamento parziale).
taskConfigJson
JSON con i task da abilitare/disabilitare (1 = abilitato, 0 = disabilitato)
void resetTaskConfig()
Resetta la configurazione dei task ai valori predefiniti (tutti abilitati) e riavvia il device.
โ„น๏ธ Task disponibili: mqtt, httpFileDownloader, sdCard, camera, accelGyro, humTemp, ir, proximity, barometer, lightRGB, tvoc, buzzer, servo, webhook, io, pins, audio, audioManager, systemEvents, systemMonitor.
โš ๏ธ Attenzione: Disabilitare il task mqtt impedirร  di comunicare con il device via MQTT. In tal caso, utilizzare la porta seriale USB con il comando RESET_TASKS per ripristinare la configurazione.

Esempio โ€” Disabilitare task non necessari:

// Disabilita camera, tvoc e servo
board.setTaskConfig("{\"camera\":0,\"tvoc\":0,\"servo\":0}");
// Il device si riavvierร  automaticamente

// Leggi la configurazione corrente (sincrono)
String config = board.fetchTaskConfig();
System.out.println("Task config: " + config);
// Output: {"mqtt":1,"httpFileDownloader":1,"sdCard":1,"camera":0,...,"servo":0,...}

// Ripristina tutti i task (tutti abilitati)
board.resetTaskConfig();
// Il device si riavvierร  automaticamente

Comandi seriali equivalenti (via USB):

GET_TASKS                                          โ†’ restituisce la configurazione corrente
SET_TASKS {"camera":0,"tvoc":0}                    โ†’ imposta e riavvia
RESET_TASKS                                         โ†’ ripristina default e riavvia

Listener per la configurazione task:

board.addListener(new ElioKitListener() {
    @Override
    public void onTaskConfigReceived(String taskConfigJson) {
        System.out.println("Config task: " + taskConfigJson);
    }
});
board.getTaskConfig();  // asincrono: la risposta arriva nel listener

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