OS

I started out with the 4G SD Card from Newark that was pre-loaded with wheezy-debian. Now I’m using the distro from Adafruit called Occidentalis v0.2. It includes ssh and other features that makes it easier to confugure.

Copy the image to a 4G SD Card using Win32DiskImager. Basically you download an OS image to a windows machine and copy it to an SD Card. When using WinDiskImager, pay close attention to your read/write actions because it’s possible to overwite the wrong drive.

Before selecting an SD Card, look at the list in Verified Peripherals. Not all SD Cards work the same, and I spent a lot of time trying to launch the OS even though the image copy was successful. If you get to the point where you’ve successfully copied the image but it won’t boot up, cut your losses and try another SD Card.

login as: pi, password: raspberry

I set up a root account and did most of the installation as root

Expanding the partition on the sccard

Once installed, expand the SD Card partition to fill the 4G memory space. The image on the 4G sdcard is 1.8G. This describes how to expand the partition to fill the entire 4G.

SSH

Set up SSH so you can access the Raspberry Pi from a terminal program of via Putty and/or WinSCP.

ssh-keygen -t rsa -C "your_email@youremail.com"

XBee connection

I used the CISECO daughter board kit which costs about $6 which has a GPIO connector and a place to hook up an xbee to the serial port on the GPIO. It derives the 3.3V from the GPIO and it includes an array of through holes for misc prototyping.

Getting started with GPIO and PythonThis is the first of two articles showing basic GPIO on the Raspberry-Pi using the prototype area of the Slice of Pi. This covers basic details on the GPIO pins, setting up a Python library to allow access to the GPIO. There is an example circuit to build on the Slice and some code to get the outputs working. This was originally a blog post on Matts blog at http://lwk.mjhosting.co.uk

Install Apache on Raspberry Pi

Eventually I will want to set up a web interface to allow users to edit the gateway config items, like the network protocol and to manage the various sensors, python scripts, etc. For now, I’m just going to manage it it by ssh command line.

Webmin- “Webmin is a web-based interface for system administration for Unix. Using any modern web browser, you can setup user accounts, Apache, DNS, file sharing and much more. Webmin removes the need to manually edit Unix configuration files like /etc/passwd, and lets you manage a system from the console or remotely.”

Raspcontrol- PHP based Dashboard application. More about status then configuring.

Installing Python components

Rasberry Pi, default linux install, has python already installed.

I needed these modules to allow me to access various web services like Cosm (pachube), Thing Speak, Open.Sen.se, and my own SOAP based service that I wrote in C#.

Code

Wifi

The Raspberry Pi can be wifi enabled with a USB based wifi device. The main concern would be with power consumption; the raspberry pi runs off of a 5V (currently 700mA) supply (like a cell phone charger) and a wifi device might strain the load.

To set a program to start at boot-up

To automatically run the main python script, allsensors.py, when the computer starts…

Edit /etc/rc.local and add the python line shown below:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi
# add this for Tinaja Labs sensor tracking
python /home/tinaja/allsensors.py &
exit 0

To set up Tomcat Server

At some point I might want to set up a Tomcat server and use it with some Java apps. Later.

This is going to be a base post (I’ll make it sticky) to hold the outline of tutorials related to various aspect of wireless sensor networks. From the sensors and radios, to a gateway, to web services, data logging and eventually, charting and analysis. Look at this overview of Wireless Sensor Networks on Wikipedia.

Our interest is in developing a wireless sensor network platform that is inexpensive and simple to use. There is a sweet spot between super high tech and older outdated technology where we believe there exists a meaningful set of technologies that will fit our goals.

XBee, Wifi, Sensors

What we’ve discovered is that we can use radios, like the xBee radios from Digi, with up to 4 sensors hooked up to each one, as our remote sensor boards. We have also discovered that we can transform a wifi router into a tiny, low powered computer running an embedded, open source, operating system called OpenWRT. Many wifi routers have a serial port available on the main pcb inside the device to which we can hook up a coordinating xBee radio; the counterpart to the ones on each sensor board. Then we install a scripting language, Python, into the Linux operating system. Finally, we install python scripts which can be used to collect the data being transmitted from the sensor boards and send that data to web services like Cosm (formerly Pachube), ThingSpeak, Open.sen.se, Paraimpu, etc.

So we have wireless sensor boards sending sensor data to a radio wired into the serial port of a wifi router. The wifi router has been re-flashed with an open source embedded Linux operating system, OpenWRT, and to that we’ve added Python as an easy to use scripting language. We have then added various scripts to bundle the incoming data and send it to the internet for further processing, charting, and so forth.

It is an inexpensive, flexible, easy to use, wireless sensor network platform.

In this ongoing quest to learn more about sensor networks I’ll add links to the Resources Page.

Tutorials:

Here’s a list of notes we’ll be updating with information about how to build you’re own wireless sensor network.

WSN: Sensors: this is where is all begins. The sensor responds to some environmental events and generates a voltage or a digital signal. I’ll be going over a few sensor types that I’ve built; Tweet-a-watt, Temperature, Gas (example of indoor air quality), and a Force Sensitive Resistor (FSR) as an example of Elder Care.

Radio: XBee – Radios allow us to create the wireless part of sensor networks. The XBee radio is very accessible to beginners even if configuration is a bit challenging. I’ll describe the various aspects of XBee radios that I’ve used.

Gateway: Wifi Router – in the original design for the Tweet-a-watt the output from the sensor’s transmitter sent data to an XBee receiver hooked into a PC (via FTDI-USB). The approach I describe uses a low powered (about 4 watts) Asus wi-fi router in place of a PC. I’ll describe using OpenWRT as a replacement OS and adding a USB memory stick to extend the storage memory of the device. I’ll also show how I added python with web service calls in order to send data to the internet.

Client facing site: a site for users to register their gateway devices and manage the sensors associated with each. Also the place to look at the charts and subsequent analysis for the sensor data. This is an MVC web application written in C# and ASP.NET using Visual Studio 2010 Express and SQL Server 2008 Express.