The other day I shared my approach to reading data off a couple Arduinos with a Raspberry Pi using I2C and Node.js. Works great, but the wiring was ugly and brittle.
Mess or not, the wiring did teach me two things: I2C works as long as there is conductivity and yes you can power a couple of Arduinos from the RPi. I2C doesn’t require a particular wiring sequence or whole bunch of cables extending from a central point to a single device, so when I decided to beef it up a bit, I started to imagine a way of connecting devices over a small distance. I was hopeful it would be easy and not require 100% custom wiring. The requirements boiled down to something like this:
I decided to look for a solution built around Cat5 cable — it’s cheap, has great connectors and I’ve worked with it a fair amount. I found it at Microcenter. I’m using a couple of el cheapo cable splitters and an RJ45 F-F joiner, for most of the connection, and it works great. I still need to solder 1/2 a Cat5 cable for the Raspberry Pi and another 1/2 for each device, but I can now put the Arduinos (somewhat) arbitrarily far away from the RPi node and add more until my power runs out.
Still not ideal, but like I said it works great. Although relatively inexpensive, each splitter is about $10, and I could do without stripping the Cat5 wires and soldering them to pins. Next up I think I’ll add a couple of RJ45 ports to a proto shield, and connect that directly to each Arduino. I’ll net a little more soldering, but it will be easier soldering so should be faster.
Here’s what the current system actually looks like in my attic. Note that the Arduino and RPi are far enough away that it’s impractical to photograph them together.
Questions I’ve pondered:
Why am I doing this instead of just getting an Arduino with an Ethernet shield? I’m trying to solve two problems, communication and power. if I go with the Ethernet shield, I’m in it for $60 each if I include a power over ethernet (POE) module, which is a lot. It solves the power problem and the connectivity problem, but I still have to wire ethernet.
Why don’t I just go wireless? Well, I could. In fact, I have a bunch of XBees sitting around from Dreamforce 13 that I could harness. However, I’d still have to get power to each one of these devices, so I’ve only solved one problem.
How will I scale this beyond my attic? I’ll probably need to scale this to the other floors of my house to get the data I want. I suspect the easiest way to scale it will be to add a nearly identical system on each floor. Otherwise I’ll have to deal with stringing wires, and I hate stringing wires.
Pingback: Node.js IoT Host on Heroku: The Simplest Thing that Might Possibly Work | Reid Carlberg