Dela via


Använda .NET IoT-bibliotek på Windows-, Linux- och macOS-datorer

.NET IoT-biblioteken används ofta för att utveckla kod för Raspberry Pi och andra IoT-enheter. Du kan dock också använda dem för att utveckla kod för Windows-, Linux- och macOS-datorer med hjälp av ett USB-till-seriekort, till exempel FTDI FT232H. Den här artikeln visar hur du använder .NET IoT-biblioteken för att kommunicera med enheter som är anslutna till FT232H-adaptern.

Dricks

Den här artikeln använder ett FTDI FT232H-kort, men du kan använda alla USB-till-seriekort som stöds av .NET IoT-biblioteken, till exempel FT2232H, FT4232H och FT4222. Mer information finns i listan över enhetsbindningar som stöds.

Förutsättningar

Se till att du har installerat D2XX-drivrutinerna för ditt USB-till-seriekort, som finns på FTDI-webbplatsen.

Kommentar

Windows-enheter kan automatiskt installera drivrutinerna när du ansluter adaptern. Kontrollera Enhetshanteraren för en enhet med namnet USB Serial Converter som anges under Universal Serial Bus-styrenheter. Enhetens drivrutinsprovider ska vara FTDI.

Visa en lista över tillgängliga enheter

Innan du kan skapa en GPIO-, I2C- eller SPI-enhet måste du identifiera den anslutna USB-till-serieadaptern. Följande kod visar de anslutna FTDI-enheterna:

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

I föregående kod FtCommon.GetDevices() returnerar metoden en lista över alla anslutna FTDI-enheter.

Använda en GPIO-enhet

Här är en maskinvaruimplementering av självstudiekursen Blinka en LED som använder FTDI FT232H-adaptern för att styra en lysdiod:

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

I föregående bild liknar LED-kretsen den ursprungliga självstudien. Den enda skillnaden är att lysdioderna är anslutna till stift D7 på FT232H-adaptern i stället för stift 18 på Raspberry Pi.

Koden för självstudiekursen liknar också den ursprungliga självstudien:

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

I koden ovan:

  • En instans Ft232HDevice skapas genom att skicka det första enhets-ID:t som returneras av FtCommon.GetDevices() konstruktorn.
  • En instans av den namngivna kontrollanten skapas genom att anropa CreateGpioController() på instansenFt232HDevice.GpioController Den här GpioController instansen utför samma funktioner som instansen GpioController i den ursprungliga självstudien.
  • Heltalsvärdet för pin-koden hämtas genom att anropa GetPinNumberFromString() instansen Ft232HDevice och skicka det alfanumeriska stiftnamnet D7.
  • Resten av koden är identisk med den ursprungliga självstudien.

Använda en I2C-enhet

För I2C-kommunikation används D0 - och D1-stiften på FT232H-adaptern för SDL- respektive SCA-linjerna. I2C-väljaren på FT232H-adaptern måste vara inställd på På.

Här är en maskinvaruimplementering av read environmental conditions from a sensor tutorial som använder FTDI FT232H-adaptern för att läsa temperatur, luftfuktighet och barometriskt tryck från en BME280-sensor:

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

I föregående bild:

  • D0- och D1-stiften på FT232H-adaptern är anslutna till SDL- respektive SCA-stiften på BME280-utbrytarkortet.
  • I2C-väljaren på BME280-utbrytarkortet är inställd på På.
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);
}

I koden ovan:

  • En instans Ft232HDevice skapas genom att skicka det första enhets-ID:t som returneras av FtCommon.GetDevices() konstruktorn.
  • En instans av I2cDevice skapas genom att anropa CreateI2cDevice() på instansen Ft232HDevice . Den här I2cDevice instansen utför samma funktioner som instansen I2cDevice i den ursprungliga självstudien.
  • Resten av koden är identisk med den ursprungliga självstudien.

Använda en SPI-enhet

För SPI-kommunikation används stiften D0, D1, D2 och D3 på FT232H-adaptern för linjerna SCK, MOSI, MISO respektive CS. I2C-väljaren på FT232H-adaptern måste vara inställd på Av.

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

Här är en maskinvaruimplementering av läsvärdena från en analog till digital konverterare som använder FTDI FT232H-adaptern för att läsa värden från en MCP3008 ADC:

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

I föregående bild:

  • Stiften D0, D1, D2 och D3 på FT232H-adaptern är anslutna till pinsen CLK, DIN, DOUT och CS/SHDNMCP3008.
  • I2C-väljaren på MCP3008 breakout board är inställd på Av.
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);
}

I koden ovan:

  • En instans Ft232HDevice skapas genom att skicka det första enhets-ID:t som returneras av FtCommon.GetDevices() konstruktorn.
  • En instans av SpiDevice skapas genom att anropa CreateSpiDevice() på instansen Ft232HDevice . Den här SpiDevice instansen utför samma funktioner som instansen SpiDevice i den ursprungliga självstudien.
  • Resten av koden är identisk med den ursprungliga självstudien.

Hämta koden

Koden för den här självstudien finns på GitHub.