Presentation is loading. Please wait.

Presentation is loading. Please wait.

TinyOS Tutorial, Part I Phil Levis et al. MobiSys 2003.

Similar presentations


Presentation on theme: "TinyOS Tutorial, Part I Phil Levis et al. MobiSys 2003."— Presentation transcript:

1 TinyOS Tutorial, Part I Phil Levis et al. MobiSys 2003

2 5/5/2003MobiSys 20032 Goals Deploy a (small) sensor network See, modify, and install some nesC code Write a simple application

3 5/5/2003MobiSys 20033 TinyOS Applications Application specific images Top-level configuration tinyos-1.x/apps/

4 5/5/2003MobiSys 20034 TinyDB Data collection and aggregation SQL-like queries Ad-hoc multi-hop routing

5 5/5/2003MobiSys 20035 Two Steps Prepare PC-side application Install TinyDB on two or more motes

6 5/5/2003MobiSys 20036 Building Java Tools cd tinyos-1.x/tools/java make

7 5/5/2003MobiSys 20037 TinyDB Java Application cd tinyos-1.x/tools/java cd net/tinyos/tinydb java –jar tinydb.jar After you run this, close it

8 5/5/2003MobiSys 20038 Installing TinyDB cd tinyos-1.x/apps/tinydb make mica –Make sure application builds properly Plug in programming board make mica install.1 –Installs application with mote ID 1

9 5/5/2003MobiSys 20039 Build a TinyDB Base Station Plug in a new mote cd apps/TinyDB make mica install.0 Make sure serial cable is connected

10 5/5/2003MobiSys 200310 Running the Application Plug in (and turn on) base station Turn on TinyDB mote Run TinyDB PC application

11 5/5/2003MobiSys 200311 A Simple Query Report light at one Hz Look at data output

12 5/5/2003MobiSys 200312 Multi-Mote Network Close TinyDB PC application Turn off motes Install TinyDB on more motes –make install.2 –make install.3 Run TinyDB PC application Send query again

13 5/5/2003MobiSys 200313 Applications TinyOS applications have a top-level configuration Wires application components to boot sequence, etc. Some applications have no app-specific modules

14 5/5/2003MobiSys 200314 Example Configuration

15 5/5/2003MobiSys 200315 A Simple App: CntToLeds CntToLeds Displays bottom 3 bits of a counter on LEDs apps/CntToLeds

16 5/5/2003MobiSys 200316 CntToLeds Configuration ( apps/CntToLeds/CntToLeds.nc ) configuration CntToLeds { } implementation { components Main, Counter, IntToLeds, TimerC; Main.StdControl -> IntToLeds.StdControl; Main.StdControl -> Counter.StdControl; Main.StdControl -> TimerC.StdControl; Counter.Timer -> TimerC.Timer[unique("Timer")]; Counter.IntOutput -> IntToLeds.IntOutput; }

17 5/5/2003MobiSys 200317 Step By Step ( apps/CntToLeds/CntToLeds.nc ) This is a configuration (wiring) Named CntToLeds (CntToLeds.nc) configuration CntToLeds { }

18 5/5/2003MobiSys 200318 Step By Step ( apps/CntToLeds/CntToLeds.nc ) This is the implementation block – As this is a configuration, implementation is wiring This wiring uses these components –There can be more than one components statement –Component order unimportant implementation { components Main, Counter, IntToLeds, TimerC;

19 5/5/2003MobiSys 200319 Step By Step ( apps/CntToLeds/CntToLeds.nc ) Connect Mains StdControl (uses) to the StdControl interfaces (provides) of three components In the boot sequence, Main will call these components init() and start() Main.StdControl -> IntToLeds.StdControl; Main.StdControl -> Counter.StdControl; Main.StdControl -> TimerC.StdControl;

20 5/5/2003MobiSys 200320 Step By Step ( apps/CntToLeds/CntToLeds.nc ) Wire counter to a unique TimerC timer Counter.Timer.startTimer() will call TimerC.Timer[x].startTimer TimerC.Timer[x].fired() will call Counter.Timer.fired() Counter.Timer -> TimerC.Timer[unique("Timer")];

21 5/5/2003MobiSys 200321 Finally…. ( apps/CntToLeds/CntToLeds.nc ) Wire the counter output to the LEDs Counter.IntOutput -> IntToLeds.IntOutput;

22 5/5/2003MobiSys 200322 CntToLeds, Revisited ( apps/CntToLeds/CntToLeds.nc ) configuration CntToLeds { } implementation { components Main, Counter, IntToLeds, TimerC; Main.StdControl -> IntToLeds.StdControl; Main.StdControl -> Counter.StdControl; Main.StdControl -> TimerC.StdControl; Counter.Timer -> TimerC.Timer[unique("Timer")]; Counter.IntOutput -> IntToLeds.IntOutput; }

23 5/5/2003MobiSys 200323 How it Works On boot, Main initializes components When Counter starts, it starts its Timer When Timer fires, Counter increments is value, then calls IntToLeds IntToLeds displays bottom three bits

24 5/5/2003MobiSys 200324 Install CntToLeds cd apps/CntToLeds make mica install Watch the mote blink

25 5/5/2003MobiSys 200325 Simulation TinyOS has a simulator, TOSSIM Builds directly from TinyOS code –make pc –build/pc/main.exe –h Configurable output –export DBG=led Scalable to thousands of nodes

26 5/5/2003MobiSys 200326 Simulating CntToLeds Syntax: main.exe Sample command line options –-h: help –-x : Scale simulated time to real world time (2.0 = twice as fast) –-r : Radio models Running CntToLeds –build/pc/main.exe –x 1.0 1

27 5/5/2003MobiSys 200327 TinyViz GUI for visualization and actuation Connects directly to TOSSIM build/pc/main.exe –gui 4 cd tinyos-1.x/tools/java/ java net.tinyos.sim.TinyViz

28 5/5/2003MobiSys 200328 TinyViz Screenshot

29 5/5/2003MobiSys 200329 Adding Debugging Output tinyos-1.x/tos/lib/Counter.nc: export dbg=led,usr3 make pc build/pc/main.exe –x 1.0 1 event result_t Timer.fired() { state++; dbg(DBG_USR3, Counter: %i.\n, state); return call IntOutput.output(state); }

30 5/5/2003MobiSys 200330 Simple Messaging Build a CntToRfm mote Build a RfmToLeds mote One mote displays the others counter

31 5/5/2003MobiSys 200331 CntToRfm ( apps/CntToRfm/CntToRfm.nc ) configuration CntToRfm { } implementation { components Main, Counter, IntToRfm, TimerC; Main.StdControl -> Counter.StdControl; Main.StdControl -> IntToRfm.StdControl; Counter.Timer -> TimerC.Timer[unique("Timer")]; Counter.IntOutput -> IntToRfm.IntOutput; }

32 5/5/2003MobiSys 200332 RfmToLeds ( apps/RfmToLeds/RfmToLeds.nc ) configuration RfmToLeds { } implementation { components Main, RfmToInt, IntToLeds; Main.StdControl -> IntToLeds.StdControl; Main.StdControl -> RfmToInt.StdControl; RfmToInt.IntOutput -> IntToLeds.IntOutput; }

33 5/5/2003MobiSys 200333 Sensing Instead of a counter, display sensor reading on LEDs See what sensing code looks like Install SenseToRfm on CntToRfm node

34 5/5/2003MobiSys 200334 Sensing: SenseToRfm ( apps/SenseToRfm/SenseToRfm.nc ) configuration SenseToRfm { // this module does not provide any interface } implementation { components Main, SenseToInt, IntToRfm, ClockC, Photo; Main.StdControl -> SenseToInt; Main.StdControl -> IntToRfm; SenseToInt.Clock -> ClockC; SenseToInt.ADC -> Photo; SenseToInt.ADCControl -> Photo; SenseToInt.IntOutput -> IntToRfm; }

35 5/5/2003MobiSys 200335 Sensing, Continued Build a new application Goals –Have two motes sense –Each displays others reading on LEDs Starting blocks –SenseToRfm –RfmToLeds

36 5/5/2003MobiSys 200336 Making a New Application Create a new application directory Create the Makefile Write the code

37 5/5/2003MobiSys 200337 Directory mkdir tinyos-1.x/apps/SenseExchange cd tinyos-1.x/apps/SenseExchange

38 5/5/2003MobiSys 200338 Makefile Create and edit Makefile : COMPONENT=SenseExchange include../Makerules

39 5/5/2003MobiSys 200339 Application File What components do we need? –Main –Photo –SenseToInt –IntToRfm –RfmToInt –IntToLeds –ClockC

40 5/5/2003MobiSys 200340 Wiring It Up: The Components ( apps/SenseExchange/SenseExchange.nc ) configuration SenseExchange { // this module does not provide any interfaces } implementation { components Main; // The output part components SenseToInt, IntToRfm, ClockC, Photo; // The input part components RfmToInt, IntToLeds;

41 5/5/2003MobiSys 200341 Wiring It Up: Output Connections ( apps/SenseExchange/SenseExchange.nc ) Main.StdControl -> SenseToInt; Main.StdControl -> IntToRfm; SenseToInt.Clock -> ClockC; SenseToInt.ADC -> Photo; SenseToInt.ADCControl -> Photo; SenseToInt.IntOutput -> IntToRfm;

42 5/5/2003MobiSys 200342 Wiring It Up: Input Connections ( apps/SenseExchange/SenseExchange.nc ) Main.StdControl -> IntToLeds.StdControl; Main.StdControl -> RfmToInt.StdControl; RfmToInt.IntOutput -> IntToLeds.IntOutput;

43 5/5/2003MobiSys 200343 Wiring It Up: Result ( apps/SenseExchange/SenseExchange.nc ) configuration SenseExchange { // this module does not provide any interfaces } implementation { components Main; components SenseToInt, IntToRfm, ClockC, Photo; components RfmToInt, IntToLeds; Main.StdControl -> SenseToInt; Main.StdControl -> IntToRfm; SenseToInt.Clock -> ClockC; SenseToInt.ADC -> Photo; SenseToInt.ADCControl -> Photo; SenseToInt.IntOutput -> IntToRfm; Main.StdControl -> IntToLeds.StdControl; Main.StdControl -> RfmToInt.StdControl; RfmToInt.IntOutput -> IntToLeds.IntOutput; }

44 5/5/2003MobiSys 200344 Running SenseExchange Compile and run on two motes Cover one light sensor Cover the other

45 5/5/2003MobiSys 200345 Conclusion of Part I Deployed a small sensor network Installed simple applications Used TOSSIM Wrote SenseExchange Part II: Communication, actuation

46 5/5/2003MobiSys 200346 Questions

47 5/5/2003MobiSys 200347 SerialForwarder Sensor network proxy Connects to serial port Provides TCP socket interface java net.tinyos.sf.SerialForward &


Download ppt "TinyOS Tutorial, Part I Phil Levis et al. MobiSys 2003."

Similar presentations


Ads by Google