On November 23rd I was contacted by the Head of Marketing & BD of Onion, producers of the Omega IoT nodes. He asked whether I “would be interested in writing a blog about our product, the Omega2, the world’s first IoT Computer and a $5 Linux development board with built-in WiFi.”
About a week before Christmas I received a packet including an Omega2 Plus ($9) and an expansion dock ($15) for review. Thanks Onion! They came without strings attached. Hence, I’m free to write here whatever I want.
The Onion Omega2
The (public) Onion Omega story started on on March 31st, 2015 with the launch of a very successful Kickstarter campaign. Clearly targeted for the IoT market the Omega was a lot more than just another IoT node hardware with built-in WiFi. The hardware is a lot more powerful that an ESP8266 for example. Its 400MHz CPU and 64MB memory mean a different league.
From the start it ran a “full” Linux environment based on OpenWRT and BusyBox. Hence, you are not constrained to whatever programming language the hardware/firmware producers deemed most appropriate. Assuming you find your way around the Linux commands for the command line the Omega gives you an environment you’ll feel at home right away.
From day 1 Onion allowed you to seamlessly integrate any Omega into the Onion Cloud. It allows the Omega to be accessed anywhere in the world quickly and securely. You can tinker with your Omegas right from the browser which is pretty important once the devices are deployed in the wild. I guess you can see why the Omega campaign was so successful. The whole package is a pretty compelling offer.
The Omega2 is the successor of the Omega – I’m sure you figured that, sorry. Its Kickstarter campaign in summer 2016 was even more successful than the one for the original Omega; it was funded 45x!
Difference between Omega and Omega2
The improvements are best explained with a table I stole from the Omega2 Indigogo campaign site. Being used to $2-$5 ESP8266 modules I think it’s fantastic Onion was able to lower the Omega2 price to $5 which is very competitive.
Getting started with the Omega2
When I started with the Omega2 after Christmas I didn’t have the Omega2 documentation to work with because that was only published on December 30th. The “Documentation” link on onion.io lead to the original Omega wiki. Onion “fixed” it in the meantime.
The first thing I noticed is that it takes about 1min to fully boot and then initialize WiFi. Yes, that is 60(!) seconds. More bare-bone modules like the ESP8266 are up in a matter of milliseconds and connected to the WiFi 1-2s later. It really does feel like I’m booting a Linux server 🙂
When the Omega2 first boots it starts a WiFi access point to which you can connect from e.g. your laptop. You would then run the setup wizard in the browser. Since I didn’t know the Omega2’s WiFi password (the original Omega WiFi didn’t have one) I couldn’t connect to it and had to run the setup wizard from the command line.
I wasted a bit of time to figure out what the Omega2’s MAC address is. Finding the MAC address was necessary because my regular WiFi access point only allows whitelisted devices. So, I connected to the Omega2 over serial and ran
ifconfg -a. In theory that lists all interfaces. On the Omeag2 I saw all except the one it would use to connected to your WiFi. The name of that interface is
apcli0 and it only shows up once you’re actually connected.
What to do with the Omega2
You might remember the times when an ordinary PC had less juice than an Omega2. Seriously, with more than half a gig Hz CPU and 128MB RAM there’s an abundance of possibilities. Let’s not forget this thing is running an embedded but “full” Linux system!
As hinted in the intro you can put the Omega2 into a dock (several are available). That’ll give you the foundation to enhance the Omega2s capabilities with expansions. They work either like stackable shields or as regular USB adapters. Here’s a cute animated GIF from their crowd funding campaign.
Onion sells stackable expansions for relays, PWM (servo), ethernet, OLED, and a proto board. Through USB you can add GPS, audio, and Bluetooth. And there are 3rd party expansions for cellular and ControlEverything.
A big downside of the Omega2 is that their pin spacing/pitch is 2.00 mm rather than 2.54 mm (0.10 inch). This means that it won’t fit onto a regular breadboard w/o tinkering. So, if you order an Omega2 you’re likely going to (need to) order one of the Onion docks as well.
An important benefit of running Linux is that the Omega2 can be programmed with whatever language you want.
Again, this is Linux. While Onion provides custom-made C and Python libraries/modules for I²C, SPI and their expansions you can use pretty much anything that runs on OpenWRT (Node.js, PHP, Ruby, etc.).
The old Onion wiki has a section dedicated to how to implement sample projects. Like to read temperature and humidity from a DHT22 sensor with PHP rather than with C? Sure, no problem.
One aspect that isn’t prominently mentioned anywhere on the Onion marketing pages or in the manual is how you feed the Omega2.
The module of course has a GND and VCC pin (3.3V) and the docks have MicroUSB jacks. The power dock even has a Li-Po connector. Only that will you give true autonomy as it allows you to easily connect a battery pack to your Omega2. The excellent documentation shows you how to power the device without a dock but it does so using a DC barrel jack and a DC power adapter. So, again you’re cord-bound.
Yet, what it doesn’t say anywhere is how much current it typically draws. I found a support ticket that claims it’s around 200mA. This possibly explains why Onion assumes you to be feeding the Omega through a cable rather than from a battery pack – unless it’s huge.
Comparison with ESP8266
It is difficult for me to compare the Omega2 to an ESP8266. A bit like comparing apples to oranges I feel. The Omega2 is a complete IoT module while the ESP8266 is just a low-cost WiFi chip with a full TCP/IP stack and an MCU. If at all you need to compare it with one of the many ESP8266 modules or devkits.
However, despite that a few aspects stick out nonetheless:
- CPU clock speed
The Omega2 runs at 580MHz while an ESP8266 operates at 80MHz by default (can be overclocked to 160MHz).
Omega2 has 64MB or 128MB, the ESP8266 has 64 KB instruction RAM and 96 KB data RAM. An external SPI flash chip can hold at most 16MB.
Omegas runs OpenWRT/BusyBox, a full embedded Linux. For the ESP8266 there are two official SDKs from its producer: a callback-based NON-OS SDK and a FreeRTOS-based RTOS SDK. There are a number of firmwares based on either of the two, NodeMCU (of which yours truly is a maintainer), Arduino and MicroPython to name the most popular ones. Hence, you won’t run a real OS on the ESP8266.
IoT means different things for different people. I tend to think of IoT nodes as resource-constrained and usually autonomous modules which transmit data wirelessly. Hence, an IoT node doesn’t necessarily have to communicate over WiFi, it might just as well use GPRS, BLE, or LoRa.
The Omega2 is a powerful flavor or an IoT node – an extremely powerful one. It’s hardly what I would call “resource constrained”. Thus, I’m not sure it even qualifies as an IoT node. If you only attach a few sensors to it and send readings to some host every few minutes or hours you’d be wasting a lot of resources. The Omega2 is built for more. Turning it into a WiFi router would be a more appropriate use case.
One thought on “Reviewing the Omega2 IoT node”
Hey, good write-up. I’ve used a couple and thought I’d add my impressions.
Based on a few good reviews and liking the general look of the Omega, I bought myself a couple to play with. By the time I got the Omega2+ boards shipped to New Zealand, plus a power dock which is necessary in order to power them, my wallet was lighter by about $50. Not quite the bargain they first looked to be.
Lesson number one: Don’t expect to plug an Omega into a breadboard – the hole spacing is 2mm, not 2.54. An Onion power dock takes care of this but you can’t do much without one.
Setup was easy and I had the web interface up in a couple of minutes. Connected an LED to an output pin and used the web interface to turn it on and off.
The web interface is quite easy to use and looks pretty, but it’s a somewhat slow and clunky experience when controlling the IO pins. I tried a few other aspects of it and soon gave up. I’m used to dealing with Linux web servers and the Omega wasn’t much different so I went back to using PuTTY and SSH for the rest of my work with it, and never used the web interface again – though it can be handy for a quick look at the status.
Using the I2C interface was easy and soon I had a temperature sensor connected. That was quite easy to run just using a shell script. Cool.
My real aim was to use the Omega for some moderately complex power sensing and heat modelling work, which required an SPI interface to another SoC such as an ATMega. The code was already in C++ so I installed the cross-compiler (Linux only, no windows support) which was a bit of a pain but got there in the end.
I wasted the next two weeks (of spare time, not all day!) trying to get the SPI interface to do anything sensible at all but I was continuously thwarted by buggy code written by enthusiasts, the unavailability of the kernel sources or even the kernel config required to build add-on modules, missing packages, and so on.
So, I binned the Omegas and I’m now watching the letterbox for a couple of LinkIt 7688 Duo boards which look pretty similar but with a Linux distro that’s properly open. They’re more expensive, but what’s $5 between friends?
I love the Omega2+, especially the WiFi which was solid as a rock, but it has some rough edges and the odd sharp corner. Don’t try to do anything serious in C, stick with Python.