Samsung ARTIK 5
ARTIK is Samsung’s “end-to-end” IoT platform (they like to call it an ecosystem): it includes hardware, software and cloud services. The ARTIK 5 is one of the hardware modules, a capable, interface- and protocol-rich bit of hardware that comes mounted on a pretty burly development board.
Packaging and industrial design are polished. Despite the bristling-with-antennae look (or maybe because of it?) the ARTIK 5 cuts a savage-yet-handsome profile. It’s more appealing to look at than your average SBC. And a little bit intimidating.
Samsung ARTIK 5, Beta Version 0.5
How it Works
The ARTIK 5 is one of three available ARTIK modules. It’s positioned in between dinky ARTIK 1 and the beefy ARTIK 10. Samsung’s emphasis here is on communications and an open software stack. The 5 has two ARM Cortex A7 processors (1GHz) and 4GB of eMMC solid-state memory.
The ARTIK 5 ships with a Fedora Linux (22 as of this writing) image pre-flashed to the eMMC. A whole slew of supporting tools and libraries are installed for networking, developing and IO. Assuming you know your stuff, you can get going pretty quickly. This feels like a development platform for savvy developers—it’s not as targeted at beginners or hobbyists.
What’s Different About it
Communications! Holy cow! Set up with its four external antennae (included), the ARTIK 5 looks like a melding of futuristic IoT and ham radio, supporting not only WiFi (with all these 802.11 letters: a/b/g/n/ac), Bluetooth and Bluetooth LE but also ZigBee and more-exotic SigFox and Z-Wave.
The specs are dense with acronyms. There are interfaces to dive into, including on-board MIPI CSI (camera serial interface) and MIPI DSI (display serial interface), audio out and an on-board microphone.
Basically: you can do almost anything you could think of with the ARTIK 5, if you have the skills and the motivation. Samsung’s aspirations involve the integration of their cloud services, as well.
- module: ARTIK 1, ARTIK 5, ARTIK 10—these systems-on-a-module (SoM) have tiny footprints (12x12mm, 29x25mm, 29x39mm respectively). You can buy the ARTIK 5 and the ARTIK 10 modules mounted to development boards. It’s the development board that breaks out pins, has positions for antennae, provides peripheral interconnects, etc. The ARTIK 5 mounted on its development board is shown in a photo above.
- ARTIK cloud: Samsung’s marketed proprietary cloud services for data logging, storage, data exchange, etc.
- Fedora: ARTIK 5 currently ships with Fedora 22, a “RHEL” (Red Hat Enterprise Linux). RHEL is particularly concerned with security and uptime, which has the side effect that packages, etc., don’t get updated on such quick cycles as other Linux platforms.
- sysfs: A Linux virtual filesystem that exposes what’s going on with GPIO pins as files that your code can read and write.
So, where to start? The ARTIK 5 runs Fedora, so a first stop is to get shell and WiFi going. Though the product is in beta and it’s early yet, the getting started guide is well fleshed-out. There’s even a Where do the antennas go? page. The getting-started guide is completely beginner-friendly, though the examples don’t dive too deep.
Unboxing and setup
Setup started easy-peasy:
- Connect antennae, plug it in and flip some switches.
- Connect USB serial; boot it. Use the USB serial connection to communicate and type commands.
- Follow the first tutorial, which had me recording and playing back audio all easy like!
However, WiFi connectivity proved a persistent challenge with the device. The simple-sounding wifi setup ended up taking me hours to get working, spent with the aid of a Linux-knowledgeable colleague. The
wpa_supplicant configuration and subsequent management involved can feel clunky for those not used to Linux administration and in my ARTIK’s case, didn’t work right.
WiFi connectivity issues persisted even when the device was flashed with other operating systems, leading me to think this particular device may be flaky, or perhaps there is something it doesn’t like about my home’s WiFi network.
There are a number of tasks left to the developer/user if one goes with the stock Fedora install: creating user accounts, updating the system and its packages, configuring things, trying to track down Fedora-flavored variants of things.
Time: 4 hours, mostly arcane WiFi debug
Developing for the ARTIK 5
There are a lot of ways to skin the proverbial cat when it comes to controlling GPIO pins on the ARTIK 5. The documentation (basic tutorials, at least) covers the following:
- Direct manipulation of GPIO via
sysfs(reading and writing to files that represent each pin)
- Arduino Programming Language via Arduino IDE
The ARTIK5’s pins are Arduino-compatible and Arduino shields fit to the board. However, getting such a beefy platform just to treat it like an 8-bit constrained little board feels a tad dissonant. The Arduino option is definitely there, though, for those who want to take that route.
Representative Tasks and Applications
Because of the complexity of the ARTIK 5 platform, GPIO-based explorations were more truncated than with other platforms we tested.
Blinking an LED
Part I: Fedora with Node.js
Fedora is a unique nut to crack when it comes to Node.js. The ARTIK5 came with Fedora’s packaged Node.js. All well and good if version
0.10.42 meets your needs, but that’s an archaic version. And there’s no
npm. I spent some time trying to figure out how to upgrade and whatnot, but Fedora’s advice for how to manage
npm modules made me feel like this was going to be a not-very-fun battle to fight.
However! I decided to use what I had for moment. The ARTIK 5 exposes GPIO control using
sysfs. Working with
sysfs is simultaneously quasi-intuitive and confounding. I was able to use built-in Node.js modules (
fs, e.g.) to clumsily wrap I/O operations via
sysfs—enough to make an LED blink. But, hey, I was able to use the long-deprecated
fs.exists method with impunity because the version of Node.js was so old! Small, smirking victories.
The LED blinks weakly, though: the output voltage on ARTIK 5’s pins is only 1.8V.
Time: 5 hours (learning enough about Fedora, fighting packages, reading ARTIK docs, learning about
sysfs, writing code)
Part II: Resin container
resin.io provides Linux containers for IoT devices. If you’re a web dev: it kind of feels like using heroku for controlling physical objects. They provide pre-baked OS images you can flash to the device that give you an environment ideal for whipping up IoT goodness. And they have support for ARTIK 5!
After some initial hiccups (in retrospect, these may well have been related to the WiFi troubles I have had with the device), I was able to flash a new OS image to the board and subsequently use resin’s rather nifty set of dashboards and features to deploy Docker-container-ed applications to my device.
The OS flashed to the device with the Resin image—Yocto Linux—also exposes GPIO via
sysfs, so I was able to run the same code as the example above—I just had to add a
Dockerfile.template and a
Time: 6 hours (primarily troubleshooting resin.io on multiple occasions, setting up projects, flashing device, deploying and iterating)
Part III: Trying to Listen for a Button
Buoyed by my success with resin.io and my ham-fisted early victories with
sysfs, I tried to finish out the example by listening for a button press to toggle an LED’s on/off state. I thought I’d try using the
epoll module, which provides a low-level binding to Linux’s
epoll API. epoll is an I/O notification functionality; it can monitor a bunch of file descriptors (think: like the ones corresponding to GPIO pins via
epoll built just fine in resin.io’s Docker container on my ARTIK5 (probably would have been a worthy challenge in Fedora). I nominally should have been able to use it to watch for button-press interrupts —that is, changes to the value read from the associated pin and stored in a file—but the
epoll events I was listening for never fired.
Whether this was me doing it wrong (likely), the given pin on the ARTIK not supporting interrupts (maybe?) or something nitty-gritty with the combination of a container-ized application and the hardware, I’m not sure, but I decided to stop while I was—wait, I’m actually in no way ahead.
Still, I feel like I got far enough down the
sysfs road to feel proof-of-concept-ed.
Time: 3 hours (until I gave up)
The ARTIK5 does a lot; in fact, it’s almost intimidating. It looks brutal and powerful. It can do all sorts of things. But you’ll have to build those things. In the days I spent with the ARTIK 5, I barely scratched the surface. There are all of those interfaces and communications options.
It’ll be interesting to see how the user community evolves as the ARTIK family matures. As companies and users build frameworks and libraries to work with ARTIK’s GPIO, it could become faster for new users to jump in and build stuff. That would be nifty. The pieces are there. But the dots aren’t all connected yet—for novice or intermediate IoT devs, anyway.
The ARTIK 5 is Good for…
- Developers comfortable with Linux administration
- Experienced firmware developers who are ready to jump into kernel or lower-level C programming
- IoT projects with intense communication demands
- Developers concerned with security
- Curious novices willing to put in the time to figure things out
- IoT Companies using or transitioning from Arduino-compatible architecture
- IoT hubs: ARTIK5 or ARTIK10 are capable platforms for controlling sensor networks or other devices
- Exploration: ARTIK’s state-of-the art interfaces and communications hardware makes it a keen device for those who want to tinker with new technology