ZigBee Power Management using Cyclic Sleep example for mbed XBeeLib By Digi

Dependencies:   XBeeLib mbed

Description

This example characterizes a device that needs to be continuously joined to the coordinator so it doesn't lose any incoming packets. A fast response to packets is not required so the radio can sleep for some time to save power while the coordinator buffers its packets.

The example configures the radio to poll its coordinator every 5 seconds to check if there is any packet for it. If there is one or more, it awakes and send the packets to the mbed micro-controller.

Setup

Firmware

In S2B modules, router firmware will not work for this example, because routers don't support sleep modes.
Make sure the XBee module has end-device firmware.
To flash new firmware into an XBee module, you need to use the XCTU software.

Network

Make sure the coordinator has at Cyclic Sleep Period (SP) option a value greater than XBee module.
In the example it is set to 5000 which represent 5000 mS or 5 seconds.
In the coordinator, when using X-CTU for configuration, the SP parameter has to be entered as the desired sleep time divided by 10 and in hexadecimal so to cope with the example it should be 5000 / 10 = 500 = 0x1F4 -> 1F4
On a router or coordinator, SP determines the transmission timeout when sending to a sleeping end device. SP also determines how long the parent will buffer a message for a sleeping child.

Demo run

While it is running, go to the "Console" tab of the X-CTU connected to the coordinator. Press the "Add API frame to the list" and paste following bytes that create a new broadcast transmit request packet:

7E 00 19 10 01 00 00 00 00 00 00 FF FF FF FE 00 00 48 65 6C 6C 6F 20 58 42 65 65 21 5A

Select the frame and press the "Send selected frame" button to send the frame ("Hello XBee!") to the XBee network.

Once the XBee device receives the frame, the radio will wake up to send it to mbed micro-controller, which will process and print the received data.

Verify that the XBee module has received the frame by accessing the serial console terminal. If it was successful, the "Hello XBee!" message will be displayed there.

After that, the radio will go to sleep again until new data is received.

Committer:
hbujanda
Date:
Fri Jul 29 12:13:47 2016 +0200
Revision:
7:fe3aee4d263a
Parent:
4:378daca584ef
Automatic upload

Who changed what in which revision?

UserRevisionLine numberNew contents of line
spastor 3:ee49651a88a4 1 /**
spastor 3:ee49651a88a4 2 * Copyright (c) 2015 Digi International Inc.,
spastor 3:ee49651a88a4 3 * All rights not expressly granted are reserved.
spastor 3:ee49651a88a4 4 *
spastor 3:ee49651a88a4 5 * This Source Code Form is subject to the terms of the Mozilla Public
spastor 3:ee49651a88a4 6 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
spastor 3:ee49651a88a4 7 * You can obtain one at http://mozilla.org/MPL/2.0/.
spastor 3:ee49651a88a4 8 *
spastor 3:ee49651a88a4 9 * Digi International Inc. 11001 Bren Road East, Minnetonka, MN 55343
spastor 3:ee49651a88a4 10 * =======================================================================
spastor 3:ee49651a88a4 11 */
hbujanda 2:cd92b9bcb7f1 12
spastor 3:ee49651a88a4 13 #ifndef __CONFIG_H_
hbujanda 2:cd92b9bcb7f1 14 #define __CONFIG_H_
hbujanda 2:cd92b9bcb7f1 15
hbujanda 2:cd92b9bcb7f1 16 /** Library configuration options */
hbujanda 2:cd92b9bcb7f1 17 #define ENABLE_LOGGING
hbujanda 2:cd92b9bcb7f1 18 #define ENABLE_ASSERTIONS
hbujanda 2:cd92b9bcb7f1 19 #define FRAME_BUFFER_SIZE 4
hbujanda 2:cd92b9bcb7f1 20 #define MAX_FRAME_PAYLOAD_LEN 128
hbujanda 2:cd92b9bcb7f1 21
hbujanda 2:cd92b9bcb7f1 22 #define SYNC_OPS_TIMEOUT_MS 2000
hbujanda 2:cd92b9bcb7f1 23
hbujanda 2:cd92b9bcb7f1 24 //#define RADIO_TX NC /* TODO: specify your setup's Serial TX pin connected to the XBee module DIN pin */
hbujanda 2:cd92b9bcb7f1 25 //#define RADIO_RX NC /* TODO: specify your setup's Serial RX pin connected to the XBee module DOUT pin */
hbujanda 2:cd92b9bcb7f1 26 //#define RADIO_RTS NC /* TODO: specify your setup's Serial RTS# pin connected to the XBee module RTS# pin */
hbujanda 2:cd92b9bcb7f1 27 //#define RADIO_CTS NC /* TODO: specify your setup's Serial CTS# pin connected to the XBee module CTS# pin */
hbujanda 2:cd92b9bcb7f1 28 //#define RADIO_RESET NC /* TODO: specify your setup's GPIO (output) connected to the XBee module's reset pin */
hbujanda 2:cd92b9bcb7f1 29 //#define RADIO_SLEEP_REQ NC /* TODO: specify your setup's GPIO (output) connected to the XBee module's SLEEP_RQ pin */
hbujanda 2:cd92b9bcb7f1 30 //#define RADIO_ON_SLEEP NC /* TODO: specify your setup's GPIO (input) connected to the XBee module's ON_SLEEP pin */
hbujanda 2:cd92b9bcb7f1 31 //#define DEBUG_TX NC /* TODO: specify your setup's Serial TX for debugging */
hbujanda 2:cd92b9bcb7f1 32 //#define DEBUG_RX NC /* TODO: specify your setup's Serial RX for debugging (optional) */
hbujanda 2:cd92b9bcb7f1 33
hbujanda 2:cd92b9bcb7f1 34 #if !defined(RADIO_TX)
hbujanda 2:cd92b9bcb7f1 35 #error "Please define RADIO_TX pin"
hbujanda 2:cd92b9bcb7f1 36 #endif
hbujanda 2:cd92b9bcb7f1 37
hbujanda 2:cd92b9bcb7f1 38 #if !defined(RADIO_RX)
hbujanda 2:cd92b9bcb7f1 39 #error "Please define RADIO_RX pin"
hbujanda 2:cd92b9bcb7f1 40 #endif
hbujanda 2:cd92b9bcb7f1 41
hbujanda 2:cd92b9bcb7f1 42 #if !defined(RADIO_RESET)
hbujanda 2:cd92b9bcb7f1 43 #define RADIO_RESET NC
hbujanda 2:cd92b9bcb7f1 44 #warning "RADIO_RESET not defined, defaulted to 'NC'"
hbujanda 2:cd92b9bcb7f1 45 #endif
hbujanda 2:cd92b9bcb7f1 46
hbujanda 2:cd92b9bcb7f1 47 #if defined(ENABLE_LOGGING)
hbujanda 2:cd92b9bcb7f1 48 #if !defined(DEBUG_TX)
hbujanda 2:cd92b9bcb7f1 49 #error "Please define DEBUG_TX"
hbujanda 2:cd92b9bcb7f1 50 #endif
hbujanda 2:cd92b9bcb7f1 51 #if !defined(DEBUG_RX)
hbujanda 2:cd92b9bcb7f1 52 #define DEBUG_RX NC
hbujanda 2:cd92b9bcb7f1 53 #warning "DEBUG_RX not defined, defaulted to 'NC'"
hbujanda 2:cd92b9bcb7f1 54 #endif
hbujanda 2:cd92b9bcb7f1 55 #endif
hbujanda 2:cd92b9bcb7f1 56
hbujanda 2:cd92b9bcb7f1 57 #endif /* __CONFIG_H_ */