Showing posts with label contiki. Show all posts
Showing posts with label contiki. Show all posts

Monday, April 6, 2015

Contiki OS: Using Powertrace and Energest power profile to estimate power consumption

To estimate the energy consumption. We can run on Cooja or with a real device

- Check the number of ticks per sencond for rtime (RTIMER_SECOND = 32768)
printf("Ticks per second: %u\n", RTIMER_SECOND);

- Include powertrace app in your project by adding it to your Makefile
APP += powertrace
(You also can use simpler version of powertrace at https://github.com/sonhan/contiki-sonhan/)
- Add to source file
#include "powertrace.h"
- Add to source file to print power profile every 10 seconds:
powertrace_start(CLOCK_SECOND * 10);

- Sample data
CPU         LPM            TX           RX
512803    14227588    153188    195436
531519    14535272    158359    203847
549549    14844701    163409    211794
560341    15161365    165821    216534
575755    15473409    169844    223419
599333    15777318    178173    231767
610307    16093852    180704    236651
625674    16406020    184722    243660
649197    16710040    193402    252940
660144    17026626    195811    258453
670942    17343372    198221    263249

- Energy consumption (Power - mW):

Check datasheet for current and voltage, e.g., CPU = (531519 - 512803) * 0.33 * 3 / 32768 / 10

- Duty cycle (%):


E.g., TX duty cycle = (158359 - 153188) / (531519 - 512803 + 14535272 - 14227588)

- Sample output:
- Sample data and calculation:
https://github.com/sonhan/contiki/tree/master/apps/powertrace-sonhan/sample-data

Monday, June 2, 2014

Border Router with Raspberry Pi for LLN with TelosBs

This tutorial aims to create a IPv6 Low-power and Lossy Network (LLN) of TelosB motes with a Rapsberry Pi (RPi) as a border router (LBR) to connect to other IPv6 networks. RPi is configured for routing traffic from the LLN to other IPv6 networks by creating a TUN network interface. An alternative to setup a LLN is to configure a bridge (TAP) as in Cetic-6LBR (https://github.com/cetic/6lbr/)

We are going to have two IPv6 networks associated to two network interfaces of the LBR RPi as shown in Fig.1.

Fig.1: Deployment


LBR
- eth0: bbbb::1/64 (Physical Ethernet interface to normal IPv6 network)
- tun0: aaaa::1/64 (TUN interface to LLN)

IPv6 Network:
- bbbb::2

LLN:
- aaaa::212:7400:13cb:44 (slip-radio)
- aaaa::212:7400:13cb:101a
- aaaa::212:7400:13ca:f3ac

1. LLN Network (see here)

- Flash radio-slip mote (contiki-2.7/examples/ipv6/slip-radio) to use as an IEEE 802.15.4 interface
- Flash other TelosB for LLN nodes (e.g., contiki-2.7/examples/ipv6/udp-server)

2. IPv6 Network
- Configure a machine with bbbb::/64 address (example with a Linux)
# sudo vi /etc/network/interfaces
auto eth0
iface eth0 inet6 static
address bbbb::2
netmask 64
gateway bbbb::100 (border router address)

(you may need to deactivate other network interfaces to check if it works properly)

3. RPi Border Router
Prepare RPi OS
- Download Raspbian

- Create a boot disk using SD card (>4G) using Win32 DiskImager
(Check here for Raspbian essentials)

- Plug radio-slip mote to RPi, recognized as /dev/ttyUSB0

- Enable IPv6 module?

# sudo modprobe ipv6
or to automatically enable it at boot, add ipv6 on a line at the end of /etc/modules.

- Enable IPv6 forwarding
# sudo sysctl -w net.ipv6.conf.all.forwarding=1

or edit /etc/sysctl.conf uncomment the line: net.ipv6.conf.all.forwarding=1

- Configure IPv6 address for eth0
# sudo vi /etc/network/interfaces
auto eth0
iface eth0 inet6 static
address bbbb::1
netmask 64

- Download contiki-2.7 source
- Go to examples/ipv6/native-border-router
- Fix source and build 
# vi border-router.c, line 161: remove ; (contiki 2.7 bug)
# vi slip-config.c, line 76: change -1 to 255 (RPi kernel??)
# make

- Run border router
# sudo modprobe ipv6 (optional)
# sudo sysctl -w net.ipv6.conf.all.forwarding=1 (optional)
# sudo ./border-router.native -L -v6 aaaa::1/64 (debug, ttyUSB0, 115200)

Autostart the border-router.native by adding it to /etc/rc.local (optional)
path_to_border-router.native aaaa::1/64

ex: /home/pi/contiki-2.7/examples/ipv6/native-border-router/border-router.native aaaa::1/64 &

4. Test

From IPv6 network computer ping to LLN
Ping: ping6 aaaa::212:7400:13cb:101a
Web browser: aaaa::212:7400:13cb:44

Thursday, April 17, 2014

Light sensing with TelosB

A small application to demonstrate IP networking in smart objects: Light sensing with TelosB motes + Contiki OS + uIP stacks.

Equipment needed
- 02 TelosB motes
- 01 gateway machine: Java supported, USB port

Setup
- 01 mote is connected to the gateway as a sink node to receive data from the other mote. It is an UDP server to print the received data to serial port
- 01 motes frequently collect light intensity and send it to the sink node if the intensity changes dramatically (higher than a predefined THRESHOLD = 2). It is an UDP client to send data
- Gateway: Using serialdump* tool to get data from the sink node's serial port and a Java client running to capture these data.

Source code
https://github.com/sonhan/ipsensorcollect

Demo

The bottom panel gets darker if  light intensity reduces

Friday, March 21, 2014

Contiki OS 2.7 Cooja Serial Device with serial2pty

Create a virtual serial device for Cooja motes under /dev/pts/[id]

1. Download
https://github.com/cmorty/cooja-serial2pty
2. Update code with new Cooja class names (if not updated) in Serial2Pty.java

- Change package org.contikios.cooja to se.sics.cooja
import se.sics.cooja.*;
import se.sics.cooja.interfaces.SerialPort;
- Change class Cooja to GUI

A modified code can be found here: https://github.com/sonhan/cooja-serial2pty

3. Build
copy to /contiki/cooja/apps/serial2pty
ant jar
cooja > Settings -> Cooja Extensions... > Select the serial2pty app

4. Test
- Restart Cooja if needed
- Right click on the mote > Mote tools for Test Node > Serial 2 Pty > it shows the serial device (e.g., /dev/pts/10
- Open a Terminal:

#cd contiki
#sudo make login TARGET=sky MOTES=/dev/pts/10 (for a simulated Sky mote)

Thursday, March 6, 2014

Contiki OS: RPL Network Setup 2

One mote can be used as a wireless interface (IEEE 802.15.4), host machine as Border Router to  bridge the wireless IPv6 network (e.g., LLN) to outside network, and the Internet.

InstantContiki 2.7 or any machine with Contiki-2.7 and TI MSP430 toolchain (See here)

1. slip-radio (mote 1 as an IEEE 802.15.4 interface)
#cd contiki-2.7/examples/ipv6/slip-radio
#make TARGET=sky
#sudo make TARGET=sky slip-radio.upload

2. UDP servers or any IPv6 service (motes 2..n)
#cd contiki-2.7/examples/ipv6/rpl-udp
#make TARGET=sky
#sudo make TARGET=sky udp-server.upload

3. Host machine (Linux)
 #cd contiki-2.7/examples/ipv6/native-border-router
#make [TARGET=native]
#sudo ./border-router.native -L -v6 aaaa::1/64
*default: -s ttyUSB0 (serial device) -B 115200 (baud rate) -t tun0 (name of interface)

Cooja:  sudo ./border-router.native -a 127.0.0.1 -v6 aaaa::1/64
(enable Serial  Socket Server in the Cooja node used as the wireless interface)

[Contiki 2.7 Release Error] border-router.c:161:28: error: expected ‘)’ before ‘;’ token. 
Just delete the ';'

4. Test
ping6 aaaa::212:7400:13cb:44 (mote 1, wireless interface)
ping6 aaaa::212:7400:13ca:fee4 (mote 2)
ping6 aaaa::212:7400:13cb:34fa (mote 3)

Firefox: http://[aaaa::212:7400:13cb:44]

Thursday, February 20, 2014

Contiki OS: Handy Commands and Tools (TelosB)

Linux
#make TARGET=sky savetarget (save target)
#make [TARGET=sky] motelist (list of attached motes)
#sudo [TARGET=sky] make login (mote console)
#make [TARGET=sky] MOTES=/dev/ttyUSB1 (target at the motes /dev/ttyUSB1)
#sudo make [MOTES=/dev/ttyUSB1] name_of_program.upload (upload to [ttyUSB1]) 


Windows
cd tools\sky
motelist-windows.exe (list of attached motes)
serialdump-windows.exe -b115200 /dev/com5 (mote console of COM5 mote, baud rate 115200)

TelosB driver:  FTDI
http://www.ftdichip.com/FTDrivers.htm

Monday, February 17, 2014

Contiki OS: Run Contiki Collect View tool on Windows, Linux

Collect View is a Contiki tool to collect and visualize data from a mote (including energy consumption)

Requirements
- 01 Host machine (Windows or Linux TI MSP430 toolchain)
- 02 TelosB motes

Motes setup
- Use InstantContiki or Linux with TI MSP430 toolchain (see here)
- Connect 02 motes
- Build and upload udp-sink (sink node) and udp-sender (send node
cd examples/ipv6/rpl-collect
make PERIOD=10 (sending every 10sec) if this doesn't work change in the source file collect-common.c #define PERIOD 10

make TARGET=sky MOTES=/dev/ttyUSB0 udp-sink.upload
make TARGET=sky MOTES=/dev/ttyUSB1 udp-sender.upload

Windows environment setup
- Download Contiki source (contiki-2.7)
- Download ANT and extract to a folder (E:\dev\apache-ant-1.9.3)
- Add System Environment variable ANT_HOME=E:\dev\apache-ant-1.9.3
- Add %ANT_HOME%\bin to your PATH

build.xml fix (for Windows)
- Remove the collect-view-shell.ihex part (it is used to compile collect example and copy to the dist folder)
<target name="collect-view-shell.ihex"
<target name="dist" depends="jar,collect-view-shell.ihex">

Go and rock
- Connect sink node to the host machin
- Run Terminal or cmd (Windows with administrator)

cd contiki-2.7\tools\collect-view
ant (building)
cd dist
java -jar collect-view.jar /dev/com6 (Windows, COM6 is the device port)
sudo java -jar collect-view.jar /dev/ttyUSB0 (Linux, ttyUSB0 is the device port)

Click Start Collect

Tuesday, February 11, 2014

Contiki OS: TelosB Toolchain TI MSP430 Installation Ubuntu + Cygwin (Windows)

Official Website

http://sourceforge.net/apps/mediawiki/mspgcc/index.php?title=MSPGCC_Wiki 

Ubuntu

Install libncurses
$ sudo apt-get install libncurses5-dev

Install msp430 toolchain
$ sudo apt-get install msp430-libc mspdebug msp430mcu binutils-msp430 gcc-msp430 gdb-msp430

[ia32-libs]

Cygwin

Make sure rpm package is installed (Run setup again, under util if rpm cannot be found)

Sunday, February 9, 2014

Contiki OS: RPL Network Setup 1

One mote can be used as a Border Router to bridge the wireless IPv6 network (e.g., LLN) to a PC via serial link. By which, the IPv6 network traffic can reach outside network, and the Internet.

InstantContiki 2.7 or any machine with Contiki-2.7 and TI MSP430 toolchain (See here)

1. Border router (mote 1)
#cd contiki-2.7/examples/ipv6/rpl-border-router
#make TARGET=sky
#sudo make TARGET=sky border-router.upload

2. UDP servers (motes 2..n) or any IPv6 service
#cd contiki-2.7/examples/ipv6/rpl-udp
#make TARGET=sky
#sudo make TARGET=sky udp-server.upload

3. Host machine 

- Linux using tunslip6 (with mote 1 connected as ttyUSB0)

#cd contiki-2.7/tools
#make tunslip6
#sudo ./tunslip6 -s /dev/ttyUSB0 aaaa::1/64

Cooja: sudo ./tunslip6 -a 127.0.0.1 aaaa::1/64
(enable Serial  Socket Server in the Cooja node used as the wireless interface)

- Windows using wpcapslip6 (with mote 1 connected as COM5)
Run cmd (Admin)
ifconfig /all --> find a working network interface (e.g.,Virtual Box Network Interface), MAC address: 00-50-56-C0-00-01
cd tools\stm32w\wpcapslip6
wpcapslip6 -s /dev/com5 -b aaaa:: -a aaaa::1/64 00-50-56-C0-00-01 (COM5 is where the mote is connected, check in Device Manager)

4. Test
ping6 aaaa::212:7400:13cb:44 (mote 1, border router)
ping6 aaaa::212:7400:13ca:fee4 (mote 2)
ping6 aaaa::212:7400:13cb:34fa (mote 3)


Firefox: http://[aaaa::212:7400:13cb:44]