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 :
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é parFtCommon.GetDevices()
au constructeur. - Une instance de
GpioController
nommée controller est créée en appelantCreateGpioController()
sur l’instanceFt232HDevice
. Cette instanceGpioController
remplit les mêmes fonctions que l’instanceGpioController
du tutoriel d’origine. - La valeur entière de la broche est récupérée en appelant
GetPinNumberFromString()
sur l’instanceFt232HDevice
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 :
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é parFtCommon.GetDevices()
au constructeur. - Une instance de
I2cDevice
est créée en appelantCreateI2cDevice()
sur l’instanceFt232HDevice
. Cette instanceI2cDevice
remplit les mêmes fonctions que l’instanceI2cDevice
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.
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 :
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é parFtCommon.GetDevices()
au constructeur. - Une instance de
SpiDevice
est créée en appelantCreateSpiDevice()
sur l’instanceFt232HDevice
. Cette instanceSpiDevice
remplit les mêmes fonctions que l’instanceSpiDevice
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.