Nanode

AVR/Adruino dev with a MAC OSX

Earlier this year I replaced my trusty old Samsung laptop with a (wonderful) MacBook Air. The Samsung had all the tools on it that I had been using for AVR/Arduino (etc) development, but with it being spring & then summer, my focus was elsewhere and I had not ventured into installing the development tools on the Mac yet.

So, I've now been trying to get the same Eclipse/AVR-gcc development stack running running on my new MacBook Air.

Connecting things up

A long term projects has been to build some smaller temperature sensors that can be dotted around the house. These would store data back centrally but mainly be used to feed additional room data into the Idratek Cortex system that controls the house heating.

This has ended up being a project made up of part development and part integration but as of today I've got the initial integration of the various components working - albeit to a limited extent.

It all starts with a little Nanode board. Wedged above it is a small digital temperature sensor.

The green cable is to the network. Every few seconds the Nanode makes a pretty rudimentary web call to a predefined web address (which happens to be a VM on my server, but where & what isn't that important). The call includes an identity of the Nanode (there will be several eventually) and a set of temperature readings from each of the (currently one) sensors.

The server (running some basic php) stores the data into a database.

To help me test the interaction this far, the server also hosts a very basic web page that lists the last few readings received, displays a big red "Temperature now" reading and has a graph of the last 100 readings. As I'm lazy, it auto refreshes and the same frequency as the Nanode transmits. Here's an image of it on the iPad:

Display on iPadDisplay on iPad

The next step is to get this temperature data pushed into Cortex and recognised there as data for one of the objects defined in Cortex. To make this leap, I'm using the xAP automation protocol which is support by Cortex for both inbound & outbound transfer.

Another module of rudimentary code is on the same server that receives/stores the data. This takes the last two readings and if they differ (the assumption here is a temperature change) then the code builds an xAP packet and squirts it at the Cortex server. xAP is apparently normally a broadcast protocol but as the two servers involved here are on different networks the xAP packet is sent unicast so it'll get routed to the destination (in reality the 2 VMs are both on the same physical server but are on different networks for reason that once made more sense than now). For speed and convenience this module is currently triggered by the refresh of the web page so wont actually work unless that page is being viewed somewhere, but now it's working I'll move the trigger to a cron or something similar.

Finally, Cortex receives the packet, pulls the data out and applies it to the DTS Temperature Sensor module defined in the guest bedroom.

Nanode library links

This page is a collection of links to useful looking libraries for Nanodes (probably Aruino also)

https://github.com/njh/NanodeMQTT/zipball/0.1.0 (Nicholas Humfrey)
https://github.com/sde1000/NanodeUNIO - Driver for Microchip UNI/O devices on Nanode (eg. the MAC address chip) (Stephen Early)
https://github.com/sde1000/NanodeUIP - Port of uIP library to Nanode (Stephen Early)