======================================================================== README: LowPowerSensing Application Created: 2-March-2008 Author: Kevin Klues (klueska@cs.stanford.edu) ======================================================================== This README is intended to give an overview of the organizational structure of the LowPowerSensing Application application as well as how to best utilize and customize some of the features it contains. This document is divided into three sections. The first section contains an overview of how the application is organized and what it is capable of doing. The second section gives instructions on how to install the application and interact with it from your PC. The third section demonstrates how to customize the application to meet your particualr needs. ------------------------------------------------------------------------ Organizational Structure and Overview ------------------------------------------------------------------------ The LowPowerSensing application is actually made up of three separate mini-applications: one mote base station application, one mote sampling application, and one java based application used to interact with the mote applications. The code for all three applications is divided up among several directories: LowPowerSensing ./Base ./java ./sampleLog ./Sampler ./tmote_onboard_sensors ./universal_sensors The code specific to the base station aplication is contained under the 'Base' directory, and code for the sampling application is found under 'Sampler'. Code shared between them is found either in the top level directory (LowPowerSensing) or in the subdirectories 'sampleLog', 'tmote_onboard_sensors', and 'universal_sensors'. Code for the java application is found in the 'java' directory. Now the application itself is fairly straightforward. The sampler application periodically takes some sensor readings, logs them to flash, and waits for requests from the base station to stream out the contents or its flash over the radio. Requests originate from end users of the java application and simply get forwarded on to a mote running the sampler application through the base station application. Conversely, whenever the base station receives any packets from the sampler application, it forwards these packets back to the java application for further processing. Any number of motes running the sampler application can exist simultaneously, and data can be requested from them using a unique address assigned to each of them. What sensors are sampled, the periodicity of sampling, and the check interval for performing LowPowerListening the are all configurable options that can easily be set by the user at compile time. This application is admittedly *not* robust in the sense that no reliable transfer protocol is implemented for the exchange of data, data can only be retreived from one mote at a time, and there is no code anywhere to recover from node failures at any point in time. This application is intended more for demonstration purposes, and as a starting point for developers learning how to write low power sensornet applications. Enjoy! ------------------------------------------------------------------------ Installation Instructions and Running the Applications ------------------------------------------------------------------------ The default configuration of the LowPowerSensing applcation has been designed to compile and run on any platform that supports LowPowerListening and has a LogStorage component defined for its external flash (i.e. telos, mica2, micaz, eyesIFX, etc.). For purposes of illustration the instructions below are given for installation on the telosb platform, but should be applicable to other platforms as well. To run the LowPowerSensing application with its default configuration do the following: 1) Install the base station application on a mote and connect it to your PC via whatever serial interface you normally use to communicate with it. IMPORTANT: the base station mote must be installed with address 0 cd Base make telosb install.0 2) Install the sampler application on a mote. You can install this application on any number of motes, remembering to change the TOS_NODE_ID of each installation instance (in the example below I use 5, 10, and 20, but any number is acceptable as long as its not 0). cd Sampler make telosb install.5 make telosb install.10 make telosb install.20 3) Compile and run the java application. You first need to start up an instance of serial forwarder to do so. cd java make java net.tinyos.sf.SerialForwarder -comm serial@/dev/ttyUSB0:telosb & java LowePowerSensingApp After starting the java application you will be presented with a user prompt that looks like: Enter 's' to request samples >> Just type 's' and hit enter in order to request samples from one of your sampler motes. After doing so, you will be presented with a prompt for the address of the mote from which you are requesting data. You should enter the TOS_NODE_ID of one of the motes you installed the sampler application on before. Enter Address: Once the address has been entered, a request message will be sent from the java application through the base station mote and out to the mote running the sampling application. Once the sampler mote receives this request, it will start streaming back any data it has logged to flash since the last time a request was received. If this is the first request message it is receiving, it will send all of the samples back that it has logged since the time it was booted up. ------------------------------------------------------------------------ Changing the default Configuration ------------------------------------------------------------------------ The LowPowerSensing Application is set up by default to use a software based Sinusoidal generator sensor with a sampling period of 3s, and an LPL check interval of 2s. The code for using this sensor can be found in the 'universal_sensors' directory. The pattern followed by the set of files found in this directory can be used to setup other types of sensors for sampling by the LowPowerSensing application. If you take a look in the 'tmote_onboard_sensors' directory you will see the exact same set of files as you do in the 'universal_sensors' directory. Of course, these files are set up to use the set of sensors found onboard the tmote sky motes: namely a temperature sensor, a humidity sensor, a photo active sensor, and a total solar sensor. Because the files in each directory are named identically, we can tell the LowPowerSensing application which set of sensors to expect completely at compile time by simply setting a few compiler flags. So if you happen to have a tmote laying around and you want to sample its onboard sensors instead of using the default sinusoidal sensor you need to do the following: Open up the makefiles for both the the Sampler and Base station applications and change this line: CFLAGS += -I.. -I../sampleLog -I../universal_sensors to CFLAGS += -I.. -I../sampleLog -I../tmote_onboard_sensors Additionally, to allow the java application to recognize the new types of sensors being sampled you need to change this line in the makefile of the java directory: SENSOR_DIR = universal_sensors to SENSOR_DIR = tmote_onboard_sensors And thats it. You should now be sampling the oboard tmote sensors instead of the sinusoaidal one. If you wish to create a custom set of sensors to sample using the LowPowerSensing application (such as those from one of the mica sensorboards), just follow the pattern found in the 'universal_sensors' and 'tmote_onboard_sensors' and then change the compiler flags appropriately. Additionally, if you wish to change the LowPowerListening check interval or the sampling period of the Sampler application you can eitheropen up the 'LowPowerSensingConsants.h' file and directly change them there, or pass new values for them at compile time through the makefile (all values are in binary milliseconds i.e. 1s is specified as 1024 not 1000). To change them via the makefile add lines such as the following to your makefile in both the Base and Sampler application directories (its important that its in both makefiles for the LPL check interval, but only necessary in the Sampler application if you are only changing the sampling period): PFLAGS += -DSAMPLING_INTERVAL=10000 PFLAGS += -DLPL_INTERVAL=3000 PFLAGS += -DSAMPLING_INTERVAL=10000 -DLPL_INTERVAL=3000 And that should be it. The rest of it involves sifting through the code and figuring out how the application does what it does. If you have any questions feel free to email me (Kevin) at klueska@cs.stanford.edu .