La carte MadMachine SwiftIO
sur
De Mathias Claußen (Elektor)
MadMachine SwiftIO est une carte de développement au format BeagleBone Black. Ce qui la rend attrayante pour moi est le fait que nous avons un ensemble de matériel intéressant combiné à un cadre logiciel peu commun. Le code peut être écrit en Swift qui est un langage de programmation bien établi sur les appareils Apple.
Le matériel
Alors que Swift est destiné au matériel Apple, la carte SwiftIO (figure 1) de MadMachine apporterait le langage Swift au monde de l'embarqué.
Les principaux composants utilisés sur la carte sont :
- Processeur NXP i.MX RT1052 avec un cœur ARM Cortex-M7 cadencé à 600 MHz
- Flash QSPI externe de 8 Mo
- 32 MB SDRAM
- Connecteur pour carte microSD, supportant les cartes standard et haute capacité
Avec le i.MX RT1052, la carte est dotée d'un microcontrôleur robuste en son centre, dont les caractéristiques sont ci-dessous (Figure 2).
La carte offre en plus :
- 46 GPIO (E/S à usage général)
- 12 canaux A/N (12 bits)
- 14 canaux MLI
- 4 UART
- 2 bus CAN 2.0B
- 2 bus I²C (3,4 MHz max)
- Moteur graphique 2D
- Sortie vidéo RVB (1366 x 768 WXGA max)
- Entrée caméra (CSI 8, 16, 24 bits)
Il ne s'agit pas d'une liste exhaustive des caractéristiques, mais elle donne une idée du matériel. Même l'emballage est compact. Vous recevez une carte, un câble USB, un jeu d'autocollants et la carte SwiftIO avec une carte SD insérée (figure 3). Tout ce dont vous avez besoin pour commencer.
L'EDI
En ce qui concerne le développement de logiciels, MadMachine vous fournit un EDI pour SwiftIO. Il peut être téléchargé sur son site Web et ressemble à la figure 4. Il est disponible pour Windows et macOS, ce qui est une bonne nouvelle pour nos utilisateurs Apple.
Si vous n'aimez pas l'EDI, vous pouvez utiliser les outils ILC fournis pour cette carte ou les associer à XCode ou Visual Studio Code pour votre prochain projet. Un tutoriel sur la façon de les utiliser est fourni par MadMachines.
Il suffit de copier
La carte comprend dans sa mémoire flash SPI un chargeur d'amorçage qui copiera votre application dans la SDRAM au démarrage puis l'exécutera. Cela rend la reprogrammation de la carte facile. Le programmateur intégré permet d'écrire votre code sur la carte microSD en l'affichant comme périphérique de stockage de masse. De plus, vous pouvez simplement retirer la carte et écrire votre nouveau firmware directement sur celle-ci.
SwiftIO
Ce qui a retenu mon attention, c'est le logiciel utilisé. Le cadriciel SwiftIO, affiché ci-dessous (figure 5), utilise le système d'exploitation temps réel (RTOS) Zephyr. L'accès au matériel de bas niveau, comme les GPIO, les fonctions analogiques, le MLI, l'I²C et ainsi de suite, est abstrait, il devrait donc être facile d'écrire son propre logiciel sans avoir à s'occuper de tous les détails du microcontrôleur i.MX RT1052. De plus, cela prend en charge l'accès et l'initialisation de la SDRAM et la configuration de la flash SPI.
En ce qui concerne le langage de programmation utilisé pour cette carte, Swift est couramment utilisé sur les systèmes Apple et se trouve principalement dans l'écosystème Apple. Il n'est pas limité à ça et peut être utilisé pour développer des applications pour Linux et, depuis peu, pour Windows. Comme Swift offre des éléments et des concepts modernes, le fait qu'il soit disponible sur un microcontrôleur vous permet d'approfondir vos connaissances Swift.
Si vous vous demandez à quoi ressemble un programme SwiftIO, le listage 1 montre comment faire clignoter une LED. Le listage 2 montre comment utiliser le MLI pour contrôler sa luminosité. Des exemples plus avancés sont déjà inclus, afin que vous puissiez commencer à explorer SwiftIO.
Listage 1: Faire clignoter une LED
/// Changez l'état d'une LED toutes les secondes sous contrôle d'interruptions.
/// Importez la bibliothèque pour pouvoir accéder aux classes et fonctions nécessaires.
import SwiftIO
/// Initialisez la LED rouge et la minuterie pour déclencher les interruptions.
let red = DigitalOut(Id.RED)
let timer = Timer()
/// Déclenchez l'interruption pour allumer ou éteindre la LED toutes les secondes.
timer.setInterrupt(ms: 1000) {
red.toggle()
}
while true {
}
Liste 2: Avec MLI.
/// Faire varier l'intensité d'une LED en modifiant le rapport cyclique du signal MLI.
/// Importez la bibliothèque pour pouvoir accéder aux classes et fonctions nécessaires.
import SwiftIO
/// Initialisez la sortie MLI connectée à la LED.
let led = PWMOut(Id.PWM0A)
/// Initialisez une variable pour stocker le rapport cyclique.
var value: Float = 0.0
/// Variez la luminosité de min au max et inversement.
while true {
// Allumez la LED en deux secondes.
while value <= 1.0 {
led.setDutycycle(value)
sleep(ms: 20)
value += 0.01
}
// Gardez le rapport cyclique entre 0.0 et 1.0.
value = 1.0
// Eteignez la LED en deux secondes.
while value >= 0 {
led.setDutycycle(value)
sleep(ms: 20)
value -= 0.01
}
// Gardez le rapport cyclique entre 0.0 et 1.0.
value = 0.0
}
Assistance et informations supplémentaires
Pour cette carte, vous pouvez facilement obtenir de l'aide sur le serveur Discord de MadMachine et de poser vos questions dans les chats appropriés avec un langage amical et poli ; personne ne veut de trolls. Vous pouvez même poser des questions techniques plus profondes. De plus, s'il vous manque des documents, vous pouvez toujours les demander.
Dernières réflexions
Si vous cherchez une carte compatible Arduino ou quelque chose qui puisse être utilisé avec C/C++ dès le départ, celle-ci n'est pas faite pour vous. En outre, son prix est plus élevé que celui de la plupart des cartes de développement habituelles. Si vous considérez que vous disposez d'une assistance technique, que le développement peut se faire sur tous les principaux systèmes d'exploitation et que vous pouvez utiliser un langage de programmation moderne, c'est à vous de choisir.
Liens Internet
[1] MadMachine: https://www.madmachine.io/
[2] MadMachine comment-faire avec ILC: https://resources.madmachine.io/about-our-project#how-does-the-building-procedure-work
[3] MadMachine Serveur Discord: https://discord.gg/zZ9bFHK
[4] Ressources de MadMachine: https://resources.madmachine.io/
Discussion (0 commentaire(s))