802.15.4 Receive Data example for mbed XBeeLib By Digi

Dependencies:   XBeeLib mbed

Description

This example shows how to receive data from a remote XBee802 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:11:23 2016 +0200
Revision:
10:b9dc1600c409
Parent:
7:2e6ea668bc9e
Automatic upload

Who changed what in which revision?

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