Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die .NET-IoT-Bibliotheken werden häufig zum Entwickeln von Code für Raspberry Pi und andere IoT-Geräte verwendet. Sie können sie jedoch auch verwenden, um Code für Windows-, Linux- und macOS-PCs mit einem USB-to-Serial-Adapter wie FTDI FT232H zu entwickeln. In diesem Artikel erfahren Sie, wie Sie die .NET-IoT-Bibliotheken verwenden, um mit Geräten zu kommunizieren, die an den FT232H-Adapter angeschlossen sind.
Tipp
In diesem Artikel wird ein FTDI FT232H-Adapter verwendet. Sie können jedoch jeden USB-to-Serial-Adapter verwenden, der von den .NET-IoT-Bibliotheken unterstützt wird, z. B. FT2232H, FT4232H und FT4222. Weitere Informationen finden Sie in der Liste der unterstützten Gerätebindungen.
Voraussetzungen
Vergewissern Sie sich, dass Sie die D2XX-Treiber für Ihren USB-to-Serial-Adapter installiert haben, die auf der FTDI-Website zu finden sind.
Hinweis
Windows-Geräte installieren die Treiber möglicherweise automatisch, wenn Sie den Adapter anschließen. Suchen Sie im Geräte-Manager nach einem Gerät mit dem Namen Serieller USB-Konverter unter USB-Controller. Der Treiberanbieter des Geräts sollte FTDI sein.
Auflisten der verfügbaren Geräte
Bevor Sie ein GPIO-, 2C- oder SPI-Gerät erstellen können, müssen Sie den angeschlossenen USB-to-Serial-Adapter identifizieren. Der folgende Code listet die angeschlossenen FTDI-Geräte auf:
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;
}
Im vorherigen Code gibt die FtCommon.GetDevices()
-Methode eine Liste aller angeschlossenen FTDI-Geräte zurück.
Verwenden eines GPIO-Geräts
Hier ist eine Hardwareimplementierung des Tutorials Aufleuchtenlassen einer LED, das den FTDI FT232H-Adapter zum Steuern einer LED verwendet:
Im vorherigen Bild ähnelt der LED-Schaltkreis dem ursprünglichen Tutorial. Der einzige Unterschied besteht darin, dass die LED an Pin D7 auf dem FT232H-Adapter statt an Pin 18 auf dem Raspberry Pi angeschlossen ist.
Der Code für das Tutorial ähnelt auch dem ursprünglichen Tutorial:
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;
}
Für den Code oben gilt:
- Eine Instanz von
Ft232HDevice
wird erstellt, indem die erste Geräte-ID übergeben wird, die vonFtCommon.GetDevices()
an den Konstruktor zurückgegeben wird. - Eine Instanz
GpioController
namens controller wird durch Aufrufen vonCreateGpioController()
in derFt232HDevice
-Instanz erstellt. DieseGpioController
-Instanz übt dieselben Funktionen wie dieGpioController
-Instanz im ursprünglichen Tutorial aus. - Der ganzzahlige Wert des Pins wird abgerufen, indem
GetPinNumberFromString()
für dieFt232HDevice
-Instanz aufgerufen und der alphanumerische Pinname D7 übergeben wird. - Der restliche Code ist mit dem ursprünglichen Tutorial identisch.
Verwenden eines I2C-Geräts
Für die I2C-Kommunikation werden die D0- und D1-Pins auf dem FT232H-Adapter für die SDL- bzw. SCA-Leitungen verwendet. Der I2C-Selektorschalter auf dem FT232H-Adapter muss auf On festgelegt werden.
Hier ist eine Hardwareimplementierung des Tutorials Lesen von Umgebungsbedingungen aus einem Sensor, das den FTDI FT232H-Adapter verwendet, um Temperatur, Feuchtigkeit und Luftdruck aus einem BME280-Sensor zu lesen:
In der obigen Abbildung:
- Die D0- und D1-Pins auf dem FT232H-Adapter sind an die jeweiligen SDL- und SCA-Pins auf dem BME280 Breakout Board angeschlossen.
- Der I2C-Selektorschalter auf dem BME280 Breakout Board ist auf On festgelegt.
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);
}
Für den Code oben gilt:
- Eine Instanz von
Ft232HDevice
wird erstellt, indem die erste Geräte-ID übergeben wird, die vonFtCommon.GetDevices()
an den Konstruktor zurückgegeben wird. - Eine Instanz von
I2cDevice
wird durch Aufrufen vonCreateI2cDevice()
in derFt232HDevice
-Instanz erstellt. DieseI2cDevice
-Instanz übt dieselben Funktionen wie dieI2cDevice
-Instanz im ursprünglichen Tutorial aus. - Der restliche Code ist mit dem ursprünglichen Tutorial identisch.
Verwenden eines SPI-Geräts
Für die SPI-Kommunikation werden die Pins D0, D1, D2 und D3 auf dem FT232H-Adapter für die SCK-, MOSI-, MISO- und CS-Leitungen verwendet. Der I2C-Selektorschalter auf dem FT232H-Adapter muss auf Off festgelegt werden.
Hier ist eine Hardwareimplementierung des Tutorials Lesen von Werten aus einem Analog-zu-Digital-Konverter, das den FTDI FT232H-Adapter zum Lesen von Werten aus einem MCP3008-ADC verwendet:
In der obigen Abbildung:
- Die Pins D0, D1, D2 und D3 auf dem FT232H-Adapter sind an die jeweiligen CLK-, DIN-, DOUT- und CS/SHDN-Pins auf MCP3008 angeschlossen.
- Der I2C-Selektorschalter auf dem MCP3008 Breakout Board ist auf Off festgelegt.
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);
}
Für den Code oben gilt:
- Eine Instanz von
Ft232HDevice
wird erstellt, indem die erste Geräte-ID übergeben wird, die vonFtCommon.GetDevices()
an den Konstruktor zurückgegeben wird. - Eine Instanz von
SpiDevice
wird durch Aufrufen vonCreateSpiDevice()
in derFt232HDevice
-Instanz erstellt. DieseSpiDevice
-Instanz übt dieselben Funktionen wie dieSpiDevice
-Instanz im ursprünglichen Tutorial aus. - Der restliche Code ist mit dem ursprünglichen Tutorial identisch.
Abrufen des Codes
Der Code für dieses Tutorial ist auf GitHub verfügbar.