Share via


Windows, Linux 및 macOS 컴퓨터에서 .NET IoT 라이브러리 사용

.NET IoT 라이브러리는 일반적으로 Raspberry Pi 및 기타 IoT 디바이스에 대한 코드를 개발하는 데 사용됩니다. 그러나 FTDI FT232H와 같은 USB-직렬 어댑터를 사용하여 Windows, Linux 및 macOS PC용 코드를 개발하는 데 사용할 수도 있습니다. 이 문서에서는 .NET IoT 라이브러리를 사용하여 FT232H 어댑터에 연결된 디바이스와 통신하는 방법을 보여 줍니다.

이 문서에서는 FTDI FT232H 어댑터를 사용하지만 FT2232H, FT4232H 및 FT4222와 같은 .NET IoT 라이브러리에서 지원하는 USB-직렬 어댑터를 사용할 수 있습니다. 자세한 내용은 지원되는 디바이스 바인딩을 확인하세요.

필수 조건

FTDI 웹 사이트에 있는 USB-직렬 어댑터용 D2XX 드라이버를 설치했는지 확인합니다.

참고 항목

어댑터를 플러그 인할 때 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 디바이스 사용

다음은 FTDI FT232H 어댑터를 사용하여 LED를 제어하는 LED 깜박임 자습서의 하드웨어 구현입니다.

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

이전 이미지에서 LED 회로는 원래 자습서와 매우 유사합니다. 유일한 차이점은 Raspberry Pi의 핀 18 대신 LED가 FT232H 어댑터의 핀 D7에 연결되어 있다는 것입니다.

자습서의 코드는 원래 자습서와도 비슷합니다.

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()에 의해 반환된 첫 번째 디바이스 ID를 생성자에게 전달하여 생성됩니다.
  • Ft232HDevice 인스턴스에서 CreateGpioController()를 호출하여 controller라는 GpioController의 인스턴스를 만듭니다. 이 GpioController 인스턴스는 원래 자습서의 GpioController 인스턴스와 동일한 함수를 수행합니다.
  • Ft232HDevice 인스턴스에서 GetPinNumberFromString()을 호출하고 영숫자 핀 이름 D7을 전달하여 핀의 정수 값을 검색합니다.
  • 나머지 코드는 원래 자습서와 동일합니다.

I2C 디바이스 사용

I2C 통신의 경우 FT232H 어댑터의 D0D1 핀은 각각 SDL 및 SCA 라인에 사용됩니다. FT232H 어댑터의 I2C 선택기 스위치는 켜기로 설정해야 합니다.

다음은 FTDI FT232H 어댑터를 사용하여 BME280 센서에서 온도, 습도 및 바로미터 압력을 읽는 센서에서 환경 조건 읽기 자습서를 하드웨어로 구현한 것입니다.

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

이전 이미지에서 다음이 진행됩니다.

  • FT232H 어댑터의 D0D1 핀은 각각 BME280 브레이크아웃 보드의 SDLSCA 핀에 연결됩니다.
  • BME280 브레이크아웃 보드의 I2C 선택기 스위치는 켜기로 설정됩니다.
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()에 의해 반환된 첫 번째 디바이스 ID를 생성자에게 전달하여 생성됩니다.
  • Ft232HDevice 인스턴스에서 CreateI2cDevice()를 호출하여 I2cDevice의 인스턴스를 만듭니다. 이 I2cDevice 인스턴스는 원래 자습서의 I2cDevice 인스턴스와 동일한 함수를 수행합니다.
  • 나머지 코드는 원래 자습서와 동일합니다.

SPI 디바이스 사용

SPI 통신의 경우 FT232H 어댑터의 D0, D1, D2D3 핀이 각각 SCK, MOSI, MISO 및 CS 라인에 사용됩니다. FT232H 어댑터의 I2C 선택기 스위치는 끄기로 설정되어야 합니다.

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.

이전 이미지에서 다음이 진행됩니다.

  • FT232H 어댑터의 D0, D1, D2D3 핀은 각각 MCP3008의 CLK, DIN, DOUTCS/SHDN 핀에 연결됩니다.
  • MCP3008 브레이크아웃 보드의 I2C 선택기 스위치는 끄기로 설정됩니다.
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()에 의해 반환된 첫 번째 디바이스 ID를 생성자에게 전달하여 생성됩니다.
  • Ft232HDevice 인스턴스에서 CreateSpiDevice()를 호출하여 SpiDevice의 인스턴스를 만듭니다. 이 SpiDevice 인스턴스는 원래 자습서의 SpiDevice 인스턴스와 동일한 함수를 수행합니다.
  • 나머지 코드는 원래 자습서와 동일합니다.

코드 가져오기

이 자습서의 코드는 GitHub에서 제공됩니다.