ColorLed con App Bluetooth per Android

update 23 Jun 2022: project translated into English and copied to: https://hackaday.io/project/185996-ble-module-and-android-app-voil-the-lamp

Questo dispositivo non deve essere costruito, ma basta comprare un modulino (dongle USB) su Internet e scaricare del software gratuito. Vediamo il modulino (anzi, sono due). Si possono usare entrambi, perché nell’allegato che troverete in fondo all’articolo, ci sono due distinte versioni del firmware.

Entrambi i moduli sono piccole piattaforme HW di sviluppo per il chip nRF52840 della Nordic (per vedere quanto è interessante, consiglio di visitare il sito del produttore). Ho usato per la prima volta questo componente nel Novembre 2018, mentre mi trovavo per lavoro in Germania. Ho trovato un progetto iniziato e da finire e ho dovuto studiarmi tutto, perché non conoscevo né il micro, né l’ambiente di sviluppo. Non è stato facile, ma alla fine ce l’ho fatta e ho sviluppato anche altre cose interessanti. L’ambiente di sviluppo era basato sulla piattaforma Zephyr (RTOS creato dalla Linux Foundation) che da allora continuo a usare per miei programmi anche qui in Italia, dove sono rientrato l’estate scorsa e dove ora mi trovo (spero temporaneamente) bloccato per “le restrizioni”. Ho installato lo Zephyr e i tool di sviluppo Nordic su una VM Linux Ubuntu e funziona bene anche con un portatile “scarsino” con 4GB di ram in tutto.

Il modulino a destra è un prodotto della stessa Nordic e potete trovarne le caratteristiche a questo link. L’altro, invece, è un prodotto le cui caratteristiche sono descritte a questo link e anche qui, dove è presente una corposa documentazione. Il modello Nordic l’ho comprato da un fornitore di componenti elettronici, mentre il secondo l’ho comprato su “un noto sito di vendite on-line che inizia per A”. Pensavo che il secondo fosse un clone del primo e invece no. Gli I/O corrispondenti (ma in posizioni diverse) sono solo 4. Sul Nordic ci sono in più: 3 linee di I/O, un led controllabile da programma e un pulsante. Sull’altro c’è un regolatore di tensione a 3.3V con una corrente più che sufficiente per alimentare varie periferiche aggiuntive. Il secondo modulo ha tutti i pin sui connettori strip, mentre il Nordic ha due segnali “fuori”, ma sempre a passo 2.54mm vicini al connettore USB. Questi segnali sono SWDCLK e SWDIO che servono per collegare un’interfaccia J-Link. Nell’altro modulino, troviamo gli stessi segnali (più un reset esterno) sul connettore strip e quindi perdiamo le 3 linee di I/O. Il regolatore di tensione del Nordic, però, pur essendo programmabile fornisce ben poca corrente (circa 30mA e alimenta anche i circuiti interni) e quindi io, di solito, metto un regolatore esterno, nei miei progetti che prevedono periferche a 3.3V.

Per programmare la memoria flash del modulino (sia l’uno che l’altro) abbiamo bisogno di un software che troviamo sul sito Nordic a questo link. C’è per Windows, Linux e Mac, quindi potete installarlo dappertutto!

Una volta installato, dovremo aggiungere la sezione di programmazione. Il software è veramente “vasto” e pieno di potenzialità, ma procediamo per gradi:

Clicchiamo su Install e avremo il nostro programmatore pronto all’uso:

Per programmare i modulini, basta metterli in una porta USB del computer dove è stato installato il programma. All’interno del firmware, in entrambi i modulini, c’è un apposito BOOTLOADER che permette di modificare i programmi presenti. Naturalmente, quando si scrive la propria applicazione firmware, bisogna stare ben attenti a non andare a finire nelle aree di memoria occupate da MBR e BOOTLOADER. Se lo si fa, il micro potrà essere riprogrammato solo con una interfaccia J-Link! Comunque, con il mio firmware che trovate in fondo all’articolo, non correte pericoli.

Programmare il modulino

Bene, come funziona la cosa? Sintetizzando al massimo, quando il modulino viene resettato dal Power-On, viene eseguita l’App dell’utente, mentre se il reset viene dal pulsantino (vedere nella prima foto in alto dove è collocato) allora viene avviato il modo programmazione / update. Questa modalità, in entrambi i moduli, è evidenziata con il led RGB che lampeggia in rosso, accendendosi e spegnendosi con effetto dimmer.

Il modulo Nordic è fornito senza alcuna App utente e quindi appena alimentato va già in modalità programmazione. L’altro, invece, ha già un’App utente (che perderete se riprogrammate il micro) e quindi parte con quella, per cui sarà necessario alimentare il modulo tenendo premuto il tasto di reset per mandarlo in modalià programmazione.

Allora: abbiamo scaricato ed installato il software Nordic e anche il mio file .zip che contiene la App per Android (la vedremo dopo) e i files .hex per programmare il modulino Nordic o l’altro (suffisso “geek”). Inseriamo il modulo in una presa USB del computer:

Se vediamo questa scritta, il modulo inserito non è in modalità programmazione. Lo dobbiamo quindi resettare tramite il pulsantino. Appena resettato ed entrato in modalità programmazione (led rosso lampeggiante) ci troveremo davanti a questa situazione:

Eccolo qui, il modulo ora è visto come una Porta Seriale (nel mio caso, Com7). Clicchiamo quindi il pulsante e dovremmo vedere questo:

Ecco la mappatura della memoria flash del micro inserito nella porta USB. Passando con il mouse sulle varie aree avremo informazioni addizionali. Le aree MBR e BOOTLOADER sono fondamentali perché il dispositivo possa essere riprogrammato con questo metodo. Se si sbaglia e si sovrappone il proprio programma ad una o a entrambe di queste aree, sarà possibile riprogrammare il dispositivo SOLO con un’interfaccia J-Link opportunamente collegata. Questo tipo di errore, però, lo potrete fare solo se sviluppate voi stessi l’applicazione. In questo caso, tutto è studiato per non danneggiare MBR e BOOTLOADER. Se abbiamo scaricato i files del firmware, selezioniamo quello che ci interessa. Ovviamente, il firmware per il Nordic non va bene sull’altro e viceversa, per via della diversa mappatura del led RGB a bordo. Notate che sul Nordic c’è un secondo led (verde) che è controllabile via software, mentre nell’altro modulo lo stesso led verde è connesso direttamente all’alimentazione e quindi sarà sempre acceso. Scegliamo ora la versione di firmware:

Appena scelto il file, vedremo che nella mappa a destra compare l’area di memoria occupata dall’App caricata. Se ci passiamo sopra con il mouse vedremo questo:

Come mostrato in figura, l’area di memoria dell’App si colloca esattamente sopra il Master Boot Record (MBR) e quindi lo preserva. A questo punto, tra i pulsanti a destra cliccheremo “write” e null’altro. La programmazione è veloce e subito dopo il micro fa un restart ed esce quindi dal modo di programmazione, eseguendo il firmware appena inserito. In conseguenza di ciò, la Porta Seriale scompare dal sistema e vedremo questa immagine:

Tutto ciò è normale. Ora il modulino sta eseguendo il nuovo firmware che si chiama ColorLed (versione -geek o -nordic) e usa il PWM sui tre canali del led RGB e il Bluetooth per controllare il colore tramite un’App per Android.

La APP per Android

Questa App, che ho scritto con il tool software B4A della Anywhere Software (io lo uso fin dal 2011; prima era a pagamento, ora è gratis!) permette di controllare il colore del led RGB tramite Bluetooth. L’ho testato su due telefoni e un tablet con versioni Android 5, 7 e 8 e con dimensioni di schermo diverse. Ecco l’icona dell’app (minimalista):

Per installarla, dato che non si trova su Google Play, bisogna spuntare nelle impostazioni di sicurezza del telefono, la casella “installa da posizioni sconosciute”. Una volta installata e lanciata l’App, vedremo questo:

A sinistra vediamo che succede nelle versioni Android dalla 6 in poi: ci viene richiesta un’autorizzazione per la geolocalizzazione. Questo è dovuto al fatto che (anche se non ne capisco il motivo) per usare il Bluetooth bisogna attivare anche la geolocalizzazione. Se no, non funziona. Nella versione Android 5 (il mio vecchio Huawei) l’autorizzazione non viene richiesta, ma bisogna COMUNQUE attivare la geolocalizzazione, oltre al Bluetooth, per avere l’App funzionante. Nella schermata a destra vediamo che succede se il Bluetooth non è acceso: ci viene segnalato con il messaggio “…BT not powered…”. Vediamo ora cosa succede se è tutto a posto e il Bluetooth è acceso:

A sinistra vediamo cosa succede quando premiamo “Connect”. Viene effettuata una scansione dei vari dispositivi Bluetooth raggiungibili. Nella lista comparirà un ColorLed_xxxx dove xxxx sono le ultime 4 cifre del device_id che Nordic mette (non è modificabile) in tutti i chip nRF52840. Questo codice non è univoco, ma viene specificato che la possibilità di trovarne due uguali è bassissima. In ogni caso, serve solo se avete più di una unità ColorLed “visibile” dal vostro telefono. Cliccate a lungo sull’elemento della lista a cui volete collegarvi e (se tutto va bene) vedrete l’immagine a destra. Toccando sulla mappa dei colori (un po’ insolita, ma la classica “rotella” ha stufato) vedrete il led RGB sul modulino illuminarsi in modo corrispondente. Sul Nordic, vedrete anche il led singolo verde illuminarsi ad ogni comando ricevuto da Bluetooth, mentre sull’altro no, perché tale led non esiste.

Giusto come riferimento “storico”, vi propongo anche il primo circuito di controllo led che ho realizzato con un tablet Android nel lontano 2011. Ho trovato il video su un vecchio disco di backup…

Conclusioni e allegati

Questo è tutto. Nell’allegato trovate, zippati, il file .apk per lo smartphone e i due files .hex per i modulini (uno con suffisso -nordic e l’altro -geek). lo zip ha una password che è “eficara”. Ho usato il programma 7Z per comprimere e cifrare il file. Prima di ogni operazione di unzip / exec sui files scaricati da Internet, verificate il codice SHA-1 per essere sicuri che il file sia integro e non manipolato da altri. In questo caso l’hash deve essere:

SHA-1: 4D7B781B77E67BF58172F6ECEEF0B907A0847DA6

Infine il link per il download: ColorLed_200430.zip.

Dura lex, sed lex

Vi ricordo che non mi assumo nessuna responsabilità per eventuali problemi che dovessero sorgere con il download e/o l’installazione del materiale messo a disposizione. Si tratta di materiale di natura hobbistica e messo a disposizione in forma gratuita, perciò voi, utilizzandolo, vi prendete la piena responsabilità. Non sono un esperto di “legalese”, ma spero che il concetto sia sufficientemente chiaro.