Una XBee haurà d'estar connectada directament a l'ordinador i en mode Coordinator API. L'altra connectada a la placa Arduino en mode Router API.
Com que ara interactuarem amb la XBee local utilitzant la llibreria Python, serà necessari que les dues XBees tinguin el mode API igual a 2 (Serial Interfacing, AP).
Mitjançant el codi Python la XBee local anirà enviant paquets en mode broadcast. En aquest cas només hi ha una altra XBee connectada a la mateixa xarxa i per tant serà l'única receptora. Cada cop que la XBee remota rebi un paquet de la XBee local un LED parpadejarà 3 cops.
Material necessari:
- Placa Arduino UNO
- Placa Protoboard
- XBees Explorer (x2)
- Digi XBee (x2)
- Cables connectors
- LED
- Ordinador

1. Muntatge del circuit
2. Codi
Codi Python:
#! /usr/bin/python
from xbee import ZigBee
import serial
import time
from datetime import datetime
ser = serial.Serial('COM4', 9600)
xbee = ZigBee(ser, escaped=True)
while True:
try:
tstart = datetime.now()
xbee.send('tx',
frame_id='A',
dest_addr_long='\x00\x13\xa2\x00\x40\x8b\x44\xfa',
dest_addr='\xFF\xFE',
data='\x03')
response = xbee.wait_read_frame();
tend = datetime.now()
print tend-tstart
time.sleep(10);
except KeyboardInterrupt:
break
ser.close()
Codi Arduino:
#include <XBee.h> int ledPin = 13; XBee xbee = XBee(); XBeeResponse response = XBeeResponse(); // create reusable response objects for responses we expect to handle ZBRxResponse rx = ZBRxResponse(); void flashLed(int pin, int times, int wait) { for (int i = 0; i < times; i++) { digitalWrite(pin, HIGH); delay(wait); digitalWrite(pin, LOW); if (i + 1 < times) { delay(wait); } } } void setup() { Serial.begin(9600); xbee.begin(Serial); pinMode(ledPin, OUTPUT); flashLed(ledPin, 10, 50); // sets the LED off } void loop() { delay(1000); // 1. This will read any data that is available: xbee.readPacket(); if (xbee.getResponse().isAvailable()) { //flashLed(ledPin, 1, 1000); if (xbee.getResponse().getApiId() == ZB_RX_RESPONSE) { xbee.getResponse().getZBRxResponse(rx); //flashLed(ledPin, 1, 100); // sets the LED off flashLed(ledPin, rx.getData(0), 200); // sets the LED off } } }
3. Demostració
2. Codi
Codi Python:
#! /usr/bin/python
from xbee import ZigBee
import serial
import time
from datetime import datetime
ser = serial.Serial('COM4', 9600)
xbee = ZigBee(ser, escaped=True)
while True:
try:
tstart = datetime.now()
xbee.send('tx',
frame_id='A',
dest_addr_long='\x00\x13\xa2\x00\x40\x8b\x44\xfa',
dest_addr='\xFF\xFE',
data='\x03')
response = xbee.wait_read_frame();
tend = datetime.now()
print tend-tstart
time.sleep(10);
except KeyboardInterrupt:
break
ser.close()
Codi Arduino:
#include <XBee.h> int ledPin = 13; XBee xbee = XBee(); XBeeResponse response = XBeeResponse(); // create reusable response objects for responses we expect to handle ZBRxResponse rx = ZBRxResponse(); void flashLed(int pin, int times, int wait) { for (int i = 0; i < times; i++) { digitalWrite(pin, HIGH); delay(wait); digitalWrite(pin, LOW); if (i + 1 < times) { delay(wait); } } } void setup() { Serial.begin(9600); xbee.begin(Serial); pinMode(ledPin, OUTPUT); flashLed(ledPin, 10, 50); // sets the LED off } void loop() { delay(1000); // 1. This will read any data that is available: xbee.readPacket(); if (xbee.getResponse().isAvailable()) { //flashLed(ledPin, 1, 1000); if (xbee.getResponse().getApiId() == ZB_RX_RESPONSE) { xbee.getResponse().getZBRxResponse(rx); //flashLed(ledPin, 1, 100); // sets the LED off flashLed(ledPin, rx.getData(0), 200); // sets the LED off } } }
3. Demostració
No hay comentarios:
Publicar un comentario