Arduino: What’s in it for enterprise and industrial pro devs?
It’s been fun playing with my new Arduino R4 device… as a maker… And write some articles about my first experience with a new Arduino UNO R4 Wifi and the IDE 2.0 as well as with the Arduino IoT Cloud. But what if I now put my pro dev hat on? How can I take advantage of the Arduino IoT Cloud and all the latest additions from Arduino and Arduino Pro to build an enterprise solution or integrate IoT devices into an existing one?
Arduino is putting more and more weight into its Arduino Pro line and its Cloud for Business approach. Recent announcements show that they are followed by heavy players in their endeavor. Arduino Pro claims to be addressing important pain points industrial customers are facing with IoT projects, such as securing the data plane, rapidly creating customized dashboards, managing a fleet of devices and integration of operations into an IT infrastructure (in the form of APIs at this point). Let’s look at what this all means.
In my investigation, I wanted to focus on the DevOps and Cloud part of the development, not so much on the device side of things. I do cover the Arduino Pro line of hardware but won’t go into too many details considering I don’t have one of these devices at hand myself (for now 😉).
The IoT developer experience from CLI to APIs & SDKs
When looking at it from the perspective of a maker, the Arduino IoT Cloud looked great. I could rapidly and intuitively connect my devices, create my Things and dashboards. But when putting my pro dev hat on, I started wondering how that would scale and how I’d go beyond the maker project.
The first thing developers appreciate beyond an IDE is the ability to automate and script common tasks to speed up things, bypassing the human user interface itself. DevOps is now the norm for all types of development after all. Here comes the Arduino CLI.
The CLI documentation is straight forward: you can type (or put in a script) all commands or put together configuration files for streamlining your Arduino IoT Cloud and devices setup. The CLI will allow you to create sketches, manage boards and libraries, compile, upload, burn the bootloader, debug… In a nutshell, everything you can do in the local IDE can be done with the CLI. That’ll help put together clean DevOps for your OT developments.
There is a second CLI tool that is meant to manage your Arduino IoT Cloud instance. Creating Things in the Arduino IoT Cloud portal is a great manual user experience, with emphasis on “manual”. But you don’t want to repeat these operations for every single device and Thing you need to create and manage when you start scaling your solution. Arduino got you covered with the Arduino IoT Cloud CLI.
The Arduino Cloud CLI depends on the Arduino CLI for local operations and will use the IoT Cloud API extensions to hook up to your own instance of the Arduino Cloud securely. The documentation lists all the commands in detail and at first sight it seems everything you need is in there.
After setting up the credentials’ configuration file (you’ll need to create API keys in the IoT Cloud portal first), I was able to rapidly create a new device, extract a thing template, create a new thing, bind a device to a thing in just a few lines of code.
arduino-cloud-cli device create-generic --name OlivierUNOR4-2 --fqbn arduino:renesas_uno:unor4wifi arduino-cloud-cli thing create --template UNOR4DemoThing.jon arduino-cloud-cli thing bind --id [my_thing_id] --device-id [my_device_id]
As I was authoring this article there were some things that couldn’t be done using the Cloud CLI: I didn’t find a way to generate the sketch for my new thing using the Cloud CLI, nor set up the network credentials. For the sketch creation, I’m fine with that as this is not a task you will need to replicate much (unless you are in some heavy DevOps automation), and you will likely prefer creating a local sketch and use GitHub for source control rather than pushing your sketch to the Arduino Cloud (at least that’s my opinion). For the network and device credentials, that’s something that could prove useful when working on a fleet of devices that you need to provision, but these credentials are stored in a file that’s part of the sketch, so you can still automate provisioning from your command line tool or scripts.
A nice gem I discovered is that The CLI comes with command-line completion, you just need to setup your favorite terminal for that to work.
Having a CLI tool is a great start for professional developers, but having an API and SDKs to develop your own app with is even better. In fact, the Arduino Cloud CLI tool is using an API that is available to developers for them to integrate all things Arduino IoT Cloud into their own applications. SDKs for Golang, Node.JS and Python are also available. You can check out the reference documentation and see how it allows interacting with pretty much all the features available in the portal. I believe that making sure the API for its IoT Cloud features is on par with the portal user interface is the right way to appeal to pro developers who have constraints and requirements that often prevent the use of a third-party user interface or portal, and even more often need a level of customization and scaling that a Cloud portal simply cannot offer.
OTA deployments, device, and fleet management
Deploying code to devices using a serial over USB connection is ok for local development, but when time comes to deploy more than one device and implement maintenance campaigns requiring updates and upgrades, having an option to securely deploy code over-the-air is a must-have. Ok, embedded purists will certainly say that real time embedded devices’ software should not need to be updated at all as they are supposed have been exhaustively tested and their software should be optimized and limited to the few tasks the device is designed for. But that’s forgetting about the evolution of IoT with extended connectivity, functionality, capacity and more. Software update is now necessary at almost all levels of the IoT stack, from on-premises servers, to gateways, to edge compute devices, to sensors devices (maybe less often for the later). And doing so over-the-air is the only way to support scale.
Arduino allows over-the-air updates for many of its connected devices (list here) from its IoT Cloud, and as I mentioned before you can leverage the APIs to implement your own way of managing code deployments.
Deploying code updates over-the-air is just one piece of the device management puzzle, which is a complex one to implement at scale and Arduino has certainly identified this as one of many industrial customers pain point.
There are a few things going on here and even though the whole story doesn’t seem to be all clean and clear, I think it’s worse looking at some of the recent announcements from Arduino as well as into what’s available today from them for managing a fleet of devices.
To start with, there is the Arduino IoT Cloud portal and its APIs that allow you to provision your devices, deploy your sketches, monitor and all. But it seems Arduino is not planning to leave it at this: they announced last year a partnership with Foundries.io to integrate the Portenta X8 into their FoundriesFactory fleet management tool Waves. You can see how this works here.
The Portenta X8 (more about this one below) is Arduino’s industrial device flagship and for now the only one that seems to have such an integration in a complete third-party device management tool, but to me that looks like the beginning of a series. Let’s stay tuned on this one.
Integration with third-party services
One of the first things I tried to do after connecting a couple devices to the Arduino IoT Cloud was to export my device data to other services to store, analyze, display, and integrate this data in other systems and solutions. That’s something you will want to be able to do as a professional developer for sure as you want fine control or have constraints requiring you to export the device data to your own existing business apps or infrastructure. At this point there are no extensions or connectors available in the Arduino IoT Cloud portal. You can’t go ahead and select existing solutions such as Grafana, AWS Lambda, Azure Data Explorer and automate the export or your device data to these directly from the portal.
That said, there are a couple ways you can integrate the Arduino IoT Cloud to your application. The first one is by using Webhooks. Documentation includes an example using IFTTT. The Webhook is setup on a Thing which is a bit restrictive is you ask me, but I was able to rapidly hook up my demo thing to an IFTTT applet and am now getting notifications when my device is sending temperature and humidity values:
The other way to integrate the Arduino IoT Cloud into another application is to use the APIs. The APIs will allow you to develop your own integration as you can export your devices’ properties time series programmatically.
Even though I would have expected some built-in connectors in the portal, these solution do work and I have the feeling more will be added in the near future though, considering the recent announcements from Arduino and their clear focus on a “Cloud for Business”. Once again, let’s stay tuned for what’s coming next in terms of direct integration.
Enterprise solutions will benefit from the tooling and the device/fleet management capabilities I just discussed (IoT Cloud, CLI, OTA, fleet management…), but they also need to have an infrastructure that will allow them to accelerate their time to market and scale rapidly and seamlessly both in terms of number of devices as well as in number of customers. This blog post from Arduino describes features that will resonate with many enterprise customers, such as the Organization Spaces allowing multi-tenancy solutions development, setting up role-based access control, easy development of (unlimited number of) dashboards, data retention, and comprehensive adapted plans for businesses.
Arduino Pro Hardware
Even though I mentioned that I would focus my observations on the Cloud side of things, you can’t talk about Arduino without talking about their hardware. They have decades of experience and built an extensive ecosystem around the idea of democratizing embedded development for the masses. If you are reading this article, that means you have some sort of interest for IoT and embedded development and most likely have tinkered with Arduino hardware in the past, to build your own thermostat, watering system, or other prototype.
When Arduino announced their Pro line of products, I was surprised they didn’t try to steer away from the name “Arduino” which is known for its appeal to makers, and one that resonates with enterprise or industrial grade. But once again, after looking closer at their Pro offer, I am starting to understand their choice to keep the brand. Tapping into the 30 million Arduino innovators out there and building on the open source and open standards already adopted by these millions of developers seems logical.
I will not go into details about the hardware because I didn’t get the change to put my hands on a Portenta, Nicla or Opta device and can only talk to their specs for now, but here are my main takeaways:
The hardware is bundled with specialized software and Cloud tools which will make embedded and industrial device manufacturers as well as operators life’s easier: the Portenta X8 has its own Portenta X8 Manager solution that allows securely maintaining its Linux distribution, get provisioning keys for each device, updating devices OTA, deploy containerized apps and more, while the Opta can be programmed with the Arduino PLC IDE which supports IEC 61131-3 standard languages (you’ll recognize yourselves if you know what these are 😉).
Security is at the core of all Arduino Pro: I have not talked much about security and just alluded to secure provisioning, secure deployment, and secure Cloud. I believe that decades of delivering solutions for makers hardened Arduino as they know well what hackers can do, right? You can find Arduino’s approach to security in this article, and here are a couple more: OTA updates are secured with a secure boot solution called MCUBoot and Arduino is now putting a secure element on their boards for crypto and secure provisioning.
When discussing the latest Arduino development with counterparts, colleagues, customers, I have heard a lot of “Arduino is for makers” or “I don’t see them being relevant in the enterprise beyond prototyping”. I have to admit that before looking closer, that was my first reaction as well. But today, I do believe that Arduino is asking themselves (and industrial players) the right questions and addressing them one after the other in a smart way. They have a lot of experience in building hardware and even if it’s been hardware, it’s experience nonetheless, and when you look at the quality of their Pro line of products, it shows!
Cloud was something new to them and I initially thought that they were trying too hard with the Arduino IoT Cloud with a “too” simple dashboarding and device onboarding approach. But after taking a closer look, I do believe their approach makes sense and will appeal to industrial and enterprise customers, because it aims at not only democratizing embedded development but also securing connectivity and integration of Embedded devices and their data into Cloud solutions and applications.
Is Arduino Pro the silver bullet for making the integration of OT and IT a reality? Who knows? Only the future will say, but in the meantime, I do recommend taking a close look if you have not yet done so, and in the process, enjoy some making as it’s a great excuse to go buy some Arduino hardware and have fun!