Использование библиотек Интернета вещей .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:
C#
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.
На предыдущем изображении светодиодный канал очень похож на исходное руководство. Единственное различие заключается в том, что светодиодный индикатор подключен к закреплению D7 на адаптере FT232H вместо пин-кода 18 на Raspberry Pi.
Код для учебника также аналогичен исходному руководству:
C#
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.
C#
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(outvar tempValue);
bme280.TryReadPressure(outvar preValue);
bme280.TryReadHumidity(outvar humValue);
bme280.TryReadAltitude(outvar 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.
Контакты D0, D1, D2 и D3 на адаптере FT232H подключены к контактам CLK, DIN, DOUT и CS/SHDN MCP3008 соответственно.
Переключатель селектора I2C на доске останова MCP3008 имеет значение Off.
C#
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);
usingvar mcp = new Mcp3008(spi);
while (true)
{
Console.Clear();
doublevalue = 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, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Присоединитесь к серии встреч для создания масштабируемых решений искусственного интеллекта на основе реальных вариантов использования с другими разработчиками и экспертами.