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

Friday, February 13, 2015

Contiki and Z1

platform/z1/contiki-conf.h: change UIP_CONF_BUFFER_SIZE to 240 (from 140)

make z1-reset
make login

...to be continued

Quick Start: gnuplot - multiline graph

- Download and install gnuplot: http://www.gnuplot.info
- Creat a file data.txt:

Time    TX    RX    Total
1    0.00%    0.95%    0.95%
2    0.00%    1.03%    1.03%
3    0.09%    0.83%    0.92%
4    0.09%    1.09%    1.17%
5    0.00%    0.69%    0.69%
6    0.09%    1.07%    1.16%
7    0.00%    1.02%    1.02%
8    0.09%    1.15%    1.25%
9    0.09%    0.85%    0.94%
10    0.00%    0.92%    0.92%
11    0.18%    0.98%    1.16%
12    0.18%    1.19%    1.37%
13    0.18%    1.36%    1.54%
14    0.23%    1.30%    1.52%
15    0.00%    0.89%    0.89%
16    0.09%    1.17%    1.26%
17    0.09%    1.26%    1.35%
18    0.00%    1.13%    1.13%
19    0.18%    1.28%    1.46%
20    0.09%    0.84%    0.93%

- Run in gnuplot>

set xlabel 'Time (s)'
set ylabel 'Duty Cycle (%)'
set yrange [0:2]
set xrange [1:20]
set key autotitle columnheader
plot "data.txt" u 1:2 w linespoints lt -1 pt 5 dt 5, '' u 1:3 w linespoints lt -1 pt 4 dt 2, '' u 1:4 w linespoints lt -1 pt 3

- Output

Tuesday, August 19, 2014

Quickstart: Raspbian (Raspberry Pi) Common Errors

-  FAT-fs (mmcblk0p1): Volume was not properly unmounted

Reason: (http://lkml.org/lkml/2013/5/6/342) dosfstools should be at least v3.0.14, the current version is: 3.0.13-1
How to: (http://www.tuxlog.de/raspberrypi/2014/raspberry-pi-volume-not-properly-unmounted/)

sudo umount /boot
sudo git clone http://daniel-baumann.ch/git/software/dosfstools.git
sudo cd dosfstools
sudo make
sudo ./fsck.fat -V /dev/mmcblk0p1

0x25: Dirty bit is set. Fs was not properly unmounted and some data may be corrupt.
1) Remove dirty bit
2) No action
? 1

sudo ./fsck.fat -a /dev/mmcblk0p1
sudo mount /boot

(Updating...)

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