Contiki OS
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 }}
Inhaltsverzeichnis
Überblick
Quellcode
- Offizielles Repository: https://github.com/contiki-os/contiki
- Unser SN-Repository: https://github.com/HTWDD-SN/contiki
Dokumentation
- Doxygen Documentation (Source Code (2.6) Documentation): http://contiki.sourceforge.net/docs/2.6/
- offizelles Wiki: https://github.com/contiki-os/contiki/wiki
- Community http://www.contiki-os.org/community.html
Installation
- Eine Einführung zum Workflow mit Contiki und den Breakoutboards befindet sich auf der Seite Contiki_OS/Workflow
Vorträge
Vorbereitungen
Vorarbeiten
- Starten von Instant Contiki
- Anlegen eines Project-Ordners
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)
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
- Erläuterungen zu den Event-basierten Protothreads: Contiki OS/Protothreads
- Contiki OS
- Contiki OS: Source Code Doxygen Documentation contains descriptions of the individual files and Contiki APIs.
- Contiki OS: Publications and Talks
- Zurich: Matthias Kovatsch: Wiki
- simple USART with AVR-LibC: Wie konfiguriert man printf(), so dass die Consolenausgaben über USART/USB/etc. ausgegen werden.