Getting began with SwiftIO – The.Swift.Dev.

Getting began with SwiftIO – The.Swift.Dev.


SwiftIO is an digital circuit board that runs Swift on the naked metallic. It could management sensors, shows, lights, motors and extra.

The SwiftIO board

MadMachine’s SwiftIO board is an Arduino-like system, however it may possibly run Swift code natively on the {hardware}. Swift is a superb programming language for schooling functions, it’s a trendy language with a JavaScript-like syntax that’s straightforward to study 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 initiatives utilizing our favourite programming language.

SwiftIO board

The board itself has a small footprint, it’s nearly 1,57” x 2,36” (4cm x 6cm) massive.

It’s fairly a robust microcontroller. It’s positively essentially the most inexpensive Swift language studying machine. It may be very best for STEM schooling functions for college kids who need to see how one can construct digital circuits and get some primary Swift programming expertise on the similar time.

The Maker Package field comprises each a 7 phase 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 plenty of extra different issues (breadboard, resistors, LEDs, buttons and cables, and so on.) that you should utilize to construct the starter initiatives. You should have just about all the pieces within the field that you just want as a newcomer to get began and have some enjoyable time utilizing SwiftIO. 📦

Sadly you gained’t discover a working GPS, WiFi or Bluetooth module for the SwiftIO board but, however hopefully these sort of equipment are just some months away. There’s a new protect and a model new display module within the works. Oh by the best way a protect is one thing which you can 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 comply with the identical philosophy as the unique toolkit: they’re straightforward to mount, and low-cost to supply. – ArduinoShields

The board initially went on sale in July, 2020 and many individuals introduced it from all world wide. 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 commonplace 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 satisfy the wants of superior customers

Ports, communication, structure

You’ll be able to join the SwiftIO board to your laptop through a USB connector, the 2 units can talk by way of a serial port. The USB cable will present the required energy assist, however alternatively you should utilize an adapter or an exterior battery by way of a protect.

SwiftIO ports

You’ll be able to wire up further parts utilizing the Normal Function Enter/Output pins (GPIO). You’ll be able to see the precise specification on the image above, however actually I barely perceive this diagram.

Confession time: I don’t know shit about electronics (but). 💩

The board can be utilized with a protect and luckily the MakersKit arrives with a helpful instruction guide for absolute freshmen. I felt fortunate, as a result of I used to be in a position to method this little gadget with my programmer mindset and I might focus extra on Swift as an alternative of constructing working circuits.

So what’s truly underneath the hood? How can I construct & run functions for SwiftIO?

SwiftIO architecture

The grey space is the {hardware} itself, on prime of that within the pink-ish/purple bins 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 high quality, 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 machine that enables us to construct and run Swift functions on the board. 😅

If there’s a toolchain, then we will run Swift binaries, however how can we talk with the ports and stuff like that? Thankfully the SwiftIO framework is right here for us. It offers an quick access to speak with exterior {hardware} equipment. You’ll be able to learn or write digital and analog indicators utilizing the communication protocol. Are you prepared for some Swift code?

The SwiftIO setting

Though the {hardware} is steady, the software program isn’t completed but. There are two choices obtainable, however in case you are on a Home windows machine, it’s best to seize the official MadMachine IDE and use that. The reason being that the Swift Bundle Supervisor isn’t prepared for that platform but, so that you gained’t have the ability 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 offers an important DX. Possibility B, study a bit extra in regards to the underlying toolkit and comply with my information, it’s a bit extra sophisticated, however you’ll know extra in regards to the technical infrastructure if you happen to select this path. 🤔

Putting in the MadMachine SDK & CLI

As a macOS or Linux consumer it’s best to know which you can set up the unofficial MadMachine SDK alongside a command line instrument referred to as mm. As you possibly can see this MadMachine SDK is written in Swift, however it’s best to 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 do away with the IDE for good, and now, right here we go, we’ve got a standalone Swift model of the required construct instruments. You’ll be able to set up it like this:

git clone https://github.com/EmbeddedSwift/MadMachine.git
cd MadMachine
make set up

Now you have to be prepared to make use of the mm cli app, you possibly can test the obtainable instructions contained in the README file on GitHub. I’ve not examined this on Linux but, so if you happen to 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 view to use the MadMachine SDK you’ll need a working toolchain put in in your laptop. You’ll be able to seize the newest one by working the next command:

mm toolchain --upgrade

It will seize the newest launch from the unofficial MadMachine toolchain repository, and place it underneath your private home folder contained in the .MadMachine listing. There may be one further factor that now you need to do earlier than you can begin constructing SwiftIO apps. Presently there’s one additional 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 the complete contents of the mm-sdk/tools_[platform]/scripts/dist/gen_isr_tables folder into the ~/.MadMachine/legacy listing. You may 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 instrument) 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 will discover the library reference for the SwiftIO framework, however we’ll see you may make it work, in just some moments. Earlier than we go additional it’s best to word that the customized MadMachine toolchain is a modified model of the Swift 5.1 toolchain. This implies which you can’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 doable to construct functions with out focusing on the board, and in a while 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 current Xcode template created by @kidmar that you should utilize as a place to begin.

Utilizing SPM

These days I choose to create a Swift bundle for nearly all the pieces. You should utilize SPM with a Makefile and your favourite editor to create SwiftIO apps. You simply need to initialize a brand new executable bundle with the required 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..<f {
            mul *= 10
        }
        let knowledge = Int(self * Float(mul))
        return Float(knowledge) / Float(mul)
    }
}

// Initialize the LCD and sensor to make use of the I2C communication.
let i2c = I2C(Id.I2C0)
let liquid crystal display = LCD1602(i2c)
let sht = SHT3x(i2c)

whereas true{
    // Learn and show the temperature on the LCD and replace the worth each 1s.
    let temp = sht.readTemperature()
    liquid crystal display.write(x: 0, y: 0, "Temperature:")
    liquid crystal display.write(x: 0, y: 1, String(temp.format(1)))
    liquid crystal display.write(x: 4, y: 1, " ")
    liquid crystal display.write(x: 5, y: 1, "C")
    sleep(ms: 1000)
}

Now if you happen to 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 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 required dependencies (SHT3x, LCD1602) the identical manner 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. It will transfer the required information underneath the ~/.MadMachine/libraries folder, all of the obtainable libraries “dwell” there. 🔨

After you’ve put in the libraries, you should utilize 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 fitting search paths and library search paths. The mm board --run [binary] command will merely copy the required 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 machine, then eject the storage, which is able to restart the board and the brand new software might be loaded & executed instantly. 🚀

The MadMachine IDE

In the event you don’t prefer to play with command line utilities, you possibly can at all times use the MadMachine IDE to construct and ship your initiatives. It makes use of a mmp file to explain dependencies, so it may possibly 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 Elegant Textual content fan). ❤️

Anyway, you’ll find actually nice examples with a devoted GitHub repository and plenty of video tutorials on the official YouTube channel. You’ll be able to entry all of the MakerKit pattern codes, they’re each on GitHub and you may clone a template with a click on utilizing the MadMachine IDE.

Conclusion

For me, the SwiftIO board was a nice shock. I at all times needed to play with embedded methods, know a little bit extra about {hardware} and low degree 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 upset, as a result of the instruments and the developer expertise was actually dangerous.

The promise of MadMachine is which you can simply use Swift on such a tool and I imagine that Andy Liu created one thing that may have a vivid 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 imagine that’s a very necessary issue for builders who by no means used such units earlier than. This may be the start and the way forward for Swift on embedded methods. 😍

SwiftIO

You’ll be able to construct some actually enjoyable stuff with SwiftIO, it’s an ideal instrument for studying how electrical circuits work. I can’t wait to see increasingly more sensors and libraries obtainable for MadMachine. When you’ve got an thought or a query be happy to affix the official Discord server.

author avatar
roosho Senior Engineer (Technical Services)
I am Rakib Raihan RooSho, Jack of all IT Trades. You got it right. Good for nothing. I try a lot of things and fail more than that. That's how I learn. Whenever I succeed, I note that in my cookbook. Eventually, that became my blog. 
rooshohttps://www.roosho.com
I am Rakib Raihan RooSho, Jack of all IT Trades. You got it right. Good for nothing. I try a lot of things and fail more than that. That's how I learn. Whenever I succeed, I note that in my cookbook. Eventually, that became my blog. 

Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here


Latest Articles

author avatar
roosho Senior Engineer (Technical Services)
I am Rakib Raihan RooSho, Jack of all IT Trades. You got it right. Good for nothing. I try a lot of things and fail more than that. That's how I learn. Whenever I succeed, I note that in my cookbook. Eventually, that became my blog.