Por qué Ubuntu Core (y cuándo no usarlo)
Imagina que armaste un sensor de temperatura con tu Raspberry Pi y un BME280. Funciona perfecto en tu escritorio, en Raspberry Pi OS, con todo el ecosistema de apt y pip a mano. Ahora viene la parte difícil: ese mismo Pi tiene que vivir en una bodega industrial, sin teclado, sin pantalla, sin alguien que recuerde correr apt upgrade cada dos semanas. Si la SD falla, si alguien tropieza con el cable, si el firmware se corrompe a medio update, el equipo queda fuera de línea y nadie se entera.
Ese es exactamente el problema que Ubuntu Core resuelve. No es una distro pensada para hobbistas: es una versión inmutable de Ubuntu, basada en transacciones, con updates atómicos y rollback automatico cuando algo falla. Todo lo que corre dentro vive empaquetado en snaps sandboxeados, con permisos declarativos para acceder al hardware. La contracara es que ya no puedes instalar paquetes con apt ni librerías con pip directo en el sistema: para que tu código toque el bus I2C o el GPIO, tienes que construir un snap y declarar qué hardware necesita.
En este tutorial vas a recorrer ese flujo completo en una Raspberry Pi: flashear Ubuntu Core, configurar acceso SSH con Ubuntu One, instalar un dashboard pre construido que lee un sensor BME280 vía Blinka (la capa de compatibilidad de CircuitPython para Linux), y entender cómo se conectan los plugs y slots que sandboxean el hardware. Al final vas a saber decidir si Ubuntu Core te sirve para tu próximo despliegue, o si te conviene quedarte en Pi OS Lite con un cron que haga apt update y rece.

Hardware que vas a necesitar
Ubuntu Core 24 soporta Raspberry Pi 3, 4 y 5. La Pi 5 tiene la ventaja de GPIO más ágil y un controlador I2C más limpio, pero cualquiera de las tres anda. Lo importante es no usar microSD truchas: el sistema de archivos inmutable + las transacciones de snap escriben más que Pi OS normal, y una SD mala se nota rápido.

Para el sensor vas a usar un BME280 (temperatura + humedad + presión) conectado por I2C. Si tu BME280 no tiene conector Qwiic/Stemma QT, puedes cablearlo con 4 jumpers (VCC, GND, SDA al GPIO 2, SCL al GPIO 3). Si tienes un breakout con conector JST SH (Stemma QT), conéctalo a un breakout Pi Stemma para no soldar.

Importante: vas a necesitar una segunda computadora corriendo Ubuntu (no Windows ni macOS) para compilar los snaps que se instalan en el Pi. Puede ser una segunda Raspberry Pi con Ubuntu Server 24.04, o una notebook con Ubuntu instalado. Esa máquina la vas a usar solo para snapcraft pack y para flashear la SD.
Setup paso a paso
1. Crear cuenta Ubuntu One y subir clave SSH
Ubuntu Core no te deja crear usuarios locales con contraseña: el modelo de acceso es 100% por SSH con clave pública, vinculada a una cuenta Ubuntu One. Antes de tocar el Pi, ve a login.ubuntu.com desde tu computadora secundaria y crea una cuenta.
En la misma computadora, genera un par de claves SSH dedicado para este Pi (no reuses la clave que usas para GitHub):
mkdir -p ~/.ssh
chmod 700 ~/.ssh
cd ~/.ssh/
ssh-keygen -t rsa
Cuando el wizard pregunte el nombre del archivo, escribe id_ubuntucore (o el nombre que quieras). Te recomiendo poner una passphrase: es un segundo factor por si la clave privada se filtra. Vas a obtener dos archivos: id_ubuntucore (privado, nunca compartir) e id_ubuntucore.pub (público, listo para subir).
Ahora sube la clave pública. Ve a https://login.ubuntu.com/ssh-keys, abre id_ubuntucore.pub con cat o un editor, copia todo el contenido, pégalo en el formulario de import y haz clic en Import SSH Key. Este paso es crítico: el primer boot del Pi descarga las claves desde tu cuenta Ubuntu One, así que si no están arriba, no puedes entrar.
2. Flashear Ubuntu Core 24 en la microSD
Usa Raspberry Pi Imager (la app oficial). En el menú de OS no busques Ubuntu Core directo: ve a Other general purpose OS → Ubuntu → scrollea hasta abajo y elige Ubuntu Core24. El selector de hardware tiene que coincidir con tu modelo (3, 4 o 5).
Deja que termine el flasheo y la verificación, eyecta la SD, métela en el Pi, conecta monitor HDMI, teclado USB, y enchufa la fuente. El primer boot tarda varios minutos y se reinicia solo a la mitad. Al final aparece Press enter to configure.
3. Configurar red y cuenta
En el menú de red, elige wlan0 para WiFi o eth0 para cable. Para WiFi: Edit Wifi en el submenú de wlan0, Choose a visible network, elige tu SSID e ingresa la contraseña. Cuando se conecte, la opción Done se activa.
La pantalla final te pide el email de tu cuenta Ubuntu One. Es el momento en que Ubuntu Core descarga la clave pública SSH que subiste antes. Si te equivocas de email o no subiste la clave, la única salida es re flashear.
Cuando termina, te muestra algo como:
This device is registered to [ubuntu-sso-email-address]
Remote access was authenticated with SSO user [username].
Public SSH keys were added to the device for remote access.
[ubuntu-sso-email-address] can connect remotely to this device via SSH:
ssh [username]@[ip-address]
Anota el username y la IP. Desde tu computadora secundaria, prueba:
# Activate the key in your terminal session
ssh-add ~/.ssh/id_ubuntucore
ssh [username]@[ip-address]
# OR specify the keyfile with argument
ssh -i ~/.ssh/id_ubuntucore [username]@[ip-address]
Si entra, puedes desconectar el teclado y la pantalla del Pi: de acá en adelante todo es por SSH.
Demo: dashboard del BME280 en kiosco
La idea de la demo es simple: un snap corre un mini servidor web en localhost:8080 que sirve un HTML con las lecturas del BME280, y otro snap llamado wpe-webkit-mir-kiosk muestra esa página a pantalla completa en el HDMI. El sandbox de Ubuntu Core hace que ninguno de los dos tenga acceso al I2C por defecto: hay que conectar los plugs del snap a los slots del sistema.
Instalar el kiosco
Desde la sesión SSH al Pi:
snap install ubuntu-frame wpe-webkit-mir-kiosk
Apenas termina, el monitor HDMI muestra una página web por defecto. Eso confirma que el compositor de pantalla y el navegador headless arrancaron correctamente.
Bajar el snap del dashboard
El snap bme280-dashboard_0.1_arm64.snap no está en la Snap Store: es un build local que vas a copiar desde tu computadora secundaria. Descárgalo del link de Adafruit y copialo por scp:
# Run on your main computer to copy the snap file to the Ubuntu Core device
scp -i [keyfile] bme280-dashboard_0.1_arm64.snap [username]@[hostname-or-ip]:/home/[username]/
# example:
scp -i ~/.ssh/id_ubuntucore bme280-dashboard_0.1_arm64.snap foamyguy@bluepi:/home/foamyguy/
Instalar el snap fuera de la store
Snap no deja instalar archivos arbitrarios por defecto. Necesitas dos banderas: --dangerous (saltea la verificación de firma de la store) y --devmode (afloja restricciones del sandbox para poder tocar GPIO sin un gadget snap custom).
sudo snap install ./bme280-dashboard_0.1_arm64.snap --dangerous --devmode
Conectar los plugs al slot del I2C
Acá viene el concepto central de Ubuntu Core. Tu snap declara que necesita el bus I2C y el plug hardware-observe, pero por defecto no los recibe. Hay que conectarlos a mano (o automatizar la conexión con un gadget snap, que es lo que harías en producción).
sudo snap connect bme280-dashboard:i2c pi:i2c-1
sudo snap connect bme280-dashboard:hardware-observe
Una vez conectados, puedes probar que el sensor responde con el comando de test del snap:
sudo bme280-dashboard.blinka-test
Vas a ver lecturas de temperatura, humedad y presión actualizándose. Ctrl+C para salir.
Apuntar el kiosco al dashboard
Finalmente, dile al navegador headless que cambie la URL por defecto por el servidor del dashboard:
snap set wpe-webkit-mir-kiosk url=http://localhost:8080/
En segundos, la pantalla HDMI cambia del Ubuntu Core por defecto al dashboard con las lecturas en vivo del BME280.
Cómo construir tu propio snap (mapa conceptual)
La guía original de Adafruit dedica una página completa al proceso de empaquetado con snapcraft. Sin entrar en el YAML completo, los puntos clave son:
- El proyecto se define en
snap/snapcraft.yaml: nombre, versión, base (core24), confinement (devmodepara desarrollo,strictpara producción), apps que expone, y la lista de plugs que necesita (i2c,hardware-observe,network-bind, etc). - Las dependencias de Python (Blinka, Flask, adafruit circuitpython-bme280) se declaran en un
requirements.txtquesnapcraftinstala dentro del snap en el momento delpack. snapcraft packcompila todo en un archivo.snapque es básicamente un squashfs con un manifest.- Para producción, quieres mover de
--devmodeastrictconfinement, y armar un gadget snap custom que conecte los plugs al slot del I2C automaticamente en el primer boot. Eso te ahorra lossnap connectmanuales en cada despliegue.
El repositorio de ejemplo de la guía tiene todo el snapcraft.yaml, el servidor Flask y el código que consulta el BME280 con Blinka. Si nunca trabajaste con snapcraft, considera pasar primero por un snap hello world antes de meterte con I2C.
Variantes y mejoras
Reemplazar el BME280 por un DS18B20 o DHT22: si solo te interesa temperatura, un DS18B20 es más barato y usa 1-Wire en vez de I2C. Vas a tener que cambiar el plug
i2cporgpioy la librería Blinka poradafruit-circuitpython-dht. El resto del snap (Flask + kiosco) queda igual.Enviar datos a un broker MQTT en vez de mostrarlos en pantalla: si tu Pi vive en una bodega sin monitor, el dashboard en kiosco no sirve de mucho. Reemplaza el servidor Flask por un cliente MQTT que publique las lecturas cada 30 segundos a un broker (Mosquitto en otra Pi, o un servicio cloud). Solo tienes que cambiar el plug
network-bindpornetwork.Estación meteorológica multi sensor: combina el BME280 con un anemómetro analógico (vía MCP3008 por SPI) y un sensor de luz BH1750 (también I2C). Vas a necesitar agregar el plug
spiy modificar el HTML del dashboard para mostrar los 4 valores.Comparar contra Pi OS Lite + systemd: si nunca vas a tener una flota de más de 5 dispositivos, la complejidad de Ubuntu Core + snapcraft probablemente no te paga. Pi OS Lite + un servicio systemd con
Restart=always+unattended-upgradeste da el 80% del valor sin ningún snap. Haz el ejercicio antes de comprometerte.
Personalización para Chile
Todo este proyecto se arma con piezas que MechatronicStore mantiene en stock. Si la guía original de Adafruit lista breakouts y fuentes específicas de su catálogo, usa estos equivalentes locales (los SKU exactos hay que confirmarlos con la búsqueda del catálogo MS, porque la corrida automatica de detección de productos no estuvo disponible en este turno):
- Raspberry Pi 5 (4 GB) o, si presupuesto aprieta, Raspberry Pi 4 Model B (4 GB). La Pi 3 también funciona pero el dashboard en kiosco se siente lento.
- Tarjeta microSD 32 GB clase 10 (mínimo). Para producción, mira tarjetas industriales A1/A2.
- Sensor BME280 I2C (módulo genérico chino o el Adafruit oficial. el código es el mismo).
- Fuente USB-C 5V 3A para Pi 4 y 5, o cargador micro USB 5V 2.5A para Pi 3.
- Cable micro HDMI a HDMI 2 m para Pi 4 y 5 (la salida de pantalla cambió a micro HDMI), o cable HDMI estándar para Pi 3.
- Jumpers hembra hembra 20 cm (4 unidades) si tu BME280 no es Qwiic.
Equivalencias frente a la guía original: si Adafruit menciona el Pi Stemma QT Breakout, en Chile puedes salvarlo con jumpers F-F directos al header. El Pi Stemma facilita la vida pero no es indispensable. Las fuentes oficiales Raspberry Pi tienen reemplazos genéricos de la misma corriente que cumplen para uso de hobby; para producción 24/7 conviene una fuente de calidad con UL/CE.
Recursos
- Tutorial original: Use Blinka in Ubuntu Core on Raspberry Pi (Adafruit Learning System, Tim C, junio 2026)
- Documentación oficial Ubuntu Core: ubuntu.com/core/docs
- Imágenes Raspberry Pi para Ubuntu Core: ubuntu.com/download/raspberry pi-core
- Librería Blinka (CircuitPython para Linux): github.com/adafruit/Adafruit_Blinka
- Driver BME280 para CircuitPython: github.com/adafruit/Adafruit_CircuitPython_BME280
- Snapcraft (herramienta para empaquetar snaps): snapcraft.io/docs
Versión chilena con componentes en stock local en MechatronicStore.




