Siguiendo la python-Xbee y un ejemplo , estoy tratando de comunicarme entre 2 XBees
Usando XBee S2C Preparar: Coordinador API = 2, ejecutando el código en python @ Mac Modo Router AT, ejecutando el código python @ Mac
El código de envío de datos a continuación se ejecuta en modo API en el coordinador
#!/usr/bin/python
#this code runs on the xbee coordinator that is set to API mode 2
import serial
from xbee import ZigBee
from xbee.helpers.dispatch import Dispatch
import time
PORT = '/dev/tty.usbserial-A104IC2U'
BAUD_RATE = 9600
UNKNOWN = '\xff\xfe'
WHERE = '\x00\x13\xA2\x00\x40\xF7\x0A\x50'
dataString='Hello\n'
# Open serial port
ser = serial.Serial(PORT, BAUD_RATE)
zb = ZigBee(ser)
#sends data to xbee address
def sendData(address, datatosend):
zb.send('tx', dest_addr_long = address, dest_addr = UNKNOWN, data = datatosend)
#test data sending method
while True:
try:
sendData(WHERE, dataString)
except KeyboardInterrupt:
break
zb.halt()
ser.close()
Y en el enrutador (modo AT) corro debajo del código
#!/usr/bin/python
import serial
#router port
PORT = '/dev/tty.usbserial-A104IAUX'
BAUD_RATE = 9600
ser = serial.Serial(PORT, BAUD_RATE)
#myaddress - its the router
ack='0013A20040F70A50'
while True:
incoming = ser.readline().strip()
if incoming != '0013A20040F70A50':
print '%s' % incoming
ser.write('%s' % ack)
ser.close()
Esto funciona bien y veo la salida 'Hola' en la terminal python del lado del enrutador en Mac. Ahora también necesito recibir datos en el lado del coordinador. Así que hago esto en el código del coordinador: después de enviarlo, también lee el número de serie e imprime los datos
while True:
try:
sendData(WHERE, dataString)
incoming = ser.readline().strip() #added to receive serial data at coordinator
print '%s' % incoming
except KeyboardInterrupt:
break
Pero tan pronto como agrego esas dos líneas, la comunicación se detiene. ¿Esto se debe a que el coordinador está en modo API y no puede recibir en serie? ¿Y tengo que escribir el código de recepción para el modo API? ¿Alguna sugerencia?