Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
.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:
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
Ft232HDeviceskapas genom att skicka det första enhets-ID:t som returneras avFtCommon.GetDevices()konstruktorn. - En instans av den namngivna kontrollanten skapas genom att anropa
CreateGpioController()på instansenFt232HDevice.GpioControllerDen härGpioControllerinstansen utför samma funktioner som instansenGpioControlleri den ursprungliga självstudien. - Heltalsvärdet för pin-koden hämtas genom att anropa
GetPinNumberFromString()instansenFt232HDeviceoch 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:
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
Ft232HDeviceskapas genom att skicka det första enhets-ID:t som returneras avFtCommon.GetDevices()konstruktorn. - En instans av
I2cDeviceskapas genom att anropaCreateI2cDevice()på instansenFt232HDevice. Den härI2cDeviceinstansen utför samma funktioner som instansenI2cDevicei 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.
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:
I föregående bild:
- Stiften D0, D1, D2 och D3 på FT232H-adaptern är anslutna till pinsen CLK, DIN, DOUT och CS/SHDN på MCP3008.
- 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
Ft232HDeviceskapas genom att skicka det första enhets-ID:t som returneras avFtCommon.GetDevices()konstruktorn. - En instans av
SpiDeviceskapas genom att anropaCreateSpiDevice()på instansenFt232HDevice. Den härSpiDeviceinstansen utför samma funktioner som instansenSpiDevicei 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.