Comunicación de plataforma Xbee con Raspberry Pi

Standard

Que tal amigos lectores, me da gusto redactar otra vez…
La última vez les compartí lo que me sucedió realizando mis labores en la parte de diseño electrónico, esta vez les compartiré algo breve y sencillo. Actualmente me encuentro desarrollando un proyecto en la plataforma Raspberry Pi. Para mí es algo relativamente nuevo, ya que, es algo que en la escuela no aprendí (tal vez tú si lo aprendas o lo aprendiste). En un principio tenía un poquito de miedo porque estas plataformas se manejan con el ambiente de sistemas operativos Linux (Son los más populares en SBC) y personalmente lo tomé como un reto que sin duda me dejará un enorme aprendizaje, aclaro que anteriormente había utilizado muy poco Linux, pero bueno comencemos.

RL

El mensaje detrás del título es montar una red de comunicación inalámbrica entre 2 computadoras, la idea básicamente es mandar información desde la Raspberry Pi y recibirla en una PC utilizando el software oficial para el manejo de los Xbee, el XCTU. Indispensable tanto para programar los Xbee como para realizar las pruebas de comunicación. La siguiente imagen ilustra las etapas de este desarrollo:

XBeeSimpleChatDiagram

Primero tuve que instalar el sistema operativo a la Raspberry Pi. En este caso monté el famoso Raspbian (Debian), si te gustaría conocer a detalle ese paso, te invito a visitar la web oficial de Raspberry, o algunos de los mucho tutoriales que existen en Internet. Les ofrezco una disculpa por no molestarme en describirlo, pero es algo verdaderamente sencillo.

raspbian_logo
Inmediatamente después de haber instalado el sistema operativo Raspbian (Debian), procedí a investigar un poco para encontrar una manera práctica para realizar mi labor. Después de cierto lapso, encontré que la forma que me facilitaría en demasía mi labor sería instalando el entorno Node.js ya que en él existen paqueterías especializadas en el manejo de la plataforma Xbee y el protocolo de comunicación Serial que maneja la misma para su interfaz con otros dispositivos. Para instalar el entorno Node.js en la Raspberry Pi pueden hacerlo escribiendo los siguientes comandos desde la terminal:

Para raspberry Pi Model A, B, B+.

c1

Para Raspberry Pi 2 Model B.

c2

Por último copian todos los ficheros descargados e instalados a la siguiente dirección.

c3

Con eso es suficiente para haber instalado Node.js, para comprobarlo basta con teclear el comando node –v el cual nos indicará la versión del ambiente actualmente instalado. En este caso debería indicar la versión 4.0.0, la cual NO nos generará ningún problema de compatibilidad con los paquetes requeridos para manejar Xbee. Esto último es muy importante ,ya que, es demasiado frecuente encontrar incompatibilidades con las distintas versiones de Node.js y los paquetes de desarrollo. Es aquí donde los invito a leer el blog de mi amiga y desarrolladora de Software de la empresa Karen González, el cual se titula “Instalar Node.js en una Beaglebone blackque los ayudará a realizar la instalación de nodejs que ustedes necesiten. Aunque la plataforma que ella presenta es distinta, dentro del blog explica una solución práctica y eficiente para resolver los problemas de incompatibilidades que anteriormente mencioné.

Ahora, una vez instalado node.js procedemos a instalar los famosos paquetes que se necesitan para este desarrollo. Los cuales son los siguientes:

xbee-api: npm install xbee-api
serialport: npm install serialport

La parte que no está en negritas corresponde al comando que se ejecuta en la terminal. Ahora una vez instalados, se procede a desarrollar una API o desarrollar el software o programa (Como ustedes lo quieran llamar) para esta labor. Node.js entre sus muchas bondades tiene una que a los programadores les gusta mucho, la cual es que el código se escribe en javascript. Personalmente yo que soy mecatrónico, no manejo javascript cuando requiero programar. Sin embargo indagando un poco en la web encontré la API que me sirve para este desarrollo [No le digan a nadie 8)] la cual es la siguiente:

var util = require('util');
var SerialPort = require('serialport').SerialPort;
var xbee_api = require('xbee-api');

var C = xbee_api.constants;

var xbeeAPI = new xbee_api.XBeeAPI({
api_mode: 1
});

var serialport = new SerialPort("/dev/ttyAMA0", {
baudrate: 9600, //Tiene que ser igual que en Xbee
parser: xbeeAPI.rawParser()
});

serialport.on("open", function () {
var frame_obj = {
type: 0x10,
id: 0x01,
destination64: "0013A20040B3A59A",
broadcastRadius: 0x00,
options: 0x00,
data: "Hello world"
};

serialport.write(xbeeAPI.buildFrame(frame_obj));
console.log('Sent to serial port.');
});

serialport.on('data', function (data) {
console.log('data received: ' + data);
});

// All frames parsed by the XBee will be emitted here
xbeeAPI.on("frame_object", function (frame) {
console.log(">>", frame);
});

La linea de código que se muestra en rojo, corresponde al nombre del puerto serial al cual está conectado el Xbee a la Raspberry Pi, puede variar dependiendo por donde decides conectarlo, ya sea por algún puerto USB, o a través de los pines que corresponden al puerto serial (como en este caso). La línea que resalté en negritas “destination64” es donde se escribe la dirección del Xbee destino, disculpen si les resultó obvio. Aclaro que la dirección es distinta para cada uno de ellos.  En este caso para fines ilustrativos enviaremos un “Hello world”, el cual se resalta en la linea color verde “data”. El script anterior se escribe en el editor de texto nano de la terminal y se guarda con la extensión .js, por ejemplo index.js.

Ahora lo que sigue es configurar los Xbee’s, estos muy aparte de todo lo que expliqué anteriormente, estos se tienen que programar. A continuación les comparto un sencillo y completo tutorial para esa labor.

Nuevamente les ofrezco una disculpa, pero esa labor contiene muchas variantes que no me bastaría una sola publicación para describirlas a detalle. Así que los invito a practicar un sano ejercicio de lectura.
Una vez listo todo lo anterior procedemos a la interfaz de hardware.

XbRasp.

El cable rojo mostrado en la imagen corresponde a la alimentación del Xbee, la cual es a 3.3V, el cable negro es la tierra y los cables verde y amarillo son los correspondientes al protocolo de comunicación serial. Aunque seas una persona que no tiene conocimientos de electrónica o circuitos eléctricos con tan sólo hacer exactamente lo mismo de la imagen es suficiente. Para aquellos que si tienen conocimientos, les comento que no es necesario ningún convertidor lógico en medio de la Raspberry y el Xbee, ya que tanto la Raspberry como el Xbee sus voltajes lógicos son a 3.3V, como seguramente ya lo habían deducido.

XbPC

Una vez conectado el Xbee a la Raspberry y de igual forma el Xbee receptor conectado a la PC por USB para comenzar las pruebas de comunicación. Para ejecutar la API de node.js ejecutamos en terminal el siguiente comando:

sudo node index.js

Con esto debería funcionar todo el sistema y recibir los paquetes de bytes que corresponden al “Hello world” desarrollado en la API tal y como lo vemos a continuación:

xctu

En fin amigos, la imagen lo dice todo, en mi caso la primera vez que realicé esta actividad sentí una gran satisfacción, siempre que hacemos algo nuevo y nos sale nos invade ese sentimiento, todos los desarrolladores entenderán a lo que refiero, por lo pronto me despido. No olviden comentar cualquier duda o inquietud que pudieran tener al leer este post, con gusto los atenderé.

Les mando un fuerte abrazo, saludos.

Leave a Reply

Your email address will not be published. Required fields are marked *