DigiMesh Power Management using Asynchronous Cyclic Sleep example for mbed XBeeLib By Digi

Dependencies:   XBeeLib mbed

Fork of XBeeZB_power_mngmnt_cyclic_sleep by Digi International Inc.

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 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 if there is any packet for it.
If there is one or more, it awakes and send the packets to the mbed micro-controller.

Note that in DigiMesh modules, the polling mechanism required in this example is restricted to devices one hop away (Point to Multipoint delivery); it will not work fine across a DigiMesh network.

Setup

Network

You need to set up a coordinator in the network so it buffers the packets send to our local XBee device while it's sleeping.
A module configured as coordinator requires:

  • 'Coordinator Enable (CE)' parameter set to 1.
  • 'Cyclic Sleep Period (SP)' parameter set as the local XBee device.
    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
  • 'Time Before Sleep (ST)' parameter set as the local XBee device; 500 ms = 0x1F4.
  • 'Transmit Options (TO)' parameter set to 0x40 so delivery method is Point to Multipoint.

Demo run

While it is running, send a packet to the device:

  • Go to the "Console" tab of the XCTU connected to the coordinator.
  • Press the "Add API frame to the list" button.
  • Press "Create using API Frame generator" button.
  • Select "DigiMesh" protocol and "0x10 Transmit Request" Frame Type.
  • Paste the Local XBee device 64-bit address in the "64-bit dest. address" text box. (You can copy it from the application banner).
  • In the "Options" text box, type 0x40 to select delivery method as Point To Multipoint (you can skip this if you configured atTO accordingly)
  • In the "RF data" text box, select the ASCII box and type "Hello XBee!".
  • Press OK, Add Frame.
  • 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:
Thu May 14 16:24:46 2015 +0200
Revision:
2:cd92b9bcb7f1
Child:
3:ee49651a88a4
Automatic upload

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hbujanda 2:cd92b9bcb7f1 1
hbujanda 2:cd92b9bcb7f1 2 #if !defined(__CONFIG_H_)
hbujanda 2:cd92b9bcb7f1 3 #define __CONFIG_H_
hbujanda 2:cd92b9bcb7f1 4
hbujanda 2:cd92b9bcb7f1 5 /** Library configuration options */
hbujanda 2:cd92b9bcb7f1 6 #define ENABLE_LOGGING
hbujanda 2:cd92b9bcb7f1 7 #define ENABLE_ASSERTIONS
hbujanda 2:cd92b9bcb7f1 8 #define FRAME_BUFFER_SIZE 4
hbujanda 2:cd92b9bcb7f1 9 #define MAX_FRAME_PAYLOAD_LEN 128
hbujanda 2:cd92b9bcb7f1 10 #define ENABLE_PM_SUPPORT
hbujanda 2:cd92b9bcb7f1 11
hbujanda 2:cd92b9bcb7f1 12 #define SYNC_OPS_TIMEOUT_MS 2000
hbujanda 2:cd92b9bcb7f1 13
hbujanda 2:cd92b9bcb7f1 14 //#define RADIO_TX NC /* TODO: specify your setup's Serial TX pin connected to the XBee module DIN pin */
hbujanda 2:cd92b9bcb7f1 15 //#define RADIO_RX NC /* TODO: specify your setup's Serial RX pin connected to the XBee module DOUT pin */
hbujanda 2:cd92b9bcb7f1 16 //#define RADIO_RTS NC /* TODO: specify your setup's Serial RTS# pin connected to the XBee module RTS# pin */
hbujanda 2:cd92b9bcb7f1 17 //#define RADIO_CTS NC /* TODO: specify your setup's Serial CTS# pin connected to the XBee module CTS# pin */
hbujanda 2:cd92b9bcb7f1 18 //#define RADIO_RESET NC /* TODO: specify your setup's GPIO (output) connected to the XBee module's reset pin */
hbujanda 2:cd92b9bcb7f1 19 //#define RADIO_SLEEP_REQ NC /* TODO: specify your setup's GPIO (output) connected to the XBee module's SLEEP_RQ pin */
hbujanda 2:cd92b9bcb7f1 20 //#define RADIO_ON_SLEEP NC /* TODO: specify your setup's GPIO (input) connected to the XBee module's ON_SLEEP pin */
hbujanda 2:cd92b9bcb7f1 21 //#define DEBUG_TX NC /* TODO: specify your setup's Serial TX for debugging */
hbujanda 2:cd92b9bcb7f1 22 //#define DEBUG_RX NC /* TODO: specify your setup's Serial RX for debugging (optional) */
hbujanda 2:cd92b9bcb7f1 23
hbujanda 2:cd92b9bcb7f1 24 #if !defined(RADIO_TX)
hbujanda 2:cd92b9bcb7f1 25 #error "Please define RADIO_TX pin"
hbujanda 2:cd92b9bcb7f1 26 #endif
hbujanda 2:cd92b9bcb7f1 27
hbujanda 2:cd92b9bcb7f1 28 #if !defined(RADIO_RX)
hbujanda 2:cd92b9bcb7f1 29 #error "Please define RADIO_RX pin"
hbujanda 2:cd92b9bcb7f1 30 #endif
hbujanda 2:cd92b9bcb7f1 31
hbujanda 2:cd92b9bcb7f1 32 #if !defined(RADIO_RESET)
hbujanda 2:cd92b9bcb7f1 33 #define RADIO_RESET NC
hbujanda 2:cd92b9bcb7f1 34 #warning "RADIO_RESET not defined, defaulted to 'NC'"
hbujanda 2:cd92b9bcb7f1 35 #endif
hbujanda 2:cd92b9bcb7f1 36
hbujanda 2:cd92b9bcb7f1 37 #if defined(ENABLE_LOGGING)
hbujanda 2:cd92b9bcb7f1 38 #if !defined(DEBUG_TX)
hbujanda 2:cd92b9bcb7f1 39 #error "Please define DEBUG_TX"
hbujanda 2:cd92b9bcb7f1 40 #endif
hbujanda 2:cd92b9bcb7f1 41 #if !defined(DEBUG_RX)
hbujanda 2:cd92b9bcb7f1 42 #define DEBUG_RX NC
hbujanda 2:cd92b9bcb7f1 43 #warning "DEBUG_RX not defined, defaulted to 'NC'"
hbujanda 2:cd92b9bcb7f1 44 #endif
hbujanda 2:cd92b9bcb7f1 45 #endif
hbujanda 2:cd92b9bcb7f1 46
hbujanda 2:cd92b9bcb7f1 47 #endif /* __CONFIG_H_ */