In questo articolo andiamo a esplorare "Spresense Main Board", una scheda di sviluppo molto compatta, basata sul microcontrollore multicore CXD5602 della Sony. La sua maggiore potenzialità è quella di permettere lo sviluppo di applicazioni IoT in maniera molto semplice e veloce, anche attraverso l'utilizzo dell'IDE di Arduino oppure di Eclipse IDE. Sulla board sono inclusi i processori della Sony CXD5247GF e CXD5602GG. In aggiunta vi è un'antenna GPS, una interfaccia per camera e l'estensione per 26 pin esterni. La Spresense è estremamente espandibile con delle aggiunte esterne che saranno disponibili anche da terze parti per il Bluetooth (BTE), il WiFi e i sensori per le immagini.
Caratteristiche tecniche
La professionalità della scheda di sviluppo Spresense si nota fin da subito aprendo la confezione. Elegante e minimale, essa contiene in un pratico package il dispositivo, opportunamente protetto e stabile, assieme a un utile "bugiardino" riportante le istruzioni principali. Le caratteristiche tecniche del dispositivo sono di tutto rispetto e si trovano riassunte nella tabella 1. Ma avremo modo di approfondirle in questo articolo e in un altro di prossima pubblicazione.
Processore | ARM Cortex-M4F x 6 Cores |
Frequenza massima del clock | 156 Mhz |
Ingressi e uscite digitali | GPIO, SPI, I2C, UART, I2S |
Ulteriori specifiche | Connettore di espansione per ben 26 pin |
SRAM | 1.5 MB |
Produttore | Sony |
Memoria Flash | 8 MB |
Famiglia di processore | Sony |
Caratteristiche | GNSS: GPS, GLONASS, ingressi analogici a 2 canali, con intervallo di 0.7 V |
Tabella 1: caratteristiche della Spresense
L'utilizzo di Spresense permette soluzioni IoT di alto livello. Combinando inoltre diversi moduli di comunicazione e sensori (da acquistare separatamente) è possibile creare prototipi IoT di qualunque tipologia. Poiché la scheda contiene un chipset a elevate prestazioni e a basso consumo, è possibile realizzare un sistema IoT ad alte prestazioni anche per applicazioni mobili. La figura 1 mostra la Main Board Spresense, davvero molto piccola. Essa riesce persino a stare comodamente all'interno di un pugno chiuso, essendo le sue dimensioni solo di 50mm. x 20.6mm.
Alimentazione elettrica
Per alimentare il dispositivo è sufficiente utilizzare la porta micro USB a 5 V sulla scheda principale (di tipo B), anche se le sue porte lavorano a un voltaggio molto più basso. Il collegamento alla fonte di alimentazione è testimoniato dall'accensione di un piccolo diodo Led sul circuito, di colore blu.
La Main Board
Il sistema completo di Spresense è costituito essenzialmente da due schede:
- la Main Board, esaminata nel presente articolo;
- la Extension Board, che sarà oggetto di un prossimo articolo.
Come detto prima, la Main Board usa un processore prodotto dalla Sony appositamente per le applicazioni IoT. I nuovi chipset montati on board sono:
- il processore CXD5602 System on Chip (SoC) multi core;
- il chip CXD5247.
Approfondendo le caratteristiche tecniche menzionate prima, la Main Board è caratterizzata dalle seguenti particolarità:
- processore CXD5602 della Sony;
- memoria flash di 8 MB;
- connettore dedicato per camera;
- antenna GNSS (GPS) ;
- Pin e LED;
- GPIO multipli (UART, SPI, I2C, I2S);
- 2 canali ADC;
- 4 diodi Led verdi per applicazioni generiche;
- 1 diodo Led blu per spia di alimentazione;
- porta seriale USB.
Attenzione: tutti i pin della Main Board Spresense operano alla tensione di 1.8V. Applicando un voltaggio maggiore si potrebbe distruggere irrimediabilmente il dispositivo.
Una dettagliata descrizione delle funzionalità dei pin è illustrata in figura 2. Essa definisce i vari pin anche in termini di nome, di compatibilità con Arduino e di relativa funzione svolta.
Nella figura di cui sopra, tra gli altri, ricoprono un ruolo importante i seguenti connettori, switch e diodi Led:
- BR (Boot recovery button): ha la funzione di riportare il dispositivo alle impostazioni di fabbrica. Non ha altre funzionalità;
- da LED0 a LED3: si tratta di quattro diodi Led di colore verde, pilotabili da firmware. La loro funzionalità può essere molto generica ma altrettanto utile;
- RST (Reset button): è un piccolissimo pulsante che permette il reset del dispositivo, quando premuto;
- PWR (Power LED): è un piccolo diodo Led che emette una luce azzurra quando la scheda è alimentata;
- CN2: è il connettore Micro USB Type-B;
- CN4: è il connettore B-2-B a 100 pin per la connessione a schede esterne. Si trova sul lato opposto (bottom) del dispositivo;
- CN5: è il connettore per la camera.
Il diagramma a blocchi dell'intero dispositivo è riportato in figura 3.
Tabella comparativa delle prestazioni
In tabella 2 è riportata una utile tabella comparativa che consente di paragonare il sistema Spresense con le piattaforme Arduino Uno e Raspberry Pi 3B. L'utente faccia riferimento a essa per raffrontare i vari tipi di sistemi.
Caratteristica | Arduino Uno | Spresense | Raspberry Pi 3B |
Processore | AVR | ARM M4F | ARM A53 |
Bits | 8 | 32 | 64 |
Numero di cores | 1 | 6 | 4 |
Velocità di clock | 16 MHz | 156 MHz | 1.2 GHz |
Sistema operativo | Nessuno | Nuttx | Linux |
Tempo per il boot | 0 | <1 secondo | ~20 secondi |
RAM | 0.002MB | 1.5 MB | 1000MB |
FLASH | 0.032MB | 8 MB | Nessuna |
SD Card | Su Shield | On-Board opzionale | On-Board essenziale |
eMMC | Nessuna | Shield | Nessuna |
EEPROM | 0.001MB | Flash | microSD |
Alimentazione | 5v o 6-20V | 5V o LiPo(3.7V) | 5V |
Potenza media | 50 mW | 100mW + modalità basso consumo | 2400 mW |
Qualità audio | Shield | Alta | Bassa |
Microfono | Shield | Fino a 8 microfoni | Stereo |
Altoparlante | Shield | Stereo | Stereo |
GNSS | Shield | GPS & GLONASS | Shield |
Orologio | Shield | RTC | Shield |
Pin I/O | 14 | 29 + 4 diodi LED | 27 |
Tensione I/O | 5V | 5V/3.3V/1.8V | 3.3V |
UART | 1 | 2 | 2 |
SPI | 1 | 1 (3.3/5v) +1 (1.8V) | 1 |
I2C | 1 | 1 (3.3/5V) +1 (1.8V/camera) | 2 |
PWM | 6 | 4 | 1 |
Canali ADC | 6 | 6 | Nessuno |
Bits ADC | 10 | 10 | Nessuno |
Velocità max. ADC | ~10 kHz | 500 kSPS | Nessuna |
USB | 1 dispositivo | 2 dispositivi | 4 host |
Camera | Shield | 5M Pixel | 8M Pixel |
Video display | Nessuno | SPI fino a 360x240 | HDMI, DSI |
WiFi | Shield | Shield | 802.11n |
Bluetooth | Shield | Shield | 4.1 Classico, Low Energy |
Ethernet | Shield | Shield | 10/100 |
Cellulare | Shield | Shield | Shield |
Tabella 2: confronto tra schede
Connessione al PC
Il collegamento elettrico della Main Board Spresense al PC viene effettuato attraverso un normale cavo USB/microUsb tipo B. A connessione avvenuta si dovrebbe illuminare il diodo Led blu situato sullo stesso dispositivo, vicino il connettore stesso. Per il riconoscimento di quest'ultimo da parte del sistema occorre avere installato il driver CP210x USB UART bridge, lo stesso che si è utilizzato per l'utilizzo della scheda ESPertino. Esso permette d'implementare una comunicazione seriale attraverso la connessione USB (COM). Se il cablaggio è stato effettuato correttamente e i driver sono presenti e regolarmente installati viene visualizzata la relativa porta COM nella finestra della gestione dei dispositivi, come mostrato in figura 4.
In caso contrario occorre sostituire il cavo oppure si provi a togliere e rimettere lo stesso diverse volte nella relativa presa USB.
Installazione delle librerie
L'installazione delle librerie Spresense è assai semplice è può essere effettuata attraverso la Arduino IDE Board Manager oppure in maniera manuale. Di seguito è illustrata la prima procedura.
Impostazione dell'indirizzo delle librerie nell'IDE di Arduino
Il primo passo da compiere è quello d'informare l'IDE di Arduino della locazione (indirizzo) dalla quale scaricare le librerie. Per tale scopo si acceda al menù File->Impostazioni e si copi il seguente indirizzo nella casella "URL aggiuntive per il gestore Schede":
https://github.com/sonydevworld/spresense-arduino-compatible/releases/download/generic/package_spresense_index.json
Si prema, infine, il tasto OK. La figura 5 illustra chiaramente tale operazione.
Ricerca delle librerie
A questo punto si acceda al menu Strumenti->Scheda->Gestore schede, sempre nell'IDE di Arduino, e si digitino le prime tre o quattro lettere di Spresense ("spre"), come mostrato in figura 6. Saranno visualizzate le relative librerie.
Si può premere, dunque, il pulsante "Installa" per iniziare la procedura d'installazione. Si ricorda, ovviamente, di avere attiva la connessione a Internet poiché tale fase implica anche il download dei pacchetti. Dopo alcuni minuti le librerie di Spresense dovrebbero essere installate e la scheda regolarmente riconosciuta dall'ambiente di sviluppo, come visibile in figura 7.
Selezionando, finalmente, la scheda Spresense dall'elenco proposto dall'IDE, essa viene scelta come dispositivo attivo. Si ricordi di selezionare anche la corretta porta seriale di comunicazione e la relativa velocità.
Aggiornamento del Bootloader
Come ultimo passo è necessario aggiornare il bootloader della scheda. Si eseguano, allo scopo, i seguenti passi:
- menù Strumenti->Programmatore->Spresense Firmware Updater;
- menù Strumenti->Scrivi il bootloader.
Apparirà la videata di cui in figura 8, che invita a eseguire alcune semplici azioni.
Il nostro primo sketch
Siamo, adesso, pronti a creare il nostro primo programma, anche per testare se il dispositivo funziona correttamente. Si digiti, dunque, nell'editor dell'IDE di Arduino il seguente sketch:
void setup() { pinMode(LED0,OUTPUT); // Configura la porta in uscita pinMode(LED1,OUTPUT); pinMode(LED2,OUTPUT); pinMode(LED3,OUTPUT); } void loop() { digitalWrite(LED0,HIGH); // Accende il diodo Led digitalWrite(LED1,HIGH); digitalWrite(LED2,HIGH); digitalWrite(LED3,HIGH); delay(250); digitalWrite(LED0,LOW); // Spegne il diodo Led digitalWrite(LED1,LOW); digitalWrite(LED2,LOW); digitalWrite(LED3,LOW); delay(250); }
L'ambiente di lavoro è visibile in figura 9. Si seguano le frecce colorate per le parti salienti a cui prestare la massima attenzione.
Si compili e si scarichi il programma sul dispositivo, con gli appositi tasti. Dopo alcuni istanti i quattro diodi Led presenti sulla Main Board Spresense dovrebbero lampeggiare, come anche attestato dall'animazione presente in figura 10. Come si nota, le quattro porte relative ai diodi Led sono nominate, rispettivamente, LED0, LED1, LED2 e LED3.
E' possibile aumentare, fino al massimo (ossia fino a 1.152.000 baud), la velocità di comunicazione tra il PC e la Main Board, semplicemente selezionandola tramite il menù Strumenti->Upload Speed. Questo permette di caricare il programma sul chip in modo molto più rapido.
Proviamo le porte di I/O esterne
Lo scopo dell'articolo è quello di far conoscere, a grandi linee, le potenzialità della Main Board Spresense. Sarà poi il lettore ad approfondire le sue conoscenze e il livello di sperimentazione, secondo le proprie esigenze. Il prossimo esempio dà l'occasione di collegare un diodo Led a una porta di uscita del dispositivo, in modo da ottenere il classico lampeggio. Si realizzi, allo scopo, il cablaggio di cui alla figura 11.
Ricordiamo che il voltaggio di uscita delle porte digitali è pari a 1.8V, pertanto tale tensione è appena sufficiente a polarizzare direttamente il diodo Led. Non sarebbe nemmeno necessaria la resistenza di limitazione ma è stata inserita nello schema per evitare qualsiasi tipo di rischio. A ogni modo, con tale configurazione, il semiconduttore luminoso si accende al minimo delle sue possibilità. Occorrerebbe utilizzare un transistor collegato a una fonte di alimentazione più robusta. Tali livelli digitali sono, pertanto, sufficienti a fornire dei segnali logici di comando e non di attuazione vera e propria.
Si digiti, adesso, il seguente sketch all'interno dell'editor dell'IDE di Arduino.
void setup() { pinMode(21,OUTPUT); // Porta in uscita } void loop() { digitalWrite(21,HIGH); // Porta a livello logico alto delay(250); digitalWrite(21,LOW); // Porta a livello logico basso delay(250); }
Compilando e caricando il firmware sul dispositivo si riscontrerà il debole lampeggio del diodo Led al ritmo di due volte al secondo, in ottemperanza alle specifiche dettate dal firmware. La porta 21 è designata a operare quale pin di controllo e la sua numerazione segue, in questo caso, quella standard di Arduino.
Un semplice sistema DAC
E' molto semplice realizzare un DAC. L'esempio che segue utilizza sempre la porta 21 per implementare un sistema di conversione da digitale ad analogico. Il seguente sketch genera una tensione continua che cresce gradualmente con una percentuale di duty cycle compresa tra lo 0% e il 100%.
void setup() { } void loop() { for(int i=0;i<=250;i+=10) { analogWrite(21, i); delay(250); } }
La variazione del segnale in uscita avviene quattro volte al secondo e la relativa tensione crescente può essere letta dalla porta 21 tramite un normale tester, posizionato a 2VDC fondo scala, come visibile anche in figura 12. L'intero ciclo si ripete all'infinito.
>>>Leggi anche: Realizziamo applicazioni IoT con il Raspberry Pi 3: il sistema ordina l’acqua
Conclusioni
Con la Main Board Spresense si può realizzare, praticamente, qualunque tipologia di applicazione. Con l'utilizzo delle shield aggiuntive, assieme alla sua board di espansione, le relative capacità si moltiplicano ulteriormente. Si tratta, sicuramente, di un dispositivo che lo sviluppatore dovrebbe provare almeno una volta per la realizzazione dei propri progetti IoT. La Main Board Spresense non è solo ciò che abbiamo visto nell'articolo. Con i suoi protocolli di comunicazione (SPI, I2C, UART, I2S) è possibile collegarla a tantissimi altri dispositivi. Con essa è possibile, anche, realizzare sistemi di acquisizione ADC, prototipi audio per la registrazione e la riproduzione di musica ad alto livello, schede per l'acquisizione e il processo video e molte altre cose.
Mi sembra un ottimo compromesso tra la semplicità di Arduino Uno e la potenza di Raspberry Pi 3B. Offrendo al contempo una grande varietà di funzionalità e possibili applicazioni.