viernes, 6 de junio de 2014

Lab 6.1: Ping-ing a Sensor

OBJECTIU: Enviar dades des de un ordinador a la placa Arduino mitjançant un codi Python i dues XBees en mode API. 

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ó




No hay comentarios:

Publicar un comentario