Sei sulla pagina 1di 26

CHAPTER 14

Wireless Communication

14.0 Introduction
$UGXLQRVDELOLW\WRLQWHUDFWZLWKWKHZRUOGLVIDQWDVWLFEXWVRPHWLPHV\RXPLJKWZDQW
WRFRPPXQLFDWHZLWK\RXU$UGXLQRIURPDGLVWDQFHZLWKRXWZLUHVDQGZLWKRXWWKH
RYHUKHDGRIDIXOO7&3,3QHWZRUNFRQQHFWLRQ7KLVFKDSWHUEHJLQVZLWKDUHFLSHIRU
VLPSOHZLUHOHVVPRGXOHVIRUDSSOLFDWLRQVZKHUHORZFRVWLVWKHSULPDU\UHTXLUHPHQW
EXWPRVWRIWKHUHFLSHVIRFXVRQWKHYHUVDWLOH;%HHZLUHOHVVPRGXOHV
;%HHSURYLGHVIOH[LEOHZLUHOHVVFDSDELOLW\WRWKH$UGXLQREXWWKDWYHU\IOH[LELOLW\FDQ
EHFRQIXVLQJ7KLVFKDSWHUSURYLGHVH[DPSOHVUDQJLQJIURPVLPSOHZLUHOHVVVHULDOSRUW
UHSODFHPHQWV WKURXJK WR PHVK QHWZRUNV FRQQHFWLQJ PXOWLSOH ERDUGV WR PXOWLSOH
VHQVRUV
$ QXPEHU RI GLIIHUHQW ;%HH PRGXOHV DUH DYDLODEOH 7KH PRVW SRSXODU DUH WKH ;%HH
 DOVRNQRZQDV;%HH6HULHV DQG;%HH=%6HULHV6HULHVLVHDVLHUWRXVH
WKDQ6HULHVEXWLWGRHVQRWVXSSRUWPHVKQHWZRUNV6HHKWWSZZZGLJLFRPVXSSRUW
NEDVHNEDVHUHVXOWGHWOMVS"LG 

14.1 Sending Messages Using Low-Cost Wireless Modules


Problem
<RXZDQWWRWUDQVPLWGDWDEHWZHHQWZR$UGXLQRERDUGVXVLQJVLPSOHORZFRVWZLUHOHVV
PRGXOHV

Solution
7KLV UHFLSH XVHV VLPSOH WUDQVPLW DQG UHFHLYH PRGXOHV VXFK DV WKH 6SDUN)XQ
:5/DQG:5/
:LUHWKHWUDQVPLWWHUDVVKRZQLQ)LJXUHDQGWKHUHFHLYHUDVLQ)LJXUH

425
)LJXUH6LPSOHZLUHOHVVWUDQVPLWWHUXVLQJ9LUWXDO:LUH

)LJXUH6LPSOHZLUHOHVVUHFHLYHUXVLQJ9LUWXDO:LUH

426 | Chapter 14: Wireless Communication


7KHWUDQVPLWVNHWFKVHQGVDVLPSOHWH[WPHVVDJHWRWKHUHFHLYHVNHWFKZKLFKHFKRHV
WKHWH[WWRWKH6HULDO0RQLWRU7KHWUDQVPLWDQGUHFHLYHVNHWFKHVXVHWKH9LUWXDO:LUH
OLEUDU\ZULWWHQE\0LNH0F&DXOH\WRSURYLGHWKHLQWHUIDFHWRWKHZLUHOHVVKDUGZDUH
7KHOLEUDU\FDQEHGRZQORDGHGIURPKWWSZZZRSHQFRPDXPLNHPDUGXLQR9LUWXDO
:LUH]LS
/*
SimpleSend
This sketch transmits a short text message using the VirtualWire library
connect the Transmitter data pin to Arduino pin 12
*/

#include <VirtualWire.h>

void setup()
{
// Initialize the IO and ISR
vw_setup(2000); // Bits per sec
}

void loop()
{
send("hello");
delay(1000);
}

void send (char *message)


{
vw_send((uint8_t *)message, strlen(message));
vw_wait_tx(); // Wait until the whole message is gone
}

7KHUHFHLYHVNHWFKDOVRXVHVWKH9LUWXDO:LUHOLEUDU\
/*
SimpleReceive
This sketch displays text strings received using VirtualWire
Connect the Receiver data pin to Arduino pin 11
*/
#include <VirtualWire.h>

byte message[VW_MAX_MESSAGE_LEN]; // a buffer to hold the incoming messages


byte msgLength = VW_MAX_MESSAGE_LEN; // the size of the message

void setup()
{
Serial.begin(9600);
Serial.println("Ready");

// Initialize the IO and ISR


vw_setup(2000); // Bits per sec
vw_rx_start(); // Start the receiver
}

14.1 Sending Messages Using Low-Cost Wireless Modules | 427


void loop()
{
if (vw_get_message(message, &msgLength)) // Non-blocking
{
Serial.print("Got: ");
for (int i = 0; i < msgLength; i++)
{
Serial.write(message[i]);
}
Serial.println();
}
}

Discussion
7KH9LUWXDO:LUHOLEUDU\GHIDXOWVWRSLQIRUWUDQVPLWDQGSLQIRUUHFHLYHEXWVHH
WKH GRFXPHQWDWLRQ OLQN DW WKH HQG RI WKLV UHFLSH LI \RX ZDQW WR XVH GLIIHUHQW SLQV
SetupLQLWLDOL]HVWKHOLEUDU\7KH loopFRGHVLPSO\FDOOVD sendIXQFWLRQWKDWFDOOVWKH
OLEUDU\vw_sendDQGZDLWVIRUWKHPHVVDJHWREHWUDQVPLWWHG
7KHUHFHLYHVLGHLQLWLDOL]HVWKHOLEUDU\UHFHLYHORJLFDQGWKHQZDLWVLQloopIRUWKHPHV
VDJHvw_get_messageZLOOUHWXUQtrueLIDPHVVDJHLVDYDLODEOHDQGLIVRHDFKFKDUDFWHU
LQWKHPHVVDJHLVSULQWHGWRWKH6HULDO0RQLWRU
7KH9LUWXDO:LUHOLEUDU\KDQGOHVWKHDVVHPEO\RIPXOWLSOHE\WHVLQWRSDFNHWVVRVHQGLQJ
ELQDU\GDWDFRQVLVWVRISDVVLQJWKHDGGUHVVRIWKHGDWDDQGWKHQXPEHURIE\WHVWRVHQG
7KHVHQGLQJVNHWFKWKDWIROORZVLVVLPLODUWRWKHWUDQVPLWVNHWFKLQWKLVUHFLSHV6ROXWLRQ
EXWLWILOOVWKHPHVVDJHEXIIHUZLWKELQDU\YDOXHVIURPUHDGLQJWKHDQDORJLQSXWSRUWV
XVLQJanalogRead7KHVL]HRIWKHEXIIHULVWKHQXPEHURILQWHJHUVWREHVHQWPXOWLSOLHG
E\WKHQXPEHURIE\WHVLQDQLQWHJHU WKHVL[DQDORJLQWHJHUYDOXHVWDNHE\WHVEHFDXVH
HDFKintLVWZRE\WHV 
/*
SendBinary
Sends digital and analog pin values as binary data using VirtualWire library
See SendBinary in Chapter 4
*/

#include <VirtualWire.h>

const int numberOfAnalogPins = 6; // how many analog pins to read

int data[numberOfAnalogPins]; // the data buffer

const int dataBytes = numberOfAnalogPins * sizeof(int); // the number of bytes


in the data buffer

void setup()
{
// Initialize the IO and ISR
vw_setup(2000); // Bits per sec
}

428 | Chapter 14: Wireless Communication


void loop()
{
int values = 0;
for(int i=0; i <= numberOfAnalogPins; i++)
{
// read the analog ports
data[i] = analogRead(i); // store the values into the data buffer
}
send((byte*)data, dataBytes);
delay(1000); //send every second
}

void send (byte *data, int nbrOfBytes)


{
vw_send(data, nbrOfBytes);
vw_wait_tx(); // Wait until the whole message is gone
}

7KHsizeofRSHUDWRULVXVHGWRGHWHUPLQHWKHQXPEHURIE\WHVLQDQint

7KHUHFHLYHVLGHZDLWVIRUPHVVDJHVFKHFNVWKDWWKH\DUHWKHH[SHFWHGOHQJWKDQGFRQ
YHUWVWKHEXIIHUEDFNLQWRWKHVL[LQWHJHUYDOXHVIRUGLVSOD\RQWKH6HULDO0RQLWRU
/*
ReceiveBinary
This sketch receives six integer values as binary data
Connect the Receiver data pin to Arduino pin 11
*/
#include <VirtualWire.h>

/*
SendBinary
Sends digital and analog pin values as binary data using VirtualWire library
See SendBinary in Chapter 4
*/

#include <VirtualWire.h>

const int numberOfAnalogPins = 6; // how many analog integer values to receive


int data[numberOfAnalogPins]; // the data buffer

// the number of bytes in the data buffer


const int dataBytes = numberOfAnalogPins * sizeof(int);

byte msgLength = dataBytes;

void setup()
{

14.1 Sending Messages Using Low-Cost Wireless Modules | 429


Serial.begin(9600);
Serial.println("Ready");

// Initialize the IO and ISR


vw_set_ptt_inverted(true); // Required for DR3100
vw_setup(2000); // Bits per sec

vw_rx_start(); // Start the receiver


}

void loop()
{
if (vw_get_message((byte*)data, &msgLength)) // Non-blocking
{
Serial.println("Got: ");
if(msgLength == dataBytes)
{
for (int i = 0; i < numberOfAnalogPins; i++)
{
Serial.print("pin ");
Serial.print(i);
Serial.print("=");
Serial.println(data[i]);
}
}
else
{
Serial.print("unexpected msg length of ");
Serial.println(msgLength);
}
Serial.println();
}
}

7KH6HULDO0RQLWRUZLOOGLVSOD\WKHDQDORJYDOXHVRQWKHVHQGLQJ$UGXLQR
Got:
pin 0=1023
pin 1=100
pin 2=227
pin 3=303
pin 4=331
pin 5=358

%HDULQPLQGWKDWWKHPD[LPXPEXIIHUVL]HIRU9LUWXDO:LUHLVE\WHVORQJ WKHFRQ
VWDQWVW_MAX_MESSAGE_LENLVGHILQHGLQWKHOLEUDU\KHDGHUILOH 
:LUHOHVVUDQJHFDQEHXSWRPHWHUVRUVRGHSHQGLQJRQVXSSO\YROWDJHDQGDQWHQQD
DQGLVUHGXFHGLIWKHUHDUHREVWDFOHVEHWZHHQWKHWUDQVPLWWHUDQGWKHUHFHLYHU
$OVRQRWHWKDWWKHPHVVDJHVDUHQRWJXDUDQWHHGWREHGHOLYHUHGDQGLI\RXJHWRXWRI
UDQJHRUWKHUHLVH[FHVVLYHUDGLRLQWHUIHUHQFHVRPHPHVVDJHVFRXOGJHWORVW,I\RXQHHG
DJXDUDQWHHGZLUHOHVVGHOLYHU\PHFKDQLVPWKH=LJ%HH$3,XVHGLQUHFLSHVDWWKHHQGRI
WKLVFKDSWHULVDEHWWHUFKRLFHEXWWKHVHLQH[SHQVLYHPRGXOHVZRUNZHOOIRUWDVNVVXFK

430 | Chapter 14: Wireless Communication


DVGLVSOD\LQJWKHVWDWXVRI$UGXLQRVHQVRUVHDFKPHVVDJHFRQWDLQVWKHFXUUHQWVHQVRU
YDOXHWRGLVSOD\DQGDQ\ORVWPHVVDJHVJHWUHSODFHGE\PHVVDJHVWKDWIROORZ

See Also
$WHFKQLFDOGRFXPHQWRQWKH9LUWXDO:LUH/LEUDU\FDQEHGRZQORDGHGIURPKWWSZZZ
RSHQFRPDXPLNHPDUGXLQR9LUWXDO:LUHSGI
'DWDVKHHWVIRUWKHWUDQVPLWWHUDQGUHFHLYHUPRGXOHVFDQEHIRXQGDWKWWSZZZVSDUN
IXQFRPGDWDVKHHWV:LUHOHVV*HQHUDO026$:5SGIDQGKWWSZZZVSDUNIXQFRPGD
WDVKHHWV:LUHOHVV*HQHUDO025;SGI

14.2 Connecting Arduino to a ZigBee or 802.15.4 Network


Problem
<RXGOLNH\RXU$UGXLQRWRSDUWLFLSDWHLQD=LJ%HHRUQHWZRUN
 LV DQ ,((( VWDQGDUG IRU ORZSRZHU GLJLWDO UDGLRV WKDW DUH LPSOHPHQWHG LQ
SURGXFWVVXFKDVWKHLQH[SHQVLYH;%HHPRGXOHVIURP'LJL,QWHUQDWLRQDO=LJ%HHLVDQ
DOOLDQFHRIFRPSDQLHVDQGDOVRWKHQDPHRIDVWDQGDUGPDLQWDLQHGE\WKDWDOOLDQFH
=LJ%HHLVEDVHGRQ,(((DQGLVDVXSHUVHWRILW=LJ%HHLVLPSOHPHQWHGLQPDQ\
SURGXFWVLQFOXGLQJFHUWDLQ;%HHPRGXOHVIURP'LJL

2QO\;%HHPRGXOHVWKDWDUHOLVWHGDV=LJ%HHFRPSDWLEOHVXFKDVWKH
;%HH=%PRGXOHVDUHJXDUDQWHHGWREH=LJ%HHFRPSOLDQW7KDWEHLQJ
VDLG\RXFDQXVHDVXEVHWRIWKHIHDWXUHV ,((( RI=LJ%HHHYHQ
ZLWKWKHROGHU;%HH6HULHVPRGXOHV,QIDFWDOOWKHUHFLSHVKHUHZLOO
ZRUNZLWKWKH6HULHVPRGXOHV

Troubleshooting XBee
,I\RXKDYHWURXEOHJHWWLQJ\RXU;%HHVWRWDONPDNHVXUHWKH\ERWKKDYHWKHVDPHW\SH
RIILUPZDUH HJ;%=%XQGHUWKH0RGHP;%((VHWWLQJVKRZQLQ)LJXUH 
DQGWKDWWKH\DUHERWKUXQQLQJWKHPRVWFXUUHQWYHUVLRQRIWKHILUPZDUH WKH9HUVLRQ
VHWWLQJVKRZQLQ)LJXUH )RUDFRPSUHKHQVLYHVHWRI;%HHWURXEOHVKRRWLQJWLSV
VHH5REHUW)DOXGLV&RPPRQ;%HH0LVWDNHVDWKWWSZZZIDOXGLFRPSURMHFWVFRP
PRQ[EHHPLVWDNHV)RUH[WHQVLYHGHWDLOVRQZRUNLQJZLWK;%HHVVHHKLVERRN%XLOGLQJ
:LUHOHVV6HQVRU1HWZRUNVSXEOLVKHGE\25HLOO\

Solution
2EWDLQWZRRUPRUH;%HHPRGXOHVFRQILJXUHWKHPWRFRPPXQLFDWHZLWKRQHDQRWKHU
DQGKRRNWKHPXSWRDWOHDVWRQH$UGXLQR<RXFDQFRQQHFWWKHRWKHU;%HHPRGXOHV
WRDQRWKHU$UGXLQRDFRPSXWHURUDQDQDORJVHQVRU VHH5HFLSH 

14.2 Connecting Arduino to a ZigBee or 802.15.4 Network | 431


,I\RXFRQQHFWWKH$UGXLQRWRWKH;%HHDQGUXQWKLVVLPSOHVNHWFKWKH$UGXLQRZLOO
UHSO\WRDQ\PHVVDJHLWUHFHLYHVE\VLPSO\HFKRLQJZKDWWKHRWKHU;%HHVHQGVLW
/*
XBeeEcho
Reply with whatever you receive over the serial port
*/

void setup()
{
Serial.begin(9600);
}

void loop()
{
while (Serial.available() ) {
Serial.write(Serial.read()); // reply with whatever you receive
}
}

)LJXUHVKRZVWKHFRQQHFWLRQEHWZHHQDQ$GDIUXLW;%HH$GDSWHUDQG$UGXLQR
1RWLFHWKDWWKH$UGXLQRV5;LVFRQQHFWHGWRWKH;%HHV7;DQGYLFHYHUVD

)LJXUH&RQQHFWLQJDQ$UGXLQRWRDQ;%HHXVLQJWKH$GDIUXLW;%HH$GDSWHU

,I\RXDUHXVLQJDGLIIHUHQWDGDSWHUWKDWGRHVQRWKDYHDQRQERDUGYROW
DJHUHJXODWRULWZLOOEHVHQGLQJYROWDJHGLUHFWO\LQWRWKH;%HH,IWKLVLV
WKHFDVH\RXPXVWFRQQHFWWKH9SLQIURPWKH$UGXLQRWRWKHDGDSW
HUVSRZHUVXSSO\RU\RXULVNEXUQLQJRXW\RXU;%HH

432 | Chapter 14: Wireless Communication


:LWKWKH;%HHVFRQILJXUHGDQGFRQQHFWHGWRDFRPSXWHUDQGRU$UGXLQR\RXFDQVHQG
PHVVDJHVEDFNDQGIRUWK

<RXPXVWGLVFRQQHFWWKH$UGXLQRIURPWKH;%HHEHIRUH\RXDWWHPSWWR
SURJUDPWKH$UGXLQR7KLVLVEHFDXVH$UGXLQRXVHVSLQVDQGIRU
SURJUDPPLQJDQGWKHVLJQDOVZLOOJHWFURVVHGLIDQ\WKLQJHOVHVXFKDV
DQ;%HHLVFRQQHFWHGWRWKRVHSLQV

Discussion
7RFRQILJXUH\RXU;%HHVSOXJWKHPLQWRDQ;%HHDGDSWHUVXFKDVWKH$GDIUXLW;%HH
$GDSWHUNLW 0DNHU6KHGSDUWQXPEHU0.$'$GDIUXLW DQGXVHD86%WR
77/VHULDODGDSWHUVXFKDVWKH77/5 0DNHU6KHG77/5$GDIUXLW WR
FRQQHFWWKHDGDSWHUWRDFRPSXWHU

<RXVKRXOGSXUFKDVHDWOHDVWWZRDGDSWHUV DQGLIQHHGHGWZRFDEOHV 
ZKLFKZLOODOORZ\RXWRKDYHWZR;%HHVFRQQHFWHGWR\RXUFRPSXWHUDW
WKHVDPHWLPH7KHVHVDPHDGDSWHUVFDQEHXVHGWRFRQQHFWDQ;%HHWR
DQ$UGXLQR

<RXFRXOGDOVRXVHDQDOOLQRQH;%HH86%DGDSWHUVXFKDVWKH3DUDOOD[;%HH86%
$GDSWHU $GDIUXLW3DUDOOD[ RUWKH6SDUN)XQ;%HH([SORUHU86% 
6SDUN)XQ:5/ 
)LJXUHVKRZVWKH$GDIUXLW;%HH$GDSWHUDQGWKH6SDUN)XQ;%HH([SORUHU86%
ZLWK6HULHV;%HHPRGXOHVFRQQHFWHG

Series 2 configuration
)RUWKHLQLWLDOFRQILJXUDWLRQRI6HULHV;%HHV\RXZLOOQHHGWRSOXJ\RXU;%HHVLQWRD
:LQGRZVFRPSXWHU WKHFRQILJXUDWLRQXWLOLW\LVQRWDYDLODEOHIRU0DFRU/LQX[ 3OXJ
RQO\RQHLQWRD86%SRUWIRUQRZ7KH77/5DQG3DUDOOD[;%HH86%$GDSWHUERWK
XVHWKHVDPH86%WRVHULDOGULYHUDVWKH$UGXLQRLWVHOIVR\RXVKRXOGQRWQHHGWRLQVWDOO
DQDGGLWLRQDOGULYHU
 2SHQ'HYLFH0DQDJHU SUHVV:LQGRZV5W\SHdevmgmt.mscDQGSUHVV(QWHU H[
SDQGWKH3RUWV &20 /37 VHFWLRQDQGWDNHQRWHRIWKHQXPEHURIWKH86%
6HULDO3RUWWKH;%HH\RXMXVWSOXJJHGLQLVFRQQHFWHGWR([LW'HYLFH0DQDJHU
 5XQ WKH ;&78 DSSOLFDWLRQ KWWSZZZGLJLFRPVXSSRUWSURGXFWGHWOMVS"SLG
 WKHQVHOHFW\RXUVHULDOSRUWDQGSUHVV7HVW4XHU\WRHQVXUHWKDW;&78
UHFRJQL]HV\RXU;%HH ,IQRWVHHWKHVXSSRUWGRFXPHQWDWKWWSZZZGLJLFRP
VXSSRUWNEDVHNEDVHUHVXOWGHWOMVS"LG 
 6ZLWFKWRWKH0RGHP&RQILJXUDWLRQWDEDQGFOLFN5HDG;&78ZLOOGHWHUPLQH
ZKLFKPRGHORI;%HH\RXDUHXVLQJDVZHOODVWKHFXUUHQWFRQILJXUDWLRQ

14.2 Connecting Arduino to a ZigBee or 802.15.4 Network | 433


)LJXUH7ZR;%HHVRQHFRQQHFWHGWRDQ$GDIUXLWDGDSWHUDQGWKHRWKHUFRQQHFWHGWRD6SDUN)XQ
DGDSWHU
 8QGHU)XQFWLRQ6HWFKRRVH=,*%((&225',1$725$7 QRW$3, 
 &OLFN6KRZ'HIDXOWV
 &KDQJHWKH3$1,'VHWWLQJIURPWR RUDQ\KH[DGHFLPDOQXPEHU\RXZDQW
DVORQJDV\RXXVHWKHVDPH3$1,'IRUDOOGHYLFHVRQWKHVDPHQHWZRUN DVVKRZQ
LQ)LJXUH
 &OLFN:ULWH
 &OLFNWKH7HUPLQDOWDE

1H[WOHDYH;&78UXQQLQJDQGOHDYHWKDW;%HHSOXJJHGLQ3OXJ\RXUVHFRQG;%HH
LQWRDGLIIHUHQWVHULDOSRUW5HSHDWWKHSUHFHGLQJVWHSV LQVWHS\RXZLOOEHVWDUWLQJ
XSDVHFRQGFRS\RI;&78 EXWLQVWHDGRIFKRRVLQJ=,*%((&225',1$725$7
LQVWHSFKRRVH=,*%((5287(5$72QWKLV;%HH\RXVKRXOGDOVRVHW&KDQQHO
9HULILFDWLRQ -9 WRWRPDNHVXUHLWZLOOFRQILUPWKDWLWVRQWKHULJKWFKDQQHOZKLFK
PDNHVLWVFRQQHFWLRQWRWKHFRRUGLQDWRUPRUHUHOLDEOH

,I\RXKDYHWZRFRPSXWHUVUXQQLQJ:LQGRZV\RXFDQFRQQHFWHDFK
;%HHLQWRDVHSDUDWHFRPSXWHU

:LWKERWK;%HHVFRQQHFWHGDQGWZRFRSLHVRI;&78VKRZLQJWKHLU7HUPLQDOWDEW\SH
LQWRHLWKHU7HUPLQDOZLQGRZ<RXOOVHHZKDWHYHU\RXW\SHLQWRRQH;%HHDSSHDURQ

434 | Chapter 14: Wireless Communication


)LJXUH&RQILJXULQJWKH;%HH
WKH 7HUPLQDO RI WKH RWKHU RQH <RXYH VHW XS \RXU ILUVW VLPSOH ;%HH 3HUVRQDO $UHD
1HWZRUN 3$1 

Series 1 configuration
)RU6HULHV;%HHV\RXFDQXVHD0DFRUD3&UXQQLQJ/LQX[RU:LQGRZV+RZHYHU
LI\RXZLVKWRXSGDWHWKHILUPZDUHRQWKH;%HHV\RXZLOOQHHGWRXVHWKH;&78XWLOLW\
GHVFULEHGLQ6HULHVFRQILJXUDWLRQRQSDJH
8VLQJDVHULDOWHUPLQDOSURJUDPVXFKDV&RRO7HUPRU3X77<FRQQHFWWRWKH;%HHV
86%VHULDOSRUWDWELWVSHUVHFRQG

14.2 Connecting Arduino to a ZigBee or 802.15.4 Network | 435


<RXFDQGRZQORDG&RRO7HUPIRU:LQGRZVDQG0DFDWKWWSIUHHZDUH
WKHPHLHUVRUJ3X77<LVDYDLODEOHIRU:LQGRZVDQG/LQX[DWKWWS
ZZZFKLDUNJUHHQHQGRUJXNaVJWDWKDPSXWW\GRZQORDGKWPO<RXPD\
DOVREHDEOHWRLQVWDOO3X77<XQGHU/LQX[XVLQJ\RXU/LQX[V\VWHPV
SDFNDJHPDQDJHU)RUH[DPSOHRQ8EXQWX3X77<LVDYDLODEOHLQWKH
8QLYHUVHUHSRVLWRU\ZLWKapt-get install putty

7R GHWHUPLQH WKH VHULDO SRUW DVVLJQHG WR \RXU ;%HH XQGHU :LQGRZV VHH VWHS  LQ
6HULHVFRQILJXUDWLRQRQSDJH7RGHWHUPLQHWKHVHULDOSRUWXQGHU0DF26;
RSHQWKH0DF26;7HUPLQDOZLQGRZ ORFDWHGLQ$SSOLFDWLRQV8WLOLWLHV DQGW\SHWKLV
FRPPDQGls/dev/tty.usbserial-*2Q/LQX[RSHQDQ[WHUPRUVLPLODUFRQVROHWHU
PLQDODQGW\SHls/dev/ttyUSB*
,I\RXVHHPRUHWKDQRQHUHVXOWKHUHXQSOXJDOO86%VHULDOGHYLFHVH[FHSWWKH;%HH\RX
ZLVKWRFRQILJXUHDQGW\SHWKHFRPPDQGDJDLQ<RXVKRXOGRQO\VHHRQHUHVXOW
<RXOOVHHRXWSXWOLNHWKLVRQWKH0DF
/dev/tty.usbserial-A700eYw1

$QGOLNHWKLVRQ/LQX[
/dev/ttyUSB0

7KHUHVXOW\RXVHHLVWKHILOHQDPHWKDWFRUUHVSRQGVWR\RXU;%HHV86%VHULDOSRUW
&RQQHFWWRWKLVSRUWLQ\RXUVHULDOWHUPLQDOSURJUDP7RFRQQHFWWR\RXU;%HHXVLQJ
&RRO7HUP :LQGRZVRU0DF IROORZWKHVHVWHSV
 5XQ&RRO7HUP
 &OLFNWKH2SWLRQVEXWWRQLQWKHWRROEDU
 6HOHFWWKH86%VHULDOSRUW VXFKDVWW\XVEVHULDO$H<ZRQD0DFRU&20RQ
D3& 0DNHVXUHLWLVVHWWRDEDXGUDWHRIGDWDELWVQRSDULW\VWRSELW
WKHVHDUHWKHGHIDXOWV 
 &KHFNWKHER[ODEHOHG/RFDO(FKR
 &OLFN2.
 &OLFNWKH6DYHEXWWRQLQWKHWRROEDUDQGVDYH\RXUVHVVLRQVHWWLQJV

 ,QIXWXUHVHVVLRQV\RXFDQVNLSVWHSVWKURXJKE\FOLFNLQJ2SHQDQGVHOHFWLQJ
WKHVHWWLQJVILOH\RXVDYHG
 &OLFNWKH&RQQHFWEXWWRQLQWKHWRROEDU
7RFRQQHFWWR\RXU;%HHXVLQJ3X77< :LQGRZVRU/LQX[ IROORZWKHVHVWHSV
 5XQ3X77<
 &OLFN6HULDOXQGHU&RQQHFWLRQ7\SH
 7\SHWKHQDPHRI\RXUVHULDOSRUWLQWKH6HULDO/LQHILHOG VXFKDVGHYWW\86%RQ
/LQX[RU&20RQ:LQGRZV 0DNHVXUH6SHHGLVVHWWR WKHGHIDXOW 

436 | Chapter 14: Wireless Communication


 2QWKHOHIWVLGHRIWKHZLQGRZXQGHU&DWHJRU\FOLFN7HUPLQDO
 8QGHU/RFDO(FKRFKRRVH)RUFH2Q
 8QGHU6HWYDULRXVWHUPLQDORSWLRQVFKRRVH,PSOLFLW/)LQ(YHU\&5
 2QWKHOHIWVLGHRIWKHZLQGRZXQGHU&DWHJRU\FOLFN6HVVLRQ
 7\SHDQDPHIRUWKHVHVVLRQVXFKDV;%HHWKHQFOLFN6DYH
 ,QIXWXUHVHVVLRQV\RXFDQVNLSVWHSVWKURXJKE\GRXEOHFOLFNLQJWKHVDYHG
VHVVLRQQDPH7KLVZLOORSHQWKHVHULDOFRQQHFWLRQ
1RZWKDW\RXUHFRQQHFWHGFRQILJXUHWKHILUVW;%HHZLWKWKHIROORZLQJ$7FRPPDQGV
<RXZLOOQHHGWRW\SH+++DQGZDLWDVHFRQGWRJHWWKH;%HHVDWWHQWLRQ LWZLOOUHVSRQG
ZLWK2. 
ATMY1234
ATDL5678
ATDH0
ATID0
ATWR

.HHS\RXUVHULDOWHUPLQDOXSDQGUXQQLQJVRWKDW\RXFDQFRQWLQXHWRW\SHFRPPDQGV
LQWRLW1H[WSOXJLQWKHVHFRQG;%HHDQGIROORZWKHHDUOLHULQVWUXFWLRQVWRFRQQHFWWR
LWZLWK3X77<RU&RRO7HUP WRRSHQDQHZ3X77<ZLQGRZ\RXFDQVLPSO\ODXQFK
WKHSURJUDPDJDLQ\RXFDQVWDUWDQHZ&RRO7HUPZLQGRZZLWK)LOH 1HZ 7KHQ
FRQILJXUHWKHVHFRQG;%HHZLWKWKHVHFRPPDQGV
ATMY5678
ATDL1234
ATDH0
ATID0
ATWR

1RZ\RXFDQW\SHFRPPDQGVLQWRWKH6HULDO7HUPLQDOZLQGRZIRURQH;%HHDQGWKH\
ZLOODSSHDULQWKH6HULDO7HUPLQDOZLQGRZIRUWKHRWKHU;%HH DQGYLFHYHUVD 
7KHATMYFRPPDQGVHWVWKHLGHQWLILHUIRUDQ;%HHATDLDQGATDHVHWWKHORZE\WHDQG
WKHKLJKE\WHRIWKHGHVWLQDWLRQ;%HHATIDVHWVWKHQHWZRUN,' LWQHHGVWREHWKHVDPH
IRU;%HHVWRWDONWRRQHDQRWKHU DQG ATWRVDYHVWKHVHWWLQJVLQWRWKH;%HHVRWKDWLW
UHPHPEHUVWKHVHWWLQJVHYHQLI\RXSRZHULWGRZQDQGEDFNXS

Talking to the Arduino


1RZWKDW\RXYHJRW\RXU;%HHPRGXOHVFRQILJXUHGFORVHWKHVHULDOWHUPLQDOWKDWZDV
FRQQHFWHGWRLWDQGGLVFRQQHFWWKH;%HHIURP\RXUFRPSXWHU1H[WSURJUDP\RXU
$UGXLQRZLWKWKHFRGHVKRZQLQWKLVUHFLSHV6ROXWLRQDQGFRQQHFWWKH;%HHWR\RXU
$UGXLQRDVVKRZQLQ)LJXUH:KHQ\RXW\SHFKDUDFWHUVLQWRWKHVHULDOWHUPLQDO
SURJUDPFRQQHFWHGWR\RXURWKHU;%HH\RXOOVHHWKHFKDUDFWHUVHFKRHGEDFN LI\RX
W\SHa\RXOOVHHaa 

14.2 Connecting Arduino to a ZigBee or 802.15.4 Network | 437


See Also
5HFLSH5HFLSH5HFLSH

14.3 Sending a Message to a Particular XBee


Problem
<RXZDQWWRFRQILJXUHZKLFKQRGH\RXUPHVVDJHJRHVWRIURP\RXU$UGXLQRVNHWFK

Solution
6HQGWKH$7FRPPDQGVGLUHFWO\IURP\RXU$UGXLQRVNHWFK
/*
XBeeMessage
Send a message to an XBee using its address
*/

boolean configured = false;

boolean configureRadio() {

// put the radio in command mode:


Serial.print("+++");

String ok_response = "OK\r"; // the response we expect.

// Read the text of the response into the response variable


String response = String("");
while (response.length() < ok_response.length()) {
if (Serial.available() > 0) {
response += (char) Serial.read();
}
}

// If we got the right response, configure the radio and return true.
if (response.equals(ok_response)) {
Serial.print("ATDH0013A200\r"); // destination high-REPLACE THIS
Serial.print("ATDL403B9E1E\r"); // destination low-REPLACE THIS
Serial.print("ATCN\r"); // back to data mode
return true;
} else {
return false; // This indicates the response was incorrect.
}
}

void setup () {
Serial.begin(9600); // Begin serial
configured = configureRadio();
}

void loop () {

438 | Chapter 14: Wireless Communication


if (configured) {
Serial.print("Hello!");
delay(3000);
}
else {
delay(30000); // Wait 30 seconds
configureRadio(); // try again
}
}

Discussion
$OWKRXJKWKHFRQILJXUDWLRQVLQ5HFLSHZRUNIRUWZR;%HHVWKH\DUHQRWDVIOH[LEOH
ZKHQXVHGZLWKPRUHWKDQWZR
)RUH[DPSOHFRQVLGHUDWKUHHQRGHQHWZRUNRI6HULHV;%HHVZLWKRQH;%HHFRQILJ
XUHGZLWKWKH&225',1$725$7ILUPZDUHDQGWKHRWKHUWZRZLWKWKH5287(5
$7ILUPZDUH0HVVDJHV\RXVHQGIURPWKHFRRUGLQDWRUZLOOEHEURDGFDVWWRWKHWZR
URXWHUV0HVVDJHV\RXVHQGIURPHDFKURXWHUDUHVHQWWRWKHFRRUGLQDWRU
7KH6HULHVFRQILJXUDWLRQLQWKDWUHFLSHLVDELWPRUHIOH[LEOHLQWKDWLWVSHFLILHVH[SOLFLW
GHVWLQDWLRQV%XWE\FRQILJXULQJWKHGHYLFHVZLWK$7FRPPDQGVDQGWKHQZULWLQJWKH
FRQILJXUDWLRQ\RXHIIHFWLYHO\KDUGFRGHWKHGHVWLQDWLRQDGGUHVVHVLQWKHILUPZDUH
7KLVVROXWLRQLQVWHDGOHWVWKH$UGXLQRFRGHVHQGWKH$7FRPPDQGVWRFRQILJXUHWKH
;%HHVRQWKHIO\7KHKHDUWRIWKHVROXWLRQLVWKH configureRadio()IXQFWLRQ,WVHQGV
WKH +++HVFDSHVHTXHQFHWRSXWWKH;%HHLQFRPPDQGPRGHMXVWDVWKH6HULHVFRQ
ILJXUDWLRQGLGDWWKHHQGRI5HFLSH$IWHUVHQGLQJWKLVHVFDSHVHTXHQFHWKH$UGXLQR
VNHWFKZDLWVIRUWKH2.UHVSRQVHEHIRUHVHQGLQJWKHVH$7FRPPDQGV
ATDH0013A200
ATDL403B9E1E
ATCN

,Q\RXUFRGH\RXPXVWUHSODFH0013A200DQG403B9E1EZLWKWKHKLJKDQG
ORZDGGUHVVHVRIWKHGHVWLQDWLRQUDGLR

7KHILUVWWZRFRPPDQGVDUHVLPLODUWRZKDWLVVKRZQLQWKH6HULHVFRQILJXUDWLRQDW
WKHHQGRI5HFLSHEXWWKHQXPEHUVDUHORQJHU7KDWVEHFDXVHWKHH[DPSOHVKRZQ
LQWKDWUHFLSHV6ROXWLRQXVHV6HULHVVW\OHDGGUHVVHV$V\RXVDZLQ5HFLSH\RX
FDQVSHFLI\WKHDGGUHVVRID6HULHV;%HHZLWKWKH ATMYFRPPDQGEXWLQD6HULHV
;%HHHDFKPRGXOHKDVDXQLTXHDGGUHVVWKDWLVHPEHGGHGLQHDFKFKLS<RXFDQORRN
XSWKHKLJK ATDH DQGORZ ATDL SRUWLRQVRIWKHVHULDOQXPEHUXVLQJ;&78DVVKRZQ
LQ)LJXUH7KHQXPEHUVDUHDOVRSULQWHGRQWKHODEHOXQGHUQHDWKWKH;%HH
7KH ATCNFRPPDQGH[LWVFRPPDQGPRGHWKLQNRILWDVWKHUHYHUVHRIZKDWWKH +++
VHTXHQFHDFFRPSOLVKHV

14.3 Sending a Message to a Particular XBee | 439


)LJXUH/RRNLQJXSWKHKLJKDQGORZVHULDOQXPEHUVLQ;&78

See Also
5HFLSH

14.4 Sending Sensor Data Between XBees


Problem
<RXZDQWWRVHQGWKHVWDWXVRIGLJLWDODQGDQDORJSLQVRUFRQWUROSLQVEDVHGRQFRP
PDQGVUHFHLYHGIURP;%HH

440 | Chapter 14: Wireless Communication


Solution
+RRNRQHRIWKH;%HHV WKHWUDQVPLWWLQJ;%HH XSWRDQDQDORJVHQVRUDQGFRQILJXUH
LWWRUHDGWKHVHQVRUDQGWUDQVPLWWKHYDOXHSHULRGLFDOO\&RQQHFWWKH$UGXLQRWRDQ
;%HH WKHUHFHLYLQJ;%HH FRQILJXUHGLQ$3,PRGHDQGUHDGWKHYDOXHRIWKH$3,IUDPHV
WKDWLWUHFHLYHVIURPWKHRWKHU;%HH

Discussion
;%HHVKDYHDEXLOWLQDQDORJWRGLJLWDOFRQYHUWHU $'& WKDWFDQEHSROOHGRQDUHJXODU
EDVLV7KH;%HHFDQEHFRQILJXUHGWRWUDQVPLWWKHYDOXHV EHWZHHQDQG WRRWKHU
;%HHVLQWKHQHWZRUN7KHFRQILJXUDWLRQDQGFRGHGLIIHUTXLWHDELWEHWZHHQ6HULHV
DQG6HULHV;%HHV

Series 2 XBees
8VLQJ;&78 VHH6HULHVFRQILJXUDWLRQRQSDJHLQ5HFLSH FRQILJXUHWKH
WUDQVPLWWLQJ;%HHZLWKWKH=,*%((5287(5$7 QRW$3, IXQFWLRQVHWDQGWKHIRO
ORZLQJVHWWLQJV
3$1,' 1234 RUDQXPEHU\RXSLFNDVORQJDV\RXXVHWKHVDPHRQHIRUERWK
;%HHV
&KDQQHO9HULILFDWLRQ -9  1 WKLVPDNHVVXUHWKHURXWHUZLOOFRQILUPWKDWLWVRQ
WKHULJKWFKDQQHOZKHQWDONLQJWRWKHFRRUGLQDWRU
'HVWLQDWLRQ$GGUHVV+LJK '+ WKHKLJKDGGUHVV 6+ RIWKHRWKHU;%HHXVXDOO\
$
'HVWLQDWLRQ$GGUHVV/RZ '/ WKHORZDGGUHVV 6/ RIWKHRWKHU;%HH
8QGHU,26HWWLQJV$'',2&RQILJXUDWLRQ ' 2
8QGHU,26HWWLQJV 6DPSOLQJ5DWH ,5 64 PLOOLVHFRQGVLQKH[

<RXFDQORRNXSWKHKLJK ATDH DQGORZ ATDL SRUWLRQVRIWKHVHULDO


QXPEHUXVLQJ;&78DVVKRZQHDUOLHULQ)LJXUH7KHQXPEHUVDUH
DOVRSULQWHGRQWKHODEHOXQGHUQHDWKWKH;%HH

&RQILJXUHWKHUHFHLYLQJ;%HHZLWKWKH=,*%((&225',1$725$3, QRW$7 IXQF


WLRQVHWZLWKWKHIROORZLQJVHWWLQJV
3$1,' 1234 RUDQXPEHU\RXSLFNDVORQJDV\RXXVHWKHVDPHRQHIRUERWK
;%HHV
'HVWLQDWLRQ$GGUHVV+LJK '+ WKHKLJKDGGUHVV 6+ RIWKHRWKHU;%HHXVXDOO\
$
'HVWLQDWLRQ$GGUHVV/RZ '/ WKHORZDGGUHVV 6/ RIWKHRWKHU;%HH
:LUHXSWKHWUDQVPLWWLQJ;%HHWRWKHVHQVRUDVVKRZQLQ)LJXUH7KHYDOXHRI5
VKRXOGEHGRXEOHZKDWHYHU\RXUSRWHQWLRPHWHULV LI\RXDUHXVLQJD.SRWXVHD.

14.4 Sending Sensor Data Between XBees | 441


UHVLVWRU 7KLVLVEHFDXVHWKH6HULHV;%HHVDQDORJWRGLJLWDOFRQYHUWHUVUHDGDUDQJH
RIWRYROWVDQG5UHGXFHVWKH9WRVWD\EHORZYROWV

)LJXUH&RQQHFWLQJD6HULHV;%HHWRDQDQDORJVHQVRU

1H[WORDGWKHIROORZLQJVNHWFKRQWRWKH$UGXLQRDQGZLUHWKHWUDQVPLWWLQJ;%HHWR
WKH$UGXLQRDVVKRZQLQ5HFLSH,I\RXQHHGWRUHSURJUDPWKH$UGXLQRUHPHPEHU
WRGLVFRQQHFWLWIURPWKH;%HHILUVW
/*
XBeeAnalogReceive
Read an analog value from an XBee API frame and set the brightness
of an LED accordingly.
*/

#define LEDPIN 9

void setup() {
Serial.begin(9600);
pinMode(LEDPIN, OUTPUT);
}

void loop() {

if (Serial.available() >= 21) { // Wait until we have a mouthful of data

if (Serial.read() == 0x7E) { // Start delimiter of a frame

// Skip over the bytes in the API frame we don't care about
for (int i = 0; i < 18; i++) {
Serial.read();

442 | Chapter 14: Wireless Communication


}

// The next two bytes are the high and low bytes of the sensor reading
int analogHigh = Serial.read();
int analogLow = Serial.read();
int analogValue = analogLow + (analogHigh * 256);

// Scale the brightness to the Arduino PWM range


int brightness = map(analogValue, 0, 1023, 0, 255);

// Light the LED


analogWrite(LEDPIN, brightness);
}
}
}

Series 1 XBees
8VLQJ D WHUPLQDO SURJUDP DV GHVFULEHG LQ 6HULHV  FRQILJXUDWLRQ RQ SDJH  LQ
5HFLSHVHQGWKHIROORZLQJFRQILJXUDWLRQFRPPDQGVWRWKHWUDQVPLWWLQJ;%HH
ATRE
ATMY1234
ATDL5678
ATDH0
ATID0
ATD02
ATIR64
ATWR

1H[WVHQGWKHIROORZLQJFRQILJXUDWLRQFRPPDQGVWRWKHUHFHLYLQJ;%HH
ATRE
ATMY5678
ATDL1234
ATDH0
ATID0
ATWR

%RWK;%HHV
ATREUHVHWVWKH;%HHWRIDFWRU\GHIDXOWV7KHATMYFRPPDQGVHWVWKHLGHQWLILHUIRU
DQ;%HHATDLDQGATDHVHWWKHORZE\WHDQGWKHKLJKE\WHRIWKHGHVWLQDWLRQ;%HH
ATIDVHWVWKHQHWZRUN,' LWQHHGVWREHWKHVDPHIRU;%HHVWRWDONWRRQHDQRWKHU 
ATWRVDYHVWKHVHWWLQJVLQWRWKH;%HHVRWKDWLWUHPHPEHUVWKHVHWWLQJVHYHQLI\RX
SRZHULWGRZQDQGEDFNXS
7UDQVPLWWLQJ;%HH
ATD02FRQILJXUHVSLQ DQDORJRUGLJLWDOLQSXW DVDQDQDORJLQSXWATIR64WHOOV
WKH;%HHWRVDPSOHHYHU\ KH[ PLOOLVHFRQGVDQGVHQGWKHYDOXHWRWKH;%HH
VSHFLILHGE\ATDLDQGATDH

14.4 Sending Sensor Data Between XBees | 443


:LUHXSWKHWUDQVPLWWLQJ;%HHWRWKHVHQVRUDVVKRZQLQ)LJXUH

)LJXUH6HULHV;%HHFRQQHFWHGWRDQDQDORJVHQVRU

1H[WORDGWKHIROORZLQJVNHWFKRQWRWKH$UGXLQRDQGZLUHWKHWUDQVPLWWLQJ;%HHWR
WKH$UGXLQRDVVKRZQLQ5HFLSH,I\RXQHHGWRUHSURJUDPWKH$UGXLQRGLVFRQQHFW
LWIURPWKH;%HHILUVW
/*
XBeeAnalogReceiveSeries1
Read an analog value from an XBee API frame and set the brightness
of an LED accordingly.
*/

const int ledPin = 9;

void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
configureRadio(); // check the return value if you need error handling
}

boolean configureRadio() {

// put the radio in command mode:


Serial.flush();
Serial.print("+++");

444 | Chapter 14: Wireless Communication


delay(100);

String ok_response = "OK\r"; // the response we expect.

// Read the text of the response into the response variable


String response = String("");
while (response.length() < ok_response.length()) {
if (Serial.available() > 0) {
response += (char) Serial.read();
}
}

// If we got the right response, configure the radio and return true.
if (response.equals(ok_response)) {
Serial.print("ATAP1\r"); // Enter API mode
delay(100);
Serial.print("ATCN\r"); // back to data mode
return true;
} else {
return false; // This indicates the response was incorrect.
}
}

void loop() {

if (Serial.available() >= 14) { // Wait until we have a mouthful of data

if (Serial.read() == 0x7E) { // Start delimiter of a frame

// Skip over the bytes in the API frame we don't care about
for (int i = 0; i < 10; i++) {
Serial.read();
}

// The next two bytes are the high and low bytes of the sensor reading
int analogHigh = Serial.read();
int analogLow = Serial.read();
int analogValue = analogLow + (analogHigh * 256);

// Scale the brightness to the Arduino PWM range


int brightness = map(analogValue, 0, 1023, 0, 255);

// Light the LED


analogWrite(ledPin, brightness);
}
}
}

See Also
5HFLSH

14.4 Sending Sensor Data Between XBees | 445


14.5 Activating an Actuator Connected to an XBee
Problem
<RXZDQWWRWHOODQ;%HHWRDFWLYDWHDSLQZKLFKFRXOGEHXVHGWRWXUQRQDQDFWXDWRU
FRQQHFWHGWRLWVXFKDVDUHOD\RU/('

Solution
&RQILJXUHWKH;%HHFRQQHFWHGWRWKHDFWXDWRUVRWKDWLWZLOODFFHSWLQVWUXFWLRQVIURP
DQRWKHU;%HH&RQQHFWWKHRWKHU;%HHWRDQ$UGXLQRWRVHQGWKHFRPPDQGVQHHGHG
WRDFWLYDWHWKHGLJLWDO,2SLQWKDWWKHDFWXDWRULVFRQQHFWHGWR

Discussion
7KH;%HHGLJLWDODQDORJ,2SLQVFDQEHFRQILJXUHGIRUGLJLWDORXWSXW$GGLWLRQDOO\
;%HHVFDQEHFRQILJXUHGWRDFFHSWLQVWUXFWLRQVIURPRWKHU;%HHVWRWDNHWKRVHSLQV
KLJKRUORZ,Q6HULHV;%HHV\RXOOEHXVLQJWKH5HPRWH$7&RPPDQGIHDWXUH,Q
6HULHV;%HHV\RXFDQXVHWKHGLUHFW,2ZKLFKFUHDWHVDYLUWXDOZLUHEHWZHHQ;%HHV

Series 2 XBees
8VLQJ;&78 VHH6HULHVFRQILJXUDWLRQRQSDJH FRQILJXUHWKHUHFHLYLQJ;%HH
ZLWKWKH=,*%((5287(5$7 QRW$3, IXQFWLRQVHWDQGWKHIROORZLQJVHWWLQJV
3$1,' 1234 RUDQXPEHU\RXSLFNDVORQJDV\RXXVHWKHVDPHRQHIRUERWK
;%HHV
&KDQQHO9HULILFDWLRQ -9  1 WKLVPDNHVVXUHWKHURXWHUZLOOFRQILUPWKDWLWVRQ
WKHULJKWFKDQQHOZKHQWDONLQJWRWKHFRRUGLQDWRU
'HVWLQDWLRQ$GGUHVV+LJK '+ WKHKLJKDGGUHVV 6+ RIWKHRWKHU;%HHXVXDOO\
$
'HVWLQDWLRQ$GGUHVV/RZ '/ WKHORZDGGUHVV 6/ RIWKHRWKHU;%HH
8QGHU,26HWWLQJV$'',2&RQILJXUDWLRQ ' 4 GLJLWDORXWSXWORZ

<RXFDQORRNXSWKHKLJK ATDH DQGORZ ATDL SRUWLRQVRIWKHVHULDO


QXPEHUXVLQJ;&78DVVKRZQHDUOLHULQ)LJXUH7KHQXPEHUVDUH
DOVRSULQWHGRQWKHODEHOXQGHUQHDWKWKH;%HH

&RQILJXUH WKH WUDQVPLWWLQJ ;%HH ZLWK WKH =,*%(( &225',1$725 $3, QRW $7
IXQFWLRQVHWZLWKWKHIROORZLQJVHWWLQJV
3$1,' 1234 RUDQXPEHU\RXSLFNDVORQJDV\RXXVHWKHVDPHRQHIRUERWK
;%HHV
'HVWLQDWLRQ$GGUHVV+LJK '+ WKHKLJKDGGUHVV 6+ RIWKHRWKHU;%HHXVXDOO\
$

446 | Chapter 14: Wireless Communication


'HVWLQDWLRQ$GGUHVV/RZ '/ WKHORZDGGUHVV 6/ RIWKHRWKHU;%HH
:LUHXSWKHUHFHLYLQJ;%HHWRDQ/('DVVKRZQLQ)LJXUH

)LJXUH&RQQHFWLQJDQ/('WRDQ;%HHVGLJLWDO,2SLQ

1H[WORDGWKHIROORZLQJVNHWFKRQWRWKH$UGXLQRDQGZLUHWKHWUDQVPLWWLQJ;%HHWR
WKH$UGXLQRDVVKRZQLQ5HFLSH,I\RXQHHGWRUHSURJUDPWKH$UGXLQRUHPHPEHU
WRGLVFRQQHFWLWIURPWKH;%HHILUVW7KLVVNHWFKVHQGVD5HPRWH$7FRPPDQG ATD14
RUATD15 WKDWVHWVWKHVWDWHRISLQ ATD1 DOWHUQDWLQJO\RQ GLJLWDORXWKLJK DQGRII
GLJLWDORXWORZ 
/*
XBeeActuate
Send a Remote AT command to activate a digital pin on another XBee.
*/

const byte frameStartByte = 0x7E;


const byte frameTypeRemoteAT = 0x17;
const byte remoteATOptionApplyChanges = 0x02;

void setup() {
Serial.begin(9600);
}

void loop()
{

toggleRemotePin(1);
delay(3000);
toggleRemotePin(0);
delay(2000);
}

14.5 Activating an Actuator Connected to an XBee | 447


byte sendByte(byte value) {
Serial.print(value, BYTE);
return value;
}

void toggleRemotePin(int value) { // 0 = off, nonzero = on

byte pin_state;
if (value) {
pin_state = 0x5;
} else {
pin_state = 0x4;
}

sendByte(frameStartByte); // Begin the API frame

// High and low parts of the frame length (not counting checksum)
sendByte(0x0);
sendByte(0x10);

long sum = 0; // Accumulate the checksum

sum += sendByte(frameTypeRemoteAT); // Indicate this frame contains a


Remote AT command

sum += sendByte(0x0); // frame ID set to zero for no reply

// The following 8 bytes indicate the ID of the recipient.


// Use 0xFFFF to broadcast to all nodes.
sum += sendByte(0x0);
sum += sendByte(0x0);
sum += sendByte(0x0);
sum += sendByte(0x0);
sum += sendByte(0x0);
sum += sendByte(0x0);
sum += sendByte(0xFF);
sum += sendByte(0xFF);

// The following 2 bytes indicate the 16-bit address of the recipient.


// Use 0xFFFE to broadcast to all nodes.
sum += sendByte(0xFF);
sum += sendByte(0xFF);

sum += sendByte(remoteATOptionApplyChanges); // send Remote AT options

// The text of the AT command


sum += sendByte('D');
sum += sendByte('1');

// The value (0x4 for off, 0x5 for on)


sum += sendByte(pin_state);

// Send the checksum


sendByte( 0xFF - ( sum & 0xFF));

448 | Chapter 14: Wireless Communication


delay(10); // Pause to let the microcontroller settle down if needed
}

Series 1 XBees
8VLQJDWHUPLQDOSURJUDPDVGHVFULEHGLQ6HULHVFRQILJXUDWLRQRQSDJHVHQG
WKHIROORZLQJFRQILJXUDWLRQFRPPDQGVWRWKHWUDQVPLWWLQJ;%HH WKHRQH\RXOOFRQQHFW
WRWKH$UGXLQR 
ATRE
ATMY1234
ATDL5678
ATDH0
ATID0
ATD13
ATICFF
ATWR

1H[WVHQGWKHIROORZLQJFRQILJXUDWLRQFRPPDQGVWRWKHUHFHLYLQJ;%HH
ATRE
ATMY5678
ATDL1234
ATDH0
ATID0
ATD14
ATIU0
ATIA1234
ATWR

%RWK;%HHV
ATREUHVHWVWKH;%HHWRIDFWRU\GHIDXOWV7KHATMYFRPPDQGVHWVWKHLGHQWLILHUIRU
DQ;%HHATDLDQGATDHVHWWKHORZE\WHDQGWKHKLJKE\WHRIWKHGHVWLQDWLRQ;%HH
ATIDVHWVWKHQHWZRUN,' LWQHHGVWREHWKHVDPHIRU;%HHVWRWDONWRRQHDQRWKHU 
ATWRVDYHVWKHVHWWLQJVLQWRWKH;%HHVRWKDWLWUHPHPEHUVWKHVHWWLQJVHYHQLI\RX
SRZHULWGRZQDQGEDFNXS
7UDQVPLWWLQJ;%HH
ATICFFWHOOVWKH;%HHWRFKHFNHYHU\GLJLWDOLQSXWSLQDQGVHQGWKHLUYDOXHVWRWKH
;%HHVSHFLILHGE\ ATDLDQG ATDH ATD13FRQILJXUHVSLQ DQDORJRUGLJLWDOLQSXW
 WREHLQGLJLWDOLQSXWPRGH7KHVWDWHRIWKLVSLQZLOOEHUHOD\HGIURPWKHWUDQV
PLWWLQJ;%HHWRWKHUHFHLYLQJ;%HH
5HFHLYLQJ;%HH
ATIU1WHOOVWKH;%HHWRQRWVHQGWKHIUDPHVLWUHFHLYHVWRWKHVHULDOSRUW ATIA1234
WHOOV LW WR DFFHSW FRPPDQGV IURP WKH RWKHU ;%HH ZKRVH 0< DGGUHVV LV  
ATD14FRQILJXUHVSLQ DQDORJRUGLJLWDOLQSXW WREHLQORZGLJLWDORXWSXWPRGH
RIIE\GHIDXOW 
:LUHXSWKHWUDQVPLWWLQJ;%HHWRWKH$UGXLQRDVVKRZQLQ)LJXUH
1H[WZLUHWKHUHFHLYLQJ;%HHWRDQ$UGXLQRDVVKRZQLQ5HFLSH1RWHWKDWLQVWHDG
RIVHQGLQJ$7FRPPDQGVRYHUWKHVHULDOSRUWZHUHXVLQJDQHOHFWULFDOFRQQHFWLRQWR

14.5 Activating an Actuator Connected to an XBee | 449


WDNHWKH;%HHVSLQKLJK7KHWZR.UHVLVWRUVIRUPDYROWDJHGLYLGHUWKDWGURSVWKH
$UGXLQRV9ORJLFWRDERXWYROWV KLJKHQRXJKIRUWKH;%HHWRUHFRJQL]HEXWORZ
HQRXJKWRDYRLGGDPDJLQJWKH;%HHV9ORJLFSLQV 

)LJXUH&RQQHFWLQJWKH$UGXLQRWR;%HHVGLJLWDO,2SLQ

1H[WORDGWKHIROORZLQJVNHWFKRQWRWKH$UGXLQR7KLVVNHWFKWDNHVWKH;%HHVGLJLWDO
,2SLQDOWHUQDWLQJO\RQ GLJLWDORXWKLJK DQGRII GLJLWDORXWORZ %HFDXVHWKH
WUDQVPLWWLQJ;%HHLVFRQILJXUHGWRUHOD\LWVSLQVWDWHVWRWKHUHFHLYLQJ;%HHZKHQLWV
SLQFKDQJHVVWDWHWKHUHFHLYLQJ;%HHVSLQFKDQJHVDVZHOO
/*
XBeeActuateSeries1
Activate a digital pin on another XBee.
*/

const int ledPin = 9;


const int xbeePin = 2;

void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
pinMode(xbeePin, OUTPUT);
}

void loop()
{

digitalWrite(xbeePin, HIGH);
delay(3000);
digitalWrite(xbeePin, LOW);
delay(3000);
}

See Also
5HFLSH

450 | Chapter 14: Wireless Communication

Potrebbero piacerti anche