Comunicación entre Arduino y Digispark por medio de I2C

0
86
En este artículo pretendo documentar el procedimiento para establecer comunicación entre Arduino y Digispark por medio del protocolo de comunicación I2C. Para los que no lo conocen, el Digispark es una placa de desarrollo basada en el microcontrolador ATtiny85. Se caracteriza por su tamaño, consumo energético y costo reducido.

Digispark ATtiny85

Este dispositivo resulta muy útil cuando se necesita realizar tareas que requieren poca capacidad de procesamiento o pocas entradas/salidas analógicas o digitales.

Es posible hacer diseños de sistemas con múltiples dispositivos esclavos basados en Digisparks que responden a una unidad máster central. Sería como tener múltiples subnúcleos que responden a un procesador principal. Por supuesto que es necesario que estos subnúcleos se comuniquen con la unidad central, para lo cual es necesario un medio y un protocolo de comunicación.

Diagrama de sistema máster-multiesclavo entre Arduino y Digispark

El protocolo I2C permite la interconexión de múltiples dispositivos en un solo bus. La interconexión de los dispositivos es en paralelo, donde cada dispositivo posee una dirección única dentro del bus. El máster puede solicitar información a cada esclavo de la red haciendo referencia a su dirección dentro de la misma.

El protocolo de comunicación I2C es muy utilizado para la interconexión de múltiples dispositivos a través de cables, siempre y cuando las distancias no sean demasiado largas. Casi siempre la distancia máxima de cable se ubica entre 6 y 20 pies. El bus de comunicación I2C consiste en 3 conexiones cableadas: una línea SDA, una línea SCL y una linea de puesta a tierra (GND). La conexión de cada dispositivo al bus de comunicación se hace en paralelo.

Representación gráfica de bus de comunicación I2C
Tanto Arduino como Digispark poseen la capacidad de conectarse a un bus de comunicación I2C. Ambos dispositivos pueden actuar como máster o esclavos, dependiendo de la necesidad del usuario. Esto permite que este protocolo sea una gran opción para interconectar múltiples dispositivos de este tipo.

Para los efectos de este post utilizaré un Arduino Nano como referencia, aunque casi cualquier modelo de Arduino puede ser utilizado.

Diagrama de pines del Arduino Nano. Imagen cortesía del sitio web http://www.pighixxx.com

Según el diagrama de pines del Arduino Nano, los puertos SDA y SCL se ubican en los pines A4 y A5, respectivamente. Es a través de estos puertos que el Arduino puede unirse a un bus I2C y establecer comunicación con otros dispositivos a través del mismo.

Diagrama de pines del Digispark. Imagen cortesía del sitio web https://5p.io

Según el diagrama de pines del Digispark, los puertos SDA y SCL se ubican pines D0 y D2, respectivamente. El siguiente diagrama muestra la interconexión entre un Digispark y un Arduino Nano a través de un bus I2C.

Arduino y Digispark
Diagrama de conexión entre el Digispark y el Arduino Nano a través del bus I2C
Para habilitar la comunicación entre los dos dispositivos es necesario programar ambos microcontroladores con las librerías adecuadas. En el caso del Arduino Nano, la librería Wire.h, nativa en el Arduino IDE, permite unirnos a un bus I2C e intercambiar datos. Para este post consideraremos el siguiente código para el Arduino Nano:

Este código hará una solicitud a la dirección 10 en el bus I2C cada dos segundos, imprimiendo la respuesta recibida en el puerto serie. Para programar el Digispark será necesario utilizar una librería especial, TinyWire, disponible en Github. El código es el siguiente:

Al subir estos códigos, tanto en el Arduino Nano como en el Digispark, podemos empezar a recibir mensajes en el Nano a través del Monitor Serie.

Mensajes recibidos por el Arduino Nano, mostrados en el Monitor Serie

A este bus de comunicación se pueden unir múltiples dispositivos, siempre y cuando cada uno tenga una dirección distinta. La integración de Arduino y Digispark es una alternativa de bajo costo que permite lograr resultados muy interesantes. El protocolo de comunicación I2C resulta ser un medio de comunicación eficiente y fácil de implementar.