Bitten by a Viper

In this case, the viper in question is an old industrial control computer, based on an Intel PXA255 processor, in PC104 form factor, running a minimal linux. It was originally manufactured by Arcom Ltd, who have in the intervening years been taken over by Eurotech S.p.A. and comes with a nice complement of default communications options.

Mine is a standard “full-fat” Viper board, with no additional expansion cards, but mounted in an industrial enclosure with an integral UPS battery-backup. Sadly it’s been lying around gathering dust in my study for about the last 5 years, and as part of a recent attempt to tidy up some of my clutter I decided I either needed to make use of it, or get rid of it.

A little searching unearthed the power supply, and then, according to the little red LED on the back panel, we had life.

The first problem was how to talk to it. This is a true industrial device – no screen or keyboard. The options are either to telnet or ssh in over the network connection, or use an ASCII terminal over a serial connection. And therein lay the first problem; it didn’t connect to my network as I was expecting, leaving only the serial option open to me. But as I’m almost exclusively laptop-based these days, finding a machine with a serial port, and then a serial cable to link it to the Viper, took quite some effort.

But having done so, and set up minicom with the correct serial port parameters (helpfully documented in the Viper manuals) I was able to login to the Viper, at which point a little debugging of the network stack revealed the issue – at some point I’d defined the Viper with a static IP address, on a different subnet to my current home network.

A few quick edits to return it to DHCP operation, and a little configuration work on my home servers dnsmasq configuration returned the Viper to my home network, at a readily accessible IP address, allowing me to ssh in again.

At this point, having proved that the system is working again, I now need to decide what to do with it; and in this case, I’m going to use it as part of my plan to implement a set of DIY ambient orbs, as I mentioned back in this post. The Viper happens to consume only 9w while network connected, and has a built-in I2C interface, which can connect to BlinkM LED’s which I can mount in my B&Q Cubo housings. This will allow me to control the colour of the orbs from a program running on the Viper.

Better than that though, I can then install an MQTT client on the Viper, allowing my Viper program to subscribe to a topic on my home servers MQTT micro-broker. This will allow me to have the Viper change the colours of the orbs in response to messages published to the broker on my home server. At that point I can trivially integrate any sort of external input to the orbs just by administering my home server, & without needing to make further updates to the Viper.

So all I need to do now is to get the AEL development kit (cross-compiler etc) set up so I can write some code for the Viper, and then buy some BlinkM LEDs. Which sounds simple, but unfortunately the AEL development kit hasn’t been updated for some 4 years now, and isn’t keen on installing on my latest and greatest Ubuntu 10.10 development machine. I’ve put some calls out to colleagues who have also had experience with these Arcom Vipers, but so far no joy. Next step will be to see if Eurotech can provide a little help – after all, I suspect the original Arcom engineers will mostly still be working there. I guess the worst case will be to set up a *really* old Linux system in a virtual machine, and install the AEL development kit on that instead.

Ambient orb project?

Long ago, in another role, I played around with the original “ambient orb”, which was a globe that was connected to a wireless data network and depending on the status of whatever subscription you had configured it for, glowed different colours. By default it glowed red when the DOW Jones stock market was falling, and green when it was rising. All very Wall Street. Unfortunately they also had a Wall Street price to match.

Probably because of the price, they never really took off. But the idea of consolidating and simplifying complex information down to a simple (and aesthetically pleasing) format was a good one, and I’ve always fancied taking a crack at building one. Unfortunately the format is intrinsically rather expensive – wireless communications and infinitely variable coloured lighting have never been cheap.

But if one is prepared to sacrifice the wireless part, it looks like you could now build ambient orbs pretty cheaply, thanks to the advent of the BlinkM programmable colour LED, and the LinkM i2c controller. Essentially you just need to put a BlinkM in an appropriate enclosure, connect it to a LinkM, which is plugged into a (potentially very simple) computer running a program to convert whatever interests you into a simple glowing colour. Better yet, the LinkM can control[1] up to eight independent BlinkMs … so multiple “orbs” are possible at relatively low incremental cost.

People have done this before, often using Arduino systems as a relatively low-cost computer with an integrated I2C controller. Some don’t even bother with the BlinkMs! However, to my eyes the problem has been finding the right enclosure for the BlinkM … bathroom light shades have been popular, but I’m just not convinced you’d get them to glow brightly enough to get the full-on original ambient orb effect.

And then yesterday, while I was in B&Q to pick up a nightlight bulb, I noticed that they were selling “Cubo” colour-changing LED lights for £1.49. They’re unintelligent mood lighting, and basically junk – they use expensive lithium watch batteries to cycle a colour LED through a fixed pattern for about 6 hours. But the cube-like enclosure is perfect for turning into an ambient orb; it’s 3″ on a side, and even with only a tiny LED, they glow deep satisfying colours even in normal daylight.

So in a fit of madness I picked up three. Now I just need to find some time to do the conversion.

[1] Actually the LinkM can control many more i2c devices than this, but it can only provide the current to drive eight BlinkM LEDs, which are quite power-hungry.