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:
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éhoFtCommon.GetDevices()
konstruktorem. - Instance pojmenovaného
GpioController
kontroleru je vytvořena volánímCreateGpioController()
instanceFt232HDevice
. TatoGpioController
instance provádí stejné funkce jakoGpioController
instance v původním kurzu. - Celočíselná hodnota pinu se načte voláním
GetPinNumberFromString()
instanceFt232HDevice
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:
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éhoFtCommon.GetDevices()
konstruktorem. - Instance
I2cDevice
je vytvořena volánímCreateI2cDevice()
instanceFt232HDevice
. TatoI2cDevice
instance provádí stejné funkce jakoI2cDevice
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.
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:
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éhoFtCommon.GetDevices()
konstruktorem. - Instance
SpiDevice
je vytvořena volánímCreateSpiDevice()
instanceFt232HDevice
. TatoSpiDevice
instance provádí stejné funkce jakoSpiDevice
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.