Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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;%HH6HULHVDQG;%HH=%6HULHV6HULHVLVHDVLHUWRXVH
WKDQ6HULHVEXWLWGRHVQRWVXSSRUWPHVKQHWZRUNV6HHKWWSZZZGLJLFRPVXSSRUW
NEDVHNEDVHUHVXOWGHWOMVS"LG
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
#include <VirtualWire.h>
void setup()
{
// Initialize the IO and ISR
vw_setup(2000); // Bits per sec
}
void loop()
{
send("hello");
delay(1000);
}
7KHUHFHLYHVNHWFKDOVRXVHVWKH9LUWXDO:LUHOLEUDU\
/*
SimpleReceive
This sketch displays text strings received using VirtualWire
Connect the Receiver data pin to Arduino pin 11
*/
#include <VirtualWire.h>
void setup()
{
Serial.begin(9600);
Serial.println("Ready");
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\WHVLQDQLQWHJHUWKHVL[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>
void setup()
{
// Initialize the IO and ISR
vw_setup(2000); // Bits per sec
}
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>
void setup()
{
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\WHVORQJWKHFRQ
VWDQWVW_MAX_MESSAGE_LENLVGHILQHGLQWKHOLEUDU\KHDGHUILOH
:LUHOHVVUDQJHFDQEHXSWRPHWHUVRUVRGHSHQGLQJRQVXSSO\YROWDJHDQGDQWHQQD
DQGLVUHGXFHGLIWKHUHDUHREVWDFOHVEHWZHHQWKHWUDQVPLWWHUDQGWKHUHFHLYHU
$OVRQRWHWKDWWKHPHVVDJHVDUHQRWJXDUDQWHHGWREHGHOLYHUHGDQGLI\RXJHWRXWRI
UDQJHRUWKHUHLVH[FHVVLYHUDGLRLQWHUIHUHQFHVRPHPHVVDJHVFRXOGJHWORVW,I\RXQHHG
DJXDUDQWHHGZLUHOHVVGHOLYHU\PHFKDQLVPWKH=LJ%HH$3,XVHGLQUHFLSHVDWWKHHQGRI
WKLVFKDSWHULVDEHWWHUFKRLFHEXWWKHVHLQH[SHQVLYHPRGXOHVZRUNZHOOIRUWDVNVVXFK
See Also
$WHFKQLFDOGRFXPHQWRQWKH9LUWXDO:LUH/LEUDU\FDQEHGRZQORDGHGIURPKWWSZZZ
RSHQFRPDXPLNHPDUGXLQR9LUWXDO:LUHSGI
'DWDVKHHWVIRUWKHWUDQVPLWWHUDQGUHFHLYHUPRGXOHVFDQEHIRXQGDWKWWSZZZVSDUN
IXQFRPGDWDVKHHWV:LUHOHVV*HQHUDO026$:5SGIDQGKWWSZZZVSDUNIXQFRPGD
WDVKHHWV:LUHOHVV*HQHUDO025;SGI
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
RIILUPZDUHHJ;%=%XQGHUWKH0RGHP;%((VHWWLQJVKRZQLQ)LJXUH
DQGWKDWWKH\DUHERWKUXQQLQJWKHPRVWFXUUHQWYHUVLRQRIWKHILUPZDUHWKH9HUVLRQ
VHWWLQJVKRZQLQ)LJXUH)RUDFRPSUHKHQVLYHVHWRI;%HHWURXEOHVKRRWLQJWLSV
VHH5REHUW)DOXGLV&RPPRQ;%HH0LVWDNHVDWKWWSZZZIDOXGLFRPSURMHFWVFRP
PRQ[EHHPLVWDNHV)RUH[WHQVLYHGHWDLOVRQZRUNLQJZLWK;%HHVVHHKLVERRN%XLOGLQJ
:LUHOHVV6HQVRU1HWZRUNVSXEOLVKHGE\25HLOO\
Solution
2EWDLQWZRRUPRUH;%HHPRGXOHVFRQILJXUHWKHPWRFRPPXQLFDWHZLWKRQHDQRWKHU
DQGKRRNWKHPXSWRDWOHDVWRQH$UGXLQR<RXFDQFRQQHFWWKHRWKHU;%HHPRGXOHV
WRDQRWKHU$UGXLQRDFRPSXWHURUDQDQDORJVHQVRUVHH5HFLSH
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
<RXPXVWGLVFRQQHFWWKH$UGXLQRIURPWKH;%HHEHIRUH\RXDWWHPSWWR
SURJUDPWKH$UGXLQR7KLVLVEHFDXVH$UGXLQRXVHVSLQVDQGIRU
SURJUDPPLQJDQGWKHVLJQDOVZLOOJHWFURVVHGLIDQ\WKLQJHOVHVXFKDV
DQ;%HHLVFRQQHFWHGWRWKRVHSLQV
Discussion
7RFRQILJXUH\RXU;%HHVSOXJWKHPLQWRDQ;%HHDGDSWHUVXFKDVWKH$GDIUXLW;%HH
$GDSWHUNLW0DNHU6KHGSDUWQXPEHU0.$'$GDIUXLWDQGXVHD86%WR
77/VHULDODGDSWHUVXFKDVWKH77/50DNHU6KHG77/5$GDIUXLWWR
FRQQHFWWKHDGDSWHUWRDFRPSXWHU
<RXVKRXOGSXUFKDVHDWOHDVWWZRDGDSWHUVDQGLIQHHGHGWZRFDEOHV
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
:LQGRZVFRPSXWHUWKHFRQILJXUDWLRQXWLOLW\LVQRWDYDLODEOHIRU0DFRU/LQX[3OXJ
RQO\RQHLQWRD86%SRUWIRUQRZ7KH77/5DQG3DUDOOD[;%HH86%$GDSWHUERWK
XVHWKHVDPH86%WRVHULDOGULYHUDVWKH$UGXLQRLWVHOIVR\RXVKRXOGQRWQHHGWRLQVWDOO
DQDGGLWLRQDOGULYHU
2SHQ'HYLFH0DQDJHUSUHVV:LQGRZV5W\SHdevmgmt.mscDQGSUHVV(QWHUH[
SDQGWKH3RUWV&20 /37VHFWLRQDQGWDNHQRWHRIWKHQXPEHURIWKH86%
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
1H[WOHDYH;&78UXQQLQJDQGOHDYHWKDW;%HHSOXJJHGLQ3OXJ\RXUVHFRQG;%HH
LQWRDGLIIHUHQWVHULDOSRUW5HSHDWWKHSUHFHGLQJVWHSVLQVWHS\RXZLOOEHVWDUWLQJ
XSDVHFRQGFRS\RI;&78EXWLQVWHDGRIFKRRVLQJ=,*%((&225',1$725$7
LQVWHSFKRRVH=,*%((5287(5$72QWKLV;%HH\RXVKRXOGDOVRVHW&KDQQHO
9HULILFDWLRQ-9WRWRPDNHVXUHLWZLOOFRQILUPWKDWLWVRQWKHULJKWFKDQQHOZKLFK
PDNHVLWVFRQQHFWLRQWRWKHFRRUGLQDWRUPRUHUHOLDEOH
,I\RXKDYHWZRFRPSXWHUVUXQQLQJ:LQGRZV\RXFDQFRQQHFWHDFK
;%HHLQWRDVHSDUDWHFRPSXWHU
:LWKERWK;%HHVFRQQHFWHGDQGWZRFRSLHVRI;&78VKRZLQJWKHLU7HUPLQDOWDEW\SH
LQWRHLWKHU7HUPLQDOZLQGRZ<RXOOVHHZKDWHYHU\RXW\SHLQWRRQH;%HHDSSHDURQ
Series 1 configuration
)RU6HULHV;%HHV\RXFDQXVHD0DFRUD3&UXQQLQJ/LQX[RU:LQGRZV+RZHYHU
LI\RXZLVKWRXSGDWHWKHILUPZDUHRQWKH;%HHV\RXZLOOQHHGWRXVHWKH;&78XWLOLW\
GHVFULEHGLQ6HULHVFRQILJXUDWLRQRQSDJH
8VLQJDVHULDOWHUPLQDOSURJUDPVXFKDV&RRO7HUPRU3X77<FRQQHFWWRWKH;%HHV
86%VHULDOSRUWDWELWVSHUVHFRQG
7R GHWHUPLQH WKH VHULDO SRUW DVVLJQHG WR \RXU ;%HH XQGHU :LQGRZV VHH VWHS LQ
6HULHVFRQILJXUDWLRQRQSDJH7RGHWHUPLQHWKHVHULDOSRUWXQGHU0DF26;
RSHQWKH0DF26;7HUPLQDOZLQGRZORFDWHGLQ$SSOLFDWLRQV8WLOLWLHVDQGW\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:LQGRZVRU0DFIROORZWKHVHVWHSV
5XQ&RRO7HUP
&OLFNWKH2SWLRQVEXWWRQLQWKHWRROEDU
6HOHFWWKH86%VHULDOSRUWVXFKDVWW\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/LQHILHOGVXFKDVGHYWW\86%RQ
/LQX[RU&20RQ:LQGRZV0DNHVXUH6SHHGLVVHWWRWKHGHIDXOW
.HHS\RXUVHULDOWHUPLQDOXSDQGUXQQLQJVRWKDW\RXFDQFRQWLQXHWRW\SHFRPPDQGV
LQWRLW1H[WSOXJLQWKHVHFRQG;%HHDQGIROORZWKHHDUOLHULQVWUXFWLRQVWRFRQQHFWWR
LWZLWK3X77<RU&RRO7HUPWRRSHQDQHZ3X77<ZLQGRZ\RXFDQVLPSO\ODXQFK
WKHSURJUDPDJDLQ\RXFDQVWDUWDQHZ&RRO7HUPZLQGRZZLWK)LOH 1HZ7KHQ
FRQILJXUHWKHVHFRQG;%HHZLWKWKHVHFRPPDQGV
ATMY5678
ATDL1234
ATDH0
ATID0
ATWR
1RZ\RXFDQW\SHFRPPDQGVLQWRWKH6HULDO7HUPLQDOZLQGRZIRURQH;%HHDQGWKH\
ZLOODSSHDULQWKH6HULDO7HUPLQDOZLQGRZIRUWKHRWKHU;%HHDQGYLFHYHUVD
7KHATMYFRPPDQGVHWVWKHLGHQWLILHUIRUDQ;%HHATDLDQGATDHVHWWKHORZE\WHDQG
WKHKLJKE\WHRIWKHGHVWLQDWLRQ;%HHATIDVHWVWKHQHWZRUN,'LWQHHGVWREHWKHVDPH
IRU;%HHVWRWDONWRRQHDQRWKHUDQG ATWRVDYHVWKHVHWWLQJVLQWRWKH;%HHVRWKDWLW
UHPHPEHUVWKHVHWWLQJVHYHQLI\RXSRZHULWGRZQDQGEDFNXS
Solution
6HQGWKH$7FRPPDQGVGLUHFWO\IURP\RXU$UGXLQRVNHWFK
/*
XBeeMessage
Send a message to an XBee using its address
*/
boolean configureRadio() {
// 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 () {
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
XSWKHKLJKATDHDQGORZATDLSRUWLRQVRIWKHVHULDOQXPEHUXVLQJ;&78DVVKRZQ
LQ)LJXUH7KHQXPEHUVDUHDOVRSULQWHGRQWKHODEHOXQGHUQHDWKWKH;%HH
7KH ATCNFRPPDQGH[LWVFRPPDQGPRGHWKLQNRILWDVWKHUHYHUVHRIZKDWWKH +++
VHTXHQFHDFFRPSOLVKHV
See Also
5HFLSH
Discussion
;%HHVKDYHDEXLOWLQDQDORJWRGLJLWDOFRQYHUWHU$'&WKDWFDQEHSROOHGRQDUHJXODU
EDVLV7KH;%HHFDQEHFRQILJXUHGWRWUDQVPLWWKHYDOXHVEHWZHHQDQGWRRWKHU
;%HHVLQWKHQHWZRUN7KHFRQILJXUDWLRQDQGFRGHGLIIHUTXLWHDELWEHWZHHQ6HULHV
DQG6HULHV;%HHV
Series 2 XBees
8VLQJ;&78VHH6HULHVFRQILJXUDWLRQRQSDJHLQ5HFLSHFRQILJXUHWKH
WUDQVPLWWLQJ;%HHZLWKWKH=,*%((5287(5$7QRW$3,IXQFWLRQVHWDQGWKHIRO
ORZLQJVHWWLQJV
3$1,' 1234RUDQXPEHU\RXSLFNDVORQJDV\RXXVHWKHVDPHRQHIRUERWK
;%HHV
&KDQQHO9HULILFDWLRQ-9 1WKLVPDNHVVXUHWKHURXWHUZLOOFRQILUPWKDWLWVRQ
WKHULJKWFKDQQHOZKHQWDONLQJWRWKHFRRUGLQDWRU
'HVWLQDWLRQ$GGUHVV+LJK'+WKHKLJKDGGUHVV6+RIWKHRWKHU;%HHXVXDOO\
$
'HVWLQDWLRQ$GGUHVV/RZ'/WKHORZDGGUHVV6/RIWKHRWKHU;%HH
8QGHU,26HWWLQJV$'',2&RQILJXUDWLRQ'2
8QGHU,26HWWLQJV 6DPSOLQJ5DWH,564PLOOLVHFRQGVLQKH[
)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() {
// Skip over the bytes in the API frame we don't care about
for (int i = 0; i < 18; 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);
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
ATD02FRQILJXUHVSLQDQDORJRUGLJLWDOLQSXWDVDQDQDORJLQSXWATIR64WHOOV
WKH;%HHWRVDPSOHHYHU\KH[PLOOLVHFRQGVDQGVHQGWKHYDOXHWRWKH;%HH
VSHFLILHGE\ATDLDQGATDH
)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.
*/
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
configureRadio(); // check the return value if you need error handling
}
boolean configureRadio() {
// 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() {
// 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);
See Also
5HFLSH
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;&78VHH6HULHVFRQILJXUDWLRQRQSDJHFRQILJXUHWKHUHFHLYLQJ;%HH
ZLWKWKH=,*%((5287(5$7QRW$3,IXQFWLRQVHWDQGWKHIROORZLQJVHWWLQJV
3$1,' 1234RUDQXPEHU\RXSLFNDVORQJDV\RXXVHWKHVDPHRQHIRUERWK
;%HHV
&KDQQHO9HULILFDWLRQ-9 1WKLVPDNHVVXUHWKHURXWHUZLOOFRQILUPWKDWLWVRQ
WKHULJKWFKDQQHOZKHQWDONLQJWRWKHFRRUGLQDWRU
'HVWLQDWLRQ$GGUHVV+LJK'+WKHKLJKDGGUHVV6+RIWKHRWKHU;%HHXVXDOO\
$
'HVWLQDWLRQ$GGUHVV/RZ'/WKHORZDGGUHVV6/RIWKHRWKHU;%HH
8QGHU,26HWWLQJV$'',2&RQILJXUDWLRQ'4GLJLWDORXWSXWORZ
&RQILJXUH WKH WUDQVPLWWLQJ ;%HH ZLWK WKH =,*%(( &225',1$725 $3, QRW $7
IXQFWLRQVHWZLWKWKHIROORZLQJVHWWLQJV
3$1,' 1234RUDQXPEHU\RXSLFNDVORQJDV\RXXVHWKHVDPHRQHIRUERWK
;%HHV
'HVWLQDWLRQ$GGUHVV+LJK'+WKHKLJKDGGUHVV6+RIWKHRWKHU;%HHXVXDOO\
$
)LJXUH&RQQHFWLQJDQ/('WRDQ;%HHVGLJLWDO,2SLQ
1H[WORDGWKHIROORZLQJVNHWFKRQWRWKH$UGXLQRDQGZLUHWKHWUDQVPLWWLQJ;%HHWR
WKH$UGXLQRDVVKRZQLQ5HFLSH,I\RXQHHGWRUHSURJUDPWKH$UGXLQRUHPHPEHU
WRGLVFRQQHFWLWIURPWKH;%HHILUVW7KLVVNHWFKVHQGVD5HPRWH$7FRPPDQGATD14
RUATD15WKDWVHWVWKHVWDWHRISLQATD1DOWHUQDWLQJO\RQGLJLWDORXWKLJKDQGRII
GLJLWDORXWORZ
/*
XBeeActuate
Send a Remote AT command to activate a digital pin on another XBee.
*/
void setup() {
Serial.begin(9600);
}
void loop()
{
toggleRemotePin(1);
delay(3000);
toggleRemotePin(0);
delay(2000);
}
byte pin_state;
if (value) {
pin_state = 0x5;
} else {
pin_state = 0x4;
}
// High and low parts of the frame length (not counting checksum)
sendByte(0x0);
sendByte(0x10);
Series 1 XBees
8VLQJDWHUPLQDOSURJUDPDVGHVFULEHGLQ6HULHVFRQILJXUDWLRQRQSDJHVHQG
WKHIROORZLQJFRQILJXUDWLRQFRPPDQGVWRWKHWUDQVPLWWLQJ;%HHWKHRQH\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 ATD13FRQILJXUHVSLQDQDORJRUGLJLWDOLQSXW
WREHLQGLJLWDOLQSXWPRGH7KHVWDWHRIWKLVSLQZLOOEHUHOD\HGIURPWKHWUDQV
PLWWLQJ;%HHWRWKHUHFHLYLQJ;%HH
5HFHLYLQJ;%HH
ATIU1WHOOVWKH;%HHWRQRWVHQGWKHIUDPHVLWUHFHLYHVWRWKHVHULDOSRUW ATIA1234
WHOOV LW WR DFFHSW FRPPDQGV IURP WKH RWKHU ;%HH ZKRVH 0< DGGUHVV LV
ATD14FRQILJXUHVSLQDQDORJRUGLJLWDOLQSXWWREHLQORZGLJLWDORXWSXWPRGH
RIIE\GHIDXOW
:LUHXSWKHWUDQVPLWWLQJ;%HHWRWKH$UGXLQRDVVKRZQLQ)LJXUH
1H[WZLUHWKHUHFHLYLQJ;%HHWRDQ$UGXLQRDVVKRZQLQ5HFLSH1RWHWKDWLQVWHDG
RIVHQGLQJ$7FRPPDQGVRYHUWKHVHULDOSRUWZHUHXVLQJDQHOHFWULFDOFRQQHFWLRQWR
)LJXUH&RQQHFWLQJWKH$UGXLQRWR;%HHVGLJLWDO,2SLQ
1H[WORDGWKHIROORZLQJVNHWFKRQWRWKH$UGXLQR7KLVVNHWFKWDNHVWKH;%HHVGLJLWDO
,2SLQDOWHUQDWLQJO\RQGLJLWDORXWKLJKDQGRIIGLJLWDORXWORZ%HFDXVHWKH
WUDQVPLWWLQJ;%HHLVFRQILJXUHGWRUHOD\LWVSLQVWDWHVWRWKHUHFHLYLQJ;%HHZKHQLWV
SLQFKDQJHVVWDWHWKHUHFHLYLQJ;%HHVSLQFKDQJHVDVZHOO
/*
XBeeActuateSeries1
Activate a digital pin on another XBee.
*/
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