Archivo de la etiqueta: Comunicación Inalámbrica

De Arduino al Procesado de Datos Masivo

Arduino es una herramienta perfecta para la recogida de todo tipo de datos en cualquier lugar y condición, comprobación, pre-procesado y normalización de los datos y finalmente transporte de esos datos de una forma rápida y segura al lugar donde se van a almacenar para posteriormente ser procesados y analizados.

Arduino es capaz de recoger datos, tratarlos en tiempo real (limitado por su capacidad de procesamiento) y comunicarse con el sistema de almacenamiento de datos.

Al ser Arduino un elemento barato y con muchas capacidades de comunicación es posible usarlo en la captura de datos distribuidos y desplegar tantos sensores como sea necesario creando una red de sensores fácilmente escalable.

Y obtener datos distribuidos para visualizarlos y analizarlos:

La adquisición de datos (DAQ) es el proceso de medir un fenómeno eléctrico o físico como voltaje, corriente, temperatura, presión o sonido. Un sistema DAQ consiste de sensores, hardware de medidas DAQ y un PC donde almacenar y tratar los datos. Comparados con los sistemas de medidas tradicionales, los sistemas DAQ basados en PC aprovechan la potencia del procesamiento, la productividad, la visualización y las habilidades de conectividad de los PCs estándares en la industria proporcionando una solución de medidas más potente, flexible y rentable.

Un sistema DAQ básico sería un Arduino que recoge los datos, los procesa y los guarda en una tarjeta SD o un PC conectado, pero con Arduino podemos ir más allá y crear una red de sistemas DAQ interconectados que procesan los datos que capturan y los mandan a una base de datos o repositorio único o distribuido.

Elementos que intervienen

A la hora de recoger datos para su procesamiento debemos responder estas preguntas:

  • ¿Qué quieres medir? – Sensores
  • ¿Cómo lo quieres conectar? – Comunicaciones /Protocolos
  • ¿Donde vas a almacenar los datos? – Plataformas
  • ¿Qué quieres hacer con los datos? – Herramientas de procesado

Todo esto está relacionado con el denominado Internet de las Cosas (IoT).

Elementos que intervienen:

  • Protocolos de comunicación, lenguaje para comunicar el HW y el SW. HTTP, fiware, MQTT, API REST,…

  • Plataformas Software, almacenar y tratar los datos recogidos por nuestros sensores. Pueden ser plataformas de terceros o plataformas propias desarrolladas por nosotros o simplemente guardar en BBDD. Por ejemplo: Carriots, Thingspeak, Temboo, Thinger, etc…
    Además todas estas plataformas SW que están en la nube, deben estar soportadas por un HW de servidores, unas BBDD de gran capacidad y una infraestructura segura que los hospede.
  • Servicios, son los servicios que ofrecen las plataformas como la visualización de los datos recogidos, análisis de los datos, envío de avisos cuando se detecte un evento, interconexión con otras plataformas, etc…
    Servicios ofrecidos por la plataforma carriots: https://www.carriots.com/que-es-carriots

A modo de resumen, estos son los elementos:

Sensor — MCU — Comunicación — Protocolo — Plataforma — Servicios

Uno de los retos del IoT es mandar datos de cualquier sensor a través de cualquier protocolo a cualquier plataforma de forma inalámbrica y usando la menor energía posible (baterías) y todo esto mediante una comunicación segura (cifrada).

Plataformas

Podemos usar de forma gratuita diversas plataformas para conectar nuestro Arduino con ellas y usarlas para mostrar datos, analizar los datos, responder a ciertos eventos, realizar interacciones con Arduino, etc…

Algunas ejemplos de plataformas son:

ZigBee/XBee

ZigBee

IEEE 802.15.4 es un estándar que define el nivel físico y el control de acceso al medio de redes inalámbricas de área personal con tasas bajas de transmisión de datos (low-rate wireless personal area network, LR-WPAN). El grupo de trabajo IEEE 802.15 es el responsable de su desarrollo. También es la base sobre la que se define la especificación de ZigBee, cuyo propósito es ofrecer una solución completa para este tipo de redes construyendo los niveles superiores de la pila de protocolos que el estándar no cubre.

IEEE802.15.4:

El estandar 802.15.4 simplificado: http://catarina.udlap.mx/u_dl_a/tales/documentos/lem/archundia_p_fm/capitulo4.pdf

Bluetooth y RFID se encuentran en el grupo de trabajo 802.15.

ZigBee es el nombre de la especificación de un conjunto de protocolos de alto nivel de comunicación inalámbrica para su utilización con radiodifusión digital de bajo consumo, basada en el estándar IEEE 802.15.4 de redes inalámbricas de área personal (wireless personal area network, WPAN). Su objetivo son las aplicaciones que requieren comunicaciones seguras con baja tasa de envío de datos y maximización de la vida útil de sus baterías.

En principio, el ámbito donde se prevé que esta tecnología cobre más fuerza es en domótica, como puede verse en los documentos de la ZigBee Alliance. La razón de ello son diversas características que lo diferencian de otras tecnologías:

  • Su bajo consumo.
  • Su topología de red en malla.
  • Su fácil integración (se pueden fabricar nodos con muy poca electrónica).

ZigBee utiliza la banda ISM para usos industriales, científicos y médicos; en concreto, 868 MHz en Europa, 915 en Estados Unidos y 2,4 GHz en todo el mundo. Sin embargo, a la hora de diseñar dispositivos, las empresas optarán prácticamente siempre por la banda de 2,4 GHz, por ser libre en todo el mundo. El desarrollo de la tecnología se centra en la sencillez y el bajo costo más que otras redes inalámbricas semejantes de la familia WPAN, como por ejemplo Bluetooth.

Zigbee:

Tabla comparativa de módulos 802.1.4 https://en.wikipedia.org/wiki/Comparison_of_802.15.4_radio_modules

El estándar Zigbee se utiliza primordialmente para aplicaciones domóticas donde es mínima la capacidad de transferencia de información y el costo y consumo tienen un papel fundamental. ZigBee se utiliza para controlar la calefacción, iluminación, sistema de seguridad, etc. de cualquier edificio inteligente. Se espera que ZigBee se aplique para industrias, juguetes, periféricos de PC, componentes electrónicos, sistemas de control automático, medicina, etc. pero en este momento su principal aplicación es en los sistemas de domótica y de automatización.

Zigbee Soporta tres tipos de topologías de red:

  • Star o Estrella: presenta larga vida útil como consecuencia del bajo consumo que requiere.
  • Mesh o Malla: en la cual existen múltiples rutas para alcanzar un destino, obteniéndose alta confiabilidad.
  • Cluster Tree o Racimo de Árbol: es una topología del tipo Mesh-Star que encierra los beneficios de ambas.

Las comunicaciones Zigbee se realizan en la banda libre de 2.4GHz. A diferencia de bluetooth no utiliza FHSS (Frequency hooping), sino que realiza las comunicaciones a través de una única frecuencia, es decir, de un canal. Normalmente puede escogerse un canal de entre 16 posibles. El alcance depende de la potencia de emisión del dispositivo así como el tipo de antenas utilizadas (cerámicas, dipolos, …) El alcance normal con antena dipolo en visión directa suele ser aproximadamente (tomando como ejemplo el caso de MaxStream, en la versión de 1mW de potencia) de 100m y en interiores de unos 30m. La velocidad de transmisión de datos de una red Zigbee es de hasta 256kbps. Por último decir que una red Zigbee la pueden formar, teóricamente, hasta 65535 equipos, es decir, el protocolo está preparado para poder controlar en la misma red esta cantidad enorme de dispositivos. La realidad es menor, siendo, de todas formas, de miles de equipos.

El estándar Zigbee permite la interoperabilidad entre diferentes dispositivos de de diferentes fabricantes. Por ejemplo, nos permitiría controlar luces, sistemas de climatización, riego automático, etc.. de diferentes marcas usando un mismo protocolo con productos certificados Zigbee.

Para lograr esta interoperabilidad entre dispositivos, el protocolo Zigbee está organizado en capas que separan los componentes y las funciones en módulos independientes.

zigbee

Las capas PHY y MAC son las especificadas por el estándar IEEE 802.15.4 y las capa NWK está especificada por el estándar Zigbee que maneja la estructura de red, enrutamiento y seguridad.

La capa de aplicación es la que habilita la interoperabilidad y está compuesta por:

  • APS: ofrece un interfaz entre la red y la capa de aplicación, define los mensajes estandarizados que permite la comunicación entre dispositivos de diferentes fabricantes.
  • Application Framework: es el entorno donde se almacenan las aplicaciones en los dispositivos ZigBee.
  • ZDO (ZigBee Device Object): ofrece funcionalidades de descubrimiento de dispositivos y gestión avanzada de red.

Más información: http://www.electrocomponentes.com/articulos/diciembre06/zigbee.html

XBee

XBee es el nombre comercial del Digi de una familia de módulos de comunicación por radio y están basados en el estándar zigbee, pero digi tiene muchos Xbee y algunos son zigbee estándar y otros son propietarios o modificaciones del estándar. Existen muchos módulos Xbee basados en el estándar IEEE 802.15.4

Los módulos Xbee han sido diseñados para aplicaciones que requieren de un alto tráfico de datos, baja latencia y una sincronización de comunicación predecible. Por lo que básicamente XBee es propiedad de Digi basado en el protocolo Zigbee. En términos simples, los XBee son módulos inalámbricos fáciles de usar.

Xbee es el nombre comercial de la familia de módulos de radio con un factor de forma compatible de Digi International

Los módulos de radio XBee pueden ser usados con un número mínimo de conexiones: Power (3.3V), GND y TX/RX de la UART, junto con otras conexiones recomendables como reset y sleep. La mayoría de los módulos XBee tienen otras conexiones omo flow control, input/output (I/O), analog-to-digital converter (A/D) and indicator

Los módulos XBee funcionan a 3.3V y los pines no son tolerantes a 5V. Desde Arduino podemos alimentar un módulo XBee, pero la comunicación serie en Arduino es a 5V y en el módulo XBee es a 3.3V.

Se puede usar un divisor de tensión como este:

Es posible usar un módulo adaptador de 5V a 3.3V como este https://www.parallax.com/sites/default/files/downloads/32401-XBee-5V-3.3V-Adapter-v1.2.pdf

XBee:

La familia de módulos de radio XBee es:

  • XBee 802.15.4 — The initial point-to-point topology or star topology module running the IEEE 802.15.4 protocol
  • XBee-PRO 802.15.4 — A higher power, longer range version of the XBee 802.15.4
  • XBee DigiMesh 2.4 — A 2.4 GHz XBee module that uses DigiMesh, a sleeping mesh networking protocol developed by Digi International
  • XBee-PRO DigiMesh 2.4 — A higher power, longer range version of the XBee DigiMesh 2.4
  • XBee ZB — An XBee module that incorporates the ZigBee PRO mesh networking protocol
  • XBee-PRO ZB — A higher power, longer range version of the XBee ZB
  • XBee ZB SMT — A surface mount XBee running the ZigBee protocol
  • XBee-PRO ZB SMT — A higher power, longer range version of the XBee ZB SMT
  • XBee SE — An XBee ZB module that incorporates the security cluster for the ZigBee Smart Energy public profile
  • XBee-PRO SE — A higher power, longer range version of the XBee SE
  • XBee-PRO 900HP — A 900 MHz XBee-PRO module with up to 28 mile range with high-gain antenna that supports DigiMesh networking protocol
  • XBee-PRO 900 (Legacy) — A 900 MHz proprietary point-to-point and star topology module, not recommended for new design
  • XBee-PRO XSC (S3B) — A 900 MHz module compatible over the air with the Digi 9XStream radios
  • XBee-PRO DigiMesh 900 (Legacy) — A 900 MHz module that uses DigiMesh, not recommended for new design (see XBee-PRO 900HP for new designs)
  • XBee-PRO 868 — An 868 MHz 500 mW long-range module that supports proprietary point-to-point and star, for use in Europe
  • XBee 865/868LP — An 868 MHz XBee module that uses DigiMesh, available in Surface Mount form-factor (also configurable to 865 MHz for use in India)
  • XBee ZigBee (S2C) — Incorporates an upgrade to the transceiver chip, replacing the Silicon Labs EM250 with the Silicon Labs EM357, effectively adding more RAM, more flash, faster clock speed and lowering the current draw.[11]
  • XBee-PRO ZigBee (S2C) — A higher power, longer range version of the XBee ZigBee (S2C)

Nuevos módulos de XBEE SMD para Europa: http://www.digi.com/pdf/ds_xbee868lp.pdf. Son los 868LP operan en la frecuencia 863-870 MHz utilizando 20 canales para ofrecer más referencia e inmunidad en 868 MHz.

Kits de aprendizaje de XBee de Digi:

Los módulos más sencillos de Xbee son los serie 1 (también llamada 802.15.4) que no soportan mesh e implementan el estándar 802.15.4. Son los más fáciles de usar y los más recomendados para empezar a trabajar. Más información: http://www.digi.com/pdf/ds_xbeemultipointmodules.pdf y ejemplo de uso: http://examples.digi.com/get-started/basic-xbee-802-15-4-chat/

Para usar un módulo XBee con Arduino es necesario un Shield o un adaptador para conectar el puerto serie de XBee con el de Arduino.

Para usar o configurar un módulo XBee con Ordenador es necesario un adaptador que generalmente tiene un chip FTDI que hace de pasarela entre el puerto serie y el USB.

XBee explorer:

Guía de uso de XBee Shield: https://learn.sparkfun.com/tutorials/xbee-shield-hookup-guide

Buena página para saber más de XBee: http://xbee.cl/

Guía de compra de XBee

Digi dispone de una amplia variedad de módulos con diferentes características para diferentes funciones/aplicaciones. A la hora de elegir, esta tabla de comparación puede ser útil: http://www.digi.com/pdf/chart_xbee_rf_features.pdf

Y en este enlace también explica perfectamente como elegir nuestro módulo XBee: http://docs.digi.com/display/XBeeArduinoCodingPlatform/XBee+buying+guide

Los parámetros que afectan a la hora de elegir un módulo en función de la aplicación son:

  • El país de uso, las frecuencias están reguladas en cada país y debe tenerse en cuenta.
  • Alcance de la señal. Para un mayor rango será necesario seleccionar una antena o usar un módulo XBee-PRO
  • Consumo del módulo
  • Topología de la red de nuestra aplicación.

Guia de compra de módulos XBee de sparkfun: https://www.sparkfun.com/pages/xbee_guide

Resellers de Digi para compras on-line:

Para cualquier duda o ayuda, se puede recurrir al foro de digi en http://www.digi.com/support/forum/

Arquitectura Básica de una Red XBee

Una red XBee la forman básicamente 3 tipos de elementos. Un único dispositivo Coordinador, dispositivos Routers y dispositivos finales (end points). Los módulos XBee son versátiles a la hora de establecer diversas topologías de red, dependiendo la serie de XBee que escojamos pueden crearse redes

El Coordinador: Es el nodo de la red que tiene la única función de formar una red. Es el responsable de establecer el canal de comunicaciones (como hablábamos antes) y del PAN ID (identificador de red) para toda la red. Una vez establecidos estos parámetros, el Coordinador puede formar una red, permitiendo unirse a él a dispositivos Routers y End Points. Una vez formada la red, el Coordinador hace las funciones de Router, esto es, participar en el enrutado de paquetes y ser origen y/o destinatario de información.

Los Routers: Es un nodo que crea y mantiene información sobre la red para determinar la mejor ruta para enrutar un paquete de información. Lógicamente un router debe unirse a una red Zigbee antes de poder actuar como Router retransmitiendo paquetes de otros routers o de End points.

End Device: Los dispositivos finales no tienen capacidad de enrutar paquetes. Deben interactuar siempre a través de su nodo padre, ya sea este un Coordinador o un Router, es decir, no puede enviar información directamente a otro end device. Normalmente estos equipos van alimentados a baterías. El consumo es menor al no tener que realizar funciones de enrutamiento.

Los módulos XBee son versátiles a la hora de establecer diversas topologías de red, dependiendo la serie de XBee que escojas puedes crear redes:

  • Punto a punto
  • Estrella
  • Malla
  • Árbol
  • Mixtas

Módulos XBee

Los módulos XBee de digi son pequeños módulos RF (radio frecuencia) que transmiten y reciben datos sobre el aire usando señales de radio. La capacidad inalámbrica es esencial cuando se quieren instalar sensores en lugares donde no hay cables.

Los módulos XBee son altamente configurables y soportan múltiples protocolos para permitir usarlo tanto en un enlace punto a punto como en un diseño complejo con muchos dispositivos en una red mesh.

Algunos ejemplos de uso de los módulos XBee:

  • Controlar un robot remotamente
  • Añadir inteligencia a una casa edificio sin tener que realizar cableados
  • Para aplicaciones industriales, por ejemplo para monitorizar temperatura, presión o máquinas complejas.

Más información en: http://www.digi.com/resources/documentation/Digidocs/90001456-13/Default.htm#concepts/c_introduction_to_xbee_modules.htm%3FTocPath%3D_____3

Las series

XBee Series 1 (también llamados XBee 802.15.4)  – Son la serie más fácil para trabajar, no necesitan ser configurados, pero incluso así se pueden obtener beneficios de estos módulos. Debido a que son fáciles para trabajar, son los más recomendables especialmente si se está empezando. Para comunicaciones Punto-a-Punto, estos módulos trabajan tan bien como los de la Serie 2, pero sin todo el trabajo de pre configuración previo. El hardware de las Series 1 y las Series 2/2.5/ZB NO SON COMPATIBLES. No trates de mezclarlos, no funcionará.

Guia de usuario serie 1:

http://www.hmangas.com/Electronica/Datasheets/Shield%20XBee%20Arduino/XBee-Guia_Usuario.pdf

XBee Znet 2.5 (Formalmente Series 2) Retirado – Los módulos Serie 2 deben ser configurados antes de ser usados. Pueden funcionar en modo Transparente o por medio de comandos API, pero todo esto depende de que firmware se configure en los módulos. También pueden funcionar en una red mesh. Son más difíciles que usar que los de la Serie 1. No existe una forma en que estos módulos sean compatibles con los de la Serie 1. Los módulos Znet 2.5 ya no se venden, pero han sido reemplazados con módulos ZB más compatibles. Datasheet

https://www.sparkfun.com/datasheets/Wireless/Zigbee/XBee-2.5-Manual.pdf

XBee ZB (el actual módulo Series2) – Básicamente es el módulo Znet 2.5, pero con un nuevo firmware. Esto significa que también funcionan en modo transparente o por medio de comandos API. También funcionan en redes mesh. Estos a menudo son llamados módulos de Serie 2, por lo que si escuchas a alguien hablar sobre esta serie, probablemente estén hablando de estos módulos. Puede que no sea el término correcto, pero se hace distinción de estos con los módulos de la Serie 1, los cuales son los más populares.

XBee 2B (el imás actual módulo Series2) – Son nuevos módulos que poseen mejoras en el hardware respecto de los de la Serie 2, básicamente son los mismo que los anteriores pero con un firmware más nuevo, mejorando por ejemplo el uso de la potencia. Funcionan con el Firmware del módulo ZB, pero debido al cambio de hardware, ya no pueden funcionar con el firmware del módulo Znet 2.5. Por lo que ten cuidado si agregas uno de estos módulos a una red ya existente que utilice módulos Znet 2.5. Actualmente algunas tarjetas son 2B y otras son ZB.

Básicamente el problema es mezclarlos.

900 MHz vs 2.4GHz – La mayoría de los módulos XBee operan a 2.4 GHz , pero hay unos pocos que operan a 900 MHz. Básicamente los de 900 MHz pueden llegar muy lejos con una antena de alta ganancia (hasta casi 24 Km). Además a menor frecuencia, la señal posee mayor penetración. Otro punto importante es que los módulos de 900 MHz no están permitidos en algunos países,  Digi tiene versiones de 868 MHz que sí está permitido en la mayoría de los países.

Documentación módulos XBee:

Más información http://xbee.cl/tutorial-xbee/

Regulaciones en paises: http://www.digi.com/resources/certifications

Toda la documentación de digi: http://www.digi.com/resources/documentation/digihelp/default.htm

XCTU

Para configurar y usar los módulos XBee es necesario descargar e instalar XBee Configuration and Test Utility (XCTU) que es un software multiplataforma que permite interactuar con los módulos mediante un interfaz gráfico. Esta aplicación incluye herramientas que hacen muy sencillo configurar y probar los módulos XBee.

XCTU nos sirve para configurar, inicializar, actualizar firmware y testear los módulos XBee, comunicándose por puerto serie a los módulos. Una ventaja de este software es que puedes ver rápidamente un resumen de todos los parámetros del módulo y una descripción de ellos.

Más información y descarga de XCTU: http://www.digi.com/products/xbee-rf-solutions/xctu-software/xctu

XCTU User Guide: http://www.digi.com/resources/documentation/digidocs/90001458-13/default.htm

Drivers para los módulos: http://www.digi.com/support/productdetail?pid=3257&type=drivers

XCTU

Para empezar a usarlo es tan simple como instalar el software XCTU, conectar el módulo RF a la placa de desarrollo, que tiene un módulo FTDI que saca un interfaz USB y luego enchufar el USB a nuestro PC. Para usarlo con USB es necesario poner el jumper en la posición UART en lugar de la de loopback.

Más información de la placa de desarrollo de XBee: https://docs.digi.com/display/XBeeHardware/XBee+Grove+Development+Board

Tutorial XCTU: http://docs.digi.com/display/XBeeArduinoCodingPlatform/XCTU+walkthrough

Cómo configurar los módulos: http://docs.digi.com/display/XCTU/Configure+your+modules

Primera Aplicación. Chat Básico

El primer ejemplo es un chat básico para transmitir en tiempo real mensajes por el aire con los módulos XBee.

Ejercicio completo: http://www.digi.com/resources/documentation/Digidocs/90001456-13/Default.htm#containers/cont_basic_chat.htm%3FTocPath%3DBasic%2520chat%7C_____0

Para configurar un módulo XBee con el XCTU, lo primero es poner el modo configuración y descubrir los módulos, seleccionando el puerto COM del USB al que he conectado la placa de desarrollo.

Para poder ver el módulo remoto es necesario configurar los parámetros DH y DL de la MAC del módulo remoto.

NOTA: Si se conectan los módulos en las placas de desarrollo y se alimenta mediante batería, los módulos trabajan de forma autónoma, por ejemplo recogiendo datos de un sensor y mandandolo al nodo central

XCTU2

Cómo se comunican los dispositivos XBee

Los dispositivos XBee se comunican entre ellos a través del aire enviando y recibiendo mensajes. Estos dispositivos no pueden gestionar los datos enviados o recibidos, sin embargo pueden comunicarse con otros dispositivos a través del interfaz serie.

Los dispositivos XBee transmiten al aire los datos que llegan del puerto y transmiten al puerto serie cualquier dato que llega por el aire. Los microcontroladores o los PCs pueden controlar que envían los dispositivos XBee y gestionan los mensajes inalámbricos entrantes.

Por lo tanto tenemos dos tipos de comunicación en los dispositivos XBee:

  • Comunicación inalámbrica: es la comunicación entre los módulos XBee, estos módulos deben ser parte de la misma red y usar la misma frecuencia de radio.
  • Comunicación serie: es la comunicación entre el módulo XBee y el microcontrolador o el PC a través de un puerto serie.

En la comunicación inalámbrica los módulos transmiten y reciben información a través de la modulación de las ondas electromagnéticas. Para que se realice la transmisión ambos módulos deben estar en la misma frecuencia y en la misma red. Esto se determina por dos parámetros:

  • Channel (CH) es la frecuencia usada para comunicar, es decir, el canal dentro de la red.
  • Personal Area  Network Identifier (ID) es un identificador único que establece que los módulos están en la misma red.

Un módulo XBee solo recibirá y transmitirá datos a otros XBee dentro de las misma red (mismo ID) y usando el mismo canal (mismo CH).

Direccionamiento

Los módulos de XBee tienen varias direcciones diferentes, cada una con un propósito.

Type Example Unique
64-bit 0013A20012345678 Always
16-bit 1234 Yes, but only within a network
Node identifier Bob’s module Uniqueness not guaranteed

Cada módulo de XBee tiene una dirección única de 64 bits, esta dirección se llama MAC y es análogo a la MAC de las tarjetas de red o wifi. El valor de 64 bits está compuesto por los parámetros Serial Number High (SH) y Serial Number Low (SL), que aparecen impresos en la parte trasera del módulo. El valor SH es generalmente el mismo para todos los módulos XBee (0013A200) e identifica los módulos de Digi. La dirección 000000000000FFFF está reservada para mandar un mensaje de broadcast.

Una dirección de 16 bit puede ser asignada a cada módulo XBee y no es única. Este valor puede leerse o escribirse a través del parámetro MY. Si el valor es FFFF se deshabilita la recepción de paquetes con direcciones de 16 bit.

El identificador de nodo es un string corto que permite identificar fácilmente un módulo con un nombre. Para leer o escribir el node identifier se hace a través del parámetro NI.

Comunicación serie

Un módulo XBee puede funcionar como un módulo independiente o conectado a un microcontrolador o PC. Cuando opera como módulo independiente simplemente manda datos al nodo central de los sensores o dispositivos conectados a los puertos del módulo. Cuando está conectado a un microcontrolador o un PC, el módulo XBee usa la comunicación serie. En el caso de Arduino, este manda a través del puerto serie datos al módulo XBee para que sean transmitidos por el aire.

El módulo XBee hace de interface con el microcontrolador a través de la UART (puerto serie asíncrono). Para más información ver las guías de usuario:

Un arduino o el dispositivo externo conectado a uno módulo XBee mediante puerto serie puede tener varios modos de operación en función de cómo se comunican por el puerto serie. Los módulos XBee soportan dos modos de operación:

  • Modo Transparente (Aplicación transparente). La radio pasa la información tal cual la recibe por el puerto serie. Este modo tiene funcionalidades limitadas pero es la forma más sencilla de comenzar.
  • Modo API (Aplicación de programación). En este caso un protocolo determina la forma en que los datos son intercambiados. Este modo permite hacer una red de comunicaciones más grande.

Ventajas y desventajas de un modo u otro: http://www.digi.com/resources/documentation/Digidocs/90001456-13/Default.htm#concepts/c_xbee_comparing_at_api_modes.htm%3FTocPath%3DHow%2520XBee%2520devices%2520work%7CWireless%2520communication%7CSerial%2520communication%7C_____2

Más información en: http://www.digi.com/resources/documentation/Digidocs/90001456-13/Default.htm#containers/cont_how_xbees_work.htm%3FTocPath%3DHow%2520XBee%2520devices%2520work%7C_____0

Modo Transparente

En modo transparente el módulo XBee funciona de forma que todo lo recibido por el puerto serie es enviado inmediatamente al aire y todo lo recibido por la radio es se manda tal cual al puerto serie.

En modo transparente para comunicar dos módulos, es necesario configurar la dirección del destino en el módulo que envía datos. Esta dirección se programa en los parámetros:  Destination Address High (DH) y Destination Address Low (DL).

El modo transparente tiene muchas limitaciones, por ejemplo al trabajar con varios módulos es necesario configurar la dirección de destino antes de mandar un mensaje. Sin embargo, el modo transparente es perfecto cuando hay comunicación punto a punto entre solo dos elementos.

En modo transparente podemos usar el modo comando que es un estado en que los caracteres enviados al módulo XBee son interpretados como comandos en lugar de transmitirlos vía radio. Para cambiar a modo comando hay que mandar el string “+++”, cuando el módulo recibe un segundo de silencio seguido del string “+++” (sin /n o /r) y otro segundo de silencio, deja de mandar datos por radio y comienza a aceptar comandos locales. Al entrar en modo comando si transcurren 10 segundo sin recibir datos automáticamente sale de modo comando y vuelve a modo transparente. Para salir del modo configuración usar ATCN.

El propósito del modo comando es leer o escribir la configuración local del módulo XBee. Para ello se usando los comandos AT (https://es.wikipedia.org/wiki/Conjunto_de_comandos_Hayes) . Un comando AT comienza con las letras “AT” seguida de dos caracteres que identifican el comando a ejecutar y algunos otros parámetros opcionales.

Por lo tanto desde un Arduino sería muy sencillo configurar un módulo XBee en lugar de usar el interfaz gráfico XCTU.

Más información en: http://www.digi.com/resources/documentation/Digidocs/90001456-13/Default.htm#containers/cont_xbee_transparent_mode.htm%3FTocPath%3DXBee%2520transparent%2520mode%7C_____0

Modo API

El modo API ofrece un interfaz estructurado donde los datos son comunicados a través del interfaz serie en paquetes organizados y en un determinado orden. Esto permite establecer una comunicación compleja entre módulos sin tener que definir un protocolo propio.

Por defectos los módulos XBee trabajan en modo transparente, pero esto tiene unas limitaciones:

  • Si un módulo necesita transmitir mensajes a módulos diferentes debe cambiar la configuración para establecer el nuevo destino.
  • Para leer y escribir la configuración del módulo hay que entrar primero en modo comando.
  • En modo transparente un módulo XBee no puede distinguir el origen de la comuinicación que recibe.

Para resolver estas limitaciones XBee da la alternativa del modo API (Application Programming Interface).

Ventajas del modo API:

  • Configurar módulos locales y remotos en la red y sin necesidad de entrar en modo comando.
  • Comunicar con uno o varios destinatarios
  • Identificar el módulo que ha mandado la comunicación
  • Recibir el estado de la transmisión de los paquetes
  • Obtener la fuerza de la señal de los paquetes recibidos
  • Hacer gestión y diagnóstico de la red.
  • Hacer funciones avanzadas domo actualización de firmware remota.

Estructura de la Trama

En modo API los datos enviados están estructurados en una trama. Se envían a través de interfaz serie de XBee y contiene el mensaje inalámbrico e información adicional como la calidad de la señal.

La estructura de la trama es:

Start

delimiter

Length Frame data Checksum
Frame

type

Data
1 2 3 4 5 6 7 8 9 n n+1
0x7F MSB LSB API

frame

type

Frame-type-specific data Single

byte

API frame type determina el tipo de trama e indica cómo está organizada la información de los datos enviados. Los tipos de tramas soportadas dependen del tipo de módulo de Xbee que usemos. Más información para lo módulos usados en página 85 de http://ftp1.digi.com/support/documentation/90000982.pdf

Checksum ayuda a comprobar la integridad de los datos mandados. Las tramas enviadas por puerto serie con checksum incorrecto nunca serán procesadas por el módulos y serán ignoradas.

Para configurar el modo AP, se modifica el parámetro AP. Permite seleccionar entre los dos modos API soportados y el modo por defecto que es el transparente.

Mode AP value Description
Transparent 0 API modes are disabled and the module operates in transparent mode
API 1 1 API mode without escaped characters
API 2 2 API mode with escaped characters

La diferencia ente API 1 y API 2 es que las tramas usan caracteres de escape. Puesto que la transmisión por el aire solo es del payload, dos módulos con diferente configuración API 1 y API 2 pueden comunicarse sin problemas.

El modo AP non-escaped (API 1) se basa únicamente en el delimitador de inicio y la longitud de los bytes para diferenciar las tramas, si los bytes en un paquete se pierden, la cuenta de bytes será incorrecta y el siguiente paquete (trama) también se perderá. API escaped (API 2) implica secuencias de caracteres de escape en una trama para mejorar la fiabilidad especialmente en entornos ruidosos.

La estructura de la trama es básicamente la misma en ambos modos API pero en API 2, todos los bytes excepto el delimitador de inicio deben estar escapados si es necesario. Los siguientes bytes de datos deben ser escapados en modpo API 2:

  • 0x7E: Start delimiter
  • 0x7D: Escape character
  • 0x11: XON
  • 0x13: XOFF

El modo API 2 garantiza que todos los bytes 0x7E recibidos son delimitadores de inicio, este carácter no puede ser parte de cualquier otro campo de la trama (longitud, datos o checksum), puesto que debe estar escapado. Para escapar un carácter, insertar 0x7D (carácter de escape) y añadirlo con el byte a ser escapado (XOR con 0x20). En modo API 2 la longitud no incluye los caracteres de escape y el checksum es calculado con los datos no escapados.

Configurar un módulo local XBee en modo API

Para consultar o modificar un valor de configuración de un módulo local (módulo conectado directamente al puerto serie), es necesario usar los comandos AT. Son los mismos comandos usados en modo transparente pero incluyendolo en una trama de tipo comando AT (0x08 o 0x09) y la respuesta vuelve en una trama de tipo respuesta AT (0x88).

Ejemplo: Configurar un módulo local en modo API. http://www.digi.com/resources/documentation/Digidocs/90001456-13/Default.htm#containers/cont_sending_frames.htm

Cuando un módulo está en modo API, al usarlo con el SW XCTU y entrar en la consola, la vista es diferente a si está en modo transparente. Además desde consola hay una utilidad para generar una trama con el frame generator.

Configuración Remota de un módulo XBee

Trabajar en modo API nos permite configurar un módulo remoto al que estamos conectados. Cualquier comando AT usado en local se puede usar en un módulo remoto. Para ello se manda una Remote AT Command Request (0x17) al módulo remoto.

La respuesta del módulo remoto al comando AT es Remote AT Command Response (0x97) con el resultado del comando procesado por el módulo remoto. Si el frame ID del  Remote AT Command es0, esta respuesta no es enviada.

Transmitir y recibir datos inalámbricamente en modo API

Esta imagen resume el intercambio de información en los puestos serie de los módulos.

  1. Se manda por el puerto serie una Petición de transmisión (0x10) o un Explicit Addressing Command Frame (0x11) al módulo XBee A.
  2. El módulo XBee A transmite por el aire los datos de la trama al módulo configurado como destino, en este caso el módulo XBee B
  3. El módulo remoto B recibe los datos por el aire y manda por su puerto serie una trama de paquete recibido (0x90) o Explicit Rx Indicator (0x91), dependiendo del valor de API Options (AO). Esta trama contiene los datos recibidos por el aire y la dirección de origen del módulo que la ha transmitido, en este caso XBee A.
  4. El módulo remoto B transmite un paquete de wireless acknowledge con el estado al XBee A
  5. El módulo XBee A manda un paquete Transmit Status (0x8B) a través de su puerto serie con el estado de las transmisión.

Ejemplo: Transmitir y recibir datos en modo API http://www.digi.com/resources/documentation/Digidocs/90001456-13/Default.htm#containers/cont_transmit_and_receive_data_with_xctu.htm (El tipo de trama es un Tx Request 0x00 del protocolo 802.15.4 y no como pone en la práctica un Transmit Request 0x10 del protocolo ZigBee)

Más información en http://www.digi.com/resources/documentation/Digidocs/90001456-13/Default.htm#containers/cont_api_mode.htm

Librerías Xbee

Para poder manejar el modo API disponemos de librerías que nos ayudan a generar la trama a enviar y a interpretar la trama recibida. Estas librerías nos ayudan a interpretar las tramas de API.

Seguridad y cifrado

Los módulos XBee pueden ser configurados para comunicación segura mediante claves de cifrado.

Los datos son cifrados antes de ser enviados y luego en el receptor son descifrados para poder usarlos. Activar la seguridad en una red XBee puede producir un ligero incremento en latencia y tamaño de los paquetes enviados.

Para habilitar la comunicación segura se deben configurar los siguientes parámetros con el mismo valor en todos los dispositivos de la red:

  • EE = 1: AES Encryption Enable
  • KY: AES Encryption key que debe ser un string de 32 caracteres hexadecimales. Una vez configurado este valor es imposible recuperarlo.

El cifrado es de 128 bits AES.

Ahorro de energía

Los módulos XBee tienen capacidades de ahorro de energía. los módulos se pueden poner en estado sleep y apenas consumir energía, pudiendo llegar a una duración de batería de varios años.

El protocolo 802.15.4 contiene cuatro conductas básicas para el modo sleep que se puede dividor en dos categorías: pin-controlled sleep mode y cyclic sleep mode. Por defectos el modo sleep está siempre deshabilitado.

Los parámetros básicos para configurar en modo sleep son:

  • SM (Sleep Mode)
  • ST (Time before sleep)
  • SP (Cyclic sleep period)

Modo pin-controlled sleep: este modo es controlado por el Sleep_RQ (pin 9) de forma que cuando es puesto a HiGH (3.3 V) entra en modo sleep. (SM = 1)

Modo Cyclic Sleep mode: el módulo se despierta y vuelve a modo sleep en con una programación fija basada en el tiempo. Con SM = 4 se activa el modo y con SM = 5 además de activar el modo cíclico, permite activar a través del pin 9, siendo una mezcla de ambos modos. En estos dos modos se debe configurar los parámetros ST y SP.

Para comunicación bidireccional en modos sleep, los protocolos ZigBee o DigiMesh pueden dar funcionalidades más apropiadas.

Los pines de los módulos relacionados con el modo sleep son el pin 9 que pone el módulo en modo sleep cuando está a HIGH (3.3V) y el pin 13 es una salida que se pone a HIGH cuando está despierto o a LOW cuando está como sleep, este pin se puede conectar a un led o a una entrada del microcontrolador.

Para más información ver guía de usuario del correspondiente módulo: http://ftp1.digi.com/support/documentation/90000982.pdf

Más información en: http://www.digi.com/resources/documentation/Digidocs/90001456-13/Default.htm#containers/cont_explore_low_power.htm

Ejercicio: http://www.digi.com/resources/documentation/Digidocs/90001456-13/Default.htm#tasks/t_ex_enable_sleep.htm

Comandos AT

Para entrar en modo comando a un XBee hay que poner la cadena “+++” y esperar a que nos devuelva un “OK” el módulo. El propósito es leer o cambiar la configuración del módulo XBee.

Cuando se quiere leer o escribir una configuración, se debe enviar un comando AT con la siguiente estructura:

Comandos AT:

  • AT: comprueba la conexión con el módulo
  • ATCN: se sale del módulo de comandos.
  • ATWR: Escribe la configuración actual a la memoria no volátil y persiste después de iniciar de nuevo el módulo.

Todos los comandos para la serie 1 pueden verse en la guia de usuario: http://ftp1.digi.com/support/documentation/90000982.pdf

Más información en: http://www.digi.com/resources/documentation/Digidocs/90001456-13/Default.htm#concepts/c_at_commands.htm%3FTocPath%3DXBee%2520transparent%2520mode%7CCommand%2520mode%7C_____1

Pin Pairing

Todos los módulos XBee tienen un conjunto de pines que pueden usarse como entradas y salidas sin necesidad de conectar un microcontrolador externo.

Pin pairing se refiere a la comunicación directa de los pines entre dos módulos XBee. Esto enlaza virtualmente uno de los pines del XBee directamente con a los pines de otro XBee, por ejemplo para un timbre inalámbrico.

Los módulos de la serie 1 tienen 9 pines de I(O, seis de los cuales pueden leer valores analógicos.

Ejercicio completo en: http://www.digi.com/resources/documentation/Digidocs/90001456-13/Default.htm#reference/r_pin_pairing.htm%3FTocPath%3DXBee%2520transparent%2520mode%7CPin%2520pairing%7C_____0

Aclaraciones:

  • Al poner el parámetro MY a FFFF habilita la recepción de paquetes de direcciones 64 bits deshabilitando la recepción de paquetes de direcciones de 16 bit.
  • Señalar que el parámetro I/O Input Address (IA) enlaza una salida de XBee a una dirección de 64 bit específica. Esto significa que las salidas digitales de un XBee configuradas con el parámetro IA sólo aceptarán cambios de las peticiones que lleguen de la dirección configurada. De ahí la necesidad de configurar este parámetro en el XBee_B.
  • En el ejercicio no explica bien porque poner el parámetro IC a 10. La explicación completa está en: http://www.digi.com/resources/documentation/Digidocs/90001456-13/tasks/t_obtain_data_from_sensor.htm

NOTA IC = 0x10 = B10000

DIO12 DIO11 DIO10 DIO9 DIO8 DIO7 DIO6 DIO5 DIO4 DIO3 DIO2 DIO1 DIO0
0 0 0 0 0 0 0 0 1 0 0 0 0

Ejercicio: cómo obtener datos de un sensor conectado a un módulo XBee: http://www.digi.com/resources/documentation/Digidocs/90001456-13/tasks/t_obtain_data_from_sensor.htm

Ejemplo Pin Pairing para manejar un joystick

Para manejar un joystick y controlar remotamente un elemento inalámbricamente podemos usar el pin pairing de forma sencilla.

La configuración de los módulos XBee usando direcciones de 16 bits para simplificar quedaría:

Param Joystick Follower Effect
CH C C Define la frecuencia a usar. Debe ser la misma en ambos módulos.
ID 2015 2015 Define la red a la que se conecta la radio. Debe ser la misma en ambos módulos.
DH 0 DH y DL forma la dirección de destino. Es donde las notificaciones son mandadas cuando cambia el valor del pin. Se configura como dirección corta de 16 bits.
DL 5678
MY 1234 5678 Define la dirección corta de 16 bits.
D1 DI [3] DO Low [4] Configura el pin DIO1/AD1 en el joystick como entrada y en el follower como salida. Lo que ocurre en el joystick como entrada se transmite al follower como salida.
D2 DI [3] DO Low [4] Configura el pin DIO2/AD2 en el joystick como entrada y en el follower como salida.
D3 DI [3] DO Low [4] Configura el pin DIO3/AD3 en el joystick como entrada y en el follower como salida.
D4 DI [3] DO Low [4] Configura el pin DIO4/AD4 en el joystick como entrada y en el follower como salida.
IC 1E Configura en el joystick que pines monitorizar para mandar la señal al detectar un cambio. 00011110 (binario) = 1E (hexadecimal)
IA 1234 Defines the address of the transmitting module (leader) to pair for I/O.

Los pines I/O de Xbee son: http://www.digi.com/resources/documentation/Digidocs/90001456-13/Default.htm#reference/r_xbee_s3b_io_pins.htm

Con esta simple configuración ya puedo manejar remotamente con un joystick unas luces o incluso un coche con las conexiones adecuadas.

Modelos de Comunicación

Existen dos tipos de comunicación y en ambos casos es bidireccional:

  • Punto a punto
  • Punto a multipunto

Punto a punto

Para que se establezca la comunicación los módulos deben estar en el mismo canal (CH) y en la misma Network ID (ID), además para iniciar la comunicación es necesario saber la dirección MAC de 64-bit del destinatario. La forma en que se comunican dos módulos punto a punto depende si están en modo API o transparente.

Ejemplo de comunicación punto a punto en modo API: http://www.digi.com/resources/documentation/Digidocs/90001456-13/Default.htm#containers/cont_ex_chat.htm

Punto a multipunto

En este modelo un módulo puede comunicarse con un módulo o múltiples módulos que estén en la misma red. Esta comunicación implica un nodo central coordinador con varios nodos remotos (end devices) conectándose al nodo central.

En el protocolo 802.15.4 los módulos XBee tienen dos roles:

  • Coordinator, es el nodo central de la red. Inicia la red y permite a otros dispositivos conectarse, puede seleccionar la frecuencia del canal y hace la sincronización de la red. Para configurar un nodo como coordinador hay que cambiar el parámetro CE (Coordinator Enable) a 1.
  • End device, es un nodo remoto de la red. Puede comunicarse con el coordinador y con otros end devices de la red. Se puede poner en modo sleep.

Las redes mesh solo son soportadas en protocolo ZigBee o Digimesh.

Es posible hacer broadcast, es decir, mandar el mismo datos a todos los nodos posible de la red. Para mandar un broadcast, la dircción de destino debe ser 000000000000FFFF.

En el coordinador, cambiado el parámetro A2 es posible asociar end devices sin que conozcan el canal (CH) y el ID de red (ID) siendo inicializados por el coordinador.

Más información: http://www.digi.com/resources/documentation/Digidocs/90001456-13/Default.htm#concepts/c_comm_models.htm

I/O en módulos XBee

Todos los módulos XBee tienen un conjunto de pines que pueden usarse para conectar sensores o actuadores y configurarlos. A diferencia de un Arduino, estos módulos no pueden ejecutar un programa para interaccionar, sino que es necesario un elemento externo como un Arduino para programarlos o cambiar su comportamiento.

Con estos pines se puede recoger el dato de un sensor y mandarlo a otro módulo o encender una luz al estar conectado a un relé cuando recibe la señal sobre un pin configurado como salida.

Pines I/O para módulos XBee 802.15.4

Pin name Physical pin # Parameter
DIO0, AD0 20 D0
DIO1, AD1 19 D1
DIO2, AD2 18 D2
DIO3, AD3 17 D3
DIO4, AD4 11 D4
DIO5, AD5 15 D5
DIO6 16 D6
DIO7 12 D7
DI8 9 D8
PWM0 6 P0
PWM1 7 P1

(D = digital; I = input; O = output; AD = analog input; PWM = pulse-width modulation)

Leer Sensores

Los módulos XBee se pueden usar leer datos de una red de sensores. Para recibir los datos es necesario configurar los módulos remotos para escuchar en el pin donde se conecta el sensor y mandar los datos al módulo principal que estará conectado a una MCU o un ordenador.

En función del tipo de sensor o actuador que conectemos al pin del módulo deberemos configurarlo adecuadamente.

Hay dos formas de obtener datos de un sensor:

  • Haciendo una consulta para que lea todos los pines habilitados como entradas. Queried sampling (IS)
  • Transmitir automáticamente los datos del sensor de forma periódica o cuando un pin digital cambia. El parámetro IR configura la frecuencia con que se mandan los datos leídos de los sensores. El parámetro IC configura que pines monitorizar para detección de cambio, cuando los pines monitorizados detectan un cambio inmediatamente se leen los sensores y se mandan los datos.

Para seleccionar qué pines monitorizar, se asigna un valor binario a IC basado en este patrón:

DIO12 DIO11 DIO10 DIO9 DIO8 DIO7 DIO6 DIO5 DIO4 DIO3 DIO2 DIO1 DIO0
0 0 0 0 0 0 0 0 0 0 0 0 0

Ejercicios en:

Controlar Dispositivos

Un módulo XBee es capaz de recibir comandos y poner una salida digital o analógica a un valor al ocurrir un determinado evento, sin el uso de un microcontrolador externo.

Los módulos XBee 802.15.4 tienen 8 salidas digitales (D0 a D7) y pueden configurarse con una resistencia de pull up o pull down. Los módulos también tienen salida analógica mediante PWM, en el caso de los módulos XBee 802.15.4 tienen 2 salidas analógicas (P0 y P1)

Recordar que los módulos XBee van a 3.3 V.

Para mandar una actuación a un módulo hay que mandar un comando AT configurado de la manera correcta para actuar sobre un pin, una vez se ha configurado anteriormente como salida.

Ejercicios en:

Más información: http://www.digi.com/resources/documentation/Digidocs/90001456-13/Default.htm#containers/cont_inputs_and_outputs.htm

Señal y Rangos de Frecuencia

La distancia de alcance de la señal de los módulos XBee está afectada por diversos factores:

  • Algunos materiales pueden reflejar las ondas de radio provocando interferencias. En particular materiales metálicos.
  • Las ondas de radio pueden ser absorbidas por objetos en su camino
  • Las antenas pueden ajustarse para incrementar la distancia.
  • La línea de visión puede ayudar a incrementar la fiabilidad de la señal.

RSSI (Received Signal Strength Indicator) es el indicador de la cantidad de energía presente en una señal de radio. Midiendo la fuerza de la señal en la antena receptora es una forma de determinar la calidad del enlace de comunicación. Su valor se mide en dBm cuanto mayor sea el valor negativo la señal es más débil. Por lo tanto -50dBm es mejor que -60 dBm.

El pin 6 de los módulos XBee puede ser configurado como salida PWM con el valor de RSSI, para ello configurar P0 como RSSI [1]. También en el parámetro DB se guarda el valor de RSSI del último paquete recibido expresado en valor decimal.

Además del valor de RSSI, es conveniente medir la fiabilidad del enlace en porcentaje de paquetes perdidos, puesto que en entornos con interferencias el valor de RSSI puede ser alto pero el enlace será malo.

Antenas

A la de lograr un determinado alcance de un módulo, es importante la antena, para ello los módulos RF XBee disponen de distintos tipos de antenas:

  • PCB antenna: está formada en la propia PCB con trazo conductor.

  • Cable de antena integrada: es un pequeño cable de 80mm colocado perpendicularmente a la PCB y soldado directamente a la PCB

  • Whip antenna: una antena sólida pero flexible que sobresale 25mm del módulo. Esta antena aumenta el rango sobre la antena del chip pero en el exterior.

  • U.FL antenna: es un pequeño conector para una antena externa. Es una buena opción si el módulo está en una caja y queremos poner la antena en el exterior.

  • RP-SMA antenna: es un conector mayor para una antena externa.

Prueba de Rango

Una prueba de rango nos sirve para medir la calidad del enlace entre dos módulos XBee. XCTU permite hacer una prueba de rango que supone enviar paquetes desde un módulo local a uno remoto esperando el echo, contabilizando el número de paquetes enviados y recibidos y midiendo el RSSI.

Como hacer una prueba de rango: http://www.digi.com/resources/documentation/Digidocs/90001456-13/Default.htm#tasks/t_try_range_test.htm

Más información: http://www.digi.com/resources/documentation/Digidocs/90001456-13/Default.htm#containers/cont_signal_strength.htm

XBee Gateways

Hemos visto cómo hacer una red inalámbrica con los módulos XBee y como hay un intercambio de información entre los módulo. Ahora bien, si esos datos los queremos sacar fuera de esa red inalámbrica necesitaremos un gateway que nos saque esos datos a una red ethernet (Internet/Intranet) o a un bus de campo standard donde poder almacenar y mostrar los datos y estados de la red Xbee.

XBee to IP Gateway

Este gateway habilita la conexión remota, configuración y gestión de las redes Xbee con redes IP. Todos los datos Xbee enviados al gateway están automáticamente disponibles para aplicaciones on line via Device Cloud. Este gateway puede ejecutar aplicaciones python que comuniquen y gestionen la red XBee.

Más información: http://www.digi.com/products/xbee-rf-solutions/gateways/xbee-gateway

XBee RF Modems

Los módems XBee RF se usan para comunicar con sistemas que usen RS-232, RS-485 o interfaz USB.

Más información: http://www.digi.com/products/xbee-rf-solutions/modems/xbee-pro-900hp-rf-modems

Interacción Software – Xbee

Todo el código está disponible en:

Los proyectos propuestos en este tutorial para interacción de XBee con software, en este caso con processing son:

Librería XBee Java: https://github.com/digidotcom/XBeeJavaLibrary

Instalar la librería XBee java http://docs.digi.com/display/XBeeArduinoCodingPlatform/Installing+the+xbjlib+Processing+librarypara que una aplicación de processing pueda comunicarse con un modulo XBee

XBee y Arduino

Instalar librería XBee Arduino http://docs.digi.com/display/XBeeArduinoCodingPlatform/Installing+the+xbee-arduino+library

Librería: https://github.com/andrewrapp/xbee-arduino

Trabajando con Arduino: http://docs.digi.com/display/XBeeArduinoCodingPlatform/Working+with+Arduino

Primer proyecto http://docs.digi.com/display/XBeeArduinoCodingPlatform/Stop-It%21+LED+Game

Todo el código está disponible en:

Los proyectos propuestos en este tutorial para uso de XBee con Arduino son:

HW para Arduino

Los dos kits lleva los módulos Serie 1:

XBee Shields:

El Xbee Explorer:

Poner en marcha un Xbee shield:

XBee en la industria: http://www.digi.com/industries

Bluetooth en Arduino

Bluetooth es una especificación industrial para Redes Inalámbricas de Área Personal (WPAN) que posibilita la transmisión de voz y datos entre diferentes dispositivos mediante un enlace por radiofrecuencia en la banda ISM de los 2.4 GHz. Los principales objetivos que se pretenden conseguir con esta norma son:

  • Facilitar las comunicaciones entre equipos móviles.
  • Eliminar los cables y conectores entre estos.
  • Ofrecer la posibilidad de crear pequeñas redes inalámbricas y facilitar la sincronización de datos entre equipos personales.

Se denomina Bluetooth al protocolo de comunicaciones diseñado especialmente para dispositivos de bajo consumo, que requieren corto alcance de emisión y basados en transceptores de bajo costo.

Los dispositivos que incorporan este protocolo pueden comunicarse entre sí cuando se encuentran dentro de su alcance. Las comunicaciones se realizan por radiofrecuencia de forma que los dispositivos no tienen que estar alineados y pueden incluso estar en habitaciones separadas si la potencia de transmisión es suficiente. Estos dispositivos se clasifican como “Clase 1”, “Clase 2” o “Clase 3” en referencia a su potencia de transmisión.

Los dispositivos con Bluetooth también pueden clasificarse según su capacidad de canal:

Versión Ancho de banda
Versión 1.2 1 Mbit/s
Versión 2.0 + EDR 3 Mbit/s
Versión 3.0 + HS 24 Mbit/s
Versión 4.0 32 Mbit/s

La especificación de Bluetooth define un canal de comunicación a un máximo 720 kbit/s (1 Mbit/s de capacidad bruta) con rango óptimo de 10 m (opcionalmente 100 m con repetidores). Opera en la frecuencia de radio de 2,4 a 2,48 GHz con amplio espectro y saltos de frecuencia con posibilidad de transmitir en Full Duplex con un máximo de 1600 saltos por segundo. Los saltos de frecuencia se dan entre un total de 79 frecuencias con intervalos de 1 MHz; esto permite dar seguridad y robustez.

Tanto Bluetooth clásico como Bluetooth de baja energía aplican la característica de salto de frecuencia adaptativa (AFH – Adaptive Frequency Hopping) que detecta interferencias de. Por ejemplo, un dispositivo WLAN 802.11 b, g, n que transmite cercano, si se detecta tal interferencia, el canal se coloca automáticamente en la lista negra. Con el fin de manejar la interferencia temporal, un esquema implementado vuelve a intentar los canales de la lista negra y si la interferencia ha cesado el canal se puede utilizar. AFH impide que Bluetooth interfiera con otras tecnologías inalámbricas cercanas.

El hardware que compone el dispositivo Bluetooth está compuesto por dos partes:

  • un dispositivo de radio, encargado de modular y transmitir la señal.
  • un controlador digital, compuesto por una CPU, un procesador de señales digitales (DSP – Digital Signal Processor) llamado Link Controller (o controlador de Enlace) y de las interfaces con el dispositivo anfitrión.

El LC o Link Controller se encarga del procesamiento de la banda base y del manejo de los protocolos ARQ y FEC de la capa física; además, se encarga de las funciones de transferencia tanto asíncrona como síncrona, la codificación de audio y el cifrado de datos.

Bluetooth de baja energía, también denominada como Bluetooth LE, Bluetooth ULP (Ultra Low Power) y Bluetooth Smart, es una nueva tecnología digital de radio (inalámbrica) interoperable para pequeños dispositivos desarrollada por Bluetooth.

Los dispositivos BlueTooth pueden actuar como Masters o como Slaves. La diferencia es que un BlueTooth Slave solo puede conectarse a un master y a nadie más, en cambio un master BlueTooth, puede conectarse a varios Slaves o permitir que ellos se conecten y recibir y solicitar información de todos ellos, arbitrando las transferencias de información (Hasta un máximo de 7 Slaves).

Cada uno de los dispositivos que se identifican vía BlueTooth presentan una dirección única de 48 bits y además un nombre de dispositivo que nos sirva para identificarlo cómodamente a los humanos. Por eso cuando configuras tu móvil puedes especificar un nombre propio que será el que mostrarás a los demás cuando busquen tu teléfono en la inmediaciones.

La dirección propia también se puede identificar pero lógicamente, es un poco menos cómoda y tiene menos utilidad. Tampoco es raro establecer un protocolo IP sobre transporte BlueTooth, con lo que además de su identificación interna BlueTooth (Equivalente al MAC Ethernet) dispondrá de una dirección IP para conectarse a Internet. Por eso puedes conectarte vía Bluetooth a tu PC, por ejemplo, y a través de él conectarte a internet.

Así pues un nodo BlueTooth puede ser Master o Slave y dispone de una dirección única, así como de un nombre para identificarse y muy habitualmente también incluye un PIN de conexión o número de identificación que debe teclearse para ganar acceso al mismo.

Como el BlueTooth lo desarrolló Nokia para conectar teléfonos móviles, a otros dispositivos como auriculares, micrófonos o conexiones al audio del coche, existe un procedimiento definido que se llama Pairing (o emparejamiento) que vincula a dos dispositivos Bluetooth.

Cuando vinculas dos dispositivos BT, se inicia un proceso en el que ellos se identifican por nombre y dirección interna y se solicitan la clave PIN para autorizar la conexión.

Si el emparejamiento se realiza con éxito, ambos nodos suelen guardar la identificación del otro y cuando se encuentran cerca se vuelven a vincular sin necesidad de intervención manual. (Aunque para que tu BlueTooth pueda enviar o recibir música, debe aceptar otra norma posterior llamada Advanced Audio Distribution Profile (A2DP) y que en caso de ser algún sistema antiguo te impedirá la reproducción.)

Para manejar los módulos Bluetooth usamos comandos Hayes o AT: https://es.wikipedia.org/wiki/Conjunto_de_comandos_Hayes

Comandos AT básicos

  • AT+VERSION, versión del Firmware
  • AT+NAMEXXX, Programa el nombre que queremos presentar cuando alguien nos busque
  • AT+BAUDX, Fija la velocidad de comunicación entre el modulo y la consola según a la siguiente tabla:
    • 1 configura     1200bps
    • 2 configura     2400bps
    • 3 configura     4800bps
    • 4 configura     9600bps (Default)
    • 5 configura     19200bps
    • 6 configura     38400bps
    • 7 configura     57600bps
    • 8 configura     115200bps
  • AT+PINXXXX, configura el número de identificación personal, que se requerirá para establecer la vinculación
  • AT+ROLE Nos informa de si está configurado como Maestro 1, o como esclavo 0.
    • AT+ROLE1  Configura el modulo como Master.
    • AT+ROLE0  Configura el modulo como Slave.

Protocolo base de Bluetooth 802.15: https://es.wikipedia.org/wiki/IEEE_802.15

Los módulos HC-05 y HC-06 son Bluetooth V2. Pero con el tiempo han ido apareciendo módulos como los que conocemos que soportan el protocolo Bluetooth V4.0 o Low Energy al alcance de todos los bolsillos y los fabricantes chinos han empezado a suministrarlos de forma accesible, tales como los modelos HC-08 y HC-10.

El nuevo Bluetooth 4.0 es un nuevo protocolo diseñado pensando en disminuir todo lo posible las necesidades de energía de los dispositivos que lo usan, y de sobre todo de la propia comunicación que tradicionalmente ha sido de consumo insaciable.

Se le suele llamar también BLE por Bluetooth Low Energy, o simplemente Bluetooth LE. Mejora bastante el consumo previo, pero la distancia también disminuye.

BLE: http://www.atmel.com/products/wireless/bluetooth/default.aspx

Un poco de teoría de bluetooth:

Más información:

Bluetooth con Arduino

Para dotar de comunicación bluetooth con Arduino podemos hacerlo de varia formas:

Los módulo más frecuentes en el mercado son los módulos HC-06 y HC-05 que son muy económicos y están disponibles independientes o en modo SHIELD y para zocalo XBEE.

Manual del módulo: https://core-electronics.com.au/attachments/guides/Product-User-Guide-JY-MCU-Bluetooth-UART-R1-0.pdf

Como el módulo BlueTooth es básicamente un nodo BT conectado a un interface serie, podríamos en principio conectar los pines RX y Tx a los equivalentes de Arduino en los pines 0 y 1 digitales, sin más que cruzarlos (BT Tx  a Arduino Rx y BT Rx a Aduano Tx) y de hecho muchos ejemplos en Internet utilizan este esquema y se comunican con el BT mediante las familiares instrucciones de Serial.print ().

Sin embargo, puesto que los pines 0 y 1 se utilizan en la comunicación serie de Arduino con el PC a través del USB y por tanto, si los usamos para comunicar con el modulo BT, perderíamos la conexión con el PC, es mejor usar otros pines.

Para ello tenemos que importar una librería que habilite la comunicación serie con otros pines como es la librería SoftwareSerial.

NOTA el módulo HC-06, a diferencia del HC-05, no espera un terminador de línea como \n, si no que salta por tiempo y debemos tenerlo en cuenta a la hora de hacer el programa de conexión con Arduino.

Un ejemplo de cómo convertir un coche RC en bluetooth:

Ejercicios Bluetooth

El módulo que vamos a usar para las prácticas es el HC-05 que tiene 6 patillas.

El módulo HC-05, que puede configurarse tanto como Master que como Slave, y que además dispone de bastante más parámetros de configuración y capacidades de interrogación.

Mientras que el HC-06 entra en modo de programación en cuanto lo enciendes y mientras no haya nadie conectado por Bluetooth, el HC-05 es ligeramente más complicado de colocar en modo comandos y requiere una cierta manera de arrancado, concretamente requiere que el pin KEY, (que no estaba conectado el caso del HC-06) esté en HIGH cuando encendemos el módulo.

Conexión a Arduino

Como el modulo HC-05 funciona a 3,3 V hay bastante controversia en internet respecto a  si debemos o no, poner divisores de tensión para acceder a los pines del módulo con Arduino. Pero por las pruebas hechas y los tutoriales en principio no es necesario usar un divisor de tensión y  los pines son tolerantes a 5V, pero hacerlo bajo vuestra responsabilidad.

Fijaros que al hacer esta conexión, el LED del módulo HC-05, parpadea continuamente. Esto indica que no está pareado o vinculado. Cuando conectes algo al módulo, esta luz se quedará fija y es la forma de saber si hay conexión o no.

También usaremos un terminal bluetooth en nuestro móvil como:

Para esta práctica usaremos esta configuración:

En primer lugar, para que el HC-05 entre en modo comandos AT, requiere que cuando se enciende el módulo, el pin KEY este HIGH. Por eso hemos conectado la tensión Vcc del módulo BlueTooth al pin 8 de nuestro Arduino.

NOTA: El módulo  que vamos a usar tiene un botón, este botón es el que debemos pulsar para poner el módulo en modo configuración (comandos AT). También para usar algunos de los comandos importantes como AT+NAME, es necesario pulsar el botón al ejecutar el comando y que guarde los cambio.

El consumo del módulo es mínimo y nuestro Arduino es capaz de alimentarlo sin problemas, por eso el módulo se encenderá cuando pongamos HIGH en el pin 8. Esto nos permitirá poner en HIGH el pin digital 9, al iniciar nuestro programa y después levantar el pin 9, de este modo cuando arranque entrará sin más en el modo de comandos AT.

El resto de los pines se conectan de forma que Txd y Rxd se deben conectar cruzados con los pines de comunicación de Arduino, que usaremos mediante la librería software Serial. El pin State refleja, la situación en la que se encuentra el módulo y por ahora no vamos a utilizarlo.

Con este procedimiento garantizamos que el modulo HC-05 entra solo en modo AT comandos, y que nuestra consola nos va a servir para programarlo.

Para mandar comandos AT usaremos este sketch:

#include <SoftwareSerial.h>
SoftwareSerial BT1(10, 11); // RX | TX
void setup()
  { pinMode(8, OUTPUT);        // Al poner en HIGH forzaremos el modo AT
    pinMode(9, OUTPUT);        // cuando se alimente de aqui
    digitalWrite(9, HIGH);
    delay (500) ;              // Espera antes de encender el modulo
    Serial.begin(9600);
    Serial.println("Levantando el modulo HC-06");
    digitalWrite (8, HIGH);    //Enciende el modulo
    Serial.println("Esperando comandos AT:");
    BT1.begin(38400); 
  }

void loop()
  {  if (BT1.available())
           Serial.write(BT1.read());
     if (Serial.available())
        BT1.write(Serial.read());
  }

También podemos usar directamente el FTDI con el siguiente pineado:

Si todo está bien conectado veremos en consola:

Lista de comandos AT:

AT COMMAND LISTING
COMMAND FUNCTION
AT Test UART Connection
AT+RESET Reset Device
AT+VERSION Query firmware version
AT+ORGL Restore settings to Factory Defaults
AT+ADDR Query Device Bluetooth Address
AT+NAME Query/Set Device Name
AT+RNAME Query Remote Bluetooth Device’s
AT+ROLE Query/Set Device Role
AT+CLASS Query/Set Class of Device CoD
AT+IAC Query/Set Inquire Access Code
AT+INQM Query/Set Inquire Access Mode
AT+PSWDAT+PIN Query/Set Pairing Passkey
AT+UART Query/Set UART parameter
AT+CMODE Query/Set Connection Mode
AT+BIND Query/Set Binding Bluetooth Address
AT+POLAR Query/Set LED Output Polarity
AT+PIO Set/Reset a User I/O pin

Referencia de los comandos AT:

Es importante comprender, que en cuanto conectemos algún dispositivo a nuestro modulo Bluettotth HC-05, la luz roja dejará de parpadear y automáticamente saldremos del modo de comandos AT para entrar en el de transporte de información, es decir, cualquier cosa que le enviemos, incluyendo comandos AT, se consideraran texto plano que se reenviará al otro extremos de la conexión Bluetooth.

NOTA para nuestro módulo el parpadeo de las luces es de la siguiente forma:

  • Modo AT (configuración): parpadeo lento
  • Modo normal sin nada conectado: parpadeo rápido
  • Modo normal conectado: parpadeo lento con doble parpadeo

Los valores por defecto del módulo usado son:

  • Name = HC-05
  • Password = 1234
  • Baud rate in communication mode = 9600
  • Baud rate in AT/Command mode = 38400

Probar a mandar comandos AT y luego salir de modo AT con AT+RESET y comunicar entre el móvil y Arduino usando la aplicación “Bluetooth spp tools pro”.

Basic Bluetooth

Hacer el ejercicio basic_bluetooth donde encenderemos el led 13 mandando un 1 y lo apagaremos mandando un 0 desde el móvil con la aplicación: Bluetooth spp tools pro. Enlace: https://play.google.com/store/apps/details?id=mobi.dzs.android.BLE_SPP_PRO

Ejercicio41 – Bluetooth: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio41-Bluetooth/basic_bluetooth

Interacción Móvil-Arduino

Usar ardudroid para controlar los pines de Arduino desde el móvil:

Mandar a Arduino los datos de los sensores del móvil con sensoduino

Para saber todo sobre el módulo bluetooth y hacer más ejercicios:

Más información:

Enviar emails con Arduino

El Simple Mail Transfer Protocol (SMTP) (Protocolo para la transferencia simple de correo electrónico), es un protocolo de red utilizado para el intercambio de mensajes de correo electrónico entre ordenadores u otros dispositivos (Arduino, teléfonos móviles, etc.). Fue definido en el RFC 2821 y es un estándar oficial de Internet.

El funcionamiento de este protocolo se da en línea, de manera que opera en los servicios de correo electrónico. Sin embargo, este protocolo posee algunas limitaciones en cuanto a la recepción de mensajes en el servidor de destino (cola de mensajes recibidos). Como alternativa a esta limitación se asocia normalmente a este protocolo con otros, como el POP o IMAP, otorgando a SMTP la tarea específica de enviar correo, y recibirlos empleando los otros protocolos antes mencionados (POP O IMAP).

Más información en: http://es.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol y http://es.kioskea.net/contents/279-protocolos-de-mensajeria-smtp-pop3-e-imap4

Éste es un protocolo que funciona en línea, encapsulado en una trama TCP/IP. El correo se envía directamente al servidor de correo del destinatario. El protocolo SMTP funciona con comandos de textos enviados al servidor SMTP (al puerto 25 de manera predeterminada). A cada comando enviado por el cliente (validado por la cadena de caracteres ASCII CR/LF, que equivale a presionar la tecla Enter) le sigue una respuesta del servidor SMTP compuesta por un número y un mensaje descriptivo.

Esta es la secuencia de envío de un correo:

  • Al abrir la sesión SMTP, el primer comando que se envía es el comando HELO seguido por un espacio (escrito <SP>) y el nombre de dominio de su equipo (para decir “hola, soy este equipo”), y después validado por Enter (escrito <CRLF>). Desde abril de 2001, las especificaciones para el protocolo SMTP, definidas en RFC 2821, indican que el comando HELO sea remplazado por el comando EHLO.
  • El segundo comando es “MAIL FROM:” seguido de la dirección de correo electrónico del remitente. Si se acepta el comando, el servidor responde con un mensaje “250 OK”.
  • El siguiente comando es “RCPT TO:” seguido de la dirección de correo electrónico del destinatario. Si se acepta el comando, el servidor responde con un mensaje “250 OK”.
  • El comando DATA es la tercera etapa para enviar un correo electrónico. Anuncia el comienzo del cuerpo del mensaje. Si se acepta el comando, el servidor responde con un mensaje intermediario numerado 354 que indica que puede iniciarse el envío del cuerpo del mensaje.
  • Si se acepta el comando, el servidor responde con un mensaje “250 OK”.

smtp

Las especificaciones básicas del protocolo SMTP indican que todos los caracteres enviados están codificados mediante el código ASCII de 7 bits y que el 8º bit sea explícitamente cero. Por lo tanto, para enviar caracteres acentuados es necesario recurrir a algoritmos que se encuentren dentro de las especificaciones MIME.

Ejemplo de Conversación SMTP mediante telnet:

RFC 2821:

Para enviar correos electrónicos desde arduino, es como si lo hiciéramos utilizando telnet. Esto se hacía mucho antiguamente cuando los  servidores de correo no solían estar protegidos contra el reenvío de emails y cualquiera podía conectarse al puerto  25 de un servidor de correo y enviar un correo con un remitente falso.

Un ejemplo de como mandar correo electrónico con Arduino directamente:

Obviamente para poder enviar un correo de la forma anteriormente vista necesitamos un servidor SMTP no protegido. La gran mayoría de los servidores de correo requieren que nos autentiquemos por lo que se complica un poco el proceso de enviar correo a través de telnet pero esto no significa que no podamos hacerlo.

Podemos montar una raspberry pi que haga de servidor SMTP que reciba los correos de nuestro arduino y usar la raspberry pi para que reenvíe los correos a través de gmail u otro servicio de correo.

Por supuesto disponemos de librerías que implementan un cliente SMTP en arduino:

Ejercicio31-MandaCorreo: Mandar un correo desde Arduino

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio31-MandaCorreo

Otra estrategia para mandar correos desde Arduino es dejarlo en manos de un servidor, es decir, con Arduino mando un POST HTTP que recoge el servidor y este mediante PHP, python u otro lenguaje se encarga de mandar el correo con las librería que tiene disponibles.

Wifi en Arduino

El wifi es un mecanismo de conexión de dispositivos electrónicos de forma inalámbrica. Los dispositivos habilitados con wifi como Arduino, pueden conectarse a internet a través de un punto de acceso de red inalámbrica.

Wi-Fi es una marca de la Alianza Wi-Fi, la organización comercial que adopta, prueba y certifica que los equipos cumplen con los estándares 802.11 relacionados a redes inalámbricas de área local.

  • Los estándares IEEE 802.11b, IEEE 802.11g e IEEE 802.11n disfrutan de una aceptación internacional debido a que la banda de 2,4 GHz está disponible casi universalmente, con una velocidad de hasta 11 Mbit/s, 54 Mbit/s y 300 Mbit/s, respectivamente.
  • En la actualidad ya se maneja también el estándar IEEE 802.11ac, conocido como WIFI 5, que opera en la banda de 5 GHz y que disfruta de una operatividad con canales relativamente limpios. La banda de 5 GHz ha sido recientemente habilitada y, además, no existen otras tecnologías (Bluetooth, microondas, ZigBee) que la estén utilizando, por lo tanto existen muy pocas interferencias. Su alcance es algo menor que el de los estándares que trabajan a 2,4 GHz (aproximadamente un 10 %), debido a que la frecuencia es mayor (a mayor frecuencia, menor alcance).

Existen otras tecnologías inalámbricas como Bluetooth que también funcionan a una frecuencia de 2,4 GHz, por lo que puede presentar interferencias con la tecnología wifi. Debido a esto, en la versión 1.2 del estándar Bluetooth actualizó su especificación para que no existieran interferencias con la utilización simultánea de ambas tecnologías, además se necesita tener 40 000 kbit/s.

Existen varias alternativas para garantizar la seguridad de estas redes. Las más comunes son la utilización de protocolos de cifrado de datos para los estándares wifi como el WEP, el WPA, o el WPA2 que se encargan de codificar la información transmitida para proteger su confidencialidad, proporcionados por los propios dispositivos inalámbricos. La mayoría de las formas son las siguientes:

  • WEP, cifra los datos en su red de forma que sólo el destinatario deseado pueda acceder a ellos. Los cifrados de 64 y 128 bits son dos niveles de seguridad WEP. WEP codifica los datos mediante una “clave” de cifrado antes de enviarlo al aire. Este tipo de cifrado no está recomendado debido a las grandes vulnerabilidades que presenta ya que cualquier cracker puede conseguir sacar la clave, incluso aunque esté bien configurado y la clave utilizada sea compleja.
  • WPA: presenta mejoras como generación dinámica de la clave de acceso. Las claves se insertan como dígitos alfanuméricos.
  • WPA2 (estándar 802.11i): que es una mejora relativa a WPA. En principio es el protocolo de seguridad más seguro para Wi-Fi en este momento. Sin embargo requieren hardware y software compatibles, ya que los antiguos no lo son. Utiliza el algoritmo de cifrado AES (Advanced Encryption Standard).
  • IPSEC (túneles IP) en el caso de las VPN y el conjunto de estándares IEEE 802.1X, que permite la autenticación y autorización de usuarios.
  • Filtrado de MAC, de manera que solo se permite acceso a la red a aquellos dispositivos autorizados. Es lo más recomendable si solo se va a usar con los mismos equipos, y si son pocos.
  • Ocultación del punto de acceso: se puede ocultar el punto de acceso (router) de manera que sea invisible a otros usuarios.

Dispositivos de distribución o de red en wifi son:

  • Los puntos de acceso son dispositivos que generan un set de servicio, que podría definirse como una red wifi a la que se pueden conectar otros dispositivos. Los puntos de acceso permiten, en resumen, conectar dispositivos de forma inalámbrica a una red existente. Pueden agregarse más puntos de acceso a una red para generar redes de cobertura más amplia, o conectar antenas más grandes que amplifiquen la señal.
  • Los repetidores inalámbricos son equipos que se utilizan para extender la cobertura de una red inalámbrica, éstos se conectan a una red existente que tiene señal más débil y crean una señal limpia a la que se pueden conectar los equipos dentro de su alcance. Algunos de ellos funcionan también como punto de acceso.
  • Los enrutadores inalámbricos son dispositivos compuestos, especialmente diseñados para redes pequeñas (hogar o pequeña oficina). Estos dispositivos incluyen, un enrutador (encargado de interconectar redes, por ejemplo, nuestra red del hogar con Internet), un punto de acceso (explicado más arriba) y generalmente un conmutador que permite conectar algunos equipos vía cable (Ethernet y USB). Su tarea es tomar la conexión a Internet, y brindar a través de ella acceso a todos los equipos que conectemos, sea por cable o en forma inalámbrica.

Los estándares 802.11b y 802.11g utilizan la banda de 2,4 GHz. En esta banda se definieron 11 canales utilizables por equipos wifi, que pueden configurarse de acuerdo a necesidades particulares. Sin embargo, los 11 canales no son completamente independientes (un canal se superpone y produce interferencias hasta un canal a 4 canales de distancia). El ancho de banda de la señal (22 MHz) es superior a la separación entre canales consecutivos (5 MHz), por eso se hace necesaria una separación de al menos 5 canales con el fin de evitar interferencias entre celdas adyacentes, ya que al utilizar canales con una separación de 5 canales entre ellos (y a la vez cada uno de estos con una separación de 5 MHz de su canal vecino) entonces se logra una separación final de 25 MHz, lo cual es mayor al ancho de banda que utiliza cada canal del estándar 802.11, el cual es de 22 MHz. Tradicionalmente se utilizan los canales 1, 6 y 11, aunque se ha documentado que el uso de los canales 1, 5, 9 y 13 (en dominios europeos) no es perjudicial para el rendimiento de la red.

Esta asignación de canales usualmente se hace sólo en el Punto de acceso, pues los “clientes” automáticamente detectan el canal, salvo en los casos en que se forma una red “Ad-Hoc” o punto a punto cuando no existe punto de acceso.

Canales en 802.11 (wifi) frente a 802.15.4 (zigbee):

Y dentro del espectro electromagnético:

ISM (Industrial, Scientific and Medical) son bandas reservadas internacionalmente para uso no comercial de radiofrecuencia electromagnética en áreas industrial, científica y médica. En la actualidad estas bandas han sido popularizadas por su uso en comunicaciones WLAN (e.g. Wi-Fi) o WPAN (e.g. Bluetooth).

El uso de estas bandas de frecuencia está abierto a todo el mundo sin necesidad de licencia, respetando las regulaciones que limitan los niveles de potencia transmitida. Este hecho fuerza a que este tipo de comunicaciones tengan cierta tolerancia frente a errores y que utilicen mecanismos de protección contra interferencias, como técnicas de ensanchado de espectro

El espectro de RF para las comunicaciones inalámbricas pertenecientes a dispositivos compatibles con IEEE 802.11 opera en bandas de frecuencias de 2,4 GHz y 5 GHz y cada una de estas bandas tiene su propio comportamiento único que tiene un impacto directo en el rendimiento de la red.

Además, el 802.11n puede utilizar la banda de 5 GHz, que es casi siempre menos concurrida y con menos interferencia que la banda de 2,4 GHz. Pero también funciona en 2,4 GHz, y los clientes 802.11n pueden asociarse con facilidad allí. La Tabla 1 muestra las frecuencias disponibles para los diferentes tipos de clientes inalámbricos.

IEEE 802.11ac (también conocido como WiFi 5G o WiFi Gigabit) es una mejora a la norma IEEE 802.11n, se ha desarrollado entre el año 2011 y el 2013, y finalmente aprobada en enero de 2014.

El estándar consiste en mejorar las tasas de transferencia hasta 433 Mbit/s por flujo de datos, consiguiendo teóricamente tasas de 1.3 Gbit/s empleando 3 antenas. Opera dentro de la banda de 5 GHz, amplía el ancho de banda hasta 160 MHz (40 MHz en las redes 802.11n), utiliza hasta 8 flujos MIMO e incluye modulación de alta densidad (256 QAM).

Wi-Fi Direct es una norma que permite que varios dispositivos Wi-Fi se conecten entre sí sin necesidad de un punto de acceso intermedio.

Wi-Fi Direct incrusta en esencia un punto de acceso en forma de software (Soft AP), en cualquier dispositivo que deba soportar Direct. El soft AP proporciona una versión de Wi-Fi Protected Setup al ser pulsado el botón o con la configuración basada en PIN. Cuando un dispositivo ingresa al rango del anfitrión Wi-Fi Direct, éste se puede conectar usando el protocolo ad hoc existente, y luego recolecta información de configuración usando una transferencia del mismo tipo de la de Protected Setup. La conexión y configuración se simplifica de tal forma que algunos sugieren que esto podría reemplazar al Bluetooth en algunas situaciones. El estándar también incluye seguridad WPA2 y ofrece controlar el acceso a redes corporativas. Los dispositivos certificados para Wi-Fi Direct se pueden conectar “uno a uno” o “uno a muchos”, y no todos los productos conectados necesitan tener Wi-Fi Direct. Con un solo dispositivo Wi-Fi Direct habilitado se pueden conectar dispositivos con el estándar previo de Wi-Fi.

Además de funcionar en diferentes canales, varias redes Wi-Fi pueden compartir canalesUn conjunto de servicios (Sevice Set) es el conjunto de todos los dispositivos asociados con una red Wi-Fi particular. El conjunto de servicios puede ser local, independiente, extendido o de malla. Cada conjunto de servicios tiene un identificador asociado, el identificador de conjunto de servicios (SSID) de 32 bytes, que identifica la red en particular. El SSID se configura dentro de los dispositivos que se consideran parte de la red, y se transmite en los paquetes. Los receptores ignoran paquetes inalámbricos de redes con un SSID diferente.

Los nodos Wi-Fi que funcionan en modo ad-hoc se refieren a dispositivos que hablan directamente entre sí sin necesidad de hablar primero con un punto de acceso. Por ejemplo las impresoras.

Cada vez más en los últimos años, se han incorporado módulos Wi-Fi embebidos que incorporan un sistema operativo en tiempo real y proporcionan un medio simple de comunicación sin cables para cualquier dispositivo que que disponga de un puerto serie. Esto permite el diseño de dispositivos de monitorización simples. Un ejemplo es un dispositivo portátil de electrocardiograma que monitorea a un paciente en casa. Este dispositivo habilitado para Wi-Fi puede comunicarse a través de Internet usando la red wifi del paciente.

Estos módulos Wi-Fi están diseñados por OEMs para que los implementadores sólo necesiten un conocimiento mínimo de Wi-Fi para proporcionar conectividad Wi-Fi para sus productos.

En junio de 2014, Texas Instruments presentó el primer microcontrolador ARM Cortex-M4 con una MCU dedicada Wi-Fi embebida, el SimpleLink CC3200. Hace que los sistemas embebidos con conectividad Wi-Fi sean posibles de construir como dispositivos de un solo chip, lo que reduce su costo y tamaño mínimo, lo que hace más práctico para construir controladores de red inalámbrica en objetos ordinarios de bajo costo

Otro ejemplo es el del Arduino MKR1000 que usa el microcontrolador ATSAMW25 (http://www.atmel.com/devices/ATSAMW25.aspx) con un módulo wifi y otro de criptoauteticación incluido.

Más información:

A Arduino es posible añadirle conectividad Wifi de forma muy sencilla y ampliar las posibilidades de este microcontrolador con comunicación inalámbrica Wifi.

Hay varias formas de añadir hardware Wifi a Arduino, ya sea con un shield, una breakout board específica, con microcontroladores que tenga wifi integrado o con placas Arduinos que tenga chip wifi en la misma placa. Veamos varios casos de estos tipos, como conectarlos y usarlos, así como las librerías a usar en cada caso.

Buena parte de los visto en Ethernet con Arduino, es válido para wifi, puesto que el protocolo tcp/ip usado es el mismo y solo cambia el medio de comunicación. Trasladar un proyecto de ethernet a wifi es sencillo, solo cambiando la librería para usar el hardware y adaptar los comando en función de los métodos que tengan las librerías.

ESP8266

El ESP8266 es un chip Wi-Fi de bajo coste con pila TCP/IP completa y capacidad de MCU (Micro Controller Unit) producida por el fabricante chino Espressif Systems, con sede en Shanghai.

El chip primero llegó a la atención de los fabricantes occidentales en agosto de 2014 con el módulo ESP-01. Este pequeño módulo permite a los microcontroladores conectarse a una red Wi-Fi y realizar conexiones TCP/IP sencillas utilizando comandos de tipo Hayes. Sin embargo, en ese momento casi no había documentación en inglés sobre el chip y los comandos que aceptaba. El precio muy bajo y el hecho de que había muy pocos componentes externos en el módulo que sugiere que podría ser muy barato en el volumen, atrajo a muchos hackers para explorar el módulo, el chip y el software en él, así como para traducir La documentación china.

El ESP8285 es un ESP8266 con 1 MB de flash incorporado, lo que permite dispositivos de un solo chip capaces de conectarse a Wi-Fi. Muchos encapsulados del ESP8266 viene con 1 MB de flash.

El esp8266 es un módulo muy de moda que va alimentado a 3.3V y que hay mucha documentación en internet. Este se presenta con muchos encapsulados: http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family

Características:

  • 32-bit RISC CPU: Tensilica Xtensa LX106 running at 80 MHz*
  • 64 KiB of instruction RAM, 96 KiB of data RAM
  • External QSPI flash – 512 KiB to 4 MiB* (up to 16 MiB is supported)
  • IEEE 802.11 b/g/n Wi-Fi
  • 16 GPIO pins
  • SPI, I²C,
  • I²S interfaces with DMA (sharing pins with GPIO)
  • UART on dedicated pins, plus a transmit-only UART can be enabled on GPIO2
  • 1 port 10-bit ADC

* Both the CPU and flash clock speeds can be doubled by overclocking on some devices. CPU can be run at 160 MHz and flash can be sped up from 40 MHz to 80 MHz.

A finales de octubre de 2014, Espressif lanzó un kit de desarrollo de software (SDK) que permite programar el chip, eliminando la necesidad de un microcontrolador por separado. Desde entonces, ha habido muchos lanzamientos oficiales de SDK; Espressif mantiene dos versiones del SDK – una basada en RTOS y la otra basada en callbacks.

Una alternativa al SDK oficial de Espressif es el open source esp-open-sdk que se basa en la cadena de herramientas (toolchain) GCC. ESP8266 utiliza el microcontrolador Cadence Tensilica LX106 y la cadena de herramientas GCC que es de código abierto y mantenida por Max Filippov. Otra alternativa es “Unofficial Development Kit” de Mikhail Grigorev.

Otros SDK de código abierto para el ESP8266:

  • NodeMCU: un firmware basado en Lua.
  • Arduino: un firmware basado en C ++. Este núcleo permite que la CPU ESP8266 y sus componentes Wi-Fi sean programados como cualquier otro dispositivo Arduino. El Arduino Core ESP8266 está disponible a través de GitHub: https://github.com/esp8266/Arduino y cuyo reference es https://github.com/esp8266/Arduino/blob/master/doc/reference.md
  • MicroPython: una implementación de Python para dispositivos embebidos a la plataforma ESP8266.
  • ESP8266 BASIC: Un intérprete básico de código abierto específicamente diseñado para el Internet de las cosas.
  • Mongoose Firmware: Un firmware de código abierto con servicio gratuito en la nube: https://github.com/cesanta/mongoose-iot

Github del foro ESP8266: https://github.com/esp8266

El módulo WIFI ESP8266, que es algo muy parecido a los módulos Bluetooth y que al igual que ellos incluye toda la electrónica necesaria para la comunicación Radio Frecuencia en la banda WFI, así como la pila TCP/IP y que se comunica con nosotros a través de un puerto serie. De hecho, exactamente igual que los modos HC-06 y HC-05 se gobierna mediante comandos AT (comandos hayes https://es.wikipedia.org/wiki/Conjunto_de_comandos_Hayes) y todo por un precio similar al de los Bluetooth.

Dentro de la gran cantidad de usos para este módulo caben destacar los siguientes:

  • Electrodomésticos conectados.
  • Automatización del hogar.
  • Automatización de la industria.
  • Cámaras IP.
  • Redes de sensores.
  • Wereables.
  • IoT (Internet of Things o Internet de las Cosas)
  • IIoT (Industrial Internet of Things o Internet de las Cosas para el sector Industrial)

Más información:

Características

Datos de ESP8266 de datasheet:

  • 802.11 b/g/n
  • Integrated low power 32-bit MCU
  • Integrated 10-bit ADC • Integrated TCP/IP protocol stack
  • Integrated TR switch, balun, LNA, power amplifier and matching network
  • Integrated PLL, regulators, and power management units
  • Supports antenna diversity
  • WiFi 2.4 GHz, support WPA/WPA2
  • Support STA/AP/STA+AP operation modes
  • Support Smart Link Function for both Android and iOS devices
  • SDIO 2.0, (H) SPI, UART, I2C, I2S, IR Remote Control, PWM, GPIO
  • STBC, 1×1 MIMO, 2×1 MIMO
  • A-MPDU & A-MSDU aggregation & 0.4s guard interval
  • Deep sleep power <10uA, Power down leakage current < 5uA
  • Wake up and transmit packets in < 2ms
  • Standby power consumption of < 1.0mW (DTIM3) • +20 dBm output power in 802.11b mode
  • Operating temperature range -40C ~ 125C
  • FCC, CE, TELEC, WiFi Alliance, and SRRC certified

EL ESP8266 no tiene ROM y usa una ROM externa SPI y soporta hasta 16MB.

Web Oficial del producto: https://espressif.com/en/products/hardware/esp8266ex/overview

Recursos: https://espressif.com/en/products/hardware/esp8266ex/resources

Datasheet: https://espressif.com/sites/default/files/documentation/0a-esp8266ex_datasheet_en.pdf

Tabla de consumo del módulo ESP8266:

Si queremos alimentar el módulo ESP8266 con Arduino debemos ver las limitaciones de Arduino: pin power limitations: http://playground.arduino.cc/Main/ArduinoPinCurrentLimitations, a 5V la limitación es de 1A del regulador de tensión. Como va alimentado a 3.3V la limitación es de 150mA limitado por el regulador de tensión. Regulador http://www.ti.com/lit/ds/symlink/lp2985-33.pdf, por lo tanto alimentar el ESP8266 desde el pin de 3.3V puede dar problemas y es recomendable usar otra fuente de alimentación.

Pinout ESP8266:

Pinout placas: http://www.pighixxx.com/test/portfolio-items/esp8266/?portfolioID=360

Diagrama de bloques

Los módulos ESP8266 los podemos encontrar en diferentes encapsulados y placas:

Interesante artículo sobre que módulo wifi ESP8266 elegir: http://polaridad.es/esp8266-modulo-wifi-elegir-caracteristicas/

ESP WROOM otro encapsulado ya trae una memoria Flash SPI de 2MB y con certificación FCC y CE:

Características de los módulos:

Name Active pins Pitch Form factor LEDs Antenna Shielded? dimensions (mm) Notes
ESP-01 6 0.1″ 2×4 DIL Yes PCB trace No 14.3 × 24.8
ESP-02 6 0.1″ 2×4 castellated No U-FL connector No 14.2 × 14.2
ESP-03 10 2 mm 2×7 castellated No Ceramic No 17.3 × 12.1
ESP-04 10 2 mm 2×4 castellated No None No 14.7 × 12.1
ESP-05 3 0.1″ 1×5 SIL No U-FL connector No 14.2 × 14.2
ESP-06 11 misc 4×3 dice No None Yes 14.2 × 14.7 Not FCC approved
ESP-07 14 2 mm 2×8 pinhole Yes Ceramic + U-FL connector Yes 20.0 × 16.0 Not FCC approved
ESP-08 10 2 mm 2×7 castellated No None Yes 17.0 × 16.0 Not FCC approved
ESP-09 10 misc 4×3 dice No None No 10.0 × 10.0
ESP-10 3 2 mm? 1×5 castellated No None No 14.2 × 10.0
ESP-11 6 0.05″ 1×8 pinhole No Ceramic No 17.3 × 12.1
ESP-12 14 2 mm 2×8 castellated Yes PCB trace Yes 24.0 × 16.0 FCC and CE approved[14]
ESP-12E 20 2 mm 2×8 castellated Yes PCB trace Yes 24.0 × 16.0 4 MB Flash
ESP-12F 20 2 mm 2×8 castellated Yes PCB trace Yes 24.0 × 16.0 FCC and CE approved. Improved antenna performance. 4 MB Flash
ESP-13 16 1.5 mm 2×9 castellated No PCB trace Yes W18.0 x L20.0 Marked as ″FCC″. Shielded module is placed sideways, as compared to the ESP-12 modules.
ESP-14 22 2 mm 2×8 castellated +6 No PCB trace Yes 24.3 x 16.2

En nuestro caso vamos a usar el ESP-01:

Esquemático:

Wiki: https://nurdspace.nl/ESP8266

Módulo usado:

También tenemos placas basadas en ESP8266 e incluso con puerto USB integrado:

Y un Shield ESP8266 para Arduino: https://www.sparkfun.com/products/13287

Más información:

El sucesor del ESP8266 puede que sea el ESP32 https://espressif.com/en/products/hardware/esp32/overview con wifi + bluetooth y más potente.

Datasheet ESP32: https://espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf

Primeras impresiones sobre el ESP32: https://www.sparkfun.com/news/2017

Características ESP32:

  • CPU: Xtensa Dual-Core 32-bit LX6 microprocessor, operating at 160 or 240 MHz and performing at up to 600 DMIPS
  • Memory: 520 KiB SRAM
  • Wireless connectivity:
    • Wi-Fi: 802.11b/g/n/e/i
    • Bluetooth: v4.2 BR/EDR and BLE
  • Peripheral interfaces:
    • 12-bit SAR ADC up to 18 channels
    • 2 × 8-bit DACs
    • 10 × touch sensors
    • Temperature sensor
    • 4 × SPI
    • 2 × I²S
    • 2 × I²C
    • 3 × UART
    • 1 SD/SDIO/MMC host
    • 1 slave (SDIO/SPI)
    • Ethernet MAC interface with dedicated DMA and IEEE 1588 support
    • CAN bus 2.0
    • IR (TX/RX)
    • Motor PWM
    • LED PWM up to 16 channels
    • Hall effect sensor
    • Ultra low power analog pre-amplifier
  • Security:
    • IEEE 802.11 standard security features all supported, including WFA, WPA/WPA2 and WAPI
    • Secure boot
    • Flash encryption
    • 1024-bit OTP, up to 768-bit for customers
    • Cryptographic hardware acceleration: AES, SHA-2, RSA, ECC, Random Number Generator (RNG)

Uso ESP8266 con Arduino (Puerto Serie)

El ESP8266 se puede usar con un microcontrolador como Arduino conectado por puerto serie y manejarlo con comandos hayes o programarlo como si de un microcontrolador se tratara con el IDE de Arduino usando el SDK https://github.com/esp8266/Arduino y usar el lenguaje de programación de Arduino (el core de Arduino).

Pines:

  • TX (goes to the 3.3V Rx of the UART USB adapter to the PC)
  • CH_PD (enable/power down, must be pulled to 3.3v directly or via resistor)
  • RESET
  • VCC (3.3v power supply)
  • GND (connect to power ground)
  • GPIO 2
  • GPIO 0 (leave open or pull up for normal, pull down to upload new firmware)
  • RX (goes to the 3.3V Tx of the UART USB adapter to the PC)

Para usar el ESP8266 con Arduino vamos a conectarnos por el puerto serie y mandar comandos AT (hayes) para manejarlo. Este es el esquema.

IMPORTANTE:

  • El ESP8266 va alimentado a 3,3V, ¡no alimentarlo con 5 voltios!
  • El ESP8266 necesita comunicarse vía serie a 3.3V y no tiene entradas tolerantes 5V, por lo que necesita la conversión de nivel para comunicarse con un microcontrolador 5V como la mayoría de los Arduinos

Sin embargo, esta segunda advertencia puede ser ignorada y conectar el puerto serie directamente a Arduino, pero existe el peligro de dañar el módulo.

Con un programador FTDI que tenga salida a 3.3V podemos hacer lo mismo que con un Arduino pero sin ningún peligro.

ESP8266 quick start guide: http://rancidbacon.com/files/kiwicon8/ESP8266_WiFi_Module_Quick_Start_Guide_v_1.0.4.pdf

Guia sparkfun del ESP8266: https://learn.sparkfun.com/tutorials/esp8266-thing-hookup-guide

Ejemplo de level shifter para usar con Arduino:

Cheatsheet: https://cdn.sparkfun.com/datasheets/Wireless/WiFi/ESP8266ModuleV1.pdf

Por lo tanto la primera forma de usar el módulo ESP8266 es comunicarse con él a través del puerto serie y manejarlo mediante los comandos AT (hayes) que tiene en su firmware.

El conjunto de comandos Hayes es un lenguaje desarrollado por la compañía Hayes Communications que prácticamente se convirtió en estándar abierto de comandos para configurar y parametrizar módems. Los caracteres «AT», que preceden a todos los comandos, significan «Atención», e hicieron que se conociera también a este conjunto de comandos como comandos AT. Midiendo la longitud de los bits se puede determinar en detalle la velocidad de transmisión.

Comandos hayes:

Comandos Hayes para ESP8266:

Proyectos con ESP8266:

Más información:

Videos:

Uso ESP8266 con IDE Arduino

Hemos visto como realizar las conexiones y vimos los comandos AT que nos permiten configurar las acciones del WIFI. El ESP8266 dispone internamente de un pequeño procesador, prácticamente es capaz de replicar casi cualquier cosa los Arduinos puedan hacer. Así que los proyectos con sensores más Arduinos que envían los datos a la WIFI mediante un ESP8266, es muy probable que podamos ahorrarnos el Arduino en el proceso.

Gracias a un firmware basado en C ++, permite que la CPU ESP8266 y sus componentes Wi-Fi sean programados como cualquier otro dispositivo Arduino.

  • Puedes desarrollar con el mismo IDE que ya conoces
  • Han hecho un Cross compiler, de forma que prácticamente utilizas los mismos comandos que utilizas con Arduino, con lo que te ahorras aprender nada nuevo
  • Dependiendo del modelo de ESP8266 que tengas, dispones de más o menos pines disponibles con PWM y otras cosas más como I2C y SPI, pero para el modelo ESP8266-01 solo tienes dos pines disponibles GPIO0 y GPIO2
  • Puedes programar el procesador de tu ESP8266 exactamente como si fuera un Arduino con los mismos comandos, y en lo que se refiere a la WIFI, puedes olvidarte de los comandos AT, porque incluye una serie de librerías, que imitan la librería WIFI de Arduino con lo que se pueden reutilizar muchos programas.  

El Arduino Core ESP8266 está disponible a través de GitHub: https://github.com/esp8266/Arduino

Reference de Arduino core a ESP8266: https://github.com/esp8266/Arduino/blob/master/doc/reference.md

Toda la documentación del soporte de Arduino core a ESP8266: https://github.com/esp8266/Arduino/tree/master/doc

Documentación de la librería esp8266wifi: https://github.com/esp8266/Arduino/tree/master/doc/esp8266wifi que usa los mismos métodos que https://www.arduino.cc/en/Reference/WiFi

Podemos descargar un IDE ya configura para ESP8266 de https://github.com/esp8266/Arduino/releases/

O podemos instalar el soporte a terceros en nuestro IDE simplemente añadiendo el texto “http://arduino.esp8266.com/stable/package_esp8266com_index.json” en propiedades:

Y luego desde el gestor de tarjetas dar a instalar al soporte para ESP8266.

ESP8266 Community: http://arduino.esp8266.com/stable/package_esp8266com_index.json

  • Generic ESP8266 modules
  • Olimex MOD-WIFI-ESP8266
  • NodeMCU 0.9 (ESP-12)
  • NodeMCU 1.0 (ESP-12E)
  • Adafruit HUZZAH ESP8266 (ESP-12)
  • SparkFun Thing
  • SweetPea ESP-210
  • WeMos D1
  • WeMos D1 mini

Para instalar el Arduino Core ESP8266 en nuestro IDE de Arduino seguir las instrucciones: http://www.instructables.com/id/Setting-Up-the-Arduino-IDE-to-Program-ESP8266/?ALLSTEPS

IMPORTANTE: Cuando cargas un sketch en el ESP8266 con el IDE Arduino estamos cargando en la flash de ESP8266 un nuevo firmware borrando el que viene por defecto visto anteriormente para manejar el módulo con comando hayes.

Otras características de este soporte:

  • Actualización OTA
  • Soporta muchas de las librerías de Arduino y otras librerías hechas por terceros está ya adaptadas para usar con el ESP8266.

Más información:

Firmware ESP8266

Como hemos hablado el módulo ESP8266 es un microcontrolador como los que hemos visto con Arduino y podemos cargarle un firmware con un programa que hayamos hecho y compilado con el IDE de Arduino o usar un firmware como el que viene por defecto que es el de comandos hayes.

Además de los firmwares anteriores tenemos otros firmware disponibles como el oficial basado en un RTOS.

Para descargar las herramientas y últimas versiones del firmware usar la web: https://espressif.com/en/products/hardware/esp8266ex/resources

Más información de como actualizar firmware (version actualizada en la parte de ejercicios):

Ejercicios ESP8266

Conexión a Arduino

Lo primero es decir que este es módulo muy sencillo y diseñado desde el principio con la Internet of Things en mente (IOT), y por eso incluye todo lo necesario para conectarse a un punto de acceso WIFI mediante comandos de texto AT, vía un puerto serie, que puede ser configurada a diferentes velocidades.

Una vez que lo configuramos para que se conecte a nuestra WIFI, el módulo es capaz de enviar información que le remitimos vía la puerta serie a una dirección IP y puerto que deseemos.

Cuando se trata de recibir, limpia todo el empaquetado TCP/IP y nos reenvía por la puerta serie la información de datos limpia, con lo que tiene la enorme virtud de permitirnos olvidarnos de la gestión del TCP/IP y de las demandas de procesador y memoria que suponen. A cambio no es exactamente una conexión WIFI, porque no tenemos acceso al stack o al socket IP pero para el Arduino esto es casi una ventaja.

La fuente interna de 3.3V del Arduino da un máximo de 150 mA, cuando el consumo del módulo suele ser en el arranque bastante superior a esto, lo que le llevará a unos arranques poco fiables, y aunque se acaba consiguiendo, deben repetirse una y otra vez. En nuestro caso usaremos una fuente externa de alimentación de 3.3V para alimentar este módulo ESP8266.

ESP8266 programado por puerto serie

Conexión con programador FTDI:

Conexión con Arduino:

Conectar un terminal serie a 115200-8-N y mandar el comando AT, si nos responde OK es que ya estamos conectados con el módulo.

Manual oficial de comandos: http://www.espressif.com/sites/default/files/4a-esp8266_at_instruction_set_en_v1.5.4_0.pdf

Ejecutar los siguientes comandos y ver lo que devuelve:

  • AT+RST: reinicia el módulo
  • AT+GMR: versión de firmware
  • AT+CWMODE=3: activa modo AP, comprobar redes wifi
  • AT+CWLAP: para ver las redes wifi
  • AT+CWJAP=”SSID”,”password”: Conectarse a una red wifi (AT+CWJAP=”AndroidAP4628″,”esp8266wifi”)
  • AT+CIFSR: comprobar la IP asignada

Actuar como un cliente TCP:

  • AT+CIPMUX=1: Habilitar múltiples conexiones
  • AT+CIPSTART=4,”TCP”,”google.com”,80: Especifica el canal de conexión que desea conectar (0 – 4), el tipo de protocolo (TCP / UDP), la dirección IP (o el dominio si tiene acceso a DNS) y el número de puerto
  • A continuación, debe especificar la cantidad de datos que desea enviar (después de especificar qué canal). Vamos a enviar “GET / HTTP / 1.0 \r \n \r \n” que es 18 bytes: AT+CIPSEND=4,18
  • Y recibiremos la respuesta del servidor:

+IPD,4,559:HTTP/1.0 301 Moved Permanently
Location: http://www.google.com/
Content-Type: text/html; charset=UTF-8
Date: Sat, 12 Nov 2016 16:37:23 GMT
Expires: Mon, 12 Dec 2016 16:37:23 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 219
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Connection: close
<HTML><HEAD><meta http-equiv=”content-type” content=”text/html;charset=utf-8″>
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF=”http://www.google.com/”>here</A&gt;.
</BODY></HTML>
4,CLOSED

Actuar como servidor:

  • Comprobar que IP tenemos con AT+CIFSR
  • AT+CIPSERVER=1,1336:  para poner a escuchar en un puerto, en este caso el 1336
  • Desde otro dispositivo en la red: telnet 192.168.1.2 1336
  • En el puerto serie veré todo lo que se escriba por telnet
  • Para responder desde el ESP8266 debo usar AT+CIPSEND=0,8 seguido del texto. En este caso es el canal 0 y mando 8 caracteres.

Hacer lo mismo pero usando Arduino, para ello conectarlo según el esquema superior y cargar el programa:

#include <SoftwareSerial.h>
SoftwareSerial BT1(3, 2); // RX | TX
void setup()
{ Serial.begin(9600);
 BT1.begin(115200);
}
void loop()
{
 if (BT1.available())
 { char c = BT1.read();
   Serial.print(c);
 }
 if (Serial.available())
 { char c = Serial.read();
   BT1.print(c);
 }
}

Configurar el baud rate de ESP8266 a 9600 para que funcione mejor con el comando “AT+UART_DEF=9600,8,1,0,0”, puesto que a 115200 da problemas con el puerto serie software.

Para hacer una reseteo de la configuración de fábrica usar el comando: “AT+RESTORE

Hacer un programa con Arduino que se conecte automáticamente a una red y nos puestre la IP asignada:

  • AT+CWMODE_DEF=1
  • AT+CWJAP=”SSID”,”paswword”)
  • AT+CIFSR: comprobar la IP asignada

Solución: Ejercicio 61 https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio61-ESP8266

Más información:

Configuración como punto de acceso

Podemos poner el ESP8266 en modo punto de acceso para que se conecten otros dispositivos wifi, recordad que es un modo soft AP.

Escribir la siguiente secuencia de comandos:

  • AT+CWSAP=”NoWorriESSID”,”password”,3,0
  • AT+CWMODE=3
  • AT+CWLIF: IP de los dispositivos conectados

Para saber el significado de cada parámetro y sus opciones ver https://espressif.com/sites/default/files/documentation/4a-esp8266_at_instruction_set_en.pdf

Más información:

ESP8266 programado con IDE Arduino

Conectar al programador FTDI como hemos visto anteriormente. Pero para programar el módulo (Y para actualizar el firmware) necesitáis colocar el módulo en estado de programación y eso se consigue poniendo a GND la patilla GPIO0.

Vamos a programar el blink de Arduino en la patilla GPIO2, que es la que nos queda libre:

void setup()
  { pinMode(2, OUTPUT); }

void loop()
  { digitalWrite(2, HIGH);  
    delay(1000);  
    digitalWrite(2, LOW);
    delay(1000);   
  }

Para probarlo.

IMPORTANTE: Al cargar un programa pierdo el firmware original.

Más información:

Veamos los ejemplos de ESP8266 que vienen en el soporte para el IDE de Arduino, usando la librería ESP8266WiFi.h:

  • Blink
  • ESP8266Wifi/Wifiscan: Scan networks
  • ESP8266Wifi/WifiClient Conectar a wifi
  • ESP8266WebSerber/HelloServer: Servidor web wifi

El reference para programar:

Firmware Update

Para actualizar el firmware necesitamos descargar la herramienta “flash download tools” para el ESP8266 y el firmware con los comandos hayes, además aprovechamos para actualizar a la última versión del firmware.

Para programar recordar y actualizar firmware recordar que el pin GPIO0 debe estar a masa y que hay que un reset del módulo para comenzar la carga del nuevo firmware.

Descarga: https://espressif.com/en/products/hardware/esp8266ex/resources

Descargar la última versión de:

  • Tools/Flash Download Tools V3.4.2 (ESP8266 & ESP32)
  • SDK & demos/ESP8266 NONOS SDK V2.0.0 20160810

Abrir la aplicación Flash download tool y elegir ESP8266. Luego configurar de la siguiente forma:

esp8266

Configurando los ficheros para BOOT MODE Flash size 8Mbit: 512KB+512KB:

  • boot_v1.2+.bin              0x00000
  • user1.1024.new.2.bin        0x01000
  • esp_init_data_default.bin   0xfc000 (optional)
  • blank.bin                   0x7e000
  • blank.bin                  0xfe000

Que se encuentran en el directorio bin del fichero de SDK que nos hemos descargado.

Para comprobar la frecuencia de cristal del módulo y la flash, simplemente dando a start sin seleccionar los ficheros y reseteando el módulo obtendremos la información.

Más información sobre el Firmware update (como referencia no están actualizados):

IMPORTANTE: no descargar nada de fuentes no fiables

NODEMCU

NodeMCU es una plataforma IoT de código abierto. Incluye firmware que se ejecuta en el ESP8266 Wi-Fi SoC de Espressif Systems y el hardware que se basa es el módulo ESP-12.

El término “NodeMCU” por defecto se refiere al firmware en lugar de los kits de desarrollo de ESP8266. El firmware utiliza el lenguaje de secuencias de comandos Lua. Se basa en el proyecto eLua, y está basado en el SDK Espressif Non-OS SDK for ESP8266.

Un grupo de desarrolladores chinos de plataformas abiertas de hardware, quienes se basaron en el ESP8266 para lanzar un kit llamado NodeMCU para el desarrollo de prototipos compatible con Arduino, que se programa en lenguaje Lua, con conectividad USB y Wi-Fi, y a un precio sorprendentemente bajo.

Pinout:

Web oficial: http://www.nodemcu.com/index_en.html

Github: https://github.com/nodemcu

Documentación: http://nodemcu.readthedocs.io/en/master/

Lua: https://en.wikipedia.org/wiki/Lua_(programming_language)

Firmware: https://github.com/nodemcu/nodemcu-firmware

Node mcu flasher: https://github.com/nodemcu/nodemcu-flasher

Más información:

Tutorial de uso: http://blog.nyl.io/esp8266-meets-nodemcu/

Proyectos con nodemcu:

Arduino UNO Wifi

Se trata de una nueva placa de arduino.org que es el clásico Arduino UNO al que le añade en la misma placa y con el formato del Arduino UNO un chip ESP8266, obteniendo al final un Arduino UNO con conectividad wifi. Es el módulo perfecto para comenzar un proyectos de IoT.

Datasheets:

A nivel de entradas y salidas y otras características físicas es exactamente igual a un Arduino UNO, pero se le ha añadido un módulo wifi ESP8266 que es un SoC con la pila de protocolos TCP/IP integrada que puede dar acceso a la red wifi o el puede actuar como un punto de acceso.

Una de las características más interesantes de el Arduino UNO wifi es que soporta programación OTA (over-the-air), tanto para transferir sketches como para actualizar el firmware wifi.

Información de producto http://www.arduino.org/products/boards/arduino-uno-wifi

En el Arduino UNO wifi, hay un chip SC16IS750IBS con una UART y un interfaz I2C/SPI que permite la comunicación entre el AtMega16u2, AtMega328p y el ESP8266EX. Este chip tiene un interfaz I2C/SPI esclavo que hace de interfaz a una UART, así como 8 pines I/O programables, ofreciendo una conversión de I2C/SPI a serie (RS232/RS485) bidireccional.

http://www.arduino.org/images/products/details/ArduinoUNOWIFI_drawing2.jpg

Datasheet SC16IS750IBS: http://www.nxp.com/documents/data_sheet/SC16IS740_750_760.pdf

Arduino UNO wifi permite comunicar vía wifi con los sensores o actuadores montados en la placa. Es posible usarlo como cliente de una red wifi, como servidor para conectar otros clientes o crear una conexión wifi ad-hoc.

Arduino UNO wifi tiene precargado un sketch con un servidor REST (RestServer) que permite manejar el arduino desde un navegador simplemente conectando a la SSID del Arduino (Arduino-Uno-WiFi-xxxxxx) y entrando a la IP 192.168.240.1 para gestionarlo y usar los siguientes comandos para manejar los pines:

  • “/arduino/digital/13”     -> digitalRead(13)
  • “/arduino/digital/13/1”   -> digitalWrite(13, HIGH)
  • “/arduino/analog/2/123”   -> analogWrite(2, 123)
  • “/arduino/analog/2”       -> analogRead(2)
  • “/arduino/mode/13/input”  -> pinMode(13, INPUT)
  • “/arduino/mode/13/output” -> pinMode(13, OUTPUT)

Esquemático: http://download.arduino.org/products/UNOWIFI/Arduino-UNO-WiFi-V4_AF1.pdf

http://www.arduino.org/images/products/details/ArduinoUNOWIFI_drawing1.jpg

Programación

El Arduino UNO wifi puede programarse como un Arduino normal por el puerto serie o por wifi de la misma forma que el Arduino Yun

Para usar este Arduino tendremos que utilizar el IDE de arduino.org: http://www.arduino.org/downloads

Si al conectar el Arduino UNO wifi no lo reconoce Windows, instalar los drivers que hay en la carpeta drivers del IDE de Arduino.org

Después de alimentar Arduino UNO wifi, conectarse a la red Arduino-Uno-WiFi-xxxxxx y abrir el enlace http://192.168.240.1/

http://labs.arduino.org/dl1542?display&scale=0.7

Y desde la web podemos conectar Arduino UNO wifi a cualquier red wifi donde queramos integrarlo.

Más información en: http://www.arduino.org/learning/getting-started/getting-started-with-arduino-uno-wifi

NOTA: para programar por wifi, es necesario que el ordenador y el Arduino estén conectados a la misma red wifi y la placa está en modo STA.

Tutoriales Arduino UNO wifi:

La diferencia entre el Arduino UNO wifi y el wifi shield es que el wifi shield usa el SPI y este Arduino usa el I2C para conectarse al puerto serie del ESP8266 para mandar los comandos y transmitir por wifi.

La librería usada es la arduinowifi.h que aún no está documentada oficialmente, pero indagando en la librería “ArduinoWiFi.h” vemos que hace “extern ArduinoWifiClass Wifi; “, es decir crea el objeto Wifi de la clase ArduinoWifiClass y por eso podemos llamarlo desde el programa sin tener que instanciarlo previamente.

Código de la librería arduinowifi.h https://github.com/arduino-org/arduino-library-arduino-wifi

Es una librería para configuración y manejo del ESP8266 por el bus I2C.

El reference para la librería wifi es http://www.arduino.org/learning/reference/WiFi pero aunque es para el wifi shield, han diseñado la librería de Arduino Uno Wifi para que comparta nombre de las funciones y uso similar.

Al arrancar el Arduino UNO Wifi se inicia en modo AP y podemos conectarnos vía wifi para configurarlo y que luego se conecte a una red wifi.

Como cambiar el firmware: http://www.arduino.org/learning/tutorials/advanced-guides/how-to-change-the-firmware-on-an-arduino-uno-wifi

En el Arduino UNO wifi ciao está integrado y puede usarse la librería http://www.arduino.org/learning/reference/ciao-library.

Más información sobre CIAO: http://www.arduino.org/learning/tutorials/advanced-guides/content/ciao

Ejemplo con CIAO:

Ejercicio con Arduino UNO Wifi: basado en el ejercicio 27 del botón mejorado:  https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio27-Boton_Mejorado_UNO_WIFI

Comparar el código de:

Wifi Shield

El WiFi Shield de Arduino conecta Arduino a Internet de forma inalámbrica.

http://arduino.cc/en/uploads/Main/A000058_front_450.jpg

Toda la información sobre este Shield en :

Y los datasheet de los integrados:

Para conectarte al 32UC3: http://arduino.cc/en/Hacking/WiFiShield32USerial

Y la librería para manejar el shield en: http://arduino.cc/en/Reference/WiFi

Actualizar su firmware: http://arduino.cc/en/Hacking/WiFiShieldFirmwareUpgrading

http://arduino.cc/en/uploads/Main/ArduinoWiFiShieldPinUseDescribed_2.jpg

Wifi library:

Un proyecto hecho con Ethernet pasarlo a wifi con el wifi shield, simplemente se trata de cambiar las líneas de código de la parte de red de la librería ethernet a las equivalentes de la librería wifi.

Ejercicio 27. Botón mejorado Wifi.

Partiendo del ejercicio 27 del botón mejorado que enciende y apaga un led desde una web embebida en arduino con un ethernet shield, modificarlo para que funcione con un Arduino con el shield wifi.

Ejercicio con Ethernet: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio27-Boton_Mejorado

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio27-Boton_Mejorado_WIFI

WiFi Shield 101

Arduino WiFi Shield 101 es un shield potente para aplicaciones IoT con autenticación criptográfica, desarrollado con ATMEL, que conecta la placa Arduino a Internet de forma inalámbrica. La conexión a una red WiFi es simple, no se necesita ninguna configuración adicional además del SSID y la contraseña. El WiFi Shield 101 viene con una biblioteca fácil de usar que permite conectar la placa Arduino a Internet con pocas instrucciones. Como siempre, cada elemento de la plataforma – hardware, software y documentación está libremente disponible y de código abierto. Se basa en el módulo Atmel SmartConnect-WINC1500, compatible con la norma IEEE 802.11 b/g/n

Características:

  • Operating voltage both 3.3V and 5V (supplied from the host board)
  • Connection via: IEEE 802.11 b/g/n for up to 72 Mbps networks
  • Encryption types: WEP and WPA2 Personal
  • Support TLS 1.1 (SHA256)
  • Connection with Arduino or Genuino on SPI port
  • Onboard CryptoAuthentication by ATMEL

Web del producto https://www.arduino.cc/en/Main/ArduinoWiFiShield101

La de Adafruit https://www.adafruit.com/products/2891

El módulo wifi WINC1500 integrado es un controlador de red capaz de protocolos TCP y UDP. El Wifi Shield 101 también cuenta con un hardware de seguridad de cifrado / descifrado proporcionado por el chip ATCC508A CryptoAuthentication que es un método ultra seguro para proporcionar un acuerdo clave para el cifrado/descifrado, diseñado específicamente para el mercado de IoT.

Datasheet módulo wifi: http://www.atmel.com/devices/atwinc1500.aspx

El pin digital 7 se utiliza como un pin de handshake entre el shield WiFi 101 y Arduino, y no se debe utilizar. El pin digital 5 se utiliza como pin RESET entre el shield WiFi 101 yArduino, y no debe utilizarse.

Tener en cuenta que Uno + WiFi Shield 101 no es compatible con la biblioteca Serial de software. El WiFi Shield 101 usa una biblioteca que es muy compleja y ocupa más del 60% de la memoria disponible, dejando poco espacio para los sketches. Tener en cuenta que para un uso básico es compatible con el Uno, pero para proyectos complejos se recomienda usar el shield WiFi 101 con un Arduino / Genuino Zero, 101 o Mega 2560.

El Wifi Shield 101 se usa con la librería Wifi101 https://www.arduino.cc/en/Reference/WiFi101

Ejemplo sencillo por con el wifi shield 101: https://www.arduino.cc/en/Tutorial/Wifi101SimpleWebServerWiFi

Más información:

MKR1000

Es un nuevo Arduino con un microcontrolador que lleva integrado wifi y mucho más. El Arduino MKR1000 ha sido diseñado para ofrecer una solución práctica y económica buscando conectividad WiFi para gente con mínima experiencia en redes.

Este Arduino está basado en la MCU ATSAMW25 especialmente diseñado para proyectos IoT. Este SoC está compuesto de tres bloques principales:

  • SAMD21 Cortex-M0+ 32bit low power ARM MCU
  • WINC1500 low power 2.4GHz IEEE® 802.11 b/g/n Wi-Fi
  • ECC508 CryptoAuthentication

Microcontrolado ATSAMW25 http://www.atmel.com/devices/ATSAMW25.aspx

Este Arduino también incluye un circuito para cargar baterías Li-Po y utilizar el MKR1000 alimentándose con este tipo de baterías.

IMPORTANTE: Arduino MKR1000 funciona a 3.3V, el máximo voltaje que pueden tolerar los pines es de 3.3V y aplicar voltajes mayores podría dañar la placa. Mientras que una salida de 5V digital es posible, para una comunicación bidireccional de 5V es necesario level shifting.

Datasheet MCU: http://www.atmel.com/devices/ATSAMW25.aspx  

Esquemático: https://www.arduino.cc/en/uploads/Main/MKR1000-schematic.pdf

Pinout:

Web del producto https://www.arduino.cc/en/Main/ArduinoMKR1000

MKR1000 usa la librería wifi101: https://www.arduino.cc/en/Reference/WiFi101

Empezar con MKR1000

Getting Started https://www.arduino.cc/en/Guide/MKR1000

Para programar el MKR1000 es necesario añadir al IDE de Arduino soporte para esta placa, ya que el microcontrolador no es un AVR sino un ARM Cortex-M0 de 32 bits. SAMD Core.

En este enlace explica como añadir soporte (Arduino Cores) para nuevas placas: https://www.arduino.cc/en/Guide/Cores

El MKR1000 y Arduino Zero tienen unas librerías específicas por su microcontrolador:

Tutoriales MKR1000:

Proyectos interesantes:

MKR1000 como access point https://www.arduino.cc/en/Reference/WiFi101BeginAP (AP soft)

Ejercicio 39 NTP con MKR1000: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio39-NTP_MKR1000

Arduino Yun

Otra forma de añadir la funcionalidad de Wifi a Arduino es usar Arduino Yun que tiene wifi integrado y la librería bridge para conectar el microcontrolador con el microprocesador que tiene wifi integrado.

Arduino Yun: http://www.arduino.org/products/boards/4-arduino-boards/arduino-yun con MCU Atmel AVR de 8 bits ATmega32U4 y procesador MIPS Qualcomm Atheros AR9331 a 400 MHz con wifi integrado y SO linux Linino basado en OpenWRT y ethernet. Su principal característica es la capacidad de comunicar la MCU con el SO linux mediante un puerto serie interno. Esta placa no es 100% hardware libre, al no hacerse público la parte donde se encuentra el procesador Atheros AR9331. También hay disponible una version Yun mini para protoboards: http://www.arduino.org/products/boards/4-arduino-boards/arduino-yun-mini

Web del producto https://www.arduino.cc/en/Main/ArduinoBoardYun

Librería Bridge:

  • Bridge – Simple REST style calls to access analog and digital pins

Recientemente ha aparecido el Arduino Yun Shield que es una placa para añadir las funcionalidades del Arduino Yun a cualquier Arduino.

Web del producto https://www.arduino.cc/en/Main/ArduinoYunShield

Ejemplo de uso con Arduino Yun: https://github.com/jecrespo/Coche_AprendiendoArduino

Para comenzar una vez actualizado:

CC3000

Otro integrado wifi muy usado con arduino es el CC3000, pero que se ha quedado un poco obsoleto.

Chip CC3000:

Y la librería: https://github.com/sparkfun/SFE_CC3000_Library

Y un buen paso a paso para usar esta shield:

Y un ejemplo de uso práctico para hacer domótica en casa:

Otros Módulos Wifi

ESP32 el sucesor de ESP8266:

Soporte para el IDE de Arduino:

Primeras impresiones: https://www.sparkfun.com/news/2017

Tutorial http://www.instructables.com/id/Beginners-ESP32-Guide-to-Assembly-Testing/

Tabla comparativa: http://www.cnx-software.com/2016/03/25/esp8266-and-esp32-differences-in-one-single-table/

WiFi3 Click

Otro módulo derivado de esp8266:

NL6621 como alternativa al ESP8266

The NL6621 WiFi SOC is powered by a 160 MHz ARM Cortex-M3 with 448 KB of RAM, and everything else is integrated in the SOC. The module has 32 GPIOs, SPI, I2C, I2S digital audio, and most of the peripherals that you’d expect.

aprendiendoarduino_logo

Análisis: Kits Aprendizaje XBee de Digi

La gente de Digi en Logroño me ha dejado para probar dos kits de aprendizaje para que los pruebe y de paso me sirvan para preparar la parte de comunicación inlambrica del curso Arduino avanzado en http://www.aprendiendoarduino.com/arduino-avanzado-2016/.

Los kits que he probado son:

Se trata de unos kits de aprendizaje de los famosos módulos RF XBee que fabrica Digi para comunicación inalámbrica y que pueden adquirirse en digi-key electronics http://www.digikey.es/

En la caja de ambos kits viene todo el hardware y el enlace a la web donde se encuentran los tutoriales y guías para el uso de los kits.

Veamos por separado cada uno de los kits.

Digi Wireless Connectivity Kit

Aunque el uso que voy a hacer los los módulos va a ser siempre con Arduino, me decidí empezar con este kit que no tiene Arduino ni posibilidad de conectar con un microcontrolador directamente, porque me parecía más sencillo y me quería centrar en aprender la tecnología ZigBee y manejar los módulos XBee de Digi, y no me equivoqué.

Luego con el siguiente kit (XBee Arduino Compatible Coding Platform) y los conocimientos adquiridos, me resultó más fácil manejar los módulos XBee con Arduino.

El hardware de este kit es muy sencillo, se compone de dos módulos XBee serie 1 o XBee 802.15.4 que son unos módulos muy sencillos de Xbee, dos placas de desarrollo para los módulos con conectores grove y dos cables micro USB para conectar las placas de desarrollo al ordenador.

wireless_connectivity_kit_500x316

Este hardware puede comprarse en digi-key en el siguiente enlace: http://www.digikey.es/product-detail/es/digi-international/XKB2-AT-WWC/602-1551-ND/5305247 y tiene un coste de 59$ (aproximadamente 53€).

En la web de digi-key hay un kit nuevo http://www.digikey.es/product-detail/es/digi-international/XKB2-A2T-WWC/602-1902-ND/6010111 que usa los módulos XBee S2C 802.15.4

En mi caso el que he probado es el que lleva los módulos Serie 1:

También hay otros kits disponibles: http://www.digikey.es/en/product-highlight/d/digi-intl/xbee-arduino-coding-platform

Sobre el hardware, decir que es muy sencillo y útil para el aprendizaje, pero luego solo se podría reutilizar los módulos RF, porque las placas de desarrollo no les veo mucha salida salvo para hacer las prácticas propuestas en el kit. A estas placas de desarrollo les añadiría una salida accesible del puerto serie con un selector a 3.3 o 5 V para poder conectarlas a una Raspberry Pi o un Arduino y poder seguir usándolas y aprender la integración con otros dispositivos, ya que sino están limitadas al uso con el ordenador.

Para usar este hardware Digi pone a disposición de los compradores del kit y del resto del mundo un tutorial que va contando paso a paso cómo montar los módulos, como instalar el software necesario para configurar y manejar los Xbee, explica cómo funcionan los módulos y en cada apartado propone ejercicios prácticos para usarlo con el kit adquirido.

Este completo tutorial es accesible desde: http://www.digi.com/resources/documentation/Digidocs/90001456-13/Default.htm

PDF del tutorial: http://www.digi.com/resources/documentation/digidocs/pdfs/90001456-13.pdf

Este tutorial es la gran aportación de Digi para aprender a manejar sus módulos RF desde cero y te guia paso a paso como si de un curso online fuera.

El tutorial comienza con ejemplos muy sencillos y hace una guía paso a paso para aprender el manejo los módulos. Los puntos más importantes que se ven son:

Este tutorial es perfecto para aprender a manejar los módulos de una forma muy didáctica, aunque en algunos aspectos se queda corto en la explicación (al menos para los más curiosos) y hay que hacer un acto de fe que con esa configuración funciona, pero en algún caso sin explicar bien porqué. Esa falta de información puede llevar a error en un par de casos a la hora de hacer funcionar la práctica, pero pensando un poco es sencillo resolverlo.

Otro defecto de este tutorial, al menos para mi, es que los ejercicios más interesantes los hace con Java para crear una aplicación en el ordenador que se conecte a los módulos e interactúe con ellos, pero yo añadiría esos mismos ejercicios con algún otro lenguaje como python con .NET.

El objetivo de este kit junto con el manual es aprender a manejar los módulos RF de XBee para la conexión de dispositivos y sensores y lo cumple a la perfección. Además por aprox. 53€ después de aprender a usarlos puedes reutilizar los módulos XBee en cualquier proyecto.

Para mis cursos en www.aprendiendoarduino.com uso como base este tutorial para enseñar como manejar los módulos Xbee.

XBee Arduino Compatible Coding Platform

El segundo kit de aprendizaje de Digi que he probado, comencé a usarlo cuando ya había probando a fondo el anterior (Wireless Connectivity Kit) y conocía bien el uso de los módulos RF de XBee, lo que me facilitó mucho el uso de este kit, puesto que la parte más teórica del funcionamiento de los módulos de XBee no viene en el tutorial de este kit.

El hardware de este kit es muy completo y trae entre otras cosas:

Todo el contenido del kit está en http://docs.digi.com/display/XBeeArduinoCodingPlatform/Kit+contents

wirelessgamekit

Este hardware puede comprarse en digi-key en el siguiente enlace por 99$ (aproximadamente 89,11€): http://www.digikey.es/product-detail/en/digi-international/XKB2-AT-WWG/602-1550-ND/5271212

La verdad es que es un buen precio por el kit teniendo en cuenta que tenemos 3 módulos XBee.

Datasheets:

Sobre el hardware, decir que es muy completo y que todos los materiales que vienen pueden ser reutilizados para otros proyectos.

Para usar este hardware Digi pone a disposición de los compradores del kit y del resto del mundo un tutorial que va contando paso a paso diversos proyectos enfocados al juego, tanto con Arduino como interacción con el ordenador.

El tutorial es accesible desde: http://docs.digi.com/display/XBeeArduinoCodingPlatform/XBee+Arduino+Compatible+Coding+Platform

Este tutorial empieza haciendo una breve descripción del kit y luego explica la instalación del software XCTU y un primer ejemplo. Luego ya entra de lleno en los proyectos.

El kit incluye cinco proyectos con processing para demostrar la interacción con software y otros 5 proyectos con Arduino, para hacer circuitos inalámbricos con los módulos XBee.

Este tutorial se centra en los proyectos que son muy didácticos, pero apenas trata la parte más teórica del funcionamiento de XBee. En algunos proyectos hay enlaces a los aspectos de cómo funcionan los módulos XBee, pero están un poco escondidos y no son accesibles desde el menú lateral.

Los proyectos me gustan, pero de nuevo hay que hacer un acto de fe que las configuraciones que nos dan funcionan, aunque no se explica porque los parámetros que funcionan son esos y no otros.

Al final de cada proyecto hay un apartado llamado “Learn More” y en muchos casos apunta al tutorial del anterior kit (Wireless Connectivity Kit), lo que confirma mi idea que antes de empezar con este kit, es recomendable leer el tutorial del kit anterior si quieres conocer bien el manejo de los módulos XBee.

Después de los proyectos y para finalizar hay varios apartados de información adicional, especialmente interesantes el de troubleshooting y XBee buying guide.

Proyectos Usando Processing

Los proyectos propuestos en este tutorial para interacción de XBee con software, en este caso con processing, son:

Todo el código está disponible en:

Estos proyectos no están actualizados a la última versión 3 de processing, lo que provoca que aparezca algún pequeño error en el código fácilmente solucionable.

Estos 5 proyectos son básicamente iguales y nos enseñan cómo interactuar hardware y software de forma inalámbrica. Nos da la configuración de los dos módulos, uno conectado al ordenador y otro a unos botones, potenciómetros, etc… y nos da el software a ejecutar. Luego simplemente es ver como interactua.

Los dos primeros proyectos demuestra el pin pairing y cómo funciona la librería de XBee en processing y por lo tanto en ese caso el módulo XBee debe estar en modo API. El cuarto proyecto es igual que el segundo pero en lugar de usar un módulo, usa dos módulos. En el tercer proyecto añade un tercer módulo y la entradas analógicas con un potenciómetro y el envío de lecturas cada 100 ms. El último proyecto mezcla lo aprendido en los anteriores y monta un controlador de juegos inalámbrico.

Una mejora que podría incluir el código de processing es sacar por pantalla lo recibido por el módulo XBee, que serviría para hacer debug y aprender un poco más del modo API. Sería sencillo añadir esa funcionalidad por nuestra parte.

También sería interesante añadir a este kit algún ejemplo con lenguajes de programación más usados como python o .NET.

Proyectos Usando Arduino

Los proyectos propuestos en este tutorial para uso de XBee con Arduino son:

Los 4 primeros proyectos son muy parecidos trabajando la comunicación inalámbrica con Arduino, la librería de XBee y los conceptos de cambio de estado de pin y las entradas y salidas de los módulos XBee. El último ejemplo introduce otros conceptos como el de coordinador y RSSI o indicador de fuerza de señal recibida.

Al contrario que tutorial del anterior kit, no se habla casi nada de la parte de cómo funcionan los módulos XBee y cómo interactúan con Arduino. Hay un apartado de trabajando con Arduino http://docs.digi.com/display/XBeeArduinoCodingPlatform/Working+with+Arduino donde se ven unas nociones básicas de Arduino y otra de como instalar la librería xbee-arduino en http://docs.digi.com/display/XBeeArduinoCodingPlatform/Installing+the+xbee-arduino+library, pero no está actualizado a las nuevas versiones del IDE de Arduino, aunque en el enlace al repositorio de github de la librería si lo explica: https://github.com/andrewrapp/xbee-arduino

Un aspecto que sería muy interesante es documentar la librería xbee-arduino explicando que hace cada método de los disponibles, porque sino no nos queda más remedio que ponerse a leer el código de la librería y averiguarlo por tu cuenta.

El código de los ejercicios está disponible en https://github.com/digidotcom/XBeeArduinoCodingPlatform para descargar o hacer fork.

A la hora de hacer los ejercicios, si algo no funciona, es imposible hacer troubleshooting porque no se proporciona una forma de mandar por puerto serie todo lo que le llega de Arduino. Un poco de debug es necesario no solo para ver que puede estar fallando sino para aprender cómo funciona la comunicación entre Arduino y XBee.

Este kit tiene 3 módulos pero sólo es posible hacer ejemplos de comunicación multipunto, pero no es posible hacer esquemas de comunicación mesh, puestos que los módulos del kit no tienen esa funcionalidad.

En este tutorial apenas se ofrece parte teórica, lo que hace que si no hubiera hecho el anterior tutorial me hubiera costado un poco más entender el funcionamiento de los módulos XBee o hacer un acto de fe de que las configuraciones funcionan, pero la parte de la explicación de las conexiones y los proyectos es muy buena.

Los puntos más interesantes del tutorial son:

El objetivo de este kit junto con el manual es aprender más sobre cómo los módulos XBee pueden integrarse fácil y rápidamente con otros elementos (como Arduino o software) para conseguir conectividad inalámbrica y en mi opinión se consigue.

Conclusión

La gran ventaja de uso de los módulos RF XBee frente a otros es la sencillez de uso gracias al potente programa de configuración XCTU. Esto permite aplicar tecnología inalámbrica de forma rápida y sencilla a nuestros proyectos. La desventaja es el precio, son más caros que otros módulos equivalentes como los nRF24.

Con estos kits de aprendizaje se consigue aprender cómo funcionan los módulos XBee y cómo manejarlos. Los tutoriales disponibles en general están muy bien para aprender como si de un curso online se tratara.

Con estos kits he aprendido mucho, pero para los curiosos que nos gusta llegar más al fondo se quedan un poco cortos y he usado este documento http://www.hmangas.com/Electronica/Datasheets/Shield%20XBee%20Arduino/XBee-Guia_Usuario.pdf para profundizar y aclarar algunos conceptos.

Agradecer a Digi Logroño y en especial al Carlos que me hayan prestado este material y poder ampliar mi conocimiento sobre la tecnología XBee y así poder incluirla en mis cursos.

Más información de XBee en mis cursos y talleres de www.aprendiendoarduino.com y en el apartado XBee del curso avanzado de Arduino http://www.aprendiendoarduino.com/arduino-avanzado-2016/

Si quieres saber cuándo publicaré en la web los próximos cursos de XBee y donde los impartiré presencialmente, puedes enterar a través de mi twitter @jecrespom o en la lista de correo de #aprendiendoarduino http://list.aprendiendoarduino.com/mailman/listinfo/aprendiendoarduino.com.noticias