This past weekend Arduino fans celebrated Arduino and Genuino Day 2016. In classrooms, maker spaces, and impromptu meet-ups around the world enginerds got together to learn and create with Arduino. At the Jacobs Institute for Design Innovation on Berkeley’s Campus, I first heard that Arduino Create had been launched.
In addition to hands-on learning workshops, there was a display of Arduino/Genuino projects by students. In the afternoon, three Arduino co-founders gave a short talk. David Mellis spoke on Machine Learning. Tom Igoe did his first talk on Technology and Humanities. Lastly, Massimo Banzi talked about IoT.
Massimo’s IoT discussion related to the earlier announcement that day of Arduino Create. This new platform has a web-based IDE, Arduino Project Hub, and Arduino IoT.
Arduino Create: Project Hub
The hackster.io platform powers the Arduino Project Hub. It is a platform for sharing projects and an alternative to running your own blog. It’s a pretty slick interface and works well. I was able to quickly write up a nice looking tutorial on using mosquitto with Arduino IoT [note: this project is pending approval!] in just a few minutes.
If you’re looking for a place to show off your Arduino or Genuino project, check out the Arduino Project Hub.
Arduino Create: Arduino IoT
The Arduino IoT service is a publicly accessible MQTT server. Compared to a service like Adafruit IO, Arduino IoT is very simplistic. Your dashboard is a simple list of registered devices (or things). The API is just MQTT publishing and subscriber. There are no GUI widgets or automation.
Arduino IoT is good if you want a publicly accessible MQTT server, but don’t want to run your own. A huge plus, in my opinion, this is one of the few MQTT solutions that requires SSL.
Since I have already provided an introduction to MQTT and how to make Arduino communicate with Mosquitto, I’ll focus on what makes Arduino IoT different. First, I’ll show how easy it is to connect an Arduino device and then show how to get mosquitto connected to Arduino IoT.
Getting started with Arduino/Genuino Hardware
If you’re using a MKR1000 or an Arduino connected to the WiFi 101 Shield, getting started with Arduino IoT is awesomely simple. Just follow the “new thing” wizard. You end up with code that can be pasted directly into an Arduino code window.
The code is only missing your WiFi name and password. Add those details, compile, and upload. Once uploaded, open a serial monitor and you’ll see the debug message saying that it is publishing the message “on” and then the message “off.”
My Arduino IoT code wouldn’t upload (at first)
There was one issue I ran into with my code upload. The compiled code is over 28k in size. My upload would make it most of the way through, but fail. My theory is I’ve uploaded a couple of thousand times to this board. I may have a failed FLASH cell that only gets accessed with large code blocks. I swapped the ATmega328p out with a new chip, and the upload worked fine.
Subscribing to Arduino IoT with mosquitto_sub (and SSL)
Since Arduino IoT doesn’t have widgets (yet?) or logs, I needed a MQTT client to subscribe to my thing’s feed. At this point, I was out of WiFi shields. So I decided to use mosquitto’s mosquitto_pub as the client. If you aren’t familiar with the open source tool mosquitto, check out my connecting Arduino and Raspberry Pi with mosquitto tutorial.
This point is when I discovered that Arduino IoT requires SSL connections. For mosquitto_pub (and mosquitto_sub) to use SSL, you need to provide it a Certificate Authority. In this case, I used GoDaddy’s Certificate Authority File, which you can download from their cert repository. You want one named gdroot-g2.crt, which is the GoDaddy Class 2 Certification Authority Root Certificate – G2.
For more information on this process, visit my Arduino Projects Hub project named, “Connecting to Arduino Cloud with mosquitto.”
Understanding Arduino IoT’s Device ID, Name, and Password
In my previous MQTT tutorial, I didn’t cover Usernames, Passwords, or authentication. All of these extra parameters are needed for mosquitto_pub to work properly with Arduino IoT. So you’ll need four pieces of information from your Arduino Cloud Dashboard.
- Arduino IoT Username: Start of *your* MQTT feed
- Device Name: “MQTT Client ID”
- Device ID: MQTT Username
- Device Password: MQTT Password
In addition to the GoDaddy Certificate Authority file mentioned in the previous section, “gdroot-g2.crt”, you’re ready to subscribe to your Thing’s feed. In my case, I kept the default feed name of “blink”, my device’s name is “Thing101”, and my Arduino IoT username is “cmiyc”. These parameters make the MQTT feed I want to be subscribed to be called:
Here’s the command I called to make mosquitto connect. (Don’t use these numbers obviously, they no longer exist!)
mosquitto_sub -h mqtt.arduino.cc -p 8883 -u 4ef29e80-54a1-4765-86d3-1e971cb58aa4 -P 603080a8-d9d8-4d67-a823-a4a036f34cef -i Listener -v -d -t /cmiyc/Thing101/blink --cafile /Users/james/Downloads/gdroot-g2.crt
Once connected, I could see my Uno+WiFi 101 publishing “on” and “off”!
One feed per device
An important aspect of the Arduino IoT MQTT server is that only one device can publish to a specific feed. However, multiple devices may subscribe to a single feed. If you have two sensors, they each get defined as a device (or thing) in your Arduino IoT dashboard. They can only publish to their respective feeds.
This “feature” means you need at least two devices defined in your IoT dashboard to pass messages. As you can see in my dashboard, I made one called the apt name, “Listener.”
If you don’t want to or can’t run your own MQTT server—and you want one that is public— then the Arduino IoT will be a great option for you.
Even with a few rough spots around the edges, the platform has the polish you’d expect from the Arduino team.
Arduino Create is an exciting addition to the Arduino Platform. Personally, I am excited to see #TeamArduinoCC push forward with an expanded definition of what defines Arduino and Genuino.