En esta entrada te enseño a integrar la Inkplate 6 COLOR en HA, una de las mejores opciones en pantalla de tinta electrónica a color.
Índice
Inkplate 6 Color
Hoy descubrimos otra pantalla fabricada por Soldered (como la gran pantalla que ya probamos antes), y en este caso se trata de una de las pocas que conocemos que nos permiten mostrar imágenes a todo color (junto al reTerminal E1002).

Se trata de la Inkplate 6 COLOR, una pantalla de 5,85″ (600 x 448 pixels) capaz de mostrar 7 colores diferentes (negro, blanco, rojo, amarillo, azul, verde y naranja), con lector de tarjetas microSD y carcasa opcional impresa en 3D. Funciona sobre una placa ESP32 con WiFi integrado y Bluetooth 4.0 (BLE), y está alimentada por una batería de 1200 mAh.
La mala noticia es que, a pesar de correr sobre un ESP32, no hemos conseguido integrarla directamente con ESPHome. La buena es que de todas maneras hemos encontrado la forma de mostrar tus paneles de Home Assistant.
Requisitos previos
Para integrar la Inkplate 6 COLOR en HA previamente necesitas:
- Una pantalla de tinta electrónica Inkplate 6 COLOR.
- Descargar e instalar Arduino IDE en tu ordenador.
- Instalar el complemento Puppet en Home Assistant.
Configuración de Arduino
Como te decía, para integrar la Inkplate 6 COLOR en HA no vamos a usar ESPHome, sino Arduino IDE. Una vez descargado e instalado en tu ordenador, sigue estos pasos:
- Ejecuta el programa y haz clic en Archivo > Preferencias. En el campo «URLs adicionales gestor de placas» introduce la siguiente URL para instalar la librería correspondiente a las Inkplate. Luego pulsa en «Aceptar».

- En el menú lateral de la izquierda, pulsa sobre el icono con forma de placa. Introduce en el buscador «Inkplate Boards» y haz clic en el botón «Instalar» para instalar el gestor de placas correspondiente a las pantallas en el entorno de Arduino IDE.

- Ahora pulsa sobre el icono con forma de libros en el menú lateral, busca la librería «InkplateLibrary» y haz clic en «Instalar».

- Una vez terminada la instalación ya tendremos instalada la librería completa con los ejemplos que vamos a usar como base para nuestro proyecto. Conecta en este momento la pantalla a tu ordenador, utilizando el cable USB.
- Hecho esto, vamos a seleccionar la placa y puerto de conexión en el desplegable «Selecciona Placa». Probablemente, si has seguido todos los pasos, reconocerá automáticamente el dispositivo «Soldered Inkplate 6COLOR» en el puerto COMX.

- Ahora ya podemos cargar el código que se va a encargar de mostrar nuestro dashboard de HA en la pantalla. Para ello, copia el siguiente código y pégalo en la parte derecha de la interfaz de Arduino IDE (eliminando las líneas de ejemplo).
#ifndef ARDUINO_INKPLATECOLOR
#error "Wrong board selection for this example, please select Soldered Inkplate 6COLOR in the boards menu."
#endif
#include "HTTPClient.h"
#include "Inkplate.h"
#include "WiFi.h"
Inkplate display;
/**************** CONFIGURACIÓN ******************/
char *ssid = (char *)"TuredWifi";
char *pass = (char *)"tucontraseñawifi";
String url = "http://192.168.8.205:10000/dashboard-inkplate6color/0?viewport=600x488&format=jpeg&lang=es&next=300"; //Aqui pon tu url de puppet
/*************************************************/// next=300 → Indica que el valor de refresco es de 300 segundos que es lo mismo que 5 minutos.
unsigned long lastDownload = 0;
unsigned long updateInterval = 60000; // por defecto 1 minuto
//-----------------------------------------------------------
// FUNCIÓN PARA OBTENER AUTOMÁTICAMENTE EL VALOR DE next=
//-----------------------------------------------------------
unsigned long getNextValueFromURL(String url)
{
int pos = url.indexOf("next=");
if (pos == -1)
return 60000; // 1 min por defecto si no existe next=
pos += 5; // avanzar después de "next="
int endPos = url.indexOf("&", pos);
String value;
if (endPos == -1)
value = url.substring(pos);
else
value = url.substring(pos, endPos);
unsigned long seconds = value.toInt();
if (seconds == 0)
return 60000; // evitar errores → 1 minuto
return seconds * 1000ULL; // convertir a milisegundos
}
//-----------------------------------------------------------
// FUNCIÓN DE DESCARGA + DIBUJO
//-----------------------------------------------------------
void downloadAndShowImage()
{
Serial.println("Downloading image...");
HTTPClient http;
http.begin(url);
int httpCode = http.GET();
if (httpCode == HTTP_CODE_OK)
{
int32_t size = http.getSize();
int32_t len = size;
if (size > 0)
{
uint8_t *buffer = (uint8_t *)ps_malloc(size);
if (buffer == nullptr)
{
Serial.println("ps_malloc failed!");
display.clearDisplay();
display.setCursor(0, 0);
display.println("ps_malloc failed!");
display.display();
http.end();
return;
}
uint8_t *buffPtr = buffer;
uint8_t buff[512] = {0};
WiFiClient *stream = http.getStreamPtr();
while (http.connected() && (len > 0 || len == -1))
{
size_t available = stream->available();
if (available)
{
int c = stream->readBytes(buff, (available > sizeof(buff)) ? sizeof(buff) : available);
memcpy(buffPtr, buff, c);
if (len > 0)
len -= c;
buffPtr += c;
}
else if (len == -1)
{
len = 0;
}
}
display.clearDisplay();
display.drawJpegFromBuffer(buffer, size, 0, 0, true, false);
free(buffer);
}
else
{
display.clearDisplay();
display.setCursor(0, 0);
display.println("Invalid response length: " + String(size));
}
}
else
{
display.clearDisplay();
display.setCursor(0, 0);
display.println("HTTP error: " + String(httpCode));
}
display.display();
http.end();
}
//-----------------------------------------------------------
// SETUP
//-----------------------------------------------------------
void setup()
{
Serial.begin(115200);
display.begin();
display.clearDisplay();
// Obtener intervalo desde parámetro next=
updateInterval = getNextValueFromURL(url);
Serial.print("Refresco cada ");
Serial.print(updateInterval / 1000);
Serial.println(" segundos según next=");
// Conectar WiFi
Serial.print("Connecting to WiFi");
WiFi.mode(WIFI_MODE_STA);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi OK!");
// Primera descarga al arrancar
downloadAndShowImage();
lastDownload = millis();
}
//-----------------------------------------------------------
// LOOP
//-----------------------------------------------------------
void loop()
{
unsigned long now = millis();
if (now - lastDownload >= updateInterval)
{
lastDownload = now;
// Comprobar WiFi y reintentar si se ha caído
if (WiFi.status() != WL_CONNECTED)
{
Serial.println("WiFi lost. Reconnecting...");
WiFi.disconnect();
WiFi.begin(ssid, pass);
unsigned long start = millis();
while (WiFi.status() != WL_CONNECTED && millis() - start < 15000)
{
delay(500);
Serial.print(".");
}
Serial.println();
}
if (WiFi.status() == WL_CONNECTED)
{
downloadAndShowImage();
}
else
{
Serial.println("WiFi still disconnected. Skipping download.");
}
}
- Observa el código anterior, y adapta las siguientes líneas al inicio del código:
- char *ssid. Reemplaza «TuredWifi» por el nombre (SSID) de tu red WiFi, a la que se conectará tu pantalla.
- char *pass. Reemplaza «tucontraseñawifi» por la contraseña de la red WiFi indicada.
- String url. Reemplaza la URL del ejemplo por la que te haya proporcionado el complemento Puppet para mostrar tu dashboard.
- Cuando hayas terminado de editar el código, vamos a cargarlo en la placa. Para ello haz clic en la flecha que aparece a la izquierda del nombre de la placa, y espera a que se compile y cargue en la pantalla.

- Si todo ha ido bien, ya debería aparecer la imagen de nuestro dashboard de Home Assistant.

Preparando el panel de control
Para conseguir el mejor ajuste del dashboard a la pantalla, entra en la interfaz web de Puppet (desde Configuración > Complementos > Puppet > Abrir la interfaz web) y aplica una resolución de 600×448, correspondiendo a las dimensiones de la pantalla.
A partir de aquí, todo depende tu imaginación. En mi caso monitorizo las inyecciones de insulina de nuestra mascota (cantidad y horarios), muestro la temperatura a la que se encuentran en el frigorífico y la cantidad restante que queda en el vial de 100 ml.
Este es el dashboard que he realizado en HA, que has visto en la imagen anterior 😊


