Sdílet prostřednictvím


Použití knihoven .NET IoT na počítačích s Windows, Linuxem a macOS

Knihovny .NET IoT se běžně používají k vývoji kódu pro Raspberry Pi a další zařízení IoT. Můžete je ale použít také k vývoji kódu pro počítače s Windows, Linuxem a macOS pomocí adaptéru USB na sériový, jako je FTDI FT232H. V tomto článku se dozvíte, jak pomocí knihoven IoT .NET komunikovat se zařízeními připojenými k adaptéru FT232H.

Tip

Tento článek používá adaptér FTDI FT232H, ale můžete použít libovolný adaptér USB-to-serial, který podporuje knihovny .NET IoT, jako jsou FT2232H, FT4232H a FT4222. Další informace najdete v seznamu podporovaných vazeb zařízení.

Požadavky

Ujistěte se, že jste nainstalovali ovladače D2XX pro váš adaptér USB-to-serial, který najdete na webu FTDI.

Poznámka:

Zařízení s Windows můžou ovladače automaticky instalovat, když adaptér připojíte. Zkontrolujte, Správce zařízení zařízení s názvem USB Serial Converter uvedené v části Řadiče univerzální sériové sběrnice. Poskytovatel ovladače zařízení by měl být FTDI.

Seznam dostupných zařízení

Než budete moct vytvořit zařízení GPIO, I2C nebo SPI, musíte identifikovat připojený adaptér USB-to-serial. Následující kód uvádí připojená zařízení FTDI:

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

V předchozím kódu FtCommon.GetDevices() vrátí metoda seznam všech připojených zařízení FTDI.

Použití zařízení GPIO

Zde je hardwarová implementace Blink an LED tutoriál, který používá FTDI FT232H adaptér k ovládání LED:

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

Na předchozím obrázku je led obvod velmi podobný původnímu kurzu. Jediným rozdílem je, že LED dioda je připojena ke kolíku D7 na adaptéru FT232H místo pinu 18 na Raspberry Pi.

Kód pro kurz je také podobný původnímu kurzu:

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

V předchozím kódu:

  • Instance Ft232HDevice se vytvoří předáním prvního ID zařízení vráceného FtCommon.GetDevices() konstruktorem.
  • Instance pojmenovaného GpioController kontroleru je vytvořena voláním CreateGpioController() instance Ft232HDevice . Tato GpioController instance provádí stejné funkce jako GpioController instance v původním kurzu.
  • Celočíselná hodnota pinu se načte voláním GetPinNumberFromString() instance Ft232HDevice a předáním alfanumerického pin kódu s názvem D7.
  • Zbytek kódu je stejný jako původní kurz.

Použití zařízení I2C

Pro komunikaci I2C se pro linky SDL a SCA používají kolíky D0 a D1 na adaptéru FT232H. Přepínač selektoru I2C na adaptéru FT232H musí být nastavený na Zapnuto.

Tady je hardwarová implementace podmínek čtení prostředí ze senzoru kurzu, který používá adaptér FTDI FT232H ke čtení teploty, vlhkosti a barometrického tlaku ze senzoru BME280:

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

Na předchozím obrázku:

  • Kolíky D0 a D1 na adaptéru FT232H jsou připojeny k kolíku SDL a SCA na breakout desce BME280.
  • Přepínač selektoru I2C na zarážce BME280 je nastavený na Zapnuto.
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);
}

V předchozím kódu:

  • Instance Ft232HDevice se vytvoří předáním prvního ID zařízení vráceného FtCommon.GetDevices() konstruktorem.
  • Instance I2cDevice je vytvořena voláním CreateI2cDevice() instance Ft232HDevice . Tato I2cDevice instance provádí stejné funkce jako I2cDevice instance v původním kurzu.
  • Zbytek kódu je stejný jako původní kurz.

Použití zařízení SPI

Pro komunikaci SPI se pro linky SCK, MOSI, MISO a CS používají kolíky D0, D1, D2 a D3 na adaptéru FT232H. Přepínač selektoru I2C na adaptéru FT232H musí být nastaven na Vypnuto.

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

Tady je hardwarová implementace hodnot čtení z kurzu analog-to-digital converter , který používá adaptér FTDI FT232H ke čtení hodnot z MCP3008 ADC:

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

Na předchozím obrázku:

  • Kolíky D0, D1, D2 a D3 na adaptéru FT232H jsou připojeny k kolíkům CLK, DIN, DOUT a CS/SHDN na MCP3008.
  • Přepínač selektoru I2C na MCP3008 breakout panelu je nastavený na Vypnuto.
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);
}

V předchozím kódu:

  • Instance Ft232HDevice se vytvoří předáním prvního ID zařízení vráceného FtCommon.GetDevices() konstruktorem.
  • Instance SpiDevice je vytvořena voláním CreateSpiDevice() instance Ft232HDevice . Tato SpiDevice instance provádí stejné funkce jako SpiDevice instance v původním kurzu.
  • Zbytek kódu je stejný jako původní kurz.

Získání kódu

Kód pro tento kurz je k dispozici na GitHubu.