This program shows how to search for a specific node inside the XBee's network. Once the node has been found a packet is sent to this node.
Required Materials
1 x Waspmote
1 x Battery
1 x MiniUSB wire
1 x XBee-Digimesh module
Notes
- It is recommended to turn on another XBee module in order to have some module to be scanned. This module must be set to the node identifier defined in this code.
- The battery has to be connected.
- This example can be executed in Waspmote v12
Code
/*
* ------ [DM_11] - node search --------
*
* Explanation: This program shows how to search for a specific
* node inside the XBee's network. Once the node has been found a
* packet is sent to this node.
*
* Copyright (C) 2012 Libelium Comunicaciones Distribuidas S.L.
* http://www.libelium.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
* Version: 0.1
* Design: David Gascón
* Implementation: Yuri Carmona
*/
#include <WaspXBeeDM.h>
// node Id to be searched
char* node="RECEIVER";
// variable to store searched Destination MAC Address
uint8_t mac[8];
// create packet to send
packetXBee* packet;
void setup()
{
// init USB port
USB.ON();
USB.println(F("DM_11 example"));
//////////////////////////
// 1. XBee set up
//////////////////////////
// 1.1. init XBee
xbeeDM.ON();
// 1.2. set NI (Node Identifier)
xbeeDM.setNodeIdentifier("SENDER");
// 1.3. save XBee values in memory
xbeeDM.writeValues();
}
void loop()
{
////////////////////////////////////////
// 2. search node
////////////////////////////////////////
if(!xbeeDM.nodeSearch(node, mac))
{
USB.print("\nmac:");
USB.printHex(mac[0]);
USB.printHex(mac[1]);
USB.printHex(mac[2]);
USB.printHex(mac[3]);
USB.printHex(mac[4]);
USB.printHex(mac[5]);
USB.printHex(mac[6]);
USB.printHex(mac[7]);
}
else USB.print("error");
USB.println();
////////////////////////////////////////
// 3. send a packet to the searched node
////////////////////////////////////////
// 3.1. set packet parameters:
packet=(packetXBee*) calloc(1,sizeof(packetXBee)); // memory allocation
packet->mode=UNICAST; // set Unicast mode
// 3.2. set Destination parameters
xbeeDM.setDestinationParams(packet, mac, "This is a message");
// 3.3. send data
xbeeDM.sendXBee(packet);
// 3.4. check TX flag
if( !xbeeDM.error_TX ) USB.println("ok");
else USB.println("error");
// 3.5. free memory
free(packet);
packet=NULL;
delay(3000);
}
Output
E#
DM_11 example
mac:0013A200406C16CE
ok
mac:0013A200406C16CE
ok
mac:0013A200406C16CE
ok
...