Il linguaggio di programmazione Swift, piuttosto affermato tra i dispositivi Apple, può ora essere utilizzato anche su MCU. Daremo uno sguardo alla scheda SwiftIO, che integra un processore ARM Cortex-M7 e una RAM da 32 MB.
La MadMachine SwiftIO è una scheda di sviluppo in fattore di forma BeagleBone Black. Ciò che rende questa scheda così attraente, a mio avviso, è che propone un interessante set di hardware combinati in un contesto software fuori dal comune. Il codice può essere scritto in Swift, un linguaggio di programmazione molto affermato nel mondo dei dispositivi Apple.
L'hardware
Mentre Swift punta agli hardware Apple, la scheda SwiftIO (Figura 1) di MadMachine [1] porterà il linguaggio Swift nel mondo embedded. I componenti fondamentali usati sulla scheda sono i seguenti:
- NXP i.MX RT1052 Crossover Processor con core Arm® Cortex®-M7 a 600 MHz
- 8 MB external QSPI flash
- 32 MB SDRAM
- Slot micro SDcard compatibile con SDcard ad alta capacità
Con l'i.MX RT1052 la scheda è provvista di un robusto MCU al centro, le cui caratteristiche possono essere osservate in Figura 2.
La scheda offre inoltre:
- 46 GPIO (General-Purpose I/O)
- 12 ADC channels (12 bit)
- 14 PWM channels
- 4 UART
- 2 CAN (CAN 2.0B)
- 2 I2C (3.4 MHz max clock)
- 2D graphic engine
- RGB display output (1366 x 768 WXGA max)
- Camera input (CSI 8,16,24 Bit)
Questa non è una lista completa delle caratteristiche, ma dovrebbe darvi una buona idea riguardo a quale tipo di hardware otterrete. Anche il package è di dimensioni compatte. Otterrete una scheda, un cavo USB, un set di sticker e la scheda SwiftIO con una scheda SD inserita al suo interno (Figura 3). Tutto ciò di cui avete bisogno per cominciare.
L'IDE
Quando si tratta di sviluppo software, MadMachine vi fornisce un IDE (ambiente di sviluppo integrato, Integrated Development Environment) per SwiftIO. Tale IDE può essere scaricato dal loro sito web, ne trovate un'immagine in Figura 4. L'IDE è compatibile per Windows e macOS, una buona notizia per i nostri utenti Apple. Se l'IDE non vi piace, potete usare gli strumenti CLI forniti da questa scheda oppure raggrupparli con XCode o Visual Studio Code per il vostro prossimo progetto. MadMachine vi fornisce anche un tutorial su come utilizzare gli strumenti CLI [2].
Nessun bisogno di reflash, basta copiare
La scheda include un bootloader all'interno della SPI flash che all'avvio copierà la vostra applicazione nella SDRAM. Questo facilita la riprogrammazione della scheda. Il programma su scheda vi permetterà di scrivere il vostro codice sulla micro SD connessa connettendo un dispositivo di archiviazione di massa. Potete anche semplicemente rimuovere la SD e scriverci direttamente il vostro firmware personalizzato.
Il Framework SwiftIO
Quello che ha attirato particolarmente la mia attenzione è il software utilizzato. Il framework SwiftIO è illustrato in Figura 5 e utilizza un RTOS Zephyr. L'accesso a tutti gli hardware di basso livello come GPIO, funzioni analogiche, PWM, I2C e così via, è astratto, dunque dovrebbe essere semplice scrivere sul software senza doversi occupare di tutti i dettagli inerenti all'MCU i.MX 1052, che si occupa anche dell'accesso e dell'inizializzazione della SDRAM e del setup SPI flash. Riguardo al linguaggio di programmazione utilizzato per questa scheda, Swift è comunemente usato sui sistemi Apple e molto diffuso nell'ecosistema Apple. Ma Swift non è limitato ai sistemi Apple e può essere utilizzato per lo sviluppo di applicazioni per Linux e, recentemente, anche per Windows. Dal momento che Swift è un linguaggio di programmazione che offre elementi e concetti moderni, averlo disponibile per un MCU è una motivazione perfetta per addentrarsi nel mondo Swift espandendo la propria conoscenza.
Se siete curiosi di provare il codice SwiftIO, nel Listato 1 trovate la dimostrazione di come far lampeggiare un LED. Nel Listato 2 trovate la dimostrazione di come usare un PWM per controllare la luminosità del LED. Inclusi anche molti altri esempi di livello più avanzato, così da permettervi di cominciare ad esplorare SwiftIO.
Listato 1: Blink Demo Application
/// Change the LED state every second by setting the interrupt. /// Import the library to enable the relevant classes and functions. import SwiftIO /// Initialize the red onboard LED and a timer to set interrupt. let red = DigitalOut(Id.RED) let timer = Timer() /// Raise the interrupt to turn on or off the LED every second. timer.setInterrupt(ms: 1000) { red.toggle() } while true { }
Listato 2: PWM Demo Application
/// Brighten or dimming the LED by changing the duty cycle of PWM signal. /// Import the library to enable the relevant classes and functions. import SwiftIO /// Initialize the PWM pin the LED is connected to, with other parameters set to default. let led = PWMOut(Id.PWM0A) /// Initialize a variable to store the value of duty cycle. var value: Float = 0.0 /// Change the brightness from on to off and off to on over and over again. while true { // Brighten the LED in two seconds. while value <= 1.0 { led.setDutycycle(value) sleep(ms: 20) value += 0.01 } // Keep the duty cycle between 0.0 and 1.0. value = 1.0 // Dimming the LED in two seconds. while value >= 0 { led.setDutycycle(value) sleep(ms: 20) value -= 0.01 } // Keep the duty cycle between 0.0 and 1.0. value = 0.0 }
Supporto e altra documentazione
Per questa scheda se avete bisogno di supporto potete andare sul server MadMachine Discord [3] e fare le vostre domande nell'apposita chat. Come per qualsiasi piattaforma, usate una formulazione amichevole ed educata; nessuno vuole dei troll attorno. Qui potrete trovare delucidazioni anche riguardo agli aspetti più complessi e di natura tecnica. Inoltre, nel caso in cui vi manchi qualche documento, richiederlo può essere d'aiuto.
Considerazioni finali
Se cercate una scheda compatibile con Arduino o qualcosa che possa essere usato con C/C++, questa è la soluzione per voi. Il suo costo è superiore a quello della maggior parte delle solite schede di sviluppo alle quali presumibilmente siete abituati. Se pensate di avere il giusto supporto, lo sviluppo può essere fatto su tutti i principali sistemi operativi utilizzando un linguaggio di programmazione moderno, con una scheda che funziona davvero bene fuori dagli schemi usuali, dipende da voi stabilire le vostre priorità.
Domande o commenti
Avete domande tecniche o commenti circa questo articolo?
Mandate una mail all'autore: [email protected] oppure contattate Elektor: [email protected].
Prodotti correlati
> SwiftIO - Swift-based Microcontroller Board
(SKU 19426)
www.elektor.com/swiftio-swift-based-microcontroller-board
Riferimenti
[1] MadMachine: www.madmachine.io/
[2] MadMachine CLI How-To: https://resources.madmachine.io/about-our-project#how-does-the-building-procedure-work
[3] MadMachine Discord Server: https://discord.gg/zZ9bFHK
[4] MadMachine Resources: https://resources.madmachine.io/
Web Link
ARTICOLO ORIGINALE IN INGLESE AL LINK: MadMachine SwiftIO Board | Elektor Magazine