↜ Regresar al blog

Utilizando Arduino y una pantalla eInk para un tracker de precio de cryptos


En este post vamos a utilizar un Metro M4 AirLift (WiFi) 1 con una pantalla ePaper / eInk 2 de 2.7” con capacidad para renderizar en tres colores (Tri-Color) para crear un seguidor de precios de ciertas monedas Crypto durante las últimos 24 horas, todo utilizando Arduino.

Aclaro que hace mucho que no trabajo ni con circuitos ni con Arduino, por lo que el código puede que pueda mejorarse, pero como hay tan pocos ejemplos creo que a alguien le podría ser de utilidad.

La idea

La idea es simple, utilizaremos el Metro M4 Airlift, programado con Arduino, para hacer una llamada al API de Binance y buscaremos los cambios de una lista de monedas crypto (como ETH, IOTA, etc.) cada cierto tiempo.

Con la ayuda de Arduino, obtendremos cada uno de esos valores y los convertiremos en un resultado en formato JSON 3 y los desplegaremos en la pantalla eInk. El beneficio de la pantalla eInk es que utiliza muy poca energía, en comparación con una pantalla LCD. Estas son las pantallas que podemos ver en un dispositivo como el Kindle de Amazon.

La idea: Utilizar un Metro M4 Airlift + eInk Screen, conectarse a Binance API y desplegar los resultados.

La ventaja de utilizar el Metro M4 Airlift (WiFi) es que tiene conectividad a través de la red, a través de WiFi, por lo que no es necesario tener el dispositivo conectado a nuestra computadora para que funcione y podemos utilizar una pequeña batería para darle energía tanto al Metro M4 como a la pantalla eInk.

Nota: el Metro M4 se puede conectar a cualquier fuente de 5V, por un cable micro-usb. Por ende, lo podemos conectar a un banco de batería recargable convencional.

Como la pantalla que utilizamos es de tres colores (blanco/nada, negro, rojo), si el valor ha cambiado para negativo durante las últimas 24 horas, lo desplegaremos en color rojo, de lo contrario en color negro.

Adicionalmente mostraremos un pequeño título y un separador en la parte superior de la pantalla.

Librerías que vamos a utilizar

Vamos a utilizar el API de Binance, el cuál no requiere ningún tipo de autenticación para realizar las consultas.

Adicionalmente, para este código vamos a utilizar las siguientes librerías en nuestro código Arduino:

  • Adafruit GFX, Adafruit EPD y Adafruit NeoPixel: para comunicarnos con nuestra pantalla.
  • ArduinoJSON: para convertir el resultado del request del API de Binance en formato JSON.
  • WiFiNINA: para podernos conectar a la red WiFi que tengamos.

Conectándonos al WiFi

Para conectarnos a la red, utilizaremos la librería WiFiNINA, la cual está muy bien documentada 4. Debemos suministrar tanto el nombre de la red (SSID) como la contraseña y utilizar el resto de la librería.

Configurando la pantalla

Para configurar la pantalla, vamos a crear una función llamada draw y vamos a hacer una configuración inicial de la pantalla dentro de nuesta función setup:

Con este código hasta ahora ya hemos podido:

  • Conectarnos a la red WiFi
  • Configurar la pantalla
  • Desplegar en la pantalla un título con el texto “PRICE CHANGE (24h)”

Ahora nos quedaría hacer la ejecución del API de Binance y desplegarlo en la pantalla.

Ejecutar el API de Binance y mostrar el resultado en la pantalla

Tenemos que considerar algunas cosas a la hora de ejecutar el API de Binance y es que debemos comparar el precio de una crypto contra otra crypto, idealmente un stable coin, como USDT (Tether) o USDC.

Es decir, si vamos a ver el valor de 1 BTC, lo tenemos que analizar vs. el valor de 1 USDT. Por consiguiente, la URL para realizar la consulta a Binance se vería de la siguiente forma:

https://api.binance.com/api/v1/ticker/24hr?symbol=BTCUSDT

Y regresará una comparación entre 1 BTC vs. 1 USDT durante las últimas 24 horas. Dicho esto, nuestro código se compondrá de dos otras funciones, más algunas modificaciones a la función draw() que escribimos anteriormente:

Ya con esto podemos obtener el cambio de precio de 1 ETH vs. 1 USDT durante las últimas 24 horas y el mismo se desplegará en nuestra pantalla de color negro (si es positivo) o de color rojo (si es negativo).

De igual forma podemos agregar más monedas. En mi caso agregué las que mantengo, que serían ETH (Ethereum), DOT (Polkadot), FTM (Fantom), IOTA (MIOTA) y HNT (Hellium).

El resultado final es el siguiente:

Resultado Final: Pantalla desplegando los resultados durante las últimas 24 horas de algunas crypto monedas.