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:
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 przezFtCommon.GetDevices()
konstruktora. - Wystąpienie nazwanego
GpioController
kontrolera jest tworzone przez wywołanieCreateGpioController()
wystąpieniaFt232HDevice
. ToGpioController
wystąpienie wykonuje te same funkcje coGpioController
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:
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 przezFtCommon.GetDevices()
konstruktora. I2cDevice
Wystąpienie klasy jest tworzone przez wywołanieCreateI2cDevice()
Ft232HDevice
wystąpienia. ToI2cDevice
wystąpienie wykonuje te same funkcje coI2cDevice
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.
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:
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 przezFtCommon.GetDevices()
konstruktora. SpiDevice
Wystąpienie klasy jest tworzone przez wywołanieCreateSpiDevice()
Ft232HDevice
wystąpienia. ToSpiDevice
wystąpienie wykonuje te same funkcje coSpiDevice
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.