Download presentation
Presentation is loading. Please wait.
Published byXavier Burton Modified over 11 years ago
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 &
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.