Använda .NET IoT-bibliotek på Windows-, Linux- och macOS-datorer
.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
Ft232HDevice
skapas 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
.GpioController
Den härGpioController
instansen utför samma funktioner som instansenGpioController
i den ursprungliga självstudien. - Heltalsvärdet för pin-koden hämtas genom att anropa
GetPinNumberFromString()
instansenFt232HDevice
och 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
Ft232HDevice
skapas genom att skicka det första enhets-ID:t som returneras avFtCommon.GetDevices()
konstruktorn. - En instans av
I2cDevice
skapas genom att anropaCreateI2cDevice()
på instansenFt232HDevice
. Den härI2cDevice
instansen utför samma funktioner som instansenI2cDevice
i 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
Ft232HDevice
skapas genom att skicka det första enhets-ID:t som returneras avFtCommon.GetDevices()
konstruktorn. - En instans av
SpiDevice
skapas genom att anropaCreateSpiDevice()
på instansenFt232HDevice
. Den härSpiDevice
instansen utför samma funktioner som instansenSpiDevice
i 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.