Использование библиотек Интернета вещей .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 для управления светодиодным индикатором:
На предыдущем изображении светодиодный канал очень похож на исходное руководство. Единственное различие заключается в том, что светодиодный индикатор подключен к закреплению 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:
На предыдущем рисунке:
- Контакты 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.
Ниже приведена аппаратная реализация значений чтения из руководства по аналогово-цифровому преобразователю , использующего адаптер FTDI FT232H для чтения значений из MCP3008 ADC:
На предыдущем рисунке:
- Контакты 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.