Uso de bibliotecas de IoT de .NET en equipos Windows, Linux y macOS
Las bibliotecas de IoT de .NET se usan normalmente para desarrollar código para Raspberry Pi y otros dispositivos IoT. Sin embargo, también puede usarlos para desarrollar código para equipos Windows, Linux y macOS mediante un adaptador USB a serie, como FTDI FT232H. En este artículo se muestra cómo usar las bibliotecas de IoT de .NET para comunicarse con dispositivos conectados al adaptador FT232H.
Sugerencia
En este artículo se usa un adaptador FTDI FT232H, pero puede usar cualquier adaptador USB a serie compatible con las bibliotecas de IoT de .NET, como el FT2232H, FT4232H y FT4222. Consulte la lista de enlaces de dispositivos admitidos para obtener más información.
Requisitos previos
Asegúrese de que ha instalado los controladores D2XX para el adaptador USB a serie, que se encuentra en el sitio web de FTDI.
Nota:
Los dispositivos Windows pueden instalar automáticamente los controladores al conectar el adaptador. Compruebe el Administrador de dispositivos para ver un dispositivo denominado Convertidor de serie USB que aparece en Controladores de bus serie universales. El proveedor de controladores del dispositivo debe ser FTDI.
Lista de dispositivos disponibles
Para poder crear un dispositivo GPIO, I2C o SPI, debe identificar el adaptador USB a serie conectado. En el código siguiente se enumeran los dispositivos FTDI conectados:
using Iot.Device.FtCommon;
var devices = FtCommon.GetDevices();
Console.WriteLine($"{devices.Count} available device(s)");
foreach (var device in devices)
{
Console.WriteLine($" {device.Description}");
Console.WriteLine($" Flags: {device.Flags}");
Console.WriteLine($" Id: {device.Id}");
Console.WriteLine($" LocId: {device.LocId}");
Console.WriteLine($" Serial number: {device.SerialNumber}");
Console.WriteLine($" Type: {device.Type}");
}
if (devices.Count == 0)
{
Console.WriteLine("No device connected");
return;
}
En el código anterior, el método FtCommon.GetDevices()
devuelve una lista de todos los dispositivos FTDI conectados.
Uso de un dispositivo GPIO
Esta es una implementación de hardware del tutorial de Blink un LED que usa el adaptador FTDI FT232H para controlar un LED:
En la imagen anterior, el circuito LED es muy similar al tutorial original. La única diferencia es que el LED está conectado al pin D7 en el adaptador FT232H en lugar del pin 18 en Raspberry Pi.
El código del tutorial también es similar al tutorial original:
using System.Device.Gpio;
using Iot.Device.Ft232H;
using Iot.Device.FtCommon;
Console.WriteLine("Blinking LED. Press Ctrl+C to end.");
Ft232HDevice ft232h = new Ft232HDevice(FtCommon.GetDevices()[0]);
GpioController controller = ft232h.CreateGpioController();
int pin = Ft232HDevice.GetPinNumberFromString("D7");
controller.OpenPin(pin, PinMode.Output);
bool ledOn = true;
while (true)
{
controller.Write(pin, ledOn ? PinValue.High : PinValue.Low);
Thread.Sleep(1000);
ledOn = !ledOn;
}
En el código anterior:
- Para crear una instancia de
Ft232HDevice
, pase el primer identificador de dispositivo devuelto porFtCommon.GetDevices()
al constructor. - Se crea una instancia de
GpioController
denominada controlador llamando aCreateGpioController()
en la instanciaFt232HDevice
. Esta instanciaGpioController
realiza las mismas funciones que la instanciaGpioController
del tutorial original. - El valor entero del pin se recupera llamando a
GetPinNumberFromString()
en la instanciaFt232HDevice
y pasando el nombre de pin alfanumérico D7. - El resto del código es idéntico al tutorial original.
Uso de un dispositivo I2C
Para la comunicación I2C, los pines D0 y D1 del adaptador FT232H se usan para las líneas SDL y SCA, respectivamente. El conmutador del selector I2C en el adaptador FT232H debe establecerse en Activado.
Esta es una implementación de hardware del tutorial de Lectura de condiciones ambientales de un sensor que usa el adaptador FTDI FT232H para leer la temperatura, la humedad y la presión barométrica desde un sensor BME280:
En la imagen anterior:
- Los pines D0 y D1 del adaptador FT232H están conectados a los pines SDL y SCA en la placa adaptadora BME280, respectivamente.
- El conmutador del selector I2C en la placa adaptadora BME280 está establecido en Activado.
using System.Device.I2c;
using Iot.Device.Bmxx80;
using Iot.Device.Bmxx80.PowerMode;
using Iot.Device.Ft232H;
using Iot.Device.FtCommon;
Ft232HDevice ft232h = new Ft232HDevice(FtCommon.GetDevices()[0]);
I2cConnectionSettings i2cSettings = new I2cConnectionSettings(0, Bme280.SecondaryI2cAddress);
using I2cDevice i2cDevice = ft232h.CreateI2cDevice(i2cSettings);
using Bme280 bme280 = new Bme280(i2cDevice);
int measurementTime = bme280.GetMeasurementDuration();
while (true)
{
Console.Clear();
bme280.SetPowerMode(Bmx280PowerMode.Forced);
Thread.Sleep(measurementTime);
bme280.TryReadTemperature(out var tempValue);
bme280.TryReadPressure(out var preValue);
bme280.TryReadHumidity(out var humValue);
bme280.TryReadAltitude(out var altValue);
Console.WriteLine($"Temperature: {tempValue.DegreesCelsius:0.#}\u00B0C");
Console.WriteLine($"Pressure: {preValue.Hectopascals:#.##} hPa");
Console.WriteLine($"Relative humidity: {humValue.Percent:#.##}%");
Console.WriteLine($"Estimated altitude: {altValue.Meters:#} m");
Thread.Sleep(1000);
}
En el código anterior:
- Para crear una instancia de
Ft232HDevice
, pase el primer identificador de dispositivo devuelto porFtCommon.GetDevices()
al constructor. - Se crea una instancia de
I2cDevice
mediante una llamada aCreateI2cDevice()
en la instanciaFt232HDevice
. Esta instanciaI2cDevice
realiza las mismas funciones que la instanciaI2cDevice
del tutorial original. - El resto del código es idéntico al tutorial original.
Uso de un dispositivo SPI
Para la comunicación SPI, los pines D0, D1, D2y D3 del adaptador FT232H se usan para las líneas SCK, MOSI, MISO y CS, respectivamente. El conmutador del selector I2C en el adaptador FT232H debe establecerse en Desactivado.
Esta es una implementación de hardware del tutorial de Lectura de los valores de lectura de un convertidor analógico a digital que usa el adaptador FTDI FT232H para leer valores de un ADC MCP3008:
En la imagen anterior:
- Los pines D0, D1, D2, and D3 del adaptador FT232H están conectadas a los pines CLK, DIN, DOUT y CS/SHDN en MCP3008, respectivamente.
- El conmutador del selector I2C en la placa adaptadora MCP3008 está establecido en Desactivado.
using System.Device.Gpio;
using System.Device.Spi;
using Iot.Device.Adc;
using Iot.Device.Ft232H;
using Iot.Device.FtCommon;
var devices = FtCommon.GetDevices();
var ft232h = new Ft232HDevice(devices[0]);
var hardwareSpiSettings = new SpiConnectionSettings(0, 3) { ClockFrequency = 1_000_000, DataBitLength = 8, ChipSelectLineActiveState = PinValue.Low };
using SpiDevice spi = ft232h.CreateSpiDevice(hardwareSpiSettings);
using var mcp = new Mcp3008(spi);
while (true)
{
Console.Clear();
double value = mcp.Read(0);
Console.WriteLine($"{value}");
Console.WriteLine($"{Math.Round(value/10.23, 1)}%");
Thread.Sleep(500);
}
En el código anterior:
- Para crear una instancia de
Ft232HDevice
, pase el primer identificador de dispositivo devuelto porFtCommon.GetDevices()
al constructor. - Se crea una instancia de
SpiDevice
mediante una llamada aCreateSpiDevice()
en la instanciaFt232HDevice
. Esta instanciaSpiDevice
realiza las mismas funciones que la instanciaSpiDevice
del tutorial original. - El resto del código es idéntico al tutorial original.
Obtención del código
El código de este tutorial está disponible en GitHub.