Partilhar via


Usar bibliotecas do .NET IoT em computadores Windows, Linux e macOS

As bibliotecas de IoT do .NET são comumente usadas para desenvolver código para o Raspberry Pi e outros dispositivos IoT. No entanto, você também pode usá-los para desenvolver código para PCs Windows, Linux e macOS usando um adaptador USB para serial, como o FTDI FT232H. Este artigo mostra como usar as bibliotecas do .NET IoT para se comunicar com dispositivos conectados ao adaptador FT232H.

Gorjeta

Este artigo usa um adaptador FTDI FT232H, mas você pode usar qualquer adaptador USB para serial suportado pelas bibliotecas .NET IoT, como o FT2232H, FT4232H e FT4222. Verifique a lista de ligações de dispositivos suportados para obter mais informações.

Pré-requisitos

Certifique-se de ter instalado os drivers D2XX para seu adaptador USB para serial, que são encontrados no site da FTDI.

Nota

Os dispositivos Windows podem instalar automaticamente os drivers quando você conecta o adaptador. Verifique o Gerenciador de Dispositivos para um dispositivo chamado USB Serial Converter listado em Controladores Universal Serial Bus. O provedor de driver do dispositivo deve ser FTDI.

Listar dispositivos disponíveis

Antes de criar um dispositivo GPIO, I2C ou SPI, você deve identificar o adaptador USB para serial conectado. O código a seguir lista os 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;
}

No código anterior, o FtCommon.GetDevices() método retorna uma lista de todos os dispositivos FTDI conectados.

Usar um dispositivo GPIO

Aqui está uma implementação de hardware do Blink um tutorial LED que usa o adaptador FTDI FT232H para controlar um LED:

A picture of a breadboard with an FT232H adapter, a resister, an LED, and connecting wires.

Na imagem anterior, o circuito LED é muito semelhante ao tutorial original. A única diferença é que o LED está conectado ao pino D7 no adaptador FT232H em vez do pino 18 no Raspberry Pi.

O código para o tutorial também é semelhante ao 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;
}

No código anterior:

  • Uma instância Ft232HDevice é criada passando o primeiro ID de dispositivo retornado pelo FtCommon.GetDevices() construtor.
  • Uma instância do GpioController controlador nomeado é criada chamando CreateGpioController() a Ft232HDevice instância. Esta GpioController instância executa as mesmas funções que a GpioController instância no tutorial original.
  • O valor inteiro do pino é recuperado chamando GetPinNumberFromString() a Ft232HDevice instância e passando o nome do pino alfanumérico D7.
  • O resto do código é idêntico ao tutorial original.

Usar um dispositivo I2C

Para comunicação I2C, os pinos D0 e D1 no adaptador FT232H são usados para as linhas SDL e SCA, respectivamente. O interruptor seletor I2C no adaptador FT232H deve ser definido como On.

Aqui está uma implementação de hardware do tutorial Ler condições ambientais de um sensor que usa o adaptador FTDI FT232H para ler temperatura, umidade e pressão barométrica de um sensor BME280:

A picture of a breadboard with an FT232H adapter, a BME280 breakout board, and connecting wires.

Na imagem anterior:

  • Os pinos D0 e D1 no adaptador FT232H são conectados aos pinos SDL e SCA na placa de breakout BME280, respectivamente.
  • O interruptor seletor I2C na placa de breakout BME280 está definido como On.
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);
}

No código anterior:

  • Uma instância Ft232HDevice é criada passando o primeiro ID de dispositivo retornado pelo FtCommon.GetDevices() construtor.
  • Uma instância de I2cDevice é criada chamando CreateI2cDevice() a Ft232HDevice instância. Esta I2cDevice instância executa as mesmas funções que a I2cDevice instância no tutorial original.
  • O resto do código é idêntico ao tutorial original.

Usar um dispositivo SPI

Para comunicação SPI, os pinos D0, D1, D2 e D3 no adaptador FT232H são usados para as linhas SCK, MOSI, MISO e CS, respectivamente. O interruptor seletor I2C no adaptador FT232H deve ser definido como Off.

A picture of the back of the FT232H breakout depicting the SPI pins.

Aqui está uma implementação de hardware dos valores de leitura de um tutorial de conversor analógico-digital que usa o adaptador FTDI FT232H para ler valores de um MCP3008 ADC:

A picture of a breadboard with an FT232H adapter, an MCP3008 chip, and connecting wires.

Na imagem anterior:

  • Os pinos D0, D1, D2 e D3 no adaptador FT232H são conectados aos pinos CLK, DIN, DOUT e CS/SHDN no MCP3008, respectivamente.
  • O interruptor seletor I2C na placa de breakout MCP3008 está definido como Desligado.
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);
}

No código anterior:

  • Uma instância Ft232HDevice é criada passando o primeiro ID de dispositivo retornado pelo FtCommon.GetDevices() construtor.
  • Uma instância de SpiDevice é criada chamando CreateSpiDevice() a Ft232HDevice instância. Esta SpiDevice instância executa as mesmas funções que a SpiDevice instância no tutorial original.
  • O resto do código é idêntico ao tutorial original.

Obter o código

O código para este tutorial está disponível no GitHub.