Sei sulla pagina 1di 57

Contiki: Open

Source OS for
the Internet of
Things

The Internet of Things applications

Why
Choose
Contiki?

Contiki is an open source operating


system for the Internet of Things.
Contiki connects tiny low-cost, low-power
microcontrollers to the Internet

The
Contiki
Operatin
g System

Contiki is an open source operating


system that runs on tiny low-power
microcontrollers and makes it possible to
develop applications that make efficient
use of the hardware while providing
standardized low-power wireless
communication for a range of hardware
platforms.
Contiki is used in numerous commercial
and non-commercial systems, such as
city sound monitoring, street lights,
networked electrical power meters,
industrial monitoring, radiation
monitoring, construction site monitoring,
alarm systems, remote house monitoring,
and so on.

Get Started
with Contiki

Cooja makes Contiki easy to install and


get started with it.
Download Instant Contiki
http://sourceforge.net/projects/contiki/files
/Instant%20Contiki/

Install VMWare Player

Firstly

https://
my.vmware.com/web/vmware/free#deskto
p_end_user_computing/vmware_player/6
_0
Register and reboot

Start Instant Contiki


Start Instant Contiki by running
InstantContiki2.6.vmx. Wait for the virtual
Ubuntu Linux boot up.
Log into Instant Contiki. The password
isuser.

Boot
Ubuntu

Log in

Step 2: Start
Cooja

Cooja is a highly useful tool for Contiki


development as it allows developers to
test their code and systems long before
running it on the target hardware.
Developers regularly set up new
simulations both to debug their software
and to verify the behavior of their
systems.

We will now compile and start Cooja, the


Contiki network simulator.
Starting the terminal

Open a
terminal
window

Start Cooja by

Start
Cooja

In the terminal window, go to the Cooja


directory:

Start Cooja with the command:

Running
Cooja

Cooja UI

Step 3: Run Contiki


in simulation

Click theFilemenu and clickNew


simulation

Creating
Simulation
Create New Simulation:

Network
window(mot
es)

Simulation
Window
Timeline
Window->all
communication
s

Networkwindow

-Top left
-shows all motes in the
simulated area

Timeline window

Simulation
windows

At the bottom of screen


Shows all communication
events in the simulation
over time
very handy for
understanding what goes
on in the network

Noteswindow

- On the top right is where


we can put notes for our
simulation.

Mote output window

Simulation control

on the right side of the


screen
shows all serial port
printouts from all the
motes.

-window is where we start,


pause, and reload our
simulation

Before we can simulate our network, we


must add one or more motes.
We do this via theMotesmenu, where
we click on
Add motes....

Since this is the first mote we add, we


must first create a mote type to add.

Add mote
to the
interface

ClickCreate new mote type...and


select one of the available mote types.
For this example, we clickSky
mote...to create an emulated Tmote Sky
mote type.
Choose the hardware then install the
firmware with any functionality that you
desire

Add mote
to the
interface

Simulation
window

Step 4
Run Contiki on
hardware

we assume you have aZolertia Z1mote


connected to a USB port of your PC
Enable the Z1 in Instant Contiki, so that
Instant Contiki is able to
talk to it

Platform
porting

cd contiki/examples/FOLDER/
Then upload the compiled firmware to the
hardware
Then make login
To access the burnt firmware on the device

Hi.c file

MakeFile

The we have to compile the files by


make TARGET=z1 hi

If there are not errors then some files will


be produced like .native
filename.native

./hi.nativ
e

Upload Contiki to
the hardware
-in this case we
have no
connected
hardware

Connection
prob.

Platform in
contiki

The contiki supports multiple independent


platforms
The picture below from the directory of
contiki

Contiki
platforms

The Tmote Sky platform is a wireless


sensor board from Moteiv.

Example of
contiki
system(Tmo
te Sky
platform)

It is an MSP430-based board with an


802.15.4-compatible CC2420 radio chip,
a 1 megabyte external serial flash
memory, and two light sensors.

Contiki was ported to the Tmote Sky by


Bjrn Grnvall as part of the RUNES
project.
The Tmote Sky port was integrated into
the Contiki build system in March 2007.

Example
of contiki
system(T
mote Sky
platform)

The platform-specific source code for the


Tmote Sky port can be found in the
directories platform/sky and
cpu/msp430 in the Contiki source tree.
Code for writing to the on-chip flash ROM
is in the cpu/msp430/flash.c
Code for reading and writing to the
external flash is the file
platform/sky/dev/xmem.c
Code for reading the light sensors is in
platform/sky/dev/light.c.

Blink
Application
example

-Code
explanation
-Cooja
runnin
-video

-Code

Blink
example
code

PROCESS (
strname

name,
)

Code
explanation
Declare a process.
PROCESS(blink_process, "Blink");

AUTOSTART_PROCESSES(&blink_proc
ess);

Starting a process automatically


&blink_process

ROCESS_THREAD(name,
ev,data )

-Define the body of a process


-The process is called whenever an
event occurs in the system
-Start with the PROCESS_BEGIN()
macro -Ends with the PROCESS_END()
macro.

Code
detail
PROCESS_EXITHANDLER(handler )

PROCESS_BEGIN(
,PROCESS_END()

-Specify an action when a process


exits.
-Comes before declaring
PROCESS_BEGIN()
-specify the beginning and the End of
a process

etimer et;

Code
explanation

PROCESS_WAIT_EVENT_UNTIL(c)

Code
detail

-This structure is used for


declaring a timer. The timer must
be set with etimer_set() before it
can be used.

Wait for an event to be posted to the


process, with an extra condition.
-This macro is similar to
PROCESS_WAIT_EVENT()
in that it blocks the currently running
process until the process receives an
event.

PROCESS_WAIT_EVENT_UNTIL(etimer_ -Check if an event timer has expired.


expired(&et));
-Parameters:
et :a pointer to the event timer.
-return true if the time expires

leds_on(LEDS_ALL);

On the LEDS

leds_off(LEDS_ALL);

Off the LEDs

Simple and important to communicate with


the user
The platform startup code initializes the LEDs
library by calling leds_init() initializes the API
ledv: is LED vector platform independent

LED API

#define
#define
#define
#define

LEDS_GREEN
LEDS_YELLOW
LEDS_RED
LEDS_ALL

1
2
4
7

leds_on()takes a LEDs vector


argument,ledv, and switches on the LEDs

set in the vector.

Led_off() takes the LED in ledv and switch it


off.
leds_invert()inverts the current status of
the LEDs set in the argumentledv.

Cooja capture

Youtube
Demo

http://www.youtube.com/watch?
v=9WohGp8udOQ

APIs

button_battery_sensor - query the battery


voltage level
sensor - query the on-board button

ESB
platform
sensors

pir_sensor - query the passive IR sensor


(motion detector)
radio_sensor - query the radio signal
strength
sound_sensor - query the microphone
temperature_sensor- query the
temperature sensor
vib_sensor - query the vibration senso

Sensor
functions

Each sensor has a set of functions for


controlling it and query it for its state.
Some sensors also generate an events
when the sensors change. A sensor must
be activated before it generates events or
relevant values.
SENSORS_ACTIVATE(Button_sensor )) activate the button sensor
SENSORS_DEACTIVATE(sensor)
sensor.value(0) - query the sensor for its
last value (button either pressed or not)
sensors_event - event sent when a sensor
has changed (the data argument will
referer to the actual sensor)

PROCESS_BEGIN()

-Define the beginning of a process

PROCESS_END()

-Define the end of a process.


-Wait for an event to be posted to
the process.
PROCESS_WAIT_EVENT()
-blocks the currently running
process until the process receives
an event.
PROCESS_WAIT_EVENT_UNTIL Wait for an event to be posted to
(c)
the process, with an extra
condition.

process

PROCESS_YIELD()

Yield the currently running


process.

PROCESS_YIELD_UNTIL(c)

Yield the currently running process


until a condition occurs.

PROCESS_WAIT_UNTIL(c)

Wait for a condition to occur.

PROCESS_EXIT()

Exit the currently running process.

PROCESS_PAUSE()

Yield the process for a short while.

Basic LED functions

LED
functions

leds_on() - turn LEDs on


leds_off() - turn LEDs off
leds_invert() - invert LEDs
leds_blink()- blink all LEDs

Beeper
functions

Implements a beep function to emit a


beep sound
Also play polyphonic tune using buzzer

beep()- click the beeper


beep_beep()- beep
beep_down()- pitchbend down beep
beep_quick() - a number of quick beeps
beep_spinup()- pitchbend up beep

The Contiki kernel does not provide support for


timed events. Rather, an application that wants
to use timers needs to explicitly use the timer
library.
Event Timer
Callback timer Simple timer

Timer
functions

-generates an
event when the
timer expires a

-call a function
when the timer
expires

-have to be
actively queried
to check when
they have
expired

etimer_expired
()
etimer_reset
etimer_set()
etimer_restart(
)

ctimer_expire
d()
ctimer_reset
ctimer_set()
ctimer_restar
t()

timer_expired
()
timer_reset
timer_set()
timer_restart
()

Sky websense
Light and temperatur sensor web demo

Having able to connect to sensors is very


significant step in IOT

Border
router setup

This example features a simple webserver


running on top of the IPv6 Contiki stack
on Sky motes to provide sensor values,
and with a RPL border router to bridge the
sensor network to Internet.
Server is located in :
[Contiki home]\examples\ipv6\rplborder-router
Simulation in Cooja is in
examples\ipv6\sky-websense

1. Start COOJA and load the simulation


"example-sky-websense.csc"
make TARGET=cooja example-skywebsense.csc

Steps

2. Connect to the COOJA simulation using


tunslip6:
make connect-router-cooja
3. You should now be able to browse to the
nodes using your web browser:

Router: http://
[aaaa::0212:7401:0001:0101]/

Node 2: http://
[aaaa::0212:7402:0002:0202]/

Before being able to view the sensor


readings from the webserver,
A serial connection to the server through
the command

tunslip6

The Cooja simulator provides you with


important details about every sensor
node in the network

output

Including the required libraries

Websense
code
details

Define processes
Opens the tcp server socket which defined in
httpd.c

The second process is

Websense
code
details

It does the sensing through the web in a way

A protothread that handles reading or getting


the parameters of temperature and light from
sensors

Review
Question

what is uIP TCP/I P ?


provides Internet communication abilities
to Contiki

What are the applications of it?

Question

Network enabling an embedded


microcontroller makes it possible to
control electronic consumer devices
or appliances such
as smart meters,
heating, air conditioning, lighting
systems, grid connected electric car
chargers and even door locks, radiation
systems, ..anything

What is used for?


Contiki is designed for microcontrollers
with small amounts of memory.

Questions

Operating system for memory-efficient


networked embedded systems and
wireless sensor networks
What is the typical size of Contiki?
A typical Contiki configuration is 2
kilobytes of RAM and 40 kilobytes of ROM.

What is COOJA?

Question

Coojais a simulator provided by Contiki,


which unlike most simulators also allows
real hardware platforms to be emulated

http://www.contiki-os.org/start.html

Reference
s

http://virtualsense.googlecode.com/git/VirtualSense/examples
/rest-example/README
http://www.wolfe.id.au/2014/03/02/configuring-asimple-ipv6-network/
http://contiki-os.blogspot.kr/

http://people.inf.ethz.ch/mkovatsc/wiki/general:co
ntiki:webserver

Potrebbero piacerti anche