Delen via


.NET IoT-bibliotheken gebruiken op Windows-, Linux- en macOS-computers

De .NET IoT-bibliotheken worden vaak gebruikt voor het ontwikkelen van code voor Raspberry Pi en andere IoT-apparaten. U kunt ze echter ook gebruiken om code te ontwikkelen voor Windows-, Linux- en macOS-pc's met behulp van een USB-naar-seriële adapter zoals de FTDI FT232H. In dit artikel leest u hoe u de .NET IoT-bibliotheken gebruikt om te communiceren met apparaten die zijn verbonden met de FT232H-adapter.

Tip

In dit artikel wordt een FTDI FT232H-adapter gebruikt, maar u kunt elke USB-naar-seriële adapter gebruiken die wordt ondersteund door de .NET IoT-bibliotheken, zoals de FT2232H, FT4232H en FT4222. Controleer de lijst met ondersteunde apparaatbindingen voor meer informatie.

Vereisten

Zorg ervoor dat u de D2XX-stuurprogramma's voor uw USB-naar-seriële adapter hebt geïnstalleerd, die u op de FTDI-website vindt.

Notitie

Windows-apparaten kunnen de stuurprogramma's automatisch installeren wanneer u de adapter aansluit. Controleer Apparaatbeheer op een apparaat met de naam USB Serial Converter vermeld onder Universal Serial Bus-controllers. De stuurprogrammaprovider van het apparaat moet FTDI zijn.

Beschikbare apparaten weergeven

Voordat u een GPIO-, I2C- of SPI-apparaat kunt maken, moet u de aangesloten USB-naar-seriële adapter identificeren. De volgende code bevat de verbonden FTDI-apparaten:

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;
}

In de voorgaande code retourneert de FtCommon.GetDevices() methode een lijst met alle verbonden FTDI-apparaten.

Een GPIO-apparaat gebruiken

Hier volgt een hardware-implementatie van de Blink an LED-zelfstudie die gebruikmaakt van de FTDI FT232H-adapter om een LED te beheren:

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

In de voorgaande afbeelding is het LED-circuit vergelijkbaar met de oorspronkelijke zelfstudie. Het enige verschil is dat de LED is verbonden met pin D7 op de FT232H adapter in plaats van pin 18 op de Raspberry Pi.

De code voor de zelfstudie is ook vergelijkbaar met de oorspronkelijke zelfstudie:

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;
}

In de voorgaande code:

  • Er wordt een exemplaar Ft232HDevice gemaakt door de eerste apparaat-id door te geven die door FtCommon.GetDevices() de constructor wordt geretourneerd.
  • Er wordt een exemplaar van GpioController de benoemde controller gemaakt door het Ft232HDevice exemplaar aan te roepenCreateGpioController(). Dit GpioController exemplaar voert dezelfde functies uit als het GpioController exemplaar in de oorspronkelijke zelfstudie.
  • De geheel getalwaarde van de pin wordt opgehaald door het Ft232HDevice exemplaar aan te roepen GetPinNumberFromString() en de alfanumerieke pinnaam D7 door te geven.
  • De rest van de code is identiek aan de oorspronkelijke zelfstudie.

Een I2C-apparaat gebruiken

Voor I2C-communicatie worden de D0 - en D1-pinnen op de FT232H-adapter gebruikt voor respectievelijk de SDL- en SCA-lijnen. De I2C-kiezerschakelaar op de FT232H-adapter moet zijn ingesteld op Aan.

Hier volgt een hardware-implementatie van de omgevingsomstandigheden lezen uit een sensorzelfstudie die gebruikmaakt van de FTDI FT232H-adapter voor het lezen van temperatuur, vochtigheid en barometrische druk van een BME280-sensor:

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

In de voorgaande afbeelding:

  • De D0 - en D1-pinnen op de FT232H-adapter zijn aangesloten op respectievelijk de SDL - en SCA-pinnen op het BME280-breakoutbord.
  • De I2C-kiezerschakelaar op het BME280-breakoutbord is ingesteld op Aan.
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);
}

In de voorgaande code:

  • Er wordt een exemplaar Ft232HDevice gemaakt door de eerste apparaat-id door te geven die door FtCommon.GetDevices() de constructor wordt geretourneerd.
  • Er wordt een exemplaar gemaakt I2cDevice door het Ft232HDevice exemplaar aan te roepenCreateI2cDevice(). Dit I2cDevice exemplaar voert dezelfde functies uit als het I2cDevice exemplaar in de oorspronkelijke zelfstudie.
  • De rest van de code is identiek aan de oorspronkelijke zelfstudie.

Een SPI-apparaat gebruiken

Voor SPI-communicatie worden de D0-, D1-, D2- en D3-pinnen op de FT232H-adapter gebruikt voor respectievelijk de SCK-, MOSI-, MISO- en CS-lijnen. De I2C-kiezerschakelaar op de FT232H-adapter moet worden ingesteld op Uit.

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

Hier volgt een hardware-implementatie van de leeswaarden van een analoge naar digitale conversieprogramma die gebruikmaakt van de FTDI FT232H-adapter voor het lezen van waarden van een MCP3008 ADC:

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

In de voorgaande afbeelding:

  • De D0-, D1-, D2- en D3-pinnen op de FT232H-adapter zijn verbonden met respectievelijk de pinnen CLK, DIN, DOUT en CS/SHDN op de MCP3008.
  • De I2C-kiezerschakelaar op het MCP3008 breakoutbord is ingesteld op Uit.
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);
}

In de voorgaande code:

  • Er wordt een exemplaar Ft232HDevice gemaakt door de eerste apparaat-id door te geven die door FtCommon.GetDevices() de constructor wordt geretourneerd.
  • Er wordt een exemplaar gemaakt SpiDevice door het Ft232HDevice exemplaar aan te roepenCreateSpiDevice(). Dit SpiDevice exemplaar voert dezelfde functies uit als het SpiDevice exemplaar in de oorspronkelijke zelfstudie.
  • De rest van de code is identiek aan de oorspronkelijke zelfstudie.

Code ophalen

De code voor deze zelfstudie is beschikbaar op GitHub.