Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
10 years, 7 months ago.
LPC4088 quick start board - Xbee module configuration
I compiled default XBee program for LPC4088 quick start board and it is not working because I need 2 LPC4088 quick start boards which I don't have. Is there any way I can modify this program in order to send information directly form XBee which is on the LPC4088 to the XBee connected directly to my PC terminal application?
For terminal application I use "minicom" and have set up serial port to be 9600 8N1 which means 9600 baud rate, 8 data bits no parity and 1 stop bit. By the way what are the default UART settings for the XBee example? I would like to recieve any kind of character from LPC4088 directly to PC terminal app... How can I do that?
default LPC4088 quick start board XBee example
/******************************************************************************
* Includes
*****************************************************************************/
#include "mbed.h"
#include "XBee.h"
/******************************************************************************
* Typedefs and defines
*****************************************************************************/
// define NODE_IS_COORDINATOR if this board should act
// as XBee coordinator. Make sure it is undefined it the board
// should act as End-Device
#define NODE_IS_COORDINATOR (1)
#define CMD_BTN_MSG (0)
#define CMD_ACK_MSG (1)
/******************************************************************************
* Local variables
*****************************************************************************/
static XBee xbee(P4_22, P4_23, P4_17, P4_19);
// led1 + led 2 -> active low
static DigitalOut xbeeInitLed(LED1);
static DigitalOut remoteBtnLed(LED2);
// led3 + led 4 -> active high
static DigitalOut ackLed(LED3);
static DigitalOut led4(LED4);
static DigitalIn button(p23);
static bool xbeeIsUp = false;
/******************************************************************************
* Local functions
*****************************************************************************/
static void xbeeDeviceUp(void) {
xbeeIsUp = true;
}
static void xbeeDeviceDown(void) {
xbeeIsUp = false;
}
static void xbeeNodeFound(void) {
uint32_t addrHi = 0;
uint32_t addrLo = 0;
uint8_t rssi = 0;
xbee.getRemoteAddress(&addrHi, &addrLo);
xbee.getRssi(&rssi);
printf("XBee: node found: hi=%lx, lo=%lx, rssi=%d\n",
addrHi, addrLo, rssi);
}
static void xbeeTxStat(void) {
uint8_t frameId = 0;
XBee::XBeeTxStatus status = XBee::TxStatusOk;
xbee.getTxStatus(&frameId, &status);
printf("XBee: Tx Stat. Id=%u, status=%d\n", frameId, (int)status);
}
static void xbeeDataAvailable(void) {
char* data = NULL;
char ackMsg = CMD_ACK_MSG;
uint8_t frameId = 0;
uint8_t len = 0;
uint32_t addrHi = 0;
uint32_t addrLo = 0;
uint8_t rssi = 0;
xbee.getRemoteAddress(&addrHi, &addrLo);
xbee.getData(&data, &len);
xbee.getRssi(&rssi);
printf("XBee: Data available: len=%d hi=%lx, lo=%lx, rssi=%d\n",
(int)len, addrHi, addrLo, rssi);
if (len > 0) {
switch(data[0]) {
case CMD_BTN_MSG:
if (len > 1) {
// change led to indicate button state
remoteBtnLed = ((data[1] == 1) ? 1 : 0);
// Send an ACK directly to the remote node (only for
// buttons state == 0)
if (data[1] == 0) {
xbee.send(addrHi, addrLo, &ackMsg, 1, &frameId);
}
}
break;
case CMD_ACK_MSG:
for (int i = 0; i < 3; i++) {
ackLed = 1;
wait_ms(100);
ackLed = 0;
wait_ms(100);
}
break;
}
}
}
static bool xbeeInit()
{
xbee.registerCallback(xbeeDeviceUp, XBee::CbDeviceUp);
xbee.registerCallback(xbeeDeviceDown, XBee::CbDeviceDown);
xbee.registerCallback(xbeeNodeFound, XBee::CbNodeFound);
xbee.registerCallback(xbeeTxStat, XBee::CbTxStat);
xbee.registerCallback(xbeeDataAvailable, XBee::CbDataAvailable);
#ifdef NODE_IS_COORDINATOR
XBee::XBeeError err = xbee.init(XBee::Coordinator, "EAEA");
#else
XBee::XBeeError err = xbee.init(XBee::EndDevice, "EAEA");
#endif
if (err != XBee::Ok) {
return false;
}
return true;
}
static void reportInitFailed() {
while (true) {
xbeeInitLed = !xbeeInitLed;
wait_ms(200);
}
}
static void ledInit() {
xbeeInitLed = 0; // turn on
remoteBtnLed = 1; // turn off
ackLed = 0; // turn off
led4 = 0; // turn off
}
/******************************************************************************
* Main function
*****************************************************************************/
int main() {
/*
* For this example to work at least two boards with XBee nodes must
* be available; one which is configured as Coordinator and another
* which is configured as End-Device.
*
* LED1 shows the state of XBee initialization. This LED is turned
* on when initialization starts and turned off when initialization
* is ready and the device us up. If initialization fails LED1
* will blink.
*
* When the Push-button on the LPC4088 QuickStart Board is pushed
* a message will be broadcasted. The board(s) that receives the message
* will show the state of the remote board's button by turning LED2
* on or off.
*
* The board that receives the button state message will send back
* an ACK message (only for button down). The board that receives
* the ACK message will blink with LED3. This can be used to verify
* that a board that is not close to you actually received a message
* without having to look at that board's LED2.
*/
int buttonState = 1;
char data[2];
uint8_t frameId = 0;
// pull-up must be enabled for button
button.mode(PullUp);
ledInit();
printf("Initializing\n");
if (!xbeeInit()) {
reportInitFailed();
}
// Wait until XBee node is reported to be up.
// - For End-device this means that the node is associated with a
// coordinator
// - For a coordinator this means that the node is initialized and ready
printf("Wait until up\n");
while(!xbeeIsUp) {
xbee.process();
}
// turn off led to indicate initialization is okay and node is up
xbeeInitLed = 1;
printf("Node is Up\n");
while (1) {
if (button != buttonState) {
buttonState = button;
data[0] = CMD_BTN_MSG;
data[1] = buttonState;
// Send the button state. In this example we are broadcasting the
// message to all nodes on the same network (PAN ID). In reality
// direct messaging is preferred.
xbee.send(XBEE_ADDRHI_BROADCAST, XBEE_ADDRLO_BROADCAST,
data, 2, &frameId);
}
xbee.process();
}
}
1 Answer
10 years, 7 months ago.
This is a fun test.
You may need a USB adapter module:
http://www.adafruit.com/products/247
or https://www.parallax.com/product/32400
or https://www.sparkfun.com/products/11812
You could use Python or Java on the PC side:
http://code.google.com/p/python-xbee/
or http://code.google.com/p/xbee-api/