1 Lab 3 Objectives  Case study: “Hello world” program on motes  Write you first program on mote.

Slides:



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

1 Tomás Sánchez López July 9, 2004 Real-time & Embedded Systems Laboratory TinyOS … in deep.
Developing a WSN application using Crossbow devices and software
NesC Prepared for the Multimedia Networks Group University of Virginia.
Feb 2007WSN Training: First Steps in nesC Programming1 First Steps in TinyOS and nesC Programming Topics  Timer Application: MyApp  Application directory.
1 Lab 3 Objectives  Case study: “Hello world” program on motes  Write you first program on mote.
1 Lab4 Objectives  Learn to read light sensor data from sensor board  Learn to transmit a message containing the sensed data  through Mote serial port.
Mote Programming. 如何 compile 程式  make [re]install. : desired device address : target platform  install vs. reinstall install : compile the application.
Feb 2007TinyOS/nesC Basic Concepts1 Introduction to TinyOS Programming Topics  TinyOS execution model  Async and atomic code  Configuration and wiring.
1 Lab1  Objectives  Get familiar w/ hardware  Mote interface board  Mote  Mote sensor board  Get familiar w/ software  MoteWorks  Programmer’s.
TinyOS Introduction Advanced Computer Networks. TinyOS Outline  Introduction to the Architecture of TinyOS and nesC  Component Model –Components, interfaces,
Copyright © 2008 Pearson Addison-Wesley. All rights reserved. Chapter 12 Separate Compilation Namespaces Simple Make Files (Ignore all class references.
GIIS’07 – Marrakech 3 rd July 2007 Behavioural Specification of Wireless Sensor Network Applications Nelson S Rosa and Paulo R F Cunha Universidade Federal.
7/13/2007AIIT Summer Course - D#1 Wireless Embedded Systems and Networking Lab Day 5: Part 1: TinyOS Programming on Open Source Distribution Jaein Jeong.
Programming Motes A TinyOS and TOSSIM Tutorial By: Brent Rood.
Home: Phones OFF Please Unix Kernel Parminder Singh Kang Home:
Development of a Mica2 Mote Sensor Network Cliff Macklin Bill Ehrbar December 8, 2004 University of Colorado, Colorado Springs.
2008EECS Embedded Network Programming nesC, TinyOS, Networking, Microcontrollers Jonathan Hui University of California, Berkeley.
TinyOS Tutorial CS580S Sensor Networks and Systems February 7, 2007 Jisu Oh Dept. of Computer Science SUNY-Binghamton.
PtinyOS: Simulating TinyOS in Ptolemy II Elaine Cheong Dec 10, 2004 EE290N Project Presentation (Initial NC code generator by Yang Zhao and Edward Lee)
5/5/2003MobiSys 2003 Tutorial TinyOS Tutorial, Part II Robert Szewczyk, Joe Polastre, Phil Levis, David Culler Mobisys 2003.
NesC: 1.1 Bumps and Future Directions David Gay, Intel Research, Berkeley (and the nesC and TinyOS teams)
Shell and Flashing Images Commands and upgrades. RS-232 Driver chip – ST3232C Driver chip is ST3232C Provides electrical interface between UART port and.
TinyOS 2.1 Jun Yi Partially based on the tutorial at IPSN 2009 By Stephen Dawson-Haggerty, Omprakash Gnawali, David Gay, Philip Levis, Răzvan Musăloiu-E.,
TinyOS Tutorial Based on Wenyuan Xu’s slides ( NetsF06/Comnet_TinyOS_Tutorial_xwy.ppt)
MoteWorks Installation
1 Chapter One A First Program Using C#. 2 Objectives Learn about programming tasks Learn object-oriented programming concepts Learn about the C# programming.
A First Program Using C#
1 Software Development Infrastructure for Sensor Networks  Operating systems ( TinyOS )  Resource (device) management  Basic primitives  Protocols.
LabVIEW an Introduction
1 Lab 5 Objectives  Use XMesh multi-hop networking service to send sensing data to a base station  Using XServe to display the sensor data message on.
Programming in nesC (and TOSSIM)
By: R Jayampathi Sampath
April 15, 2005TinyOS: A Component Based OSPage 1 of 27 TinyOS A Component-Based Operating System for Networked Embedded Systems Tom Bush Graduate College.
1 TinyOS Computer Network Programming Wenyuan Xu Fall 2007.
TinyOS 1/2 Onsystech Sangjae Han.
1 Lab2 Objectives  Basics of TinyOS  Basics of nesC programming language.
1 Lab2 Objectives  Basics of TinyOS  Basics of nesC programming language.
Tmote Sky Doug Schultz for FWLUG (Fort Wayne Linux Users Group)
HW2: Q&A Oct. 02, Lab Machine TinyOS is installed in one machine (531AB). But, you have to bring your kit. There is a sign up sheet. Please sign.
Wireless Sensor Networks MOTE-KITS TinyOS Crossbow UC Berkeley.
Lecture Set 11 Creating and Using Classes Part B – Class Features – Constructors, Methods, Fields, Properties, Shared Data.
HANBACK ELECTRONICS CO., LTD. 저자권 보호됨 Light Sense Lab. Read data from light(photo diode) sensor, display using oscilloscope.
CIS 798 Sensor Network Implementation. Goals Learning sensor network programming with Crossbow motes Implement reasonable sized sensor applications Develop.
Lab 3 Introduction to TinyOS and nesC How to debug programs at PC Examples –Blink Timer –Blink –Hellow World Reference: 1.x/doc/tutorial/lesson1.html.
Simulation of Distributed Application and Protocols using TOSSIM Valliappan Annamalai.
TinyOS Tutorial Lesson 8 Data logging application.
HANBACK ELECTRONICS CO., LTD. 저자권 보호됨 TinyOS & NesC.
Part 2 TinyOS and nesC Programming Selected slides from:
Feb 2007WSN Training: Creating a Simple Sensor Application1 A TinyOS Sensor Application called MyApp Objectives  How to create a simple Mote firmware.
Feb 2007WSN Training: XMesh Services1 Lab6 Objectives:  Route Control Interface  Understand XMesh transport services 1.Upstream 2.Upstream with end-to-end.
HANBACK ELECTRONICS CO., LTD. 저자권 보호됨 Wireless MAC Practice (MAC I)
@ nesC Programming KETI / Ubiquitous Computing Center Jeonghoon Kang
Lab 3, Part 2 Selected slides from: Wireless Sensor Networks Hardware/Software Tiny OS & NesC Programming borrowed from Turgay Korkmaz.
TinyOS Sandeep Gupta. Operating System (OS) What is an OS? Main functions  Process management  Memory management  Resource management Traditional OSs.
HANBACK ELECTRONICS CO., LTD. 저자권 보호됨 Gossiping Protocol.
HANBACK ELECTRONICS CO., LTD. 저자권 보호됨 Lab1: LED Control ZigbeX mote has Red, Yellow, Green LED. This lab using LED control component provided by TinyOS.
Based on slides from Andreas Larsson Table from CY Chong, SP Kumar, BA Hamilton - Proceedings of the IEEE, 2003.
HANBACK ELECTRONICS CO., LTD. 저자권 보호됨 HelloWorld By using LED & Timer components, we will display “helloworld” in a manner of Morse code.
Blink Blink.nc configuration Blink { } implementation { components Main, BlinkM, SingleTimer, LedsC; Main.StdControl -> BlinkM.StdControl; Main.StdControl.
Feb 2007WSN Training: XMesh Enabled Sensor App1 Lab 5 Objectives  Use XMesh multi-hop networking service to send sensing data to a base station  Using.
TinyOS Sandeep Gupta. TinyOS basics TinyOS is  Single tasking OS  Interrupt driven Written using a Component based language A set of components put.
Tinyos Introduction to Programming Pritee Parwekar.
Simulation of Distributed Application and Protocols using TOSSIM
WSN Training: XMesh Enabled Sensor App
SOWN Code Review Top-level Control.
An Introduction to nesC
Temperature and Humidity Lab.
WSN Training: TinyOS/nesC Basic Concepts TinyOS and nesC
SenseToRfm SenseToInt.Timer -> TimerC; configuration SenseToRfm {
Presentation transcript:

1 Lab 3 Objectives  Case study: “Hello world” program on motes  Write you first program on mote

2 “Hello world” program on motes  MyApp in /MoteWorks/apps/tutorials/lesson_1/  Application directory contents  C onfiguration: wiring  modules  StdControl  Timer  Leds  Programming with Programmer’s Notepad

3 About MyApp  Timer application  timer will be set to fire continuously every second and the Mote red LED will toggle on and off to show this visually.  Why go through the trouble of this program?  This is TinyOS’ version of “Hello World”  To help you learn TinyOS and nesC programming methods

4 MyApp Application Review  The application folder (directory) is where all your top-level application code and associated files will be stored  Navigate to the directory /MoteWorks/apps/tutorials/lesson_1

5 Seven Common Files in an Application Directory 1.Makefile 2.Makefile.component 3.Top-level application configuration written in nesC 4.Top-level application module written in nesC 5.sensorboardsApp.h file (not seen here, but typical for applications using sensors and GPIO) 6.appFeatures.h (optional) 7.README (optional, but highly recommended)

6 MyApp Application: Makefile include Makefile.component include $(TOSROOT)/apps/MakeXbowlocal include $(MAKERULES)

7 MyApp – Makefile.component This file describes the top level application component, MyApp, and the name of the sensorboard we are going to use. The sensorboard reference tells the compiler we want to use the nesC components for accessing the sensor devices on that board.  The collection of those components is also known as a “driver” COMPONENT=MyApp SENSORBOARD=mts310

8 “Hello world” program on motes  MyApp in /MoteWorks/apps/tutorials/lesson_1/  Application directory contents  C onfiguration: wiring  modules  StdControl  Timer  Leds  Programming with Programmer’s Notepad

9 Top Level Configuration We might have  comments  Application name  List of components  Wiring /** * **/ configuration { } implementation { components ; Provider.Interface>; }

10 /** * This configuration shows how to use the Timer and LED components **/ configuration MyApp { } implementation { components Main, MyAppM, TimerC, LedsC; Main.StdControl -> TimerC.StdControl; Main.StdControl -> MyAppM.StdControl; MyAppM.Timer -> TimerC.Timer[unique("Timer")]; MyAppM.Leds -> LedsC.Leds; } MyApp – Top Level Configuration MyApp.nc Specifying the INTERFACE Specifying the IMPLEMENTATION TimerCLedsC Main MyApp_Timer MyApp StdControl TimerLeds Timer StdControl

11 MyApp – Top Level Configuration What is Main? /** * This configuration shows how to use the Timer and LED components **/ configuration MyApp { } implementation { components Main, MyAppM, TimerC, LedsC; Main.StdControl -> TimerC.StdControl; Main.StdControl -> MyAppM.StdControl; MyAppM.Timer -> TimerC.Timer[unique("Timer")]; MyAppM.Leds -> LedsC.Leds; }

12 Main – the scheduler for TinyOS A TinyOS application = configuration (wiring) of new and existing components + the component Main. Main, the scheduler, runs the tasks created by those components. A TinyOS top-level application must have the Main component in its configuration.

13 Main cont’d  Main is a component that is executed first in a TinyOS application.  The command Main.StdControl.init() is the first command executed in TinyOS followed by Main.StdControl.start().  StdControl is a common interface used to initialize, start, and stop TinyOS components. configuration Main { uses interface StdControl; } implementation { components RealMain, PotC, HPLInit; StdControl = RealMain.StdControl; RealMain.hardwareInit -> HPLInit; RealMain.Pot -> PotC; }

14 MyApp – Top Level Configuration Why does the component TimerC provide a unique Timer? /** * This configuration shows how to use the Timer and LED components **/ configuration MyApp { } implementation { components Main, MyAppM, TimerC, LedsC; Main.StdControl -> TimerC.StdControl; Main.StdControl -> MyAppM.StdControl; MyAppM.Timer -> TimerC.Timer[unique("Timer")]; MyAppM.Leds -> LedsC.Leds; }

15 Parameterized Interfaces  There may be multiple users of a component  One Timer component but many users with different event time requirements  When a Timer “fires” which component should be signaled?  TinyOS handle this using parameterized interfaces  Parameterization set by a compile-time value provides interface Timer[uint8_t id];  Total number of instances permitted may be limited by implementation

16 nesC Concepts – Unique Instances  To make sure your instance parameter is not used by someone else, use unique(“astring”)  Generates an 8-bit identifier from the string given as an argument.  Multiple components using timer[unique(“Timer”)] are each guaranteed to get a signal associated with their specific timer settings.  All components must use the same “ astring ”  In our app ”Timer” is used as the astring

17 “Hello world” program on motes  MyApp in /MoteWorks/apps/tutorials/lesson_1/  Application directory contents  C onfiguration: wiring  modules  StdControl  Timer  Leds  Programming with Programmer’s Notepad

18 MyApp – Top Level Module Located in MoteWorks/apps/tutorial/lesson_1/MyAppM.nc  The function of this code is to start a timer and toggle the red LED on the Mote.

19 MyApp – Top Level Module /** * This module shows how to use the Timer and LED components **/ module MyAppM { provides { interface StdControl; } uses { interface Timer; interface Leds; }  MyAppM provides the interface StdControl  To provide an interface means that MyAppM must implement that interface  As explained earlier, this is necessary to get the MyApp component initialized and started The first part of the code states that this is a module called MyAppM and declares the interfaces which are prefaced by the keywords provides and uses. 1 of 3

20 MyApp – Top Level Module /** * This module shows how to use the Timer and LED components **/ module MyAppM { provides { interface StdControl; } uses { interface Timer; interface Leds; }  Many nesC applications need to call a function periodically  Done by means of a timer  We also want to use one of the LEDs, so we use an interface to the LED The name for the interface for a timer is Timer. The name for the interface for an LED is Leds. 1 of 3

21 The StdControl Interface  StdControl interface (like the component Main ) must always be implemented at the top-level application  provides the basic functionality for the TinyOS application to be initialized, started and stopped  StdControl is like a power switch to turn on and off components  Also does boot time initialization  StdControl should not be used for continuous processing  Use a timer instead

22 StdControl Interface Details In /MoteWorks/tos/interfaces/StdControl.nc StdControl defines three commands : init(), start(), and stop().  init() is called when a component is first initialized  start() is called to execute a component  stop() is called when a components is stopped  init() can be called multiple times but will never be called after either start() or stop() is called. interface StdControl { command result_t init(); command result_t start(); command result_t stop(); }

23 MyApp Timer Interface interface Timer { command result_t start(char type, uint32_t interval); command result_t stop(); event result_t fired();  Timer interface defines two commands and one event  Commands: start() and stop()  event: fired()  What is “ result_t ”?  data type for the status value returned by a command or event  either SUCCESS or FAIL.

24 MyApp Timer Interface (cont’d) interface Timer { command result_t start(char type, uint32_t interval); command result_t stop(); event result_t fired(); start() command  specify the type of the timer  TIMER_ONE_SHOT –Ends after the specified interval  TIMER_REPEAT –Goes on and on until stopped by the stop() command  Specify the interval at which the timer will expire  unit of the interval argument: millisecond

25 MyApp Timer interface (cont’d) interface Timer { command result_t start(char type, uint32_t interval); command result_t stop(); event result_t fired();  How does an application know that its timer has expired?  When it receives an event  This is an example of a bi-directional interface  provide commands that can be called by users of the interface, and signal events of call handlers implemented by the user  Remember: A module that uses an interface must implement the events that this interface uses.

26 MyApp – Top Level Module implementation { /** * Initialize the components. * Always returns SUCCESS **/ command result_t StdControl.init() { call Leds.init(); return SUCCESS; } /** * Start things up. This just sets the rate for the clock * component. * Always returns SUCCESS **/ command result_t StdControl.start() { // Start a repeating timer that fires every 1000ms return call Timer.start(TIMER_REPEAT, 1000); } The MyAppM module implements the StdControl.init(), StdControl.start(), and StdControl.stop() commands, since it provides the StdControl interface. 1 of 6 The init() command in the implemented StdControl interface simply initializes the Leds subcomponent (by calling Leds.init()). The start() command invokes Timer.start() to create a repeat timer (“ TIMER_REPEAT ”) that expires every 1000 msec.

27 MyApp – Top Level Module /** * Halt execution of the application. * This just disables the clock component. * Always returns SUCCESS **/ command result_t StdControl.stop() { return call Timer.stop(); } /** * Toggle the red LED in response to the Timer.fired * event. * Always returns SUCCESS **/ event result_t Timer.fired() { call Leds.redToggle(); return SUCCESS; } stop() terminates the timer. 4 of 6 The Timer.fired() event is implemented. This is necessary since MyAppM must implement any event from an interface that it uses.. Each time Timer.fired() event is triggered, the Leds.redToggle() toggles the red LED.

28 MyAppM.nc – Key Lessons  The heart of most TinyOS applications is Timer.fired()  The proper way to centralize processing in TinyOS is to start a repeat timer (with REPEAT_TIMER ) and implement logic in Timer.fired().

29 “Hello world” program on motes  MyApp in /MoteWorks/apps/tutorials/lesson_1/  Application directory contents  C onfiguration: wiring  modules  StdControl  Timer  Leds  Programming with Programmer’s Notepad

30 Compiling and Flashing the Mote 1.Now that you have reviewed all the application files, you can proceed with the compilation and flashing of the Mote  You need to be in the.nc of the app file you want to compile and program before you can execute shell commands from Programmer’s Notepad. 2.Attach one Mote to a Programmer/Gateway Board  One of MIB510, MIB520, MIB600  One of MICAz, MICA2 3.Compile your application:  Select Tools > make mica2 (or make micaz or make mica2dot)  The “Output” section of the Programmers Notepad will print the compiling results.

31

32 MyApp – Compiling and Flashing the Mote 4.Flash your Mote:  Select Tools > shell  In the command line type make install, mica2, or micaz, or mica2dot

33 Vocabulary Application Component Module Configuration Interface Makefile Makefile.component nesC TinyOS Provides Uses implementation Command Event Call Return – SUCCESS, FAIL Make StdControl – init(), start(), stop() TimerM Leds interface LedsC Timer interface -- TIMER_REPEAT, TIMER_ONE_SHOT docs