1 / 47

TinyOS Tutorial, Part I

TinyOS Tutorial, Part I. Phil Levis et al. MobiSys 2003. Goals. Deploy a (small) sensor network See, modify, and install some nesC code Write a simple application. TinyOS Applications. Application specific images Top-level configuration tinyos-1.x/apps/. TinyDB.

Download Presentation

TinyOS Tutorial, Part I

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

  4. TinyDB • Data collection and aggregation • SQL-like queries • Ad-hoc multi-hop routing MobiSys 2003

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

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

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

  8. 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 MobiSys 2003

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

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

  11. A Simple Query • Report light at one Hz • Look at data output MobiSys 2003

  12. 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 MobiSys 2003

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

  14. Example Configuration MobiSys 2003

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

  16. 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;} MobiSys 2003

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

  18. 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; MobiSys 2003

  19. Step By Step(apps/CntToLeds/CntToLeds.nc) • Connect Main’s 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; MobiSys 2003

  20. 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")]; MobiSys 2003

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

  22. 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;} MobiSys 2003

  23. 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 MobiSys 2003

  24. Install CntToLeds • cd apps/CntToLeds • make mica install • Watch the mote blink MobiSys 2003

  25. 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 MobiSys 2003

  26. Simulating CntToLeds • Syntax: main.exe <number of nodes> • Sample command line options • -h: help • -x <floating point>: Scale simulated time to real world time (2.0 = twice as fast) • -r <simple|static|lossy>: Radio models • Running CntToLeds • build/pc/main.exe –x 1.0 1 MobiSys 2003

  27. 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 MobiSys 2003

  28. TinyViz Screenshot MobiSys 2003

  29. 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); } MobiSys 2003

  30. Simple Messaging • Build a CntToRfm mote • Build a RfmToLeds mote • One mote displays the other’s counter MobiSys 2003

  31. 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;} MobiSys 2003

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

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

  34. 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;} MobiSys 2003

  35. Sensing, Continued • Build a new application • Goals • Have two motes sense • Each displays other’s reading on LEDs • Starting blocks • SenseToRfm • RfmToLeds MobiSys 2003

  36. Making a New Application • Create a new application directory • Create the Makefile • Write the code MobiSys 2003

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

  38. Makefile • Create and edit Makefile: COMPONENT=SenseExchangeinclude ../Makerules MobiSys 2003

  39. Application File • What components do we need? • Main • Photo • SenseToInt • IntToRfm • RfmToInt • IntToLeds • ClockC MobiSys 2003

  40. 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; MobiSys 2003

  41. 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; MobiSys 2003

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

  43. 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; } MobiSys 2003

  44. Running SenseExchange • Compile and run on two motes • Cover one light sensor • Cover the other MobiSys 2003

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

  46. Questions MobiSys 2003

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

More Related