گیاهی ترین گیاهی ترین AnzanDigital فروشگاه
خانه / رسپبری پای / راه اندازی GPIO بخش دوم
Sunxi
Sunxi

راه اندازی GPIO بخش دوم

Logo-155x155تذکر:

  • خطای ناشی از بی احتیاطی ممکن است به بورد صدمه بزند،بنابرین قبل از هر اقدامی بایستی به سطح ولتاژ 1 منطقی ورودی ها اطمینان حاصل کنید،همواره در نظر داشته باشید که این سطح بایستی 3.3v باشد،روش های مختلفی برای تبدیل سطح ولتاژ وجود دارد، ساده ترین روش تقسیم مقاومتی است.
  • در استفاده از خروجی ها نیز به یاد داشته باشید – بایستی میزان جریانی که از پین مورد نظر دریافت میشود از حد مجاز تجاوز نکند که باعث صدمه به بورد می شود.

 

پیشنهاد:

  1. بر روی BreadBoard اقدام به نصب PushButton کنید.
  2. توسط جامپر پین مورد نظر را به ترمینال PushButton متصل کنید.
  3. ولتاژ 3.3v را با توحه به راهنمای قرار گیری پین ها به کلید متصل کنید، این در صورتی است که بورد دارای خروجی 3.3v باشد، در غیر این صورت می توانید از رگلاتور ولتاژ جهت تبدیل سطح  5v به 3.3v استفاده نمایید.
  4. برای پایدار کردن مقدار ورودی استفاده از مقاومت Pull-down توصیه می شود، در این شرایط پین مورد نظر در دو حالت تعریف شده – پایداری خواهد بود.

 

تعیین پین به عنوان ورودی :

 

$ echo 1 > /sys/class/gpio/export
$ ls
$ export gpio1_ph10 gpiochip1 unexport
$ cd gpio1_ph10
$ ls

هم اکنون میتوانید جهت پین مورد نظر را با دستور زیر تعیین کنید:

$ echo in > direction

برای خواندن مقدار پین مورد نظر،بایستی از دستور cat استفاده کنیم،این دستور محتوا را در ترمینال چاپ خواهد کرد،این دستور کاربرد های دیگری نیز دارد ، ولی در این نمونه مقدار value را چاپ میکند:

$ cat value

از دستوز cat میتوانید متوالیاً برای مشاهده مقدار پین استفاده کنید و تغییرات ورودی را با تغییر مقدار چاپ شده به صورت 0 یا 1 مشاهده نمایید.

$ cat value
1

استفاده از shell scripts :

اسکریپت shell فایلی است که شامل یک سری دستورات (مشابه دستورات نوشته شده برای کنترل پین با دریافت یا ارسال مقدار) است،به عنوان نمونه اسکریپت زیر را مشاهده کنید(اعداد در انتهای خطوط جهت راهنمایی اضافه شده اند،برای اجرا بایستی پاک شوند):

#!/bin/bash #                                                      1
echo Exporting pin $1. #                                           2
echo $1 > /sys/class/gpio/export #                                 3
echo Setting direction to out.
echo out > /sys/class/gpio/gpio$1/direction #                      4
echo Setting pin high.
echo 1 > /sys/class/gpio/gpio$1/value
  1. این خط برای اسکریپت shell الزامیست.
  2. $1 مربوط به آرگومان خط اول است.
  3. به جای استفاده از نام پین،از آرگومان استفاده کرده است.
  4. آرگومان مورد نظر در تمامی خطوط به جای 1$ قرار خواهد گرفت.

بعد نوشتن اسکریپت به صورت text ،آنرا به صورت Name.sh ذخیره کنید و برای قابل اجرا کردن این اسکریپت باید از دستور chmod استفاده کنید:

$ chmod +x Name.sh

اکنون کافیست دستور مورد نظر در حالت Root اجرا شود ،بنابرین بعد اجرای دستور sudo su میتوانید اسکریپت را اجرا کنید:

$ sudu su
$ ./Name.sh 10
Exporting pin
Setting direction to out.
Setting pin high.

علامت ./ قبل نام فایل نشان دهنده ی اجرای اسکریپت مورد نظر در دایرکتوری فعلی است.

جدول مولفه های مربوط به ورودی و خروجی :

GPIO input/output pin electrical characteristics

کنترل GPIO توسط C:

ارتباط با سخت افزار توسط زبان های برنامه نویسی همانند C و پایتون (یا زبان های رایج دیگر) از جمله نیاز کاربران در کنترل سخت افزار است،این نیاز وقتی جدی تر میشود که با سیستمی سر وکار پیدا میکنیم که بر پایه ی ارتباط با وسایل جانبی دیگر از جمله سنسور و موتور و دیگر بورد ها قرار دارد – از این رو کار با محیط ترمینال تنها برای خطا یابی و تست کارکرد صحیح اینترفیس ها ضروریست ولی برای بهره برداری جهت ارتباط دائم و حرفه ای تر نیازمند پیاده سازی کد توسط زبان برنامه نویسی است.

پیشنهاد:

  1. برای نصب برنامه در محیط لینوکس – از نرم افزار Synaptic استفاده کنید،ضروریست در سیستم هایی که این نرم افزار نصب نشده،توسط ترمینال اقدام به نصب آن نمایید و فراموش نکنید قبل استفاده از آن – فهرست منابع آن را به روز کنید.
  2. نرم افزار eclipse c/c++ به عنوان کامپایلر الزامیست.

 

مرجع اسناد موجود Kernel:

این اسناد بهترین مرجع برای معرفی بخش های جانبی ارتباط با سخت افزار لینوکس به شمار می روند،بنابرین برای اطلاعات بیشتر میتوانید مستقیماً به سند مربوطه مراجعه فرمایید.

سند مربوط به ارتباط با GPIO ( دایرکتوری | Sysfs) و مثالی که در زیر بررسی میکنیم (فایل ها) :

 

#include <stdlib.h>
#include <stdio.h>

#include "gpio_lib.h"

// gpio1_ph10
#define PH10 SUNXI_GPH(10)

int main()
{
if(SETUP_OK!=sunxi_gpio_init()){
printf("Failed to initialize GPIO\n");
return -1;
}

if(SETUP_OK!=sunxi_gpio_set_cfgpin(PH10 ,OUTPUT)){
printf("Failed to config GPIO pin\n");
return -1;
}

int i,j;
while(1) {
if(sunxi_gpio_output(PH10 ,HIGH)){
printf("Failed to set GPIO pin value\n");
return -1;
}

usleep(50000);
if(sunxi_gpio_output(PH10 ,LOW)){
printf("Failed to set GPIO pin value\n");
return -1;
}
usleep(50000);

}
sunxi_gpio_cleanup();

return 0;

}

 

کانال تلگرام بیر رباتیک

درباره Ahrovani Hadi

مشاهده بیشتر

-sgURvz6

اکتیو پایتون

اکتیو پایتون: در اکتیو پایتون محبوب ترین بسته های پایتون برای علم داده(Data Science)، یادگیری ماشین، …

دیدگاه بگذارید

اولین نفری باشید که دیدگاه میگذارد

با خبر سازی از
avatar

wpDiscuz