SwiftIO is an digital circuit board that runs Swift on the naked steel. It may management sensors, shows, lights, motors and extra.
The SwiftIO board
MadMachine’s SwiftIO board is an Arduino-like system, however it will probably run Swift code natively on the {hardware}. Swift is a superb programming language for training functions, it’s a fashionable language with a JavaScript-like syntax that’s simple to be taught and perceive. Swift is protected and environment friendly, this mixture makes it an ideal candidate for embedded methods. The SwiftIO board allows us common Swift / iOS builders to construct IoT tasks utilizing our favourite programming language.
The board itself has a small footprint, it’s nearly 1,57” x 2,36” (4cm x 6cm) large.
It’s fairly a strong microcontroller. It’s positively essentially the most inexpensive Swift language studying system. It may be ideally suited for STEM training functions for college kids who need to see easy methods to construct digital circuits and get some fundamental Swift programming abilities on the similar time.
The Maker Equipment field accommodates each a 7 section and an LCD show, a servo and a DC motor with drivers, a humiture (temperature & humidity) sensor, a buzzer module a potentiometer and a light-weight sensor and lots of extra different issues (breadboard, resistors, LEDs, buttons and cables, and many others.) that you need to use to construct the starter tasks. You’ll have just about every little thing within the field that you simply want as a newcomer to get began and have some enjoyable time utilizing SwiftIO. 📦
Sadly you received’t discover a working GPS, WiFi or Bluetooth module for the SwiftIO board but, however hopefully these type of equipment are just some months away. There’s a new defend and a model new display module within the works. Oh by the way in which a defend is one thing that you would be able to plug into your board and join exterior equipment utilizing “particular” colourful cables. 🌈
Shields are boards that may be plugged on prime of the Arduino PCB extending its capabilities. The totally different shields observe the identical philosophy as the unique toolkit: they’re simple to mount, and low-cost to provide. – ArduinoShields
The board initially went on sale in July, 2020 and many individuals introduced it from all all over the world. New plug-ins, extensions and modules are nonetheless being developed by the makers, however you will need to emphasize that the SwiftIO board {hardware} is in a steady state. 💪
Technical specs:
- i.MX RT1052 Crossover Processor with Arm® Cortex®-M7 core @600MHz
- Micro SD card slot, supporting normal and excessive capability SD playing cards
- Micro USB connector for energy
- On-board USB to UART for serial communication
- 46 GPIO on left and proper edges
- On-board GRB LED
- 12x 12-bit analog to digital (ADC) converters
- 4 UART, 2 CAN, 2 IIC, and a couple of SPI
- 14 PWM pins
- Many further superior options to fulfill the wants of superior customers
Ports, communication, structure
You possibly can join the SwiftIO board to your laptop by way of a USB connector, the 2 gadgets can talk by a serial port. The USB cable will present the mandatory energy help, however alternatively you need to use an adapter or an exterior battery by a defend.
You possibly can wire up further parts utilizing the Normal Objective Enter/Output pins (GPIO). You possibly can see the precise specification on the image above, however truthfully I barely perceive this diagram.
Confession time: I don’t know shit about electronics (but). 💩
The board can be utilized with a defend and fortuitously the MakersKit arrives with a helpful instruction guide for absolute newcomers. I felt fortunate, as a result of I used to be capable of strategy this little gadget with my programmer mindset and I might focus extra on Swift as a substitute of constructing working circuits.
So what’s truly beneath the hood? How can I construct & run purposes for SwiftIO?
The grey space is the {hardware} itself, on prime of that within the pink-ish/purple packing containers there’s this Zephyr layer which I’ve by no means heard earlier than. I’m simply scratching the floor right here, however that’s fantastic, since as a Swift developer we solely care in regards to the orange stuff. Lengthy story quick, there’s a customized constructed Swift toolchain for this system that enables us to construct and run Swift purposes on the board. 😅
If there’s a toolchain, then we will run Swift binaries, however how will we talk with the ports and stuff like that? Luckily the SwiftIO framework is right here for us. It gives an quick access to speak with exterior {hardware} equipment. You possibly can learn or write digital and analog alerts utilizing the communication protocol. Are you prepared for some Swift code?
The SwiftIO setting
Though the {hardware} is steady, the software program just isn’t completed but. There are two choices out there, however if you’re on a Home windows machine, you must seize the official MadMachine IDE and use that. The reason being that the Swift Bundle Supervisor just isn’t prepared for that platform but, so that you received’t be capable to work with the instruments that I’ll present you subsequent. Sorry Home windows, no offense. 😅
So choice A, is to go along with the IDE, it’s very easy to make use of and gives an excellent DX. Possibility B, be taught a bit extra in regards to the underlying toolkit and observe my information, it’s a bit extra difficult, however you’ll know extra in regards to the technical infrastructure in the event you select this path. 🤔
Putting in the MadMachine SDK & CLI
As a macOS or Linux person you must know that you would be able to set up the unofficial MadMachine SDK alongside a command line software known as mm. As you possibly can see this MadMachine SDK is written in Swift, however you must know that I ported a python script from the unique mm-sdk undertaking with the assistance of Marcus Kida. First, he made an Xcode template by invoking the unique script contained in the official MadMachine IDE, then I believed, it might be cool to eliminate the IDE for good, and now, right here we go, we’ve got a standalone Swift model of the mandatory construct instruments. You possibly can set up it like this:
git clone https://github.com/EmbeddedSwift/MadMachine.git
cd MadMachine
make set up
Now try to be prepared to make use of the mm cli app, you possibly can examine the out there instructions contained in the README file on GitHub. I’ve not examined this on Linux but, so in the event you discover any points, please don’t hesitate to report or submit a PR. That is an experimental undertaking, so hold this in thoughts. 😅
The MadMachine toolchain
With a purpose to use the MadMachine SDK you will have a working toolchain put in in your laptop. You possibly can seize the newest one by working the next command:
mm toolchain --upgrade
This may seize the newest launch from the unofficial MadMachine toolchain repository, and place it beneath your property folder contained in the .MadMachine
listing. There may be one further factor that now you need to do earlier than you could possibly begin constructing SwiftIO apps. Presently there’s one further python script that was not ported but, as a result of it will likely be utterly eradicated sooner or later. For now you continue to need to obtain the official MadMachine SDK from the GitHub releases web page and place all the contents of the mm-sdk/tools_[platform]/scripts/dist/gen_isr_tables
folder into the ~/.MadMachine/legacy
listing. You might need to create a legacy folder. 🙈
The SwiftIO framework
The SwiftIO framework goes to be linked with the applying binary, we’ve got to put in it (with the assistance of the mm-cli software) as a system library first. There’s an unofficial repo with a makefile for this:
git clone https://github.com/EmbeddedSwift/SwiftIO
cd SwiftIO
make set up
You could find the library reference for the SwiftIO framework, however we’ll see you can also make it work, in just some moments. Earlier than we go additional you must word that the customized MadMachine toolchain is a modified model of the Swift 5.1 toolchain. This implies that you would be able to’t use Swift 5.3 on the board but, however hopefully the creators of SwiftIO will launch new software program parts actual quickly. 🤞
Utilizing Xcode
The SwiftIO framework could be compiled in your native machine with the native Swift toolchain (utilizing Xcode), so it’s attainable to construct purposes with out focusing on the board, and afterward you possibly can re-compile the supply information with the mm-cli command, signal the ultimate binary and deploy it to the SwiftIO board after you’ve pressed the obtain button. That is the present workflow in a nutshell.
There may be an present Xcode template created by @kidmar that you need to use as a place to begin.
Utilizing SPM
These days I desire to create a Swift bundle for nearly every little thing. You need to use SPM with a Makefile and your favourite editor to create SwiftIO apps. You simply need to initialize a brand new executable bundle with the mandatory dependencies, for instance:
// swift-tools-version:5.3
import PackageDescription
let bundle = Bundle(
title: "myProject",
merchandise: [
.executable(name: "myProject", targets: ["myProject"]),
],
dependencies: [
.package(url: "https://github.com/EmbeddedSwift/SwiftIO", .branch("main")),
.package(url: "https://github.com/EmbeddedSwift/SHT3x", .branch("main")),
.package(url: "https://github.com/EmbeddedSwift/LCD1602", .branch("main")),
],
targets: [
.target(name: "myProject", dependencies: [
.product(name: "SwiftIO", package: "SwiftIO"),
.product(name: "SHT3x", package: "SHT3x"),
.product(name: "LCD1602", package: "LCD1602"),
]),
]
)
Contained in the major.swift
file now you possibly can write a easy Humiture sensor app that shows the present humidity & temperature on a 16×2 LCD show like this:
import SwiftIO
import SHT3x
import LCD1602
// Get a quantity with one decimal place.
extension Float {
func format(_ f: Int) -> Float {
guard f > 0 else {return self}
var mul = 10
for _ in 1..
Now in the event you open the Bundle.swift file utilizing Xcode you possibly can even construct the undertaking regionally utilizing the CMD+B shortcut, however don’t attempt to run it, since your Mac just isn’t a SwiftIO board… 😅
If you wish to construct and run this undertaking you need to goal the SwiftIO board. The mm-cli
can’t resolve bundle dependencies (but) so you need to set up the mandatory dependencies (SHT3x, LCD1602) the identical approach as we did with the SwiftIO library. You need to clone each repositories and use the makefile to put in them as native MadMachine system libraries. This may transfer the required information beneath the ~/.MadMachine/libraries
folder, all of the out there libraries “reside” there. 🔨
After you’ve put in the libraries, you need to use the next Makefile for the precise binary builds:
construct:
mm construct --name myProject --binary-type executable --input . --output ./myProject
run: construct
mm board --run ./myProject/swiftio.bin
clear:
rm -r ./myProject
The mm construct
command invokes the swiftc
compiler from the SwiftIO toolchain with the correct search paths and library search paths. The mm board --run [binary]
command will merely copy the mandatory information to the MadMachine board whether it is in obtain mode. You need to press the obtain button on the board earlier than you run this command. Urgent the obtain button will mount the SD card so we will deploy the signed binary to the system, then eject the storage, which is able to restart the board and the brand new utility will probably be loaded & executed straight away. 🚀
The MadMachine IDE
In the event you don’t wish to play with command line utilities, you possibly can at all times use the MadMachine IDE to construct and ship your tasks. It makes use of a mmp
file to explain dependencies, so it will probably resolve them on the fly, however I don’t like the truth that I’ve to make use of a brand new bundle supervisor and editor to work with Swift. I’m in a love and hate relationship with Xcode (plus I’m an old-school Chic Textual content fan). ❤️
Anyway, you’ll find actually nice examples with a devoted GitHub repository and lots of video tutorials on the official YouTube channel. You possibly can entry all of the MakerKit pattern codes, they’re each on GitHub and you’ll clone a template with a click on utilizing the MadMachine IDE.
Conclusion
For me, the SwiftIO board was a pleasing shock. I at all times needed to play with embedded methods, know slightly extra about {hardware} and low stage stuff, however the Raspberry PI and the Arduino felt like alien planet. As soon as I’ve tried to construct an app for a Raspberry PI at a hackaton, nevertheless it was a whole catastrophe, I used to be disenchanted, as a result of the instruments and the developer expertise was actually dangerous.
The promise of MadMachine is that you would be able to simply use Swift on such a tool and I consider that Andy Liu created one thing that may have a shiny future on the long run. I felt in love with SwiftIO proper after I’ve assembled my first circuit and deployed my very first Swift supply. It was a seamless (ache free) expertise and I consider that’s a very necessary issue for builders who by no means used such gadgets earlier than. This may be the start and the way forward for Swift on embedded methods. 😍
You possibly can construct some actually enjoyable stuff with SwiftIO, it’s an ideal software for studying how electrical circuits work. I can’t wait to see increasingly more sensors and libraries out there for MadMachine. You probably have an concept or a query be at liberty to affix the official Discord server.