DigiMesh Power Management using Pin Sleep example for mbed XBeeLib By Digi
Fork of XBeeZB_power_mngmnt_pin_sleep by
Description
This example characterizes a device that after taking samples from some sensors and sending
the information collected through the radio, does nothing for a long period of time that could
range from several minutes to several hours.
In that long period of inactivity it's not expected to have communication with the coordinator or other remote devices.
The device will not be able to receive packets and should save as much power as possible, therefore the radio is set into low power.
The example does following cycle endlessly:
- Some sensor is read. For demonstration, a counter is incremented.
- For demonstration, a message containing the data collected during sampling stage is sent to a remote device.
- After job has been done the radio will go to sleep:
- First radio is requested to go to sleep. When radio finally sleeps, then the application waits for the time configured in the SLEEP_SECONDS define (40 seconds).
- This time can be increased as desired.
- After that time, the application will awake the radio through the On/Sleep pin and another cycle will start by taking a sample.
Setup
Application
Define RADIO_SLEEP_REQ and RADIO_ON_SLEEP in config.h file according to the mbed micro-controller GPIOs that will be used to control the XBee module power.
Hardware
It's necessary to wire following connections from the mbed micro-controller to the XBee radio according to the configuration done in the application:
- From the mbed micro-controller RADIO_SLEEP_REQ to the XBee module SLEEP_RQ pin (pin 9 on THT modules, pin 10 on SMT modules) will allow the mbed micro-controller to request the radio to sleep or awake.
- From the mbed micro-controller RADIO_ON_SLEEP to XBee module ON/SLEEP# pin (pin 13 on THT modules, pin 26 on SMT modules) will allow the mbed micro-controller to know if the radio is awake or slept.
Demo run
While the demo is running, you will see the frames sent by the XBee module through the serial console terminal.
Verify that the remote device is receiving the frames by accessing the "Console" tab of the XCTU.
If the frames are successfully sent, they will be displayed there, every 40 seconds.
Sensor sample: 0, next sample in 40 seconds Sensor sample: 1, next sample in 40 seconds
Diff: config.h
- Revision:
- 2:507c28e0461a
- Child:
- 3:a1a694348f09
diff -r c1d3ba69ca3c -r 507c28e0461a config.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/config.h Thu May 14 16:24:56 2015 +0200 @@ -0,0 +1,47 @@ + +#if !defined(__CONFIG_H_) +#define __CONFIG_H_ + +/** Library configuration options */ +#define ENABLE_LOGGING +#define ENABLE_ASSERTIONS +#define FRAME_BUFFER_SIZE 4 +#define MAX_FRAME_PAYLOAD_LEN 128 +#define ENABLE_PM_SUPPORT + +#define SYNC_OPS_TIMEOUT_MS 2000 + +//#define RADIO_TX NC /* TODO: specify your setup's Serial TX pin connected to the XBee module DIN pin */ +//#define RADIO_RX NC /* TODO: specify your setup's Serial RX pin connected to the XBee module DOUT pin */ +//#define RADIO_RTS NC /* TODO: specify your setup's Serial RTS# pin connected to the XBee module RTS# pin */ +//#define RADIO_CTS NC /* TODO: specify your setup's Serial CTS# pin connected to the XBee module CTS# pin */ +//#define RADIO_RESET NC /* TODO: specify your setup's GPIO (output) connected to the XBee module's reset pin */ +//#define RADIO_SLEEP_REQ NC /* TODO: specify your setup's GPIO (output) connected to the XBee module's SLEEP_RQ pin */ +//#define RADIO_ON_SLEEP NC /* TODO: specify your setup's GPIO (input) connected to the XBee module's ON_SLEEP pin */ +//#define DEBUG_TX NC /* TODO: specify your setup's Serial TX for debugging */ +//#define DEBUG_RX NC /* TODO: specify your setup's Serial RX for debugging (optional) */ + +#if !defined(RADIO_TX) + #error "Please define RADIO_TX pin" +#endif + +#if !defined(RADIO_RX) + #error "Please define RADIO_RX pin" +#endif + +#if !defined(RADIO_RESET) + #define RADIO_RESET NC + #warning "RADIO_RESET not defined, defaulted to 'NC'" +#endif + +#if defined(ENABLE_LOGGING) + #if !defined(DEBUG_TX) + #error "Please define DEBUG_TX" + #endif + #if !defined(DEBUG_RX) + #define DEBUG_RX NC + #warning "DEBUG_RX not defined, defaulted to 'NC'" + #endif +#endif + +#endif /* __CONFIG_H_ */