Basics of Contiki-OS and using it for Wireless
Sensor Network Applications
Shantanoo Desai
prepared for:
Prof. Dr. Anna Frster
Sustainable Communication Networks
University of Bremen
20th November 2015
1
Outline
CONTIKI-OS
Contiki in a nutshell
Requirements
Getting Started
Initial Steps
File Structure in Contiki
Terminal Basics
First Program in Contiki: Hello-World
Programming using Terminal
Hello-World files
Getting Output
Understanding codes in Contiki
Programming a Sensor Node
TelosB Sensor Node
Connecting the TelosB to Contiki-OS
Hello-World program on TelosB
Cooja Simulator in Contiki-OS
Hello-World Simulation with Cooja
Adding Sensor Nodes to Cooja
Mote Output in Cooja
References
2
Contents of this section
CONTIKI-OS
Contiki in a nutshell
Requirements
3
What is Contiki?
CONTIKI-OS in a nutshell:
Complete environment for programming Sensor Nodes
Has everything for getting started in making Applications
In-built simulator called COOJA
Large pool of sensor compatibility e.g. TelosB, Zolertia Z1
4
Requirements
Requirements before we begin:
VMware Virtual Player
VMware Workstation 12 Player (recent)
Instant Contiki
Instant Contiki version 2.7/3.0
LOST??? - refer to this :
www.contiki-os.org/start.html and follow the steps.
5
Contents of this section
Getting Started
Initial Steps
File Structure in Contiki
Terminal Basics
6
Getting Started
Open VMWare player and click on Open a Virtual Machine
(Dont Worry ! if it looks different for Windows or MAC-OS! this
is for Ubuntu.)
7
Getting Started (contd.)
Navigate to your Instant Contiki 2.7 folder and select the
.vmx file
After booting of the virtual machine, Login with password:
user
Figure: First look of Contiki-OS
8
File Structure in Contiki
Click on Places and then Home folder (top left corner)
target folders: contiki & contiki-2.7 (choose any one and
see the folders)
Figure: File Structure in Contiki
9
Folders in Contiki and their Usage
apps: applications like webbrowser, telnet etc.
core: source codes for main core of Contiki
core/dev: source codes for devices such has LED, battery
sensor, button etc.
core/net: folders for MAC, and RPL routing protocol, IPv6
and IPv4, queuing packets and buffers etc.
cpu: source files for all computational units for sensor
nodes
examples: Implementation of applications
tools: general tools for testing applications
10
Terminal basics
[fragile] open terminal on the Desktop screen
pwd shows the present working directory
ls lists all the files/folders in the present directory
cd FOLDERNAME to change directory from present to the
desired one (example: from home directory to contiki-2.7)
cd .. return to the previous directory
mkdir FOLDERNAME makes a directory in the present
working directory
gedit FILENAME if you want to open a GUI based text
editor
11
Contents of this section
First Program in Contiki: Hello-World
Programming using Terminal
Hello-World files
Getting Output
Understanding codes in Contiki
12
Programming Basic: Hello-World
Programming using Terminal is Contiki-OS is preferred choice
since it makes creation of files, compilation and outputs easier
to view and manage.
1. Open terminal, change directory to either contiki or
contiki-2.7 1
2. change to the examples folder
current directory contiki-2.7/examples/
3. change to the hello-world folder
current directory contiki-2.7/examples/hello-world
1
Hint: type cd and type half of the word and press Tab key for the
completion
13
Inside the Hello-world folder
Files observed in the folder 2
hello-world.c: simple program in Contiki-OS
Makefile: file to control compilation through terminal
hello-world.csc: simple simulation file using COOJA
simulator
README.md: a basic manual for the example
2
HINT: use ls command
14
Getting Outputs in Contiki-OS
Assuming the present working directory is
contiki-2.7/examples/hello-world do the following:
Currently without any sensor node inserted into the USB
slots, in Terminal type make and press enter
after processing is done, type ./hello-world.native 3
Observe the Output "Hello, world"
to terminate program press CTRL+C
3
use Tab key instead of typing everything
15
hello-world.c: How does it work?
#include "contiki.h" /* For contiki applications */
#include <stdio.h> /* printf() function usage */
/* Contiki application : Declare the PROCESS */
PROCESS(name_of_your_process, "Process Name");
/* Start your PROCESS */
AUTOSTART_PROCESSES(&name_of_your_process);
/* Declare what the PROCESS DOES*/
PROCESS_THREAD(name_of_your_process, ev, data)
{
PROCESS_BEGIN(); /* Begin the PROCESS*/
printf("Hello, world");
PROCESS_END(); /* end the PROCESS */
}
16
Makefile in Contiki
Makefile is used to compile the source code into appropriate
object files for execution. In the main directory there exists a
Makefile.include that is necessary for compilation with or
without platforms.
# Comments using Pound Sign (#) in Makefile
CONTIKI_PROJECT = your-filename/s #Can be more files
all: $(CONTIKI_PROJECT) # take all the files
current folder is contiki-2.7/examples/hello-world and you want
to find the Makefile.include in contiki-2.7 folder and use it here
CONTIKI = ../..
include $(CONTIKI)/Makefile.include
17
Contents of this section
Programming a Sensor Node
TelosB Sensor Node
Connecting the TelosB to Contiki-OS
Hello-World program on TelosB
18
TelosB Sensor Node Functionalities
Figure: TelosB Sensor Node
Picture Courtesy: www.wsnblog.com
19
Initial Connectivity check for Sensor node
To check connectivity to the Virtual Machine do the following:
Insert the TelosB in USB slot
In the Virtual Machine Player click on the tab Virtual
Machine
scroll to Removable Devices and check for TelosB
click on TelosB and click on Connect(disconnect from
host)
It is always advisable to perform these steps when
connecting/disconnecting sensor nodes to Contiki-OS
20
Hello-World on TelosB
In contiki-2.7/examples/hello-world do the following in the
Terminal:
make TARGET=sky savetarget
make motelist
make hello-world.upload
make login
Understanding each line:
the first input will make the directory target only for TelosB
Sky node (good to do when using only one type of Sensor
node)
the second input will display on which USB port the TelosB
is connected
the third input will upload the code onto the TelosB
the last line will create a login to the TelosB
Press RESET button on the TelosB and observe output
21
Output on TelosB
connecting to /dev/ttyUSB0 (115200) [OK]
Rime started with address 50.0
MAC 32:00:00:00:00:00:00:00 Contiki 2.7 started.
Node id is set to 50.
CSMA ContikiMAC, channel check rate 8 Hz,
radio channel 26
Starting Hello world process
Hello, world
22
Contents of this section
Cooja Simulator in Contiki-OS
Hello-World Simulation with Cooja
Adding Sensor Nodes to Cooja
Mote Output in Cooja
23
Running Cooja in Contiki
In Terminal:
$ cd contiki-2.7/tools/cooja
$ ant run
24
Getting Started
Click on File New Simulation
Give a name for the simulation project, click Create
25
Cooja Environment
26
Adding Sensor Nodes (Motes) in Simulation
Click on MOTES Add MOTES
In the Create New Mote Type, select Sky Mote
In the Dialog Box that appears, click on Browse and
navigate to contiki-2.7/examples/hello-world
select the hello-world.c file and click on Compile button,
After that click on Create
27
Adding Sensor Nodes (Motes) in Simulation
after pressing Create, window to add number of Motes in
Simulation and their positions appears
add 2 or any number of motes as per wish . . .
28
Adding Sensor Nodes (Motes) in Simulation
The motes are placed randomly in the Network dialog box.
use the View title-bar option in the Network for adding
visual aide to the simulation
Press Start to run simulation
29
Mote Output in Cooja
Observe the output in the Mote Output Dialog box . . .
Similar to the output in Terminal with actual Sky mote
connected but only difference of MAC address
30
Exploring More in Cooja
Right Click on any mote and go through many options
available.
Make Projects run in COOJA from Terminal
In the Terminal navigate to the desired project folder which
has a .csc file in it
in Terminal
make TARGET=cooja filename.csc
Last Line automatically starts the simulator without having to
manually add motes.
31
REFERENCES
for better in-depth understanding for Programming in CONTIKI
Contiki-WIKI:
https://github.com/contiki-os/contiki/wiki
PROCESSES:
https://github.com/contiki-os/contiki/wiki/
Processes
32