Прочитать на английском

Поделиться через


Использование библиотек Интернета вещей .NET на компьютерах Windows, Linux и macOS

Библиотеки Интернета вещей .NET обычно используются для разработки кода для Raspberry Pi и других устройств Интернета вещей. Однако их также можно использовать для разработки кода для компьютеров Windows, Linux и macOS с помощью USB-последовательного адаптера, например FTDI FT232H. В этой статье показано, как использовать библиотеки Интернета вещей .NET для взаимодействия с устройствами, подключенными к адаптеру FT232H.

Совет

В этой статье используется адаптер FTDI FT232H, но можно использовать любой USB-последовательный адаптер, поддерживаемый библиотеками Интернета вещей .NET, такими как FT2232H, FT4232H и FT42222. Дополнительные сведения см. в списке поддерживаемых привязок устройств.

Необходимые компоненты

Убедитесь, что вы установили драйверы D2XX для USB-последовательного адаптера, которые находятся на веб-сайте FTDI.

Примечание

Устройства Windows могут автоматически устанавливать драйверы при подключении адаптера. Проверьте диспетчер устройств устройства с именем USB-сериализатора, указанного в контроллерах универсальной шины. Поставщик драйверов устройства должен быть FTDI.

Вывод списка доступных устройств

Прежде чем создать устройство GPIO, I2C или SPI, необходимо определить подключенный USB-адаптер для сериализации. В следующем коде перечислены подключенные устройства FTDI:

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

В приведенном выше коде FtCommon.GetDevices() метод возвращает список всех подключенных устройств FTDI.

Использование устройства GPIO

Ниже приведена аппаратная реализация руководства по индикатору Blink, использующего адаптер FTDI FT232H для управления светодиодным индикатором:

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

На предыдущем изображении светодиодный канал очень похож на исходное руководство. Единственное различие заключается в том, что светодиодный индикатор подключен к закреплению D7 на адаптере FT232H вместо пин-кода 18 на Raspberry Pi.

Код для учебника также аналогичен исходному руководству:

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

В предыдущем коде:

  • Экземпляр Ft232HDevice создается путем передачи первого идентификатора устройства, возвращаемого FtCommon.GetDevices() конструктором.
  • Экземпляр именованного контроллера GpioController создается путем вызова CreateGpioController() экземпляраFt232HDevice. Этот GpioController экземпляр выполняет те же функции, что GpioController и экземпляр в исходном руководстве.
  • Целочисленное значение пин-кода извлекается путем вызова GetPinNumberFromString() Ft232HDevice экземпляра и передачи буквенно-цифрового пин-кода D7.
  • Остальная часть кода идентична исходному руководству.

Использование устройства I2C

Для связи I 2C для линий SDL и SCA используются контакты D0 и D1 на адаптере FT232H соответственно. Переключатель селектора I2C на адаптере FT232H должен иметь значение On.

Ниже приведена аппаратная реализация условий среды чтения из руководства по датчику , использующего адаптер FTDI FT232H для чтения температуры, влажности и барометрического давления с датчика BME280:

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

На предыдущем рисунке:

  • Контакты D0 и D1 на адаптере FT232H подключены к контактам SDL и SCA на доске разбиения BME280 соответственно.
  • Переключатель селектора I2C на доске останова BME280 имеет значение 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);
}

В предыдущем коде:

  • Экземпляр Ft232HDevice создается путем передачи первого идентификатора устройства, возвращаемого FtCommon.GetDevices() конструктором.
  • Экземпляр I2cDevice создается путем вызова CreateI2cDevice() экземпляра Ft232HDevice . Этот I2cDevice экземпляр выполняет те же функции, что I2cDevice и экземпляр в исходном руководстве.
  • Остальная часть кода идентична исходному руководству.

Использование устройства SPI

Для обмена данными SPI для линий SCK, MOSI, MISO и CS используются контакты D1, D2 и D3 на адаптере FT232H. Переключатель селектора I2C на адаптере FT232H должен иметь значение Off.

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

Ниже приведена аппаратная реализация значений чтения из руководства по аналогово-цифровому преобразователю , использующего адаптер FTDI FT232H для чтения значений из MCP3008 ADC:

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

На предыдущем рисунке:

  • Контакты D0, D1, D2 и D3 на адаптере FT232H подключены к контактам CLK, DIN, DOUT и CS/SHDN MCP3008 соответственно.
  • Переключатель селектора I2C на доске останова MCP3008 имеет значение 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);
}

В предыдущем коде:

  • Экземпляр Ft232HDevice создается путем передачи первого идентификатора устройства, возвращаемого FtCommon.GetDevices() конструктором.
  • Экземпляр SpiDevice создается путем вызова CreateSpiDevice() экземпляра Ft232HDevice . Этот SpiDevice экземпляр выполняет те же функции, что SpiDevice и экземпляр в исходном руководстве.
  • Остальная часть кода идентична исходному руководству.

Получение кода

Код для этого руководства доступен на сайте GitHub.