ZigBee Receive Data example for mbed XBeeLib By Digi

Dependencies:   XBeeLib mbed

Description

This example shows how to receive data from a remote XBeeZB module.
A remote XBee module sends a packet to our local XBee module though the air. The local XBee module receives the packet and sends it to the mbed module through the serial port. This library decodes the packet and calls a user defined method to process the packet.

See Receiving Data from other module chapter for more information.

Common Setup

Make sure you have a valid Example Common Setup

Example Setup

This example does not require any additional setup.

Running the example

Build and deploy the example to the mbed module.
Reset the mbed module so the example starts. You should see the example debug information through the debug interface configured in the 'Local Setup' chapter.

While the example is running, go to the "Console" tab of the X-CTU connected to the remote XBee module. 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.

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

Committer:
hbujanda
Date:
Fri Jul 29 12:13:01 2016 +0200
Revision:
10:3ff019e17aec
Parent:
7:8c6addd3f909
Automatic upload

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hbujanda 5:6342ebe62e5f 1 /**
hbujanda 5:6342ebe62e5f 2 * Copyright (c) 2015 Digi International Inc.,
hbujanda 5:6342ebe62e5f 3 * All rights not expressly granted are reserved.
hbujanda 5:6342ebe62e5f 4 *
hbujanda 5:6342ebe62e5f 5 * This Source Code Form is subject to the terms of the Mozilla Public
hbujanda 5:6342ebe62e5f 6 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
hbujanda 5:6342ebe62e5f 7 * You can obtain one at http://mozilla.org/MPL/2.0/.
hbujanda 5:6342ebe62e5f 8 *
hbujanda 5:6342ebe62e5f 9 * Digi International Inc. 11001 Bren Road East, Minnetonka, MN 55343
hbujanda 5:6342ebe62e5f 10 * =======================================================================
hbujanda 5:6342ebe62e5f 11 */
hbujanda 5:6342ebe62e5f 12
hbujanda 5:6342ebe62e5f 13 #include "mbed.h"
hbujanda 5:6342ebe62e5f 14 #include "XBeeLib.h"
hbujanda 5:6342ebe62e5f 15 #if defined(ENABLE_LOGGING)
hbujanda 5:6342ebe62e5f 16 #include "DigiLoggerMbedSerial.h"
hbujanda 5:6342ebe62e5f 17 using namespace DigiLog;
hbujanda 5:6342ebe62e5f 18 #endif
hbujanda 5:6342ebe62e5f 19
hbujanda 5:6342ebe62e5f 20 using namespace XBeeLib;
hbujanda 5:6342ebe62e5f 21
hbujanda 5:6342ebe62e5f 22 Serial *log_serial;
hbujanda 5:6342ebe62e5f 23
hbujanda 5:6342ebe62e5f 24 /** Callback function, invoked at packet reception */
hbujanda 5:6342ebe62e5f 25 static void receive_cb(const RemoteXBeeZB& remote, bool broadcast, const uint8_t *const data, uint16_t len)
hbujanda 5:6342ebe62e5f 26 {
hbujanda 5:6342ebe62e5f 27 const uint64_t remote_addr64 = remote.get_addr64();
hbujanda 5:6342ebe62e5f 28
hbujanda 5:6342ebe62e5f 29 log_serial->printf("\r\nGot a %s RX packet [%08x:%08x|%04x], len %d\r\nData: ", broadcast ? "BROADCAST" : "UNICAST", UINT64_HI32(remote_addr64), UINT64_LO32(remote_addr64), remote.get_addr16(), len);
hbujanda 5:6342ebe62e5f 30
hbujanda 5:6342ebe62e5f 31 for (int i = 0; i < len; i++)
hbujanda 5:6342ebe62e5f 32 log_serial->printf("%02x ", data[i]);
hbujanda 5:6342ebe62e5f 33
spastor 7:8c6addd3f909 34 log_serial->printf("\r\n");
hbujanda 5:6342ebe62e5f 35 }
hbujanda 5:6342ebe62e5f 36
spastor 7:8c6addd3f909 37 int main()
hbujanda 5:6342ebe62e5f 38 {
hbujanda 5:6342ebe62e5f 39 log_serial = new Serial(DEBUG_TX, DEBUG_RX);
hbujanda 5:6342ebe62e5f 40 log_serial->baud(9600);
hbujanda 5:6342ebe62e5f 41 log_serial->printf("Sample application to demo how to receive unicast and broadcast data with the XBeeZB\r\n\r\n");
hbujanda 5:6342ebe62e5f 42 log_serial->printf(XB_LIB_BANNER);
hbujanda 5:6342ebe62e5f 43
hbujanda 5:6342ebe62e5f 44 #if defined(ENABLE_LOGGING)
hbujanda 5:6342ebe62e5f 45 new DigiLoggerMbedSerial(log_serial, LogLevelInfo);
hbujanda 5:6342ebe62e5f 46 #endif
hbujanda 5:6342ebe62e5f 47
hbujanda 5:6342ebe62e5f 48 XBeeZB xbee = XBeeZB(RADIO_TX, RADIO_RX, RADIO_RESET, NC, NC, 9600);
hbujanda 5:6342ebe62e5f 49
hbujanda 5:6342ebe62e5f 50 /* Register callbacks */
hbujanda 5:6342ebe62e5f 51 xbee.register_receive_cb(&receive_cb);
hbujanda 5:6342ebe62e5f 52
hbujanda 5:6342ebe62e5f 53 RadioStatus const radioStatus = xbee.init();
hbujanda 5:6342ebe62e5f 54 MBED_ASSERT(radioStatus == Success);
hbujanda 5:6342ebe62e5f 55
hbujanda 5:6342ebe62e5f 56 /* Wait until the device has joined the network */
hbujanda 5:6342ebe62e5f 57 log_serial->printf("Waiting for device to join the network: ");
hbujanda 5:6342ebe62e5f 58 while (!xbee.is_joined()) {
hbujanda 5:6342ebe62e5f 59 wait_ms(1000);
hbujanda 5:6342ebe62e5f 60 log_serial->printf(".");
hbujanda 5:6342ebe62e5f 61 }
hbujanda 5:6342ebe62e5f 62 log_serial->printf("OK\r\n");
hbujanda 5:6342ebe62e5f 63
hbujanda 5:6342ebe62e5f 64 while (true) {
hbujanda 5:6342ebe62e5f 65 xbee.process_rx_frames();
hbujanda 5:6342ebe62e5f 66 wait_ms(100);
hbujanda 5:6342ebe62e5f 67 log_serial->printf(".");
hbujanda 5:6342ebe62e5f 68 }
hbujanda 5:6342ebe62e5f 69
hbujanda 5:6342ebe62e5f 70 delete(log_serial);
hbujanda 5:6342ebe62e5f 71 }