Os Xbee são realmente uma maravilha. Da ultima vez explorei como os instalar, configurar e trocar informações entre eles usando aplicações de comunicação via porta série.

Agora, vamos usar usar Python e aprender como comunicar via porta série, bem como trocar ficheiros!

import serial
import sys
import fcntl
import os
import time


serial = serial.Serial()
serial.port = '/dev/ttyUSB0'
serial.baudrate = 9600
serial.timeout = 1
serial.writeTimeout = 1
serial.open()

# make stdin a non-blocking file
fcntl.fcntl(sys.stdin, fcntl.F_SETFL, os.O_NONBLOCK)
print '#2 ready for chat mode !'

try:
	while True:
		line = serial.readline()
		if line:
			print line

		try:
			line = sys.stdin.readline()
			serial.writelines(line)
		except IOError:
			time.sleep(0.1)
			continue
except KeyboardInterrupt:
	serial.writelines("RPi #2 is going down!\r\n")

serial.close()

Para que funcione, bastam que executem o mesmo ficheiro (cópia) em dois computadores  diferentes com os XBee ligados e podem trocar informações .

Substituir a linha

/dev/ttyUSB0

pelo device do vosso XBee

Explicação de código

As primeiras linhas são explicatórias – importam os módulos necessários à nossa programação.

Das linhas 8 à 13 estamos a abrir a porta série e a definir os parâmetros da nossa ligação ao XBee.

serial = serial.Serial()
serial.port = '/dev/ttyUSB0'
serial.baudrate = 9600
serial.timeout = 1
serial.writeTimeout = 1
serial.open()

Linhas 15 e 16 são necessárias, porque leituras de I/O em Linux bloqueiam se não houver caracteres para ler.

# make stdin a non-blocking file
fcntl.fcntl(sys.stdin, fcntl.F_SETFL, os.O_NONBLOCK)

Seguindamente, o programa entra em loop .

A linha 21 lê alguma coisa que tenha vindo via porta série. Se houver alguma coisa na variável, é mostrada no ecrâ.

line = serial.readline()

A partir da linha 25 começamos por experimentar e verificar se há alguma coisa para ler do teclado. Se houver, escreve o que foi escrito para a porta série – e consequentemente para o outro XBee.

if line:
	print line

Se não houver nada por ler, não dá erro (linha 28, 29 e 30), espera 1 décima de segundo e continua.

except IOError:
	time.sleep(0.1)
	continue

Assim que for pressionado CTRL+C, o programa sai e escreve para o outro XBee que vai ser desligado.

Aqui fica um pequeno video do chat a funcionar:

Referências

Grande parte do código (se não todo) foi retirado do excelente exemplo de Jeff Skinner, que podem consultar na sua página.