On the 26th of May the project organized a Contiki programming tutorial where participants were introduced to the mysteries of sensor network programming. The tutorial was the second in a series of events aiming to build cross disciplinary understanding of the challenges associated with creating supple systems. The tutorial was held by Adam Dunkels from the Networked Embedded Systems (NES) group at SICS. It started with an overview of what sensor networks are, what they are used for, some of the problems associated with developing them, and what Contiki can do to overcome those problems. Contiki is an operating system for networked embedded systems and wireless sensor networks developed by Adam and his colleagues. It is highly efficient and is used in numerous applications and contexts worldwide. Contiki provides solutions to common problems, e.g. short battery life-time, encountered when developing battery powered wireless sensor networks through the use of techniques such as power saving MAC protocols. Based on the somewhat counter intuitive observation that listening for radio transmissions in sensor networks, is more expensive than transmitting radio, power saving MAC protocols can regulate the amount of time that the radio transceiver in sensor nodes spend listening for radio transmissions in clever ways.
Adam's introduction also dispelled a number of other common misconceptions about wireless communication, e.g. that it can be thought of in terms of direct links between nodes, or that transmissions from nodes reach out circularly from the source. Instead the reality of wireless communication is instead non-uniform and non-symmetric. Transmissions do not spread evenly out from the source due to e.g obstacles, nor is it certain that a node that has received a transmission from another node actually has a route back to the sender. For project members that are not familiar with the peculiarities of radio communication those were valuable lessons for the future. Radio communication is definitely an aspect that has to be taken into consideration in the projects future designs. It may even be fruitful to think of radio as a design material in its own right.
After the introduction we moved on to a hands on session where we installed the instant-contiki development environment and stepped through some examples illustrating how to program sensor nodes using contiki. In particular we focused on how to make nodes talk to each other using unicast, broadcast, and mesh communication. This all turned out to be easy enough and could be accomplished with just a few lines of code. By the end of the tutorial we had all gone through several examples and learnt enough to be able to take our first solo steps in the land of wireless sensor networks and embedded systems programming.
Overall participants were surprised that using contiki was as easy as it was. They shouldn't be, as one of the design goals of contiki is to demystify the process of programming wireless sensor networks, allowing developers to use the same languages, tools, and constructs that they are used to. When developing prototypes in the supple project working with contiki will definitely make our lives easier.