ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 15
  1. #1
    2013/08/28
    539
    12

    آموزش کار با درگاه های رسپبری پای

    به نام خدا
    با سلام
    قبل از مشاهده تاپیک حتما خوانده شود
    با توجه به بحث های انجمن به نظرم اومد جای یک منبع فارسی جامع و شامل در مورد این بورد کم هست، بنابراین گفتم این تاپیک رو ایجاد کنم.
    ضمن اینکه خودم تجربه محدودی در کار با این برد رو دارم و می خوام که یادگیری بیشتری داشته باشم، و چون هنگام بازگو کردن مطلب برای دیگران، به نکاتی توجه میکنم که در حالت عادی نمیکنم، پس این هم دلیل دیگه ای برای این مطلب میشه.

    پیش نیازها:
    ----->آشنایی اولیه با برد رسپبری پای نظیر نصب سیستم عامل و ...
    ----->آشنایی اولیه با اصول مدارات الکترونیکی
    ----->آشنایی با زبان c(زبان های دیگه هم استفاده میشن، اما سعی میشه اول ورژن c بحث بشه)
    ----->آشنایی اولیه با سیتم عامل لینوکس

    چند تا نکته:
    ----->من خودم در حال یادگیری هستم، و اطلاعاتم در خیلی موارد ناقص، درسته که تلاش می کنم تا مورد درست رو انتقال بدم، اما امکان اشتباه در ارائه مفهوم ها وجود داره، علائه بر اینکه از اساتید درخواست تصحیح دارم، اینم بگم که مسئولیتی در قبال وجود اشتباه در آموزش ها رو تقبل نمیکنم.
    ----->آموزش ها بر اساس برد قدیمی تر یعنی مدل B+ هست، دوستانی که از ورژن های دیگه استفاده می کنند، خودشون باید حواسشون به تطبیق های لازم باشه.
    ----->کد ها و موارد مطرح شده روی برد تست میشن و سپس قرار داده میشن، مسئولیتی در قبال هرگونه صدمه به برد شما در حین اجرای کدها تقبل نمی شود.
    ----->چون موارد تحت پوشش زیاد و حجم هم بالاست، سوالات خودتون رو در تاپیک های دیگه بپرسین، مخصوصا تاپیک مربوط به برد رسپببری پای
    ----->برای یادگیری بهتر و فراگیر تر استفاده از مطالب انگلیسی رو توصیه میکنم.
    ----->استفاده از تاپیک به معنای قبول شرایط بالاست(به خصوص گاهی از بندهای اول)، مسئولیتی در قبال استفاده بدون مطالعه شرایط، تقبل نمیشود.
    ----->امیدوارم موارد آموزشی مفید باشه.
    The healthy human mind doesn't wake up in the morning thinking this is his last day on earth.
  2. #2
    2013/08/28
    539
    12

    پاسخ : آموزش کار با درگاه های رسپبری پای

    خب، چند بخش اول آموزش رو به gpio اختصاص میدیم، و راه های متفاوت کار با اون. دوستانی که با برد کار کردن احتمالا از کتابخانه پایتون(RPi.GPIO) خودش استفاده کردن، خب این یک راه سریع برای راه اندازی و کار با gpio هست که سراغش هم میریم اما الان میخوایم یک مقدار سطح پایین تر کار کنیم و سعی کنیم با ابزار موجود در سیستم عامل، سخت افزار رو کنترل کنیم،در حقیقتهدف این بخش از آموزش اینه که بتونیم با زبان c کتابخانه خودمون رو برای gpio بنویسیم

    اول یک توضیح کوچولو انحرافی:
    برای اینکه بشه از طریق سیستم عامل سخت افزار رو کنترل کرد، نیاز به درایور هست، پس یک راه برای کار با gpio اینه که بریم درایور بنویسیم، میشه اما کار پیچیده ای هست و ما هم نمی خوایم حداقل فعلا بهش بپردازیم، و نیازی هم نیست این کا رو بکنیم ، فقط بدونیم که درایور ها در کرنل(kernel) سیستم عامل اجرا میشن، که ما بهش میگیم فضای کرنل، سیستم عامل لینوکس میاد برای ما که در فضای کاربر(user space) قرار داریم، رابط کاربری میذاره تا بتونیم با فضای کرنل تعامل کنیم، چند راه برای این مسئله هست، اما من تو این اموزش از روش sysfs استفاده می کنم، که با یه سرچ کوچولو دیدم که از قبلی هاش خیلی بهتر هست و یک سری مشکلات اونا رو نداره،
    اینم بگم که تو لینوکس همه چی به چشم یک فایل دیده میشه

    خب، با این توضیحات بریم سراغ کار،
    ترمینال رو باز کنین و سطح دسترسی رو به super user ارتقا بدین(من از رسپین استفاده می کنم)
    کد:
    sudo su
    حالا برین به پوشه /sys/class/gpio
    کد:
    cd /sys/class/gpio
    اگر ls بگیرین باید فایلی به اسم export موجود باشه، ما با این کار داریم
    ما با نوشتم تو این فایل می تونیم gpio مورد نظر رو فعال کنیم، مثلا
    کد:
    echo 4 > export
    ما gpio شماره 4 رو فعال کردیم، حالا ls بگیرین، باید پوشه ای به اسم gpio4 ساخته شده باشه
    برین توش
    کد:
    cd gpio4
    بازم ls بگیرین چند تا فایل هست، direction و value اونایی هست که برای ما مهم هستند،
    برای تعیین جهت in و یا out رو در direction بنویسید
    با خواندن از و یا نوشتن در value مقدار gpio رو خوانده و یا بنویسید.
    مثلا می خوایم یک led رو روی gpio4 روشن کنیم
    کد:
    echo out > direction
    echo 1 > value
    حالا خاموشش می کنیم
    کد:
    echo 0 > value
    حالا اگه کارمون تمومه بهتره، gpio رو خلاص کنیم بره پی کارش
    کد:
    cd ..
    echo 4 > unexport
    خب فعلا اینو امتحان کنید تا بگم بعدش، چطور با استفاده از c کتابخانه خودتون رو بنویسید، البته اگه کار با فایل بلدین فکر کنم خودتون تا تهشو برین.
    The healthy human mind doesn't wake up in the morning thinking this is his last day on earth.
  3. #3
    2013/08/28
    539
    12

    پاسخ : آموزش کار با درگاه های رسپبری پای

    با سلام مجدد
    خب می خوایم با استفاده از یک زبان برنامه نویسی کار بالا رو انجام بدیم، الان می خوایم با c کار کنیم اما استراتژی به هر زبانی قابل تعمیم هست
    اگه پست قبلی رو خونده باشین، میبینین که تمام اتفاقات داره با نوشتن و خوندن از چند تا فایل صورت میگیره، قبلا هم گفتیم که همه چی تو لینوکس به چشم فایل نگاه میشه، پس اگه ما کار با فایل رو باد باشیم میتونیم همه کار های بالا رو اتوماتیک وار انجام بدیم
    چند تا تابع مینویسیم، یکی برای تعیین جهت، یکی برای ست کردن مقدار خروجی، یکی برای خوندن ورودی و دیگری برای ازاد کردن پورت
    سیستم کار یکی رو توضیح میدم بقیه به همین سبک نوشته میشن از روی هم و شبیه هم هستن
    اول یه هندلر فایل میسازیم
    کد:
    FILE *sysfs_handle = NULL;
    بعد فایل مورد نظر رو باز میکنیم، ترتیب باید مثل ترتیب بالا باشه، مثلا برای گرفتن پورت باید اول export رو باز کنیم، بعد از نوشتن باید فایل رو ببندیم و تا ذخیره بشه
    کد:
    if ((sysfs_handle = fopen("/sys/class/gpio/export", "w")) != NULL)
    {
       fwrite("4", sizeof(char), 2, sysfs_handle);
       fclose(sysfs_handle);
    }
    بد نیست اگه برای هر مرحله یک ارور هم بذاریم تا ببینیم مشکل احتمالی از کجاست،
    یک نکته مهم تو ارگومان سوم fwrite اینکه باید تو شمارش اون null اخر رشته رو هم حساب کنید.
    توضیح زیادی ندارم بدم، هر چی بگم یاد دادن c هست که قرار شد بلد باشین دیگه :biggrin:، اگه بلدین که عالی اگه نه توابع بالا رو سرچ کنید و ببینید کار باهاشون چطور هست
    یک برنامه تست هم نوشتم که با اون میشه پورت رو گرفت، خوند، مقدار داد و ازاد کرد، تابع main رو به دلخواه تغییر بدین و نتیجه رو ببینین. به نظر خودم فهمش سادست و نیاز به توضیح نداره.

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت



    تا بعد.
    The healthy human mind doesn't wake up in the morning thinking this is his last day on earth.
  4. #4
    2013/08/28
    539
    12

    پاسخ : آموزش کار با درگاه های رسپبری پای

    سلام دوباره،در این بخش می خوایم کار با پورت سریال رو داشته باشیم
    تو رسپبری، بصورت پیش فرض پورت سریال به عنوان یه ورودی خروجی پیش فرض برای سیستم تعریف شده و میشه مثلا باهاش تو سیستم لاگین کرد.
    برای این که ما بتونیم ازش تو برنامه خودمون استفاده کنیم، باید از این حالت پیش فرض درش بیاریم
    سطح دسترسی رو ارتقا بدین و برین به پوشه زیر
    کد:
    cd /etc
    فایل inittab رو باز کنین،باید در انتهای کدی شبیه کد زیر ببینید، با گذاشتن یک # در اول خط کامنتش کنین
    کد:
    T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
    با این کار دیگه نمیشه از این پورت لاگین کرد و پورت سریال اماده و ازاد هست تا ما ازش استفاده کنیم
    اما یک نکته اختیاری هم هست، رسپبری وقتی بالا میاد اطلاعاتی رو موقع boot رو پورت سریال میریزه، اگه قطعش نکنیم دستگاهی که با پورت سریال به برد وصله اون اطلاعات رو میبینه، اگه مشکلی نیست با این مسئله، می تونید از این مرحله رد شین.
    برای از کار انداختن این قابلیت
    فایل زیر رو باز کنین /boot/cmdline.txt
    محتوایی به شکل زیر داره
    کد:
    dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
    هر عبارتی که توش ttyAMA0 هست رو حذف کنید، میشه یه چیزی مثل
    کد:
    dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
    حالا یه ریبوت انجام بدین
    حالا یک برنامه می خوایم که با پورت سریال کار کنه، برنامه minicom هست، نصبش کنین
    کد:
    sudo apt-get install minicom
    وقتی نصب شد با دستور زیر بالا میاد
    کد:
    minicom -b 9600 -o -D /dev/ttyAMA0
    نکته
    پین های برد رسپبری توان تحمل ولتاژ 5 رو ندارند، پس اگه با دستگاه 5 ولت ارتباط میدینش، سر tx دستگاه 5 ولت تقسیم مقاومتی مناسب فراموش نشه
    امیدوارم مفید بوده باشه، تا بعد که برنامه نویسی پورت سریال رو کار کنیم
    The healthy human mind doesn't wake up in the morning thinking this is his last day on earth.
  5. #5
    2013/08/28
    539
    12

    پاسخ : آموزش کار با درگاه های رسپبری پای

    خب، بعد ازمدتی غیبت که وقت نمی کردم پست بذارم، اموزش برنامه نویسی پورت سریال رو داریم
    برای برنامه نویسی پورت سریال ما از مفهومی به نام POSIX استفاده می کنیم
    سوال اول که پیش میاد اینه، POISX چیست؟
    در جواب باید بگم خیلی ساده ( تا اونجا که من فهمیدم ) مجموعه ای از قوانین و استاندارد ها هست که توسط IEEE وضع شده، تا برنامه نویسی برای سیستم عامل های تحت unix به صورت متحد و یکپارچه باشه، البته هر سیستم عامل دیگه ای هم میتونه POSIX رو پیاده کنه، به عبارت دیگه مجموعه ای از API ها هست که استاندارد شده و در سیستم عامل های تحت unix وجود داره تا برنامه های به شکل متحد نوشته شن،
    بدون شک اگه گوگل کنین اطلاعات بیشتری خواهید داشت.
    روش های متفاوتی برای کار با پورت سریال هست، اما من این روش none blocking رو ترجیح میدم، اصول یکیه، فقط بدونید میشه روش های دیگه ای هم داشت
    خب برای اموزش پیشنهاد من اینه، فایل پیوست رو جلوتون باز کنید و خط به خط باهم بریم جلو
    اصول کار برنامه اینه که هر وقت جمله ای که به اینتر ختم شه، به پورت سریال ارسال شه، یک سیگنال ( مثل اینتراپت) ست میشه و تابع مربوطه بهش صدا میشه و ما توی اون تابع یک فلگ که خودمون تعریف کردیم رو ست می کنیم و بنا به مقدارش تو حلقه اصلی برنامه کارایی انجام میدیم
    اول از include ها شروع کنیم
    termios.h : این فایل حامل تعریف هایی است که توسط ترمینال های ورودی خروجی استفاده میشه
    stdio.h : معرف حضور هست، همه ما از printf استفاده کردیم.
    unistd.h : تعاریف پر کاربرد رو تو خودش داره
    fcntl.h : شامل تعریفی برای کار با فایل ها
    sys/signal.h : برای استفاده از سیگنال اضافه کردیم
    sys/type.h : تعاریف نوع متغیر ها
    stdlib.h : تابع exit رو لازم داریم
    تو بخش define ها حواستون باشه باود ریت رو درست تنظیم کنید، و modemdevice رو به نام پورتی که می خواین باهاش کار کنید، ارجاع بدین
    خب بریم تو main،
    struct termios، استراکچری هست که تنظیمات پورت رو تو خودش داره، struct sigaction هم مربوط به استفاده از سیگنال هست،
    بعد از تعاریف اول فایل پورت رو باز میکنه، تو اموزش های قبلی توضیح دادیم که تو لینوکش همه چی فایله، به فلگ ها دقت کنید
    O_RDWR : فایل به عنوان ورودی و خروجی باز شود
    O_NOCTTY :میگه اگه فایل از نوع ترمینال بود، به عنوان کنترل کننده استفاده نشه، یعنی اینکه ورودی و خروجی هاش لینوکس رو کنترل نکنن، اگه نذاریم و مثلا نویز بیاد و نویز ctrl-c باشه برنامه بسته میشه
    O_NONBLOCK : بلاک نکنه و سریع برگرده به برنامه

    تو قسمت بعدی سیگنال رو راه اندازی کرده، فقط اون قسمت saio.sa_handler = signal_handler_IO; شاید مهم باشه، چرا که نام تابع سیگنال هندلر رو مشخص میکنیم.

    تابع fcntl میاد و دستوراتی رو روی فایل انجام میده،
    کد:
    fcntl(fd, F_SETOWN, getpid());
    این دستور میگه که سیگنال ناشی از این ترمینال ( فایل ) رو به کی بفرستم
    دستور دوم هم چک میکنه که مد non blocking باشه، و فلگ های مربوطه رو ست میکنه
    کد:
    tcgetattr(fd,&oldtio);
    شرایط فعلی پورت رو ذخیره میکنه
    بعد استراکچر newtio رو با تنظیمات دلخواهمون پر می کنیم و با دستور زیر تنظیمات رو اعمال می کنیم
    کد:
    tcsetattr(fd,TCSANOW,&newtio);
    خب، بقیه کار مشخصه یک وایل که شرطش برقراره، هر وقت که از پورت سریال جمله ای که اخرش اینتر باشه ارسال شه، سیگنال ارسال میشه، و تابع هندلر اجرا میشه، این تابع فلگ رو ست میکنه و این باعث میشه تا تو وایل تابع read اجرا شه، و جمله ورودی و تعداد کاراکتر های اون چاپ شه، اگه جمله برابر exit باشه هم از برنامه خارج میشیم،
    خب، در بالا نحوه راه اندازی و یک برنامه نمونه رو دیدیم، اموزش هنوز جای کار داره، تنظیمات یوزارت و سیگنال خیلی خوب پوشش داده نشده که ایشالا کاملش می کنیم، اما فعلا در همین حد می تونید راه اندازی کنید و برنامه نمونه خودتون رو بنویسید، یک استارتی هم هست تا گوگل کنید و موارد بیشتری رو یاد بگیرین، مثلا ارسال روی پورت سریال که البته حدش زدنش راحته که باید با تابع write انجام شه،
    فایل پیوست:

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت



    The healthy human mind doesn't wake up in the morning thinking this is his last day on earth.
  6. #6
    2006/12/19
    تهران
    711
    0

    پاسخ : آموزش کار با درگاه های رسپبری پای

    دوست عزیز تو این پست آخر کجا تعریف شده که اگر رشته ورودی به Enter ختم شد اون flag ست بشه؟ یعنی منظورم اینه چرا کاراکتر Enter ؟
  7. #7
    2013/08/28
    539
    12

    پاسخ : آموزش کار با درگاه های رسپبری پای

    با سلام
    فکر می کردم بازدید نداره تاپیک
    شما وقتی کانونیکال مد میزاری که با فلگ زیر تو کد انجام شده، دیفالت یک خط کامل بافر میشه و بعد میاد تو روال برنامه خونده میشه، باید از این مد خارج کرد تا اینطور نباشه،
    کد زیر کانونیکال میکنه
    کد:
    newtio.c_lflag = ICANON;
    The healthy human mind doesn't wake up in the morning thinking this is his last day on earth.
  8. #8
    2006/12/19
    تهران
    711
    0

    پاسخ : آموزش کار با درگاه های رسپبری پای

    سلام
    ممنون
    خب اگه بخوای دیتا رو بصورت Hex بفرستی (هر دیتای 8 بیتی میتونه تو رشته ارسالی باشه) نه بصورت Text اونوقت امکانش هست که کاراکترهای 0D 0A که همون کاراکتر Enter هستش تو رشته ی ارسالی باشه. اینطوری اشتباه بافر میشه که.

    کلا روش غیر NONBLOCK بهتر نیست به نظرتون؟ تو While دائم پورت رو بخونی اگه ابتدا و انتهای رشته ی دریافتی درست بود (حالا طبق پروتکلی که خودت در نظر گرفته ای) اونوقت اون رشته پردازش بشه. البته یه 40 30 میلی ثانیه ای تاخیر داره اگه NONBLOCK نباشه.
  9. #9
    2013/08/28
    539
    12

    پاسخ : آموزش کار با درگاه های رسپبری پای

    ما هم نان بلاک کار کردیم، فرمایش شما متینه، اما هر کدوم به دردی می خورن، باید از مد کانونیکال خارج کرد تا اونی که شما میگی بشه، ،فلگ قبلی که گفتم رو نات کن،
    The healthy human mind doesn't wake up in the morning thinking this is his last day on earth.
  10. #10
    2006/12/19
    تهران
    711
    0

    پاسخ : آموزش کار با درگاه های رسپبری پای

    نه منظورم NONBLOCK نبود. منظورم عکسش بود. یعنی روش Blocking رو گفتم که به نظرم بهتره.
    خب اگه فلگ رو برداری اونوقت آخر داده ورودی رو چی درنظر میگیره که در صورت رسیدن ش کل داده ها رو بافر کنه؟
    ببخشید میپرسم خودم خیلی حوصله خوندن کتاب های چند صد صفحه ای Unix Programming رو ندارم !
صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 15

موضوعات مشابه

  1. اجرای برنامه در استارتاپ رسپبری
    توسط mohsen.s.h در انجمن برنامه نويسي و اينترفيس
    پاسخ: 0
    آخرين نوشته: 2015/12/09, 01:51
  2. میکروکنترلر یا رسپبری پای؟
    توسط dalmif در انجمن خانواده Raspberry Pi
    پاسخ: 6
    آخرين نوشته: 2015/11/11, 12:15
  3. برد رسپبری و اتصال با سخت افزار(Raspberry Pi)
    توسط مهدی آقای نجفی در انجمن مدار هاي ديجيتال
    پاسخ: 5
    آخرين نوشته: 2015/06/19, 23:32
  4. ارتباط درگاه USB با USB ايا امکان داره؟
    توسط سميراا در انجمن مدار هاي ديجيتال
    پاسخ: 8
    آخرين نوشته: 2014/02/08, 23:01
  5. درگاه GPIO چیست؟
    توسط alamdar_313 در انجمن پروسسورهای ARM
    پاسخ: 6
    آخرين نوشته: 2012/10/26, 03:40

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •