Utiliser les bibliothèques IoT .NET sur des ordinateurs Windows, Linux et macOS

Les bibliothèques IoT .NET sont couramment utilisées pour développer du code pour Raspberry Pi et d’autres appareils IoT. Toutefois, vous pouvez également les utiliser pour développer du code pour des PC Windows, Linux et macOS à l’aide d’un adaptateur USB vers série tel que FTDI FT232H. Cet article explique comment utiliser les bibliothèques IoT .NET pour communiquer avec des appareils connectés à l’adaptateur FT232H.

Conseil

Cet article utilise un adaptateur FTDI FT232H, mais vous pouvez utiliser n’importe quel adaptateur USB vers série pris en charge par les bibliothèques IoT .NET (par exemple, FT2232H, FT4232H ou FT4222). Pour plus d’informations, consultez la liste des liaisons d’appareils prises en charge.

Prérequis

Vérifiez que vous avez installé les pilotes D2XX, disponibles sur le site web de FTDI, pour votre adaptateur USB vers série.

Remarque

Les appareils Windows peuvent installer automatiquement les pilotes lorsque vous connectez l’adaptateur. Recherchez dans le Gestionnaire de périphériques un appareil nommé Convertisseur USB série répertorié sous Contrôleurs USB. Le fournisseur du pilote de l’appareil doit être FTDI.

Répertorier les appareils disponibles

Avant de pouvoir créer un appareil GPIO, I2C ou SPI, vous devez identifier l’adaptateur USB vers série connecté. Le code suivant répertorie les appareils FTDI connectés :

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;
}

Dans le code précédent, la méthode FtCommon.GetDevices() retourne une liste de tous les appareils FTDI connectés.

Utiliser un appareil GPIO

Voici une implémentation matérielle du tutoriel Faire clignoter une LED qui utilise l’adaptateur FTDI FT232H pour contrôler une LED :

A picture of a breadboard with an FT232H adapter, a resister, an LED, and connecting wires.

Dans l’image précédente, le circuit LED est très similaire à celui du tutoriel d’origine. La seule différence est que la LED est connectée à la broche D7 de l’adaptateur FT232H au lieu de la broche 18 du Raspberry Pi.

Le code du tutoriel est également similaire à celui du tutoriel d’origine :

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;
}

Dans le code précédent :

  • Une instance Ft232HDevice est créée en passant le premier ID d’appareil retourné par FtCommon.GetDevices() au constructeur.
  • Une instance de GpioController nommée controller est créée en appelant CreateGpioController() sur l’instance Ft232HDevice. Cette instance GpioController remplit les mêmes fonctions que l’instance GpioController du tutoriel d’origine.
  • La valeur entière de la broche est récupérée en appelant GetPinNumberFromString() sur l’instance Ft232HDevice et en passant le nom alphanumérique de la broche D7.
  • Le reste du code est identique à celui du tutoriel d’origine.

Utiliser un appareil I2C

Pour la communication I2C, les broches D0 et D1 sur l’adaptateur FT232H sont utilisées respectivement pour les lignes SDL et SCA. Le sélecteur I2C de l’adaptateur FT232H doit être réglé sur On.

Voici une implémentation matérielle du tutoriel Lire les conditions environnementales d’un capteur qui utilise l’adaptateur FTDI FT232H pour lire la température, l’humidité et la pression barométrique à partir d’un capteur BME280 :

A picture of a breadboard with an FT232H adapter, a BME280 breakout board, and connecting wires.

Dans l’image précédente :

  • Les broches D0 et D1 de l’adaptateur FT232H sont connectées respectivement aux broches SDL et SCA de la carte de dérivation BME280.
  • Le sélecteur I2C de la carte de dérivation BME280 est réglé sur On.
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);
}

Dans le code précédent :

  • Une instance Ft232HDevice est créée en passant le premier ID d’appareil retourné par FtCommon.GetDevices() au constructeur.
  • Une instance de I2cDevice est créée en appelant CreateI2cDevice() sur l’instance Ft232HDevice. Cette instance I2cDevice remplit les mêmes fonctions que l’instance I2cDevice du tutoriel d’origine.
  • Le reste du code est identique à celui du tutoriel d’origine.

Utiliser un appareil SPI

Pour la communication SPI, les broches D0, D1, D2 et D3 de l’adaptateur FT232H sont utilisées respectivement pour les lignes SCK, MOSI, MISO et CS. Le sélecteur I2C de l’adaptateur FT232H doit être réglé sur Off.

A picture of the back of the FT232H breakout depicting the SPI pins.

Voici une implémentation matérielle du tutoriel Lire les valeurs d’un convertisseur analogique-numérique qui utilise l’adaptateur FTDI FT232H pour lire les valeurs à partir d’un ADC MCP3008 :

A picture of a breadboard with an FT232H adapter, an MCP3008 chip, and connecting wires.

Dans l’image précédente :

  • Les broches D0, D1, D2 et D3 de l’adaptateur FT232H sont connectées respectivement aux broches CLK, DIN, DOUT et CS/SHDN du MCP3008.
  • Le sélecteur I2C de la carte de dérivation MCP3008 est réglé sur Off.
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);
}

Dans le code précédent :

  • Une instance Ft232HDevice est créée en passant le premier ID d’appareil retourné par FtCommon.GetDevices() au constructeur.
  • Une instance de SpiDevice est créée en appelant CreateSpiDevice() sur l’instance Ft232HDevice. Cette instance SpiDevice remplit les mêmes fonctions que l’instance SpiDevice du tutoriel d’origine.
  • Le reste du code est identique à celui du tutoriel d’origine.

Obtenir le code

Le code de ce tutoriel est disponible sur GitHub.