Bei Mathias Claußen (Elektor)

 

Die MadMachine SwiftIO ist ein Entwicklungsboard im BeagleBone Black Formfaktor. Was das Board für mich so attraktiv macht, ist die Tatsache, dass es eine interessante Hardware mit einem ungewöhnlichen Software-Framework kombiniert ist. Der Code kann in Swift geschrieben werden, einer Programmiersprache, die auf Apple-Geräten gut etabliert ist.

 

Die Hardware

Während Swift auf die Apple-Hardware abzielt, wird das SwiftIO-Board (Abbildung 1) von MadMachine die Sprache Swift in die Embedded-Welt bringen.

Abbildung 1: MadMachine SwiftIO-Karte.

Die auf dem Board verwendeten Kernkomponenten sind:

 

  • NXP i.MX RT1052 Crossover-Prozessor mit Arm® Cortex®-M7-Kern (600 MHz)
  • 8 MB externer QSPI-Flash
  • 32 MB SDRAM
  • Micro-SD-Kartensteckplatz, unterstützt Standard- und High Capacity SD-Karten

 

Mit dem i.MX RT1052 erhält das Board eine bullige MCU, deren Eigenschaften in Abbildung 2 zu sehen sind.

Abbildung 2: Übersicht i.MX 1052 (Quelle: NXP).

Das Board bietet zusätzlich:

 

  • 46 GPIO (general-purpose I/O)
  • 12 ADC-Kanäle (12 bit)
  • 14 PWM-Kanäle
  • 4 UART
  • 2 CAN (CAN 2.0B)
  • 2 I²C (3,4 MHz max Takt)
  • 2D-Grafik-Engine
  • RGB-Display-Ausgang (1366 x 768 WXGA max)
  • Kameraeingang (CSI 8,16,24 Bit)

 

Dies ist keine vollständige Auflistung der Funktionen, soll aber einen guten Eindruck über die Hardware vermitteln, die Sie erhalten. Auch das Paket ist kompakt in der Größe. Sie erhalten ein Board, ein USB-Kabel, einen Satz Aufkleber und das SwiftIO-Board mit einer eingesteckten SD-Karte (Abbildung 3). Alles, was Sie brauchen, um loszulegen.

Abbildung 3: Box-Inhalt.

 

Die IDE

Wenn es um die Softwareentwicklung geht, liefert MadMachine eine IDE für SwiftIO. Diese IDE kann auf deren Website heruntergeladen werden und sieht im Prinzip wie in Abbildung 4 aus. Die IDE ist für Windows und macOS verfügbar, was eine gute Nachricht für unsere Apple-Nutzer ist.

Abbildung 4: MadMachine IDE.

 

Wenn Ihnen die IDE nicht gefällt, können Sie die mitgelieferten CLI-Tools für dieses Board verwenden oder diese mit XCode oder Visual Studio Code für Ihr nächstes Projekt kombinieren. Ein Tutorial zur Verwendung des CLI-Tools wird von MadMachines bereitgestellt.

 

Nicht neu flashen, nur kopieren

Das Board enthält im angeschlossenen SPI-Flash einen Bootloader, der Ihre Anwendung beim Booten in das SDRAM kopiert und von dort aus ausführt. Das macht die Neuprogrammierung des Boards einfach. Der Onboard-Programmierer ermöglicht das Schreiben Ihres Codes auf die angeschlossene Micro-SDCard, die als Massenspeichergerät angezeigt wird. Außerdem können Sie die SDCard einfach entfernen und Ihre neue Firmware direkt darauf schreiben.

 

Das SwiftIO Framework

Was meine Aufmerksamkeit erregte, war die verwendete Software. Das SwiftIO-Framework ist in Abbildung 5 zu sehen und nutzt das darunterliegende Zephyr RTOS. Der Zugriff auf die gesamte Low-Level-Hardware, wie GPIOs , Analogfunktionen, PWM, I²C und so weiter, ist abstrahiert, so dass es einfach sein sollte, unsere eigene Software zu schreiben, ohne sich mit allen Details der i.MX 1052 MCU auseinandersetzen zu müssen. Außerdem kümmert sich diese um den SDRAM-Zugriff und die Initialisierung wie beim SPI-Flash-Setup.

Abbildung 5: Softwarestack (Quelle: MadMachine.io).

 

Als Programmiersprache für dieses Board wird Swift verwendet, das auf Apple-Systemen weit verbreitet ist und hauptsächlich im Apple-Ökosystem zu finden ist. Swift ist aber nicht auf Apple-Systeme beschränkt und kann auch für Linux und seit neuestem auch für Windows zur Entwicklung von Anwendungen verwendet werden. Da Swift eine Programmiersprache ist, die moderne Elemente und Konzepte bietet, ist die Verwendung auf einer MCU eine perfekte Ergänzung, um Ihr Swift-Wissen zu erweitern.

 

Wenn Sie sich fragen, wie SwiftIO-Code aussieht, zeigt Beispiel 1, wie man eine LED zum Blinken bringt. Beispiel 2 demonstriert, wie man PWM verwendet, um die Helligkeit einer LED zu steuern. Weitere fortgeschrittene Beispiele sind bereits enthalten, so dass Sie beginnen können, SwiftIO zu erforschen.
 

Beispiel 1: Blink-Demo-Anwendung.

/// Ändern Sie den Zustand der LED jede Sekunde, indem Sie den Interrupt setzen.

/// Importieren Sie die Bibliothek, um die relevanten Klassen und Funktionen zu aktivieren.
import SwiftIO

/// Initialisieren Sie die rote Onboard-LED und einen Timer zum Setzen des Interrupts.
let red = DigitalOut(Id.RED)
let timer = Timer()

//// Erhöhen Sie den Interrupt, um die LED jede Sekunde ein- oder auszuschalten.
timer.setInterrupt(ms: 1000) {
    red.toggle()
}


while true {

}

 

Beispiel 2: PWM-Demo-Anwendung.

//// Aufhellen oder Dimmen der LED durch Änderung des Tastverhältnisses des PWM-Signals.

//// Importieren Sie die Bibliothek, um die relevanten Klassen und Funktionen zu aktivieren.
import SwiftIO

//// Initialisieren Sie den PWM-Pin, an den die LED angeschlossen ist, wobei die anderen Parameter auf die Standardwerte gesetzt werden.
let led = PWMOut(Id.PWM0A)

/// Initialisieren Sie eine Variable, um den Wert der Einschaltdauer zu speichern.
var value: Float = 0.0

//// Ändern Sie die Helligkeit immer wieder von ein zu aus und aus zu ein.
while true {
    // Aufhelle die LED in zwei Sekunden.
    while value <= 1.0 {
        led.setDutycycle(value)
        sleep(ms: 20)
        value += 0.01
    }
    // Halten Sie das Tastverhältnis zwischen 0,0 und 1,0.
    value = 1.0

    // Dimmen der LED in zwei Sekunden.
    while value >= 0 {
        led.setDutycycle(value)
        sleep(ms: 20)
        value -= 0.01
    }
    // Halten Sie das Tastverhältnis zwischen 0,0 und 1,0.
    value = 0.0
}

 

 

Support und weitere Dokumentation

Für dieses Board können Sie ganz einfach Support bekommen, gehen Sie einfach auf den MadMachines Discord Server und stellen Sie Ihre Fragen in den entsprechenden Chats. Wie auf jeder Plattform sollten Sie eine freundliche und höfliche Formulierung verwenden; niemand möchte Trolls um sich haben. Auch tiefergehende technische Fragen können gestellt werden. Auch, wenn Sie irgendwelche Dokumente vermissen, kann es helfen, nachzufragen.

 

Final Thoughts

Wenn Sie ein Arduino-kompatibles Board suchen oder etwas, das von Haus aus mit C/C++ verwendet werden kann, ist dieses Board nichts für Sie. Außerdem hat das Board einen höheren Preis als die meisten der üblichen Entwicklungsboards. Wenn Sie bedenken, dass Sie einen Support haben, die Entwicklung auf allen wichtigen Betriebssystemen möglich ist und Sie eine moderne Programmiersprache verwenden können - mit einem Board, das sehr gut out of the box funktioniert - liegt es an Ihnen, Ihre Prioritäten zu bestimmen.


 

Weblinks


[1] MadMachine: https://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 Ressourcen: https://resources.madmachine.io/

 

Contributors

Gestaltung und Text: Mathias Claußen

Redakteur: Jens Nickel

Layout: Giel Dols

Übersetzung: Vasileios Laskaridis

Fragen oder Kommentare

Haben Sie technische Fragen oder Kommentare zu diesem Artikel? Senden Sie eine E-Mail an den Autor unter mathias.claussen@elektor.com oder kontaktieren Sie Elektor unter editor@elektor.com.