Korzystanie z bibliotek IoT platformy .NET na komputerach z systemami Windows, Linux i macOS

Biblioteki IoT platformy .NET są często używane do tworzenia kodu dla urządzenia Raspberry Pi i innych urządzeń IoT. Można jednak użyć ich również do tworzenia kodu dla komputerów z systemami Windows, Linux i macOS przy użyciu adaptera usb-szeregowego, takiego jak FTDI FT232H. W tym artykule pokazano, jak używać bibliotek IoT platformy .NET do komunikowania się z urządzeniami podłączonymi do karty FT232H.

Napiwek

W tym artykule użyto adaptera FTDI FT232H, ale można użyć dowolnej karty usb-szeregowej obsługiwanej przez biblioteki IoT platformy .NET, takie jak FT2232H, FT4232H i FT4222. Aby uzyskać więcej informacji, zapoznaj się z listą obsługiwanych powiązań urządzeń.

Wymagania wstępne

Upewnij się, że zainstalowano sterowniki D2XX dla adaptera USB-to-serial, które znajdują się w witrynie internetowej FTDI.

Uwaga

Urządzenia z systemem Windows mogą automatycznie instalować sterowniki podczas podłączania adaptera. Sprawdź Menedżer urządzeń dla urządzenia o nazwie USB Serial Converter wymienione w obszarze Kontrolery uniwersalnej magistrali szeregowej. Dostawca sterowników urządzenia powinien mieć wartość FTDI.

Wyświetlanie listy dostępnych urządzeń

Aby można było utworzyć urządzenie GPIO, I2C lub SPI, należy zidentyfikować podłączoną kartę USB-szeregową. Poniższy kod zawiera listę połączonych urządzeń 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;
}

W poprzednim kodzie FtCommon.GetDevices() metoda zwraca listę wszystkich połączonych urządzeń FTDI.

Korzystanie z urządzenia GPIO

Oto implementacja sprzętowa miganego samouczka led , który używa adaptera FTDI FT232H do sterowania diodą LED:

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

Na poprzedniej ilustracji obwód LED jest bardzo podobny do oryginalnego samouczka. Jedyną różnicą jest to, że dioda LED jest podłączona do wyprowadzenia D7 na adapterze FT232H zamiast pinezki 18 na urządzeniu Raspberry Pi.

Kod samouczka jest również podobny do oryginalnego samouczka:

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

Powyższy kod:

  • Wystąpienie Ft232HDevice jest tworzone przez przekazanie pierwszego identyfikatora urządzenia zwróconego przez FtCommon.GetDevices() konstruktora.
  • Wystąpienie nazwanego GpioControllerkontrolera jest tworzone przez wywołanie CreateGpioController() wystąpienia Ft232HDevice . To GpioController wystąpienie wykonuje te same funkcje co GpioController wystąpienie w oryginalnym samouczku.
  • Wartość całkowita numeru PIN jest pobierana przez wywołanie GetPinNumberFromString()Ft232HDevice wystąpienia i przekazanie nazwy pinu alfanumerycznego D7.
  • Pozostała część kodu jest identyczna z oryginalnym samouczkiem.

Korzystanie z urządzenia I2C

W przypadku komunikacji I2C wyprowadzenia D0 i D1 na adapterze FT232H są używane odpowiednio dla linii SDL i SCA. Przełącznik selektora I2C na karcie FT232H musi być ustawiony na wartość Włączone.

Oto implementacja sprzętowa warunków środowiskowych odczytu z samouczka czujnika , który używa adaptera FTDI FT232H do odczytywania temperatury, wilgotności i ciśnienia barometrycznego z czujnika BME280:

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

Na powyższym obrazie:

  • Wyprowadzenia D0 i D1 na karcie FT232H są podłączone do sDL i SCA wyprowadzeń na tablicy wyłącznika BME280, odpowiednio.
  • Przełącznik selektora I2C na tablicy wyłącznika BME280 jest ustawiony na wartość Włączone.
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);
}

Powyższy kod:

  • Wystąpienie Ft232HDevice jest tworzone przez przekazanie pierwszego identyfikatora urządzenia zwróconego przez FtCommon.GetDevices() konstruktora.
  • I2cDevice Wystąpienie klasy jest tworzone przez wywołanie CreateI2cDevice()Ft232HDevice wystąpienia. To I2cDevice wystąpienie wykonuje te same funkcje co I2cDevice wystąpienie w oryginalnym samouczku.
  • Pozostała część kodu jest identyczna z oryginalnym samouczkiem.

Korzystanie z urządzenia SPI

Do komunikacji SPI, D0, D1, D2 i D3 piny na karcie FT232H są używane odpowiednio dla linii SCK, MOSI, MISO i CS. Przełącznik selektora I2C na karcie FT232H musi być ustawiony na wartość Wyłączone.

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

Oto implementacja sprzętowa odczytanych wartości z samouczka konwertera analog-do-cyfrowego, który używa adaptera FTDI FT232H do odczytywania wartości z usługi ADC MCP3008:

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

Na powyższym obrazie:

  • Wyprowadzenia D0, D1, D2 i D3 na adapterze FT232H są podłączone odpowiednio do wyprowadzeń CLK, DIN, DOUT i CS/SHDN na MCP3008.
  • Przełącznik selektora I2C na tablicy wyłącznika MCP3008 jest ustawiony na wartość Wyłączone.
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);
}

Powyższy kod:

  • Wystąpienie Ft232HDevice jest tworzone przez przekazanie pierwszego identyfikatora urządzenia zwróconego przez FtCommon.GetDevices() konstruktora.
  • SpiDevice Wystąpienie klasy jest tworzone przez wywołanie CreateSpiDevice()Ft232HDevice wystąpienia. To SpiDevice wystąpienie wykonuje te same funkcje co SpiDevice wystąpienie w oryginalnym samouczku.
  • Pozostała część kodu jest identyczna z oryginalnym samouczkiem.

Uzyskiwanie kodu

Kod tego samouczka jest dostępny w witrynie GitHub.