دوشنبه , ۲ مهر ۱۳۹۷
سرخط خبرها
خانه » آموزش » آموزش الکترونیک » دسترسی به سخت افزارهای رزبری پای در net core با کتابخانه RaspberryIO
حمایت مالی از یزد کیت

دسترسی به سخت افزارهای رزبری پای در net core با کتابخانه RaspberryIO

یکی از کتابخانه ای رایگان و کامل جهت استفاده در زبان برنامه نویسی dotnet core ( برنامه نویسی به کمک #c ) برای دسترسی به سخت افزار raspberry pi  کتابخانه RaspberryIO هست. برای استفاده از این کتابخانه در .net core  باید نسخه دات نت کور شما ۲.۱ باشه و همچنین که دات نت کور ۲.۱ بر روی رزبری شما هم نصب  باشد(آموزش نصب net core 2.1  بر روی رزبری نسخه لینوکس رو اینجا بخونید)

در این کتابخانه به وسیله تابع های موجود میتوانید به سخت افزار های رزبری از جمله دوربین Camera ،اطلاعات و وضعیت سخت افزار و CPu ، پایه ها ورودی خروجی GPIO  ، ارتباط از طریق پروتکل SPI ,پروتکل I2c  و  ترد ها دسترسی داشته باشید.

خوب برای نصب این کتابخونه از nuget  میتونید نصب کنید

PM> Install-Package Unosquare.Raspberry.IO

خوب نصب کتابخونه که انجام دادین نوبت به استفاده از این کتابخونه میرسه.

  • کنترل GPIO : در این مثال پین ۰ رو به صورت چشمک زن روشن خاموش میکنیم
public static void TestLedBlinking()
{
    // Get a reference to the pin you need to use.
    // All 3 methods below are exactly equivalent
    //var blinkingPin = Pi.Gpio[۰];
    //var blinkingPin = Pi.Gpio[WiringPiPin.Pin00];
     var blinkingPin = Pi.Gpio.Pin00;

    // Configure the pin as an output
    blinkingPin.PinMode = GpioPinDriveMode.Output;

    // perform writes to the pin by toggling the isOn variable
    var isOn = false;
    for (var i = ۰; i < ۲۰; i++)
    {
        isOn = !isOn;
        blinkingPin.Write(isOn);
        System.Threading.Thread.Sleep(۵۰۰);
    }
}

 

  • دریافت عکس از دوربین
static void TestCaptureImage()
{
    var pictureBytes = Pi.Camera.CaptureImageJpeg(۶۴۰, ۴۸۰);
    var targetPath = "/home/pi/picture.jpg";
    if (File.Exists(targetPath))
        File.Delete(targetPath);

    File.WriteAllBytes(targetPath, pictureBytes);
    Console.WriteLine($"Took picture -- Byte count: {pictureBytes.Length}");
}
  • دریافت تصویر از دوربین
static void TestCaptureVideo()
{
    // Setup our working variables
    var videoByteCount = ۰;
    var videoEventCount = ۰;
    var startTime = DateTime.UtcNow;

    // Configure video settings
    var videoSettings = new CameraVideoSettings()
    {
        CaptureTimeoutMilliseconds = ۰,
        CaptureDisplayPreview = false,
        ImageFlipVertically = true,
        CaptureExposure = CameraExposureMode.Night,
        CaptureWidth = ۱۹۲۰,
        CaptureHeight = ۱۰۸۰
    };

    try
    {
        // Start the video recording
        Pi.Camera.OpenVideoStream(videoSettings,
            onDataCallback: (data) => { videoByteCount += data.Length; videoEventCount++; },
            onExitCallback: null);

        // Wait for user interaction
        startTime = DateTime.UtcNow;
        Console.WriteLine("Press any key to stop reading the video stream . . .");
        Console.ReadKey(true);
    }
    catch (Exception ex)
    {
        Console.WriteLine($"{ex.GetType()}: {ex.Message}");
    }
    finally
    {
        // Always close the video stream to ensure raspivid quits
        Pi.Camera.CloseVideoStream();

        // Output the stats
        var megaBytesReceived = (videoByteCount / (۱۰۲۴f * ۱۰۲۴f)).ToString("۰.۰۰۰");
        var recordedSeconds = DateTime.UtcNow.Subtract(startTime).TotalSeconds.ToString("۰.۰۰۰");
        Console.WriteLine($"Capture Stopped. Received {megaBytesReceived} Mbytes in {videoEventCount} callbacks in {recordedSeconds} seconds");
    }            
}
  • خوندن وضعیت پایه ( پین GPIO) مورد نظر
Pi.Gpio.Pin02.PinMode = GpioPinDriveMode.Input;
// The below lines are reoughly equivalent
var isOn = Pi.Gpio.Pin02.Read(); // Reads as a boolean
var pinValue = Pi.Gpio.Pin02.ReadValue(); // Reads as a GpioPinValue
  • تغییر وضعیت پایه ( پین GPIO) مورد نظر
Pi.Gpio.Pin02.PinMode = GpioPinDriveMode.Output;
// The below lines are reoughly equivalent
Pi.Gpio.Pin02.Write(true); // Writes a boolean
Pi.Gpio.Pin02.Write(GpioPinValue.High); // Writes a pin value
  • ایجاد پالس در پایه ( پین GPIO) مورد نظر ( مثلا ۵۲۳ هرتز)
// Get a reference to the pin
var passiveBuzzer = Pi.Gpio[WiringPiPin.Pin01];
// Set the frequency to Alto Do (523Hz)
passiveBuzzer.SoftToneFrequency = ۵۲۳
// Wait 1 second
System.Threading.Thread.Sleep(۱۰۰۰);
// And stop
passiveBuzzer.SoftToneFrequency = ۰;
  • ایجاد اینتراپت برای تغییر وضعیت پایه ( پین GPIO)
using System;
using Unosquare.RaspberryIO;
using Unosquare.RaspberryIO.Gpio;

class Program
{
  // Define the implementation of the delegate;
  static void ISRCallback()
  {
     Console.WriteLine("Pin Activated...");         
  }

  static void Main(string[] args)
  {
        Console.WriteLine("Gpio Interrupts");
        var pin = Pi.Gpio.Pin00;
        pin.PinMode = GpioPinDriveMode.Input;
        pin.RegisterInterruptCallback(EdgeDetection.FallingEdge, ISRCallback);
        Console.ReadKey();
  }
}
  • ارتباط از طریق SPI
Pi.Spi.Channel0Frequency = SpiChannel.MinFrequency;
var request = System.Text.Encoding.ASCII.GetBytes("HELLO!");
var response = Pi.Spi.Channel0.SendReceive(request);
  • اترباط از طریق باس I2c
// Register a device on the bus
var myDevice = Pi.I2C.AddDevice(0x20);

// Simple Write and Read (there are algo register read and write methods)
myDevice.Write(0x44);
var response = myDevice.Read();

// List registered devices on the I2C Bus
foreach (var device in Pi.I2C.Devices)
{
    Console.WriteLine($"Registered I2C Device: {device.DeviceId}");
}
  •  راه اندازی

با توجه که این کتابخونه نیاز به ارتباط به سخت افزار ها داره پس باید برنامه تولیدی نهایی دسترسی کامل برای کنترل سخت افزار ها رو داشته باشه ، فرض کنید اسم برنامه ما atrin.rpi.gpio باشه ، پس از طریق ssh  به پوشه ای که برنامه رو در رزبری کپی کردن برین و دسترسی لازم برای اجرا برنامه رو به صورت زیر بدین به عنوان مثال برنامه ما در مسیر home/pi/publish  قرار گرفته باشه


sudo -i
cd /home/pi/publish
chmod +x atrin.rpi.gpio 

یا این دستور


sudo -i
cd /home/pi/publish
chmod  u+x atrin.rpi.gpio 

یا این که با این دستور کل پوشه publish  رو دسترسی لازم بهش بدین

~/publish$ sudo chmod u+x *

به همین سادگی و خوشمزگی 🙂

 

منبع : فروشگاه آترین الکترونیک

حمایت مالی از یزد کیت

همچنین ببینید

Relay IoT – رله قابل کنترل توسط اینترنت

دراین پروژه یک نمونه کنترل رله از طریق اینترنت رو مشاهده میکنید که استفاده گسترده …

دیدگاهتان را بنویسید