Contiki OS

Aus Wiki Sensornetze
Wechseln zu: Navigation, Suche

Contiki ist ein freies, Internet-fähiges Betriebssystem für 8-Bit-Computer und integrierte Mikrocontroller, inklusive Knoten eines Sensornetzes, entwickelt von Adam Dunkels. {{#subpages:intro=Unterseiten }}

Überblick

Quellcode

Dokumentation

Installation

  • Eine Einführung zum Workflow mit Contiki und den Breakoutboards befindet sich auf der Seite Contiki_OS/Workflow

Vorträge

  • Contiki: Implementierungsaspekte und Netzwerk-Stack
    • Paper: Master VL Sensornetze Paper Contiki.pdf
    • Vortrag: Master VL Sensornetze Vortrag Contiki.pdf


Vorbereitungen

Vorarbeiten

mkdir project01
  • Makefile mit folgendem Inhalt anlegen (für Contiki 2.5):
CONTIKI=/home/user/contiki
include $(CONTIKI)/Makefile.include
  • Programm nach folgendem Muster erstellen:
#include "contiki.h"

PROCESS(hello_world_process, "Hello world process");
AUTOSTART_PROCESSES(&hello_world_process);

PROCESS_THREAD(hello_world_process, ev, data)
{
  PROCESS_BEGIN();
  // set Data Direction Regsiter to output for the 3 LEDs
  DDRE = 0x1C;
  // turn LED 1 on and 2+3 off
  PORTE &= ~(1 << PE2);
  PORTE |=  (1 << PE3);
  PORTE |=  (1 << PE4);
  // print hello world to stdout (UART?)
  printf("Hello, world!\n");
  PROCESS_END();
}
  • Ziel-Plattform festlegen ("avr-atmega128rfa1" oder "avr-zigbit" für Atmega1281V)
make TARGET=avr-atmega128rfa1 savetarget
  • make
make hello_world
  • hex erstellen
make hello_world.hex
  • falls noch nicht vorhanden avrdude installieren:
sudo apt-get install avrdude avrdude-doc
  • auf µC flashen (Admin-Rechte für USB nötig, "-p m1281" für Atmel1281V)
sudo avrdude -p m128rfa1 -c dragon_jtag -P usb -U flash:w:hello_world.hex


Contiki mit IPv6 (6LoWPAN)

Raven-Board mit JTAG-Connectoren
Raven-USB-Dongle mit JTAG-Connector

Nach einigen Fehlversuchen mit den Sensor Terminal Boards von dresden elektronik (siehe oben), haben wir uns dazu entschlossen, Contiki auf einem Raven-Board zu testen. Für das Raven Evaluation Kit existieren im Contiki bereits zahlreiche Beispiele, unter anderem für den Betrieb eines Webservers mit IPv6-Funktionalität mittels 6LoWPAN. Zunächst war es notwendig, die entsprechenden Connectoren für die Programmierung mittels JTAG-Schnittstelle auf die Boards und den zugehörigen USB-Stick (welcher als Verbindung zwischen PC und Raven-Board dient) zu löten.


Nachdem die Boards hardwareseitig vorbereitet waren, folgten zunächst einige Versuche, die jeweiligen Controller unter Linux (Ubuntu) zu programmieren. Hierbei kam es jedoch offenbar an mehreren Stellen zu Problemen. Sowohl die USB-Verbindung mit dem Raven-USB-Dongle als auch die Programmierung der einzelnen Controller verlief nicht wie vorgesehen.

Der Anleitung auf folgender Internet-Seite zufolge, erfolgte die Programmierung anschließend unter Windows:

Projekt 'Contiki with uIPv6 and SICSlowpan support on Atmel RAVEN hardware' (Link ist down, 06.01.2013)

Themen:

Anleitung zur Programmierung der Raven-Boards

siehe Anleitung zur Programmierung der Raven-Boards

Ändern der MAC/IPv6 Addresse per Contiki

siehe Ändern der MAC/IPv6 Addresse per Contiki

UDP-Pakete senden/empfangen

siehe UDP-Pakete senden/empfangen

Multihopping mit RPL

siehe Multihopping mit RPL

CoAP auf der Anwendungsschicht

siehe CoAP auf der Anwendungsschicht

Contiki MAC-Schicht (PAN-ID/PAN-Coordinator)

Jedem Knoten im 6LowPAN Netz ist eine eindeutige PAN-ID zugeordnet. Knoten mit der gleichen PAN-ID gehören somit zu einem Netz. Somit ist es möglich, dass mehrere 6LowPAN Netze nebeneinander existieren können.

Problem: Im Contiki gibt es derzeit noch keine Implementierung für einen PAN-Coordinator. Jedem Knoten wird eine PAN-ID (0xABCD) im Quellcode fest zugewiesen.

Ziel: Borderrouter soll als PAN-Coordinator fungieren. Alle anderen Knoten haben bis dahin noch keine PAN-ID. Erst beim Drücken eines Buttons am Knoten(Sensorknoten) soll dieser vom Borderrouter eine PAN-ID erhalten (Konfigurationsphase). Diese PAN-ID soll dann dauerhaft in den EEPROM geschrieben werden.

Lösung: TODO

Weblinks