19
Network Kernel Architectures and Implementation (01204423) Sensor Node Programming II (UART and Radio) Chaiporn Jaikaeo [email protected] Department of Computer Engineering Kasetsart University

Wireless Embedded Systems (0120442x) Sensor Node Programming II (UART and Radio)

  • Upload
    talmai

  • View
    38

  • Download
    0

Embed Size (px)

DESCRIPTION

Wireless Embedded Systems (0120442x) Sensor Node Programming II (UART and Radio). Chaiporn Jaikaeo [email protected] Department of Computer Engineering Kasetsart University. Outline. UART communication Single-hop radio communication. Connecting Mote to PC. - PowerPoint PPT Presentation

Citation preview

Page 1: Wireless Embedded Systems (0120442x)  Sensor Node Programming II (UART and Radio)

Network Kernel Architectures and Implementation

(01204423)

Sensor Node Programming II(UART and Radio)

Chaiporn [email protected]

Department of Computer EngineeringKasetsart University

Page 2: Wireless Embedded Systems (0120442x)  Sensor Node Programming II (UART and Radio)

2

Outline UART communication Single-hop radio communication

Page 3: Wireless Embedded Systems (0120442x)  Sensor Node Programming II (UART and Radio)

3

Connecting Mote to PC USB connector on IWING-MRF and IWING-

JN

USB dongles3.3V

5VRXTX

GND

USB Dongle based on Silicon Labs’s CP2102ThaiEasyElec’s USB Dongle (FDTI)

3.3VRXTX

GND

Page 4: Wireless Embedded Systems (0120442x)  Sensor Node Programming II (UART and Radio)

4

UART API (motelib/uart.h) Enable UART (both TX and RX)

Send a single byte over UART

Send multiple bytes over UART

uartEnable(true,true);

uint8_t buf[10];:uartWrite(buf, 10);

uartWriteByte(50);

Page 5: Wireless Embedded Systems (0120442x)  Sensor Node Programming II (UART and Radio)

5

UART API (cont'd) Check whether there is any data

received from UART

Read a single byte from UART input buffer

Send formatted string over UART using Standard I/O library

uint8_t byte = uartReadByte();

#include <stdio.h>::printf("Hello, world\n");printf("i = %d\n", i);

if (uartInputLen() > 0) ...

Page 6: Wireless Embedded Systems (0120442x)  Sensor Node Programming II (UART and Radio)

6

Processing UART Data on PC Locate UART device file

Run dmesg to find out Usually /dev/ttyUSB0 or /dev/ttyACM0

For textual data Run terminal program such as screen,

gtk-term, putty on UART device For binary data

Any UART library can be used E.g., Python's serial package

$ dmesg :[70063.712091] usb 4-1: new low speed USB device using uhci_hcd and ..[70063.871042] usb 4-1: config 1 interface 1 altsetting ..[70063.871056] usb 4-1: config 1 interface 1 altsetting ..[70063.895220] cdc_acm 4-1:1.0: ttyACM0: USB ACM device

Page 7: Wireless Embedded Systems (0120442x)  Sensor Node Programming II (UART and Radio)

7

USB-UART Implementation MoteLib provides UART-via-USB

implementation for IWING-MRF platform (>= rev. 388) Emulated using V-USB library by

Objective Development Based on AVR-CDC project (

http://www.recursion.jp/avrcdc/) Requires no USB dongle Build your app with UART_VIA_USB=1

$ make UART_VIA_USB=1 ...

Page 8: Wireless Embedded Systems (0120442x)  Sensor Node Programming II (UART and Radio)

8

Example: sense-to-uart.c Sense light intensity every second;

send values to display via UART#include <stdio.h>#include <motelib/system.h>#include <motelib/timer.h>#include <motelib/uart.h>#include <motelib/sensor.h>#include <motelib/actor.h>

Timer t;void senseDone(uint16_t value);void sense(Timer *t);

void boot(){ uartEnable(true,true); timerCreate(&t); timerStart(&t, TIMER_PERIODIC, 1000, sense);}

void senseDone(uint16_t value){ printf("Light = %d\r\n", value); actorSetState(ACTOR_0, 0);}

void sense(Timer *t){ actorSetState(ACTOR_0, 1); sensorRequestAnalog(SENSOR_1, senseDone);}

Page 9: Wireless Embedded Systems (0120442x)  Sensor Node Programming II (UART and Radio)

9

Testing sense-to-uart Build with UART_VIA_USB option

Capture UART output using screen (or gtk-term or putty)

$ make UART_VIA_USB=1 flash

$ screen /dev/ttyACM0

Page 10: Wireless Embedded Systems (0120442x)  Sensor Node Programming II (UART and Radio)

10

Radio Communication IWING-MRF: Microchip's MRF24J40

controller IWING-JN: Built-in IEEE 802.15.4 @ 2.4 GHz, 250 kbps

16 non-overlapping channels 16-bit node ID 16-bit PAN (Personal Area Network) ID

Page 11: Wireless Embedded Systems (0120442x)  Sensor Node Programming II (UART and Radio)

11

Configuring Radio (IWING-MRF) Use config-mote.py script located

in $MOTELIB_DIR/platforms/iwing-mrf/tools

Have mote enter bootloader, then run:

E.g., set address to 234 and PAN ID to 555

Set channel to 0x1A

$ cd $MOTELIB_DIR/platforms/iwing-mrf/tools$ ./config-mote.py

$ ./config-mote.py --address 234 --panid 555

$ ./config-mote.py --channel 0x1A

Page 12: Wireless Embedded Systems (0120442x)  Sensor Node Programming II (UART and Radio)

Configure Radio (IWING-JN) Set the following variables via make

DEFAULT_ADDR DEFAULT_PANID DEFAULT_CHANNEL

Example:

12

$ make PLATFORM=iwing-jn DEFAULT_ADDR=50

Page 13: Wireless Embedded Systems (0120442x)  Sensor Node Programming II (UART and Radio)

13

Radio Message Format

Type and application data are provided by the application via Radio API

Type(1 byte)802.15.4 Header Seq No.

(1 byte)App Data

(max ~100 bytes)Checksum

Page 14: Wireless Embedded Systems (0120442x)  Sensor Node Programming II (UART and Radio)

14

Radio API (motelib/radio.h) Broadcast a message (type=7)

containing "HELLO" to all neighbors Call txDone() when message has been

sent

Use NULL when callback is not needed

radioRequestTx(BROADCAST_ADDR, 7, "HELLO", 5, txDone);:void txDone(RadioStatus status){ :}

radioRequestTx(BROADCAST_ADDR, 7, "HELLO", 5, NULL);

Page 15: Wireless Embedded Systems (0120442x)  Sensor Node Programming II (UART and Radio)

15

Radio API (cont'd) Set a handler to process received

messagesradioSetRxHandler(receive);:void receive(Address src, MessageType type, void *msg, uint8_t len){ :}

Page 16: Wireless Embedded Systems (0120442x)  Sensor Node Programming II (UART and Radio)

16

Example: sense-to-base.c Every second, each sensor node measures

light intensity and reports to the base station Assume base station has address = 0

Base station reports light measurements over UART

Base station

Sensor nodes measuring light intensity

Sensor node

Page 17: Wireless Embedded Systems (0120442x)  Sensor Node Programming II (UART and Radio)

17

sense-to-base.cvoid sense(Timer *t){ actorSetState(ACTOR_0, 1); sensorRequestAnalog( SENSOR_1, senseDone);}

void senseDone(uint16_t value){ radioRequestTx(0, 1, &value, sizeof(value), NULL); actorSetState(ACTOR_0, 0);}

#include <motelib/system.h>#include <motelib/timer.h>#include <motelib/radio.h>#include <motelib/sensor.h>#include <motelib/actor.h>

Timer t;void sense(Timer *t);void senseDone(uint16_t value);

void boot(){ timerCreate(&t); timerStart( &t, TIMER_PERIODIC, 1000, sense);}

Page 18: Wireless Embedded Systems (0120442x)  Sensor Node Programming II (UART and Radio)

18

base.c#include <stdio.h>#include <motelib/system.h>#include <motelib/radio.h>#include <motelib/uart.h>

void receive(Address src, MessageType type, void *msg, uint8_t len){ if (type == 1) { printf("Node %d: Light = %d\n", src, *((uint16_t*)msg)); }}

void boot(){ uartEnable(true,true); radioSetRxHandler(receive);}

Page 19: Wireless Embedded Systems (0120442x)  Sensor Node Programming II (UART and Radio)

19

Exercise: Voting Machine Create an application for wireless

voting machine Allow user to cast a vote using the USER

button Voting choices are: Red (1), Yellow (2),

Green (3), or No Vote (0) When the USER button is pressed,

Set LED status accordingly Report current vote to the base station (#1)

with message type 50