Windows, Linux ve macOS bilgisayarlarda .NET IoT Kitaplıklarını kullanma
.NET IoT kitaplıkları genellikle Raspberry Pi ve diğer IoT cihazları için kod geliştirmek için kullanılır. Bununla birlikte, FTDI FT232H gibi bir USB-seri bağdaştırıcı kullanarak Windows, Linux ve macOS bilgisayarlar için kod geliştirmek için de kullanabilirsiniz. Bu makalede, FT232H bağdaştırıcısına bağlı cihazlarla iletişim kurmak için .NET IoT kitaplıklarının nasıl kullanılacağı gösterilmektedir.
İpucu
Bu makalede FTDI FT232H bağdaştırıcısı kullanılır, ancak .NET IoT kitaplıkları tarafından desteklenen FT2232H, FT4232H ve FT4222 gibi herhangi bir USB'den seri bağdaştırıcıya kullanabilirsiniz. Daha fazla bilgi için desteklenen cihaz bağlamaları listesine bakın.
Önkoşullar
FTDI web sitesinde bulunan USB-seri bağdaştırıcınız için D2XX sürücülerini yüklediğinizden emin olun.
Not
Bağdaştırıcıyı taktığınızda Windows cihazları sürücüleri otomatik olarak yükleyebilir. Evrensel Seri Veri Yolu denetleyicileri altında listelenen USB Seri Dönüştürücü adlı bir cihaz için Aygıt Yöneticisi denetleyin. Cihazın sürücü sağlayıcısı FTDI olmalıdır.
Kullanılabilir cihazları listeleme
GPIO, I2C veya SPI cihazı oluşturabilmeniz için önce bağlı USB-seri bağdaştırıcısını tanımlamanız gerekir. Aşağıdaki kod, bağlı FTDI cihazlarını listeler:
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;
}
Yukarıdaki kodda FtCommon.GetDevices()
, yöntemi tüm bağlı FTDI cihazlarının listesini döndürür.
GPIO cihazı kullanma
Led'i denetlemek için FTDI FT232H bağdaştırıcısını kullanan LED'i yanıp sönme öğreticisinin donanım uygulaması aşağıdadır:
Önceki görüntüde LED bağlantı hattı özgün öğreticiye çok benzer. Tek fark, LED'in Raspberry Pi üzerindeki pin 18 yerine FT232H bağdaştırıcısındaki D7 sabitlemesine bağlı olmasıdır.
Öğreticinin kodu da özgün öğreticiye benzer:
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;
}
Önceki kodda:
- Bir örnek
Ft232HDevice
, tarafındanFtCommon.GetDevices()
döndürülen ilk cihaz kimliği oluşturucuya geçirilerek oluşturulur. - Adlandırılmış denetleyici örneği
GpioController
, örnekte çağrılarakCreateGpioController()
Ft232HDevice
oluşturulur. BuGpioController
örnek, özgün öğreticideki örnekleGpioController
aynı işlevleri gerçekleştirir. - Pinin tamsayı değeri, örnekte çağrılarak
GetPinNumberFromString()
Ft232HDevice
ve alfasayısal pin adı D7 geçirilerek alınır. - Kodun geri kalanı özgün öğreticiyle aynıdır.
I2C cihazı kullanma
I2C iletişimi için FT232H bağdaştırıcısındaki D0 ve D1 pinleri sırasıyla SDL ve SCA hatları için kullanılır. FT232H bağdaştırıcısındaki I2C seçici anahtarı Açık olarak ayarlanmalıdır.
Aşağıda, BME280 algılayıcısından sıcaklık, nem ve barometrik basıncı okumak için FTDI FT232H bağdaştırıcısını kullanan bir algılayıcıdan ortam koşullarını okuma öğreticisinin donanım uygulaması gösterilmektedir:
Yukarıdaki görüntüde:
- FT232H bağdaştırıcısındaki D0 ve D1 pinleri sırasıyla BME280 tartışma panosundaki SDL ve SCA pinlerine bağlanır.
- BME280 tartışma panosundaki I2C seçici anahtarı Açık olarak ayarlanır.
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);
}
Önceki kodda:
- Bir örnek
Ft232HDevice
, tarafındanFtCommon.GetDevices()
döndürülen ilk cihaz kimliği oluşturucuya geçirilerek oluşturulur. - örneği, örnekte
I2cDevice
çağrılarakCreateI2cDevice()
Ft232HDevice
oluşturulur. BuI2cDevice
örnek, özgün öğreticideki örnekleI2cDevice
aynı işlevleri gerçekleştirir. - Kodun geri kalanı özgün öğreticiyle aynıdır.
SPI cihazı kullanma
SPI iletişimi için FT232H bağdaştırıcısındaki D0, D1, D2 ve D3 pinleri sırasıyla SCK, MOSI, MISO ve CS hatları için kullanılır. FT232H bağdaştırıcısındaki I2C seçici anahtarı Kapalı olarak ayarlanmalıdır.
Aşağıda, bir MCP3008 ADC'sinden değerleri okumak için FTDI FT232H bağdaştırıcısını kullanan analog-dijital dönüştürücüden değerleri okuma öğreticisinin donanım uygulaması gösterilmektedir:
Yukarıdaki görüntüde:
- FT232H bağdaştırıcısındaki D0, D1, D2 ve D3 pinleri sırasıyla MCP3008 CLK, DIN, DOUT ve CS/SHDN pinlerine bağlanır.
- MCP3008 tartışma panosundaki I2C seçici anahtarı Kapalı olarak ayarlanır.
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);
}
Önceki kodda:
- Bir örnek
Ft232HDevice
, tarafındanFtCommon.GetDevices()
döndürülen ilk cihaz kimliği oluşturucuya geçirilerek oluşturulur. - örneği, örnekte
SpiDevice
çağrılarakCreateSpiDevice()
Ft232HDevice
oluşturulur. BuSpiDevice
örnek, özgün öğreticideki örnekleSpiDevice
aynı işlevleri gerçekleştirir. - Kodun geri kalanı özgün öğreticiyle aynıdır.
Kodu alma
Bu öğreticinin kodu GitHub'da kullanılabilir.