Un paquete NuGet en nanoFramework es una librería lista para añadir drivers y funcionalidad al proyecto sin escribirlo todo desde cero.
Hasta ahora, en este bloque de protocolos, hemos sido unos auténticos “artesanos del byte”. Hemos enviado comandos manuales por I2C, calculado checksums y configurado registros bit a bit.
Es genial para aprender cómo funcionan las cosas por dentro. Pero, siendo sinceros, si tuvieras que escribir el driver completo para una pantalla OLED o un acelerómetro de 6 ejes desde cero cada vez que inicias un proyecto, nunca acabarías nada.
En el ecosistema .NET, esa ayuda tiene nombre propio: NuGet.
En esta entrada aprenderemos a buscar, instalar y utilizar librerías de drivers ya creadas por la comunidad, ahorrándonos cientos de horas de trabajo.
¿qué es nuget?
si vienes de arduino, conocerás el “gestor de librerías”. si vienes de node.js, conocerás npm. en el mundo .net, el rey es nuget.
es un repositorio centralizado donde los desarrolladores suben paquetes de código compilado (.dll) listos para usar.
nanoframework cuenta con una organización oficial y una comunidad muy activa que portan y mantienen drivers para casi cualquier sensor popular que puedas comprar en aliexpress o amazon.
El repositorio nanoFramework.IoT.Device
El repositorio nanoFramework.IoT.Device reúne implementaciones para nanoFramework de numerosos drivers del ecosistema .NET IoT.
Esto significa que tenemos acceso a drivers probados y robustos para:
- Sensores: BMP280, BME680, AHT10/20, DHT11/22, MPU6050…
- Pantallas: SSD1306 (OLED), ILI9341 (TFT), Hitachi HD44780 (LCD 16x2)…
- Expansores: PCF8574, MCP23008…
- Motores: Controladores de pasos, Servos (PCA9685)…
Puedes ver la lista completa de dispositivos soportados en el repositorio de GitHub de nanoFramework.IoT.Device. ¡La lista es inmensa!
Cómo buscar e instalar un driver
Vamos a ver el proceso paso a paso en Visual Studio 2022. Supongamos que queremos usar un sensor de presión y temperatura BMP280.
Abrir el administrador de paquetes
En el Explorador de Soluciones, haz clic derecho sobre tu proyecto (no sobre la solución) y selecciona Administrar paquetes NuGet… (Manage NuGet Packages…).
Buscar el dispositivo
Ve a la pestaña Examinar (Browse).
Aquí viene el truco: En el buscador, escribe nanoFramework.IoT.Device seguido del nombre del chip.
Por ejemplo: nanoFramework.IoT.Device.Bmxx80.
(Nota: A veces los drivers agrupan familias. El BMP280 está en la familia Bmxx80 junto al BMP180).
Incluir versiones preliminares cuando sea necesario
Muchas librerías de nanoFramework se actualizan constantemente. Si no te aparece el driver que buscas, asegúrate de marcar la casilla “Incluir versión preliminar” (Include prerelease) junto a la barra de búsqueda.
Instalar el paquete
Selecciona el paquete y pulsa Instalar.
Visual Studio te mostrará una ventana de confirmación y, posiblemente, te dirá que va a instalar otras dependencias (como System.Device.I2c). Acepta todo.
Del byte al objeto
Para que veas la diferencia, comparemos cómo sería leer la temperatura “a mano” vs “con driver”.
Acceso manual a los registros
(Simplificada, sin gestión de errores ni calibración real)
// Configurar I2C
var device = I2cDevice.Create(new I2cConnectionSettings(1, 0x76));
// Pedir lectura (0xFA es registro temp en BMP280)
device.Write(new byte[] { 0xFA });
byte[] data = new byte[3];
device.Read(data);
// Juntar bytes, aplicar fórmulas de compensación (¡Una pesadilla matemática!)...
// int adc_T = (data[0] << 12) | (data[1] << 4) | (data[2] >> 4);
// double temp = ... (fórmulas complejas del datasheet)Acceso mediante un driver NuGet
using Iot.Device.Bmxx80;
using Iot.Device.Bmxx80.FilteringMode;
// 1. Instanciamos el objeto pasando el dispositivo I2C
// Fíjate que el driver ya sabe qué registros tocar
var i2cSettings = new I2cConnectionSettings(1, Bmp280.DefaultI2cAddress);
var i2cDevice = I2cDevice.Create(i2cSettings);
using Bmp280 bmp = new Bmp280(i2cDevice);
// 2. Configuración de alto nivel (IntelliSense nos ayuda)
bmp.TemperatureSampling = Sampling.HighResolution;
bmp.FilterMode = Bmp280FilteringMode.X2;
// 3. Leer
var lectura = bmp.Read();
Debug.WriteLine($"Temperatura: {lectura.Temperature.DegreesCelsius} ºC");
Debug.WriteLine($"Presión: {lectura.Pressure.Hectopascals} hPa");No solo es menos código. Es que obtenemos objetos con unidades. No nos devuelve un int 2500, nos devuelve un objeto Temperature que podemos pedir en Celsius, Fahrenheit o Kelvin.
Dependencias automáticas
Otra gran ventaja de NuGet es que gestiona el árbol de dependencias.
Si instalas un driver para una pantalla que funciona por SPI (como nanoFramework.IoT.Device.Ssd1351), NuGet detectará automáticamente que tu proyecto necesita la librería base nanoFramework.System.Device.Spi y la instalará por ti.
Así evitas el clásico error de “Falta referencia a…”.
¿Y si el driver no existe?
A veces pasa. Tienes un sensor muy nuevo o muy raro. En ese caso:
- Busca si existe el driver en .NET IoT y comprueba qué APIs utiliza. No todos los drivers se pueden portar sin cambios, porque nanoFramework implementa un subconjunto de .NET.
- Consulta el datasheet o una librería de referencia y porta la lógica a C# usando operaciones como
WriteRead.
Con los drivers NuGet podemos centrarnos en la aplicación sin repetir el acceso a registros de cada sensor. El siguiente bloque lleva esos datos fuera del dispositivo mediante Wi-Fi y redes.