Contiki is an open source operating system for the Internet of Things. Contiki connects tiny low-cost, low-power microcontrollers to the Internet.
the presentation explains how to install the simulator, teach the reader some concepts of contiki OS, goes through API used in platform specific examples, and most importantly explains some example(Blinking example, Light and temperature sensor web demo).
3. WhyChoose
Contiki?
Contiki is an open source operating system for the
Internet ofThings.
Contiki connects tiny low-cost, low-power
microcontrollers to the Internet
4. TheContiki
Operating
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.
6. Firstly
Cooja makes Contiki easy to install and get started
with it.
Download Instant Contiki
http://sourceforge.net/projects/contiki/files/Instant
%20Contiki/
InstallVMWare Player
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 is user.
10. 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.
11. Open a
terminal
window
We will now compile and start Cooja, the Contiki
network simulator.
Starting the terminal
12. StartCooja
Start Cooja by
In the terminal window, go to the Cooja directory:
Start Cooja with the command:
18. Simulation
windows
Network window -Top left
-shows all motes in the simulated
area
Timeline window - At the bottom of screen
- Shows all communication
events in the simulation over
time
- very handy for understanding
what goes on in the network
Notes window - On the top right is where we can
put notes for our simulation.
Mote output window - on the right side of the screen
- shows all serial port printouts
from all the motes.
Simulation control -window is where we start, pause,
and reload our simulation
19. Add mote to
the interface
Before we can simulate our network, we must add
one or more motes.
We do this via the Motes menu, where we click on
Add motes....
Since this is the first mote we add, we must first
create a mote type to add.
Click Create new mote type... and select one of
the available mote types.
For this example, we click Sky mote... to create an
emulatedTmote Sky mote type.
Choose the hardware then install the firmware with
any functionality that you desire
23. Platform
porting
we assume you have a Zolertia Z1 mote connected to a
USB port of your PC
Enable the Z1 in Instant Contiki, so that Instant Contiki
is able to talk to it
cd contiki/examples/FOLDER/
Then upload the compiled firmware to the hardware
Then make login
To access the burnt firmware on the device
30. TmoteSky
platform
TheTmote Sky platform is a wireless sensor board
from Moteiv.
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 theTmote Sky by Björn
Grönvall as part of the RUNES project.
TheTmote Sky port was integrated into the Contiki
build system in March 2007.
31. TmoteSky
platform
The platform-specific source code for theTmote
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.
34. Code detail
PROCESS ( name,
strname )
Declare a process.
PROCESS(blink_process, "Blink");
AUTOSTART_PROCESSES(&blink_process); 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.
PROCESS_EXITHANDLER(handler ) -Specify an action when a process exits.
-Comes before declaring PROCESS_BEGIN()
PROCESS_BEGIN( ) ,PROCESS_END()
-specify the beginning and the End of a
process
35. Code detail
etimer et; -This structure is used for declaring a timer.
The timer must be set with etimer_set()
before it can be used.
PROCESS_WAIT_EVENT_UNTIL(c) 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_expir
ed(&et));
-Check if an event timer has expired.
-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
36. LEDAPI
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
#define LEDS_GREEN 1
#define LEDS_YELLOW 2
#define LEDS_RED 4
#define LEDS_ALL 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 argument ledv.
40. ESB
platform
sensors
button_battery_sensor - query the battery voltage
level
sensor - query the on-board button
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
41. 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)
42. process
PROCESS_BEGIN() -Define the beginning of a process
PROCESS_END() -Define the end of a process.
PROCESS_WAIT_EVENT()
-Wait for an event to be posted to the
process.
-blocks the currently running process until
the process receives an event.
PROCESS_WAIT_EVENT_UNTIL(c) Wait for an event to be posted to the
process, with an extra condition.
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.
43. LED
functions
Basic LED functions
leds_on() - turn LEDs on
leds_off() - turn LEDs off
leds_invert() - invert LEDs
leds_blink() - blink all LEDs
44. 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
45. Timer
functions
EventTimer Callback timer Simple timer
-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_expired()
•ctimer_reset
•ctimer_set()
•ctimer_restart()
•timer_expired()
•timer_reset
•timer_set()
•timer_restart()
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.
47. Border
router set-up
Having able to connect to sensors is very significant
step in IOT
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]examplesipv6rpl-border-router
Simulation in Cooja is in
examplesipv6sky-websense
48. Steps
1. Start COOJA and load the simulation "example-
sky-websense.csc"
makeTARGET=cooja example-sky-websense.csc
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]/
49. tunslip6
Before being able to view the sensor readings from
the webserver,
A serial connection to the server through the
command
50. output
The Cooja simulator provides you with important
details about every sensor node in the network
52. Websense
code details
The second process is
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
54. Question
• what is uIPTCP/I P ?
provides Internet communication abilities to
Contiki
What are the applications of it?
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
55. Questions
What is used for?
Contiki is designed for microcontrollers with small
amounts of memory.
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.
56. Question
What is COOJA?
Cooja is a simulator provided by Contiki, which
unlike most simulators also allows real hardware
platforms to be emulated
No addition stack is needed
Basically is used to handle the memory constraint in limited devices.
The function leds_toggle() is an alias for leds_invert(), and is only kept for backward compatibility.
Platform dependent blink
In step 2 , the user need to open the terminal and go to the same folder and connect to the webserver using the command “make connect-router-cooja”
Then
, ping the COOJA nodes to test the connectivity. Type in the terminal the
ping6 aaaa::0212:7402:0002:0202
ping6 aaaa::0212:7403:0003:0303
In the Make file in sky-websense folder configuration of the tunslip6 is handled there,
Here is the configuration of the tunslip6 which is included in the MakeFile
$(CONTIKI)/tools/tunslip6: $(CONTIKI)/tools/tunslip6.c
(cd $(CONTIKI)/tools && $(MAKE) tunslip6)
connect-router: $(CONTIKI)/tools/tunslip6
sudo $(CONTIKI)/tools/tunslip6 aaaa::1/64
connect-router-cooja: $(CONTIKI)/tools/tunslip6
sudo $(CONTIKI)/tools/tunslip6 -a 127.0.0.1 aaaa::1/64
2- more information on the SLIP
http://en.wikipedia.org/wiki/Serial_Line_Internet_Protocol
https://github.com/maniacbug/contiki-avr-zigduino/wiki/Using%3ASLIP#What_is_SLIP
http_appcall() function exists in apps/webserver/httpd.c