Skip to main content

IOT - CoAP implementation in Contiki OS

Constrained Application Protocol (CoAP) is a lightweight http protocol that reads and controls the sensors deployed for IoT.
It has actions like get, post, put, delete, observe, discover.

This coap can be accessed similar like http, For ex: to access a particular mote (Sensor) with IPv6 like this
coap://[aaaa::212:7402:2:202]
The above line will fetch the sensor boards peripherals and one can control from the browser itself. Firefox has a Cu plugin to enable CoAP within the browser. CoAP is already available for all the devices like IOS, Android, Windows, Linux, Mac, etc,

So here is an example in contiki that shows how to use this coap based application using a border router.


Step 1: Contiki Selection

Open instant Contiki (Which runs on VMWare or Virtual Box)

Open Cooja from the Desktop directly or Open the Terminal and give the following steps

$] cd /home/user/contiki-2.7/tools/cooja
$] ant run 
If you want to simulate huge number of nodes then 
$] ant run_bigmem


Step 2: Selecting Border router

File - New Simulation -> Enter Simulation Name (Leave the defaults as it is ) and then Click "Create"

Click Add Motes -> Select Sky Mote

In the firmware, Select the following path /home/user/contiki-2.7/examples/ipv6/rpl-border-router/border-router.c
Click -> Compile (or Clean and then Compile), once compilation is over, Click Create motes and select the number of motes (1 in this case).


Step 3: Selecting the Er Example Server

Click Add Motes -> Sky Motes 
In the firmware, select the following path /home/user/er-rest-example/er-example-server.c 
Click Compile -> after compilation, click create motes and select the number of motes (2 in this case)

Step 4: Run the Simulation 

In the Simulation Control window, you can press the Start button to start the simulation. Since this application is deployed with IpV6 for all the nodes, it can be seen from the simulation that all the motes have the ipv6 addresses like this
mote 1: aaaa::212:7401:1:101 for Border router

A bridge has to be made between the border router and the other motes, to enable the bridge, Right Click Border Router Node -> Mote tools for Sky 1 ->  Serial Socket (SERVER) 


Step 5: Bridge the Border Router

Open a new terminal and select the path as given below

$] cd /home/user/examples/ipv6/rpl-border-router/
$] make connect-router-cooja 
It will ask to input the super user password, after you input, the ipv6 addresses will be assigned to the motes.
You may ping it using a new terminal, with the command "ping6 aaaa::212:7402:2:202"

Step 6: Read the sensors

You can read the sensors using the ipv6 addresses by opening the firefox browser.
Open the browser and input the following addresses in a new tab

coap://[aaaa::212:7402:2:202] or any other sensor mote
Refer the images given below
CoAP
CoAP 

CoAP
CoAP
The above two images shows firefox browser with cu plugin to open the ipv6 address and read the sensor values. In the first picture the toggle value 1 for Red LED is sent from the browser by selecting the POST button (OutGoing), Upon receiving the RED LED is glowing in the Mote that indicates that the node is accepting the inputs remotely. 

Thus coAP is very handy when deals with the motes attributes. You may refer the following video for exact explanation of CoAP in Contiki



T S Pradeep Kumar

Comments

Popular posts from this blog

AWK Scripts for NS2 to process data from Trace Files

AWK Scripts are very good in processing the data from the log (trace files) which we get from NS2. If you want to process the trace file manually, here is the detailHere is a sample of trace file from NS2 (However ns2 supports a new type of trace file also), but this post will make you understand the old trace format only.r 0.030085562 _0_ MAC  --- 0 message 32 [0 ffffffff 1 800] ------- [1:255 -1:255 32 0] r 0.030110562 _0_ RTR  --- 0 message 32 [0 ffffffff 1 800] ------- [1:255 -1:255 32 0] s 1.119926192 _0_ RTR  --- 1 message 32 [0 0 0 0] ------- [0:255 -1:255 32 0]
AWK Scripts are very good in processing the data column wise. For example
the first column in the above trace file represents r, s which indicates receive, sent respectively. If we want to trace the entire r and s alone from this trace file we can represent it as $1
So
$1 represents ACTION
$2 Time
$3 Node ID
$4 Layer
$5 Flags
$6 seqno
$7 type
$8 Size
$14 Energy (if the network nodes includes EnergyModel)To run the awk script in Li…

nam installation - Segmentation Fault (Solved)

If you are encountering "Segmentation Fault" error while running nam in Ubuntu 14.04 or Linux Mint 17+ editions, this post will be helpful for you.

Download the nam file from this link

First, remove the nam which was installed earlier using the following command 

pradeep@localhost $] sudo apt-get remove nam

and install the new nam which was downloaded just now. go to the folder where the file was downloaded and issue the following command

pradeep@localhost $]  sudo dpkg --install nam_1.15-10_i386.deb

See the screenshot below to install and use nam

 T S Pradeep Kumar

Installation of ns2 in Ubuntu 18.04 - NS2 Tutorial # 2

ns2 installation in Ubuntu 18.04

Unlike earlier version of ubuntu, the 18,04 version does not support the direct installation of ns2, because of the latest C/C++ compiler (7.x), but the latest C/C++ compiler supported by ns2 is gcc-4.8. So this post and video tells you about the installation of gcc-4.8 version, then ns2 and then configuration.
Here are the steps, Please follow the video given below for more information.

$] tar zxvf ns-allinone-2.35.tar.gz


$] sudo apt install gcc-4.8 g++-4.8

if you have installed ubuntu just now, you can try these commands also in the beginning

$] sudo apt update
$] sudo apt install build-essential autoconf automake libxmu-dev

$] cd ns-allinone-2.35/ns-2.35
$] gedit Makefile.in
$] gedit linkstate/ls.h

line number 137, change erase to this->erase
$] cd ..
$] ./install

export PATH=$PATH:/home/pradeepkumar/ns-allinone-2.35/bin:/home/pradeepkumar/ns-allinone-2.35/tcl8.5.10/unix:/home/pradeepkumar/ns-allinone-2.35/tk8.5.10/unix
export LD_LIBRARY_PATH=$L…