إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

2/2 : أسس التعامل مع مآخذ الخرج و الدخل - gpio

تقليص
X
تقليص

  • 2/2 : أسس التعامل مع مآخذ الخرج و الدخل - gpio

    السلام عليكم و رحمة الله و بركاته
    أما بعد


    نتابع ما عزمنا تنفيذه وفقا لهذا الموضوع حيث سنتطرق لشق البرمجي بعدما تعرفنا على الشق العتادي في الجزء الأول

    في الأول يلزما توضيح بعض الأمور ألا و هي :


    1. 1.لغة البرمجة المستخدمة لتعامل مع اللوح هي بايثون
    2. 2.الوضعية البرمجية لمكتبة GPIO الخاصة بالبايثون هي BCM : سنتبع ترتيب شريحة bcm يعني ترتيب NAME الموضحة في الصورة الخاصة بالجزء الأول


    ملاحظة :

    مما سبق افتراضيا من الآن و صاعدا ستكون لاحقة ملفات الشرح على أجهزتكم هي py , و يلزم كذالك أن نعرف وجوب إعطاء تلك الملفات صلاحية التنفيذ لذا لن أتطرق في كل مرة لهذا و لن نشرح أساسيات لغة بايثون لأن هذا خارج أطار سلسلتنا – و لاكن لا تجزعوا لا نحتاج مبدئيا لنكون متقدمين في التعامل معها فقط نحتاج فائدة المفيد


    نبدأ باسم الله :

    نحتاج أولا تنصيب مكتبة التحكم في GPIO الخاصة بالبايثون كما يلي :

    1. 1.حدث النظام بهذا الأمر :

    ‫â€ھsudo‬‬ ‫â€ھapt-get‬‬ ‫â€ھupdate‬‬

    1. 2.تثبيت مكتبة - gpio- بهذا الأمر :

    ‫â€ھsudo‬‬ ‫â€ھapt-get‬‬ ‫â€ھinstall‬‬ ‫â€ھ–y‬‬ ‫â€ھpython-dev‬‬ ‫â€ھpython-rpi.gpio‬‬

    ثانيا ليكن في علمنا أن دبابيس GPIO التي يمكننا أستخدامها كمداخل أو مخارج كما شرحنا سالفا طبقا لترتيب NAME (ترتيب شريحة bcm و ليس الترتيب حسب موضعها في اللوح) هي :

    2 و 3 و 4 و 5 و 6 و 7 و 8 و 9 و 10 و 11 و 12 و 13 و 14 و 15 و 16 و 17 و 18 و 19 و 20 و 21 و 22 و 23 و 24 و 25 و 27 و 27

    راجع صورة توزيع الدبابيس



    يعني 26 دبوس يمكننا تخصيص ما نشاء منها


    الآن سنقوم بتجربة فعلية لإشعال مصباح led عن الضغط على زر لمدة 3 ثواني :


    الصورة العتادية لتجربة :


    1. 1.جهز ملف جديد بمسمى led_button.py و محتواه :


    كود PHP:
    #!/usr/bin/env python 
    import RPi.GPIO as GPIO
    from time import sleep
    GPIO
    .setmode(GPIO.BCM)
    Button 20
    led 
    21
    GPIO
    .setup(ButtonGPIO.INpull_up_down=GPIO.PUD_UP)
    GPIO.setup(ledGPIO.OUT)
    while 
    True:
           if ( 
    GPIO.input(Button) == False ):
                 
    GPIO.output(led,1)
                 
    time.sleep(3)
                 
    GPIO.output(led,0)

           
    time.sleep(1
    لنشرح ما جاء فيه :


    import RPi.GPIO as GPIO : استدعاء مكتبة GPIO و أستعارتها باسم GPIO ( وضعها كمتغير ليسهل التعامل معها )


    from time import sleep : استدعاء مكون الوقت



    GPIO.setmode(GPIO.BCM) : اعداد طريقة استدعاء الدبابيس في وضعية ترتيب شريحة bcm


    Button = 20 : متغير دخل الزر الذي يشعل led و هنا اخترنا له الدبوس رقم 20 كما في الصورة- السلك الأصفر


    led = 21 : متغير خرج تيار مصباح led و هنا اخترنا له الدبوس رقم 21 كما في السورة – السلك الأحمر


    GPIO.setup(Button, GPIO.IN, pull_up_down=GPIO.PUD_UP) : تنفيذ دالة GPIO و تمرير رقم دبوس الزر في الوضعية كمدخل – لاحظ GPIO.IN


    GPIO.setup(led, GPIO.OUT) : تنفيذ دالة GPIO و تمرير رقم دبوس المصباح في الوضعية كمخرج – لاحظ GPIO.OUT


    while True: دالة تكرار ما لا نهاية – لكي نتمكن من تكرار العملية أكثر من مرة ( عملية اشعال المصباح )


    if ( GPIO.input(Button) == False ): جملة شرطية تتأكد من أن لو وضعية الزر ليست في حالة ضغط – أي أنها تغيرت من الحالة البرمجية GPIO.PUD_UP إلى الحالة GPIO.PUD_DOWN

    - أن تم تغيير حالته سينفذ :
    GPIO.output(led,1) : و التي تعني غير حالة الدبوس الذي هو في حالة مخرج من 0 إلى 3.3V و هذا التيار كافي لإشعال المصباح لمدة 3 ثواني بسبب أننا طلبنا منه ينتظر تلك المدة بهذا الكود time.sleep(3) بعدها يرجع قيمة ذالك الدبوس لـ 0 بهذا الشكل GPIO.output(led,0)


    أخيرا اضفنا دالة الاسبات لمدة 1 ثانية لكي لا يكون فيه ضغط على المعالج لتكرار تلك العملية ضمن الحلقة بهذا الكود time.sleep(1)



    تبقى لنا فقط أن نعطي الملف صلاحية التنفيذ و نستدعيه من الطرفية على فرض أنه في مجلد المنزل الخاص باللوح :
    sudo ./led_button.py


    يتبع مع مثال ثاني .....
      لا يمكن إضافة تعليقات.

    التصانيف

    تقليص

    Latest Articles

    تقليص

    • تجربة تثبيت توزيعة ديبيان بجانب ويندوز بدون usb او cd
      أحمد غريب
      التجربة تمت على VirtualBox النظام ويندوز اكسبي قرص صلب واحد قسمين c و d

      التجربة قسمين القسم الاول تجهيز ملف iso دبيان لعملية الاقلاع لايف من الهاردسك والقسم الثاني عملية الثتبيت تحتاج الى اتصال بالانترنت
      و استخدمت برنامج UltraISO لعمل virtual cd drive لملف iso

      1- نسخ ملف iso دبيان داخل القرص C
      2- تركيب الملف iso كقرص وهمي "mount"
      3- فتح debian-lnstaller loader ثم نكست نكست نكست

      4- حذف كل ما يوجد في ملف grup.cfg موجود في C داخل في مجلد win32-loader

      ثم اضافة مايلي
      كود:
      menuentry 'debian-live-8-amd64-gnome-desktop' {
          set isofile='/debian-live-8.6.0-amd64-gnome-desktop.iso'
          loopback loop $isofile
          linux (loop)/live/vmlinuz boot=live config fromiso=/dev/sda1/$isofile
          initrd (loop)/live/initrd.img
      }
      استبدال initrd.gz موجود في داخل win32-loade التحميل من الرابط
      http://ftp.nl.debian.org/debian/dists/testing/main/installer-amd64/current/images/hd-media/
      بعد ...
      27-11-2016, 03:08 PM
    • عداد الإستغفار
      مبتدى في للينكس
      السلام عليكم ورحمة الله و بركاته

      شرح فكرة السكربت:

      عداد الأستغفار يعمل عند الضغط على أختصار من الكيبورد و عند كل ضغطة يضيف 1 إلى العداد و يظهر إطار صغير في منتصف الشاشة لعرض العدد لمدة ثانية ثم يتم أغلاقه تلقائياً . أذا وصل العداد إلى 100 يرجع إلى الصفر. يتم حفظ العدد في ملف count.txt يتم إنشاءه تلقائياً بواسطة السكربت.


      شرح إعداد السكربت:

      1. قم بفتح مجلد Home وقم بإنشاء مجلد بإسم counter

      2. في داخل المجلد counter قم بإنشاء ملف نصي بإسم Counter.java , ثم قم بنسخ السكربت التالية و ضعه في داخل الملف ثم قم بالحفظ



      :
      package counter; import java.awt.BorderLayout; import java.awt.Event; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.io.PrintWriter; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JButton; import javax.swing.SwingConstants; public class Counter extends JFrame { private static String fileName = System.getProperty("user.dir") + "/counter/count.txt"; public Counter() { this.setTitle("Counter"); this.setResizable(false); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.pack(); this.setSize(150, 150); this.setVisible(true); } public static void main(String[] args) { Counter obj = new Counter(); int count = 0; try { try { try { String countString = readFile(fileName, StandardCharsets.UTF_8).trim(); count = (int) Integer.parseInt(countString); } catch (Exception e) { outResult(fileName, String.valueOf(count)); } finally { if (count
      ...
      23-11-2016, 02:11 AM
    • سكربت بايثون لتسهيل تثبيت بعض الأشياء في فيدورا
      yucef
      بسم الله الرحمن الرحيم
      السلام عليكم ورحمة الله وبركاته




      قمت بعمل سكربت بايثون لتسهل تثبيت بعض الأشياء لفيدورا ,طريقة تنزيل وتشغيل السكربت مشروحة في هذا الرابط .

      https://github.com/yucefsourani/arfedy

      ...
      23-11-2016, 02:09 AM
    • إعادة تسمية الملفات باستخدام rename
      OtmanGX
      لينكس على السّريع : إعادة تسمية الملفات باستخدام rename


      تذكير بالموضوع السابق : إعادة تسمية الملفات باستخدام mv

      كما في المرة السابقة سنتحدث اليوم عن إعادة تسمية مجموعة من الملفات لكن باستخدام أداة أخرى وهي rename ؛ بحيث أنّنا لن نضطر لاستعمال حلقات التكرار والأمر مشابه نوعا ما لما يقوم به الأمرsed ، لكن الأداة rename تستخدم التعابير النظامية perlexpr لكننا سنذكر فقط التعابير النظامية المشتركة بين الاثنين .
      بعض خصائص الأمر :
      n, –no-act- : يوصى باستخدام هذه الخاصية كثيرا ، فمن خلالها يتم إظهار التغييرات التي ستتم بدون إجراء أي تعديل
      f, –force : الكتابة على الملفات بدون أدنى تحذير
      v, –verbose – : تفعيل وضع verbose ليتم إظهار التغييرات الجارية
      ويكون الشكل العام للأمر كالتالي :

      :
      rename [option] 's/old-name/new-name/' file
      باستبدال file بالملفات التي تود تغيير أسمائها
      كمثال أوّلي مثلا نريد استبدال المسافات الفارغة المتواجدة في أسماء الملفات أو المجلدات بالرمز _ :

      المثال 1 :
      :
      rename 's/ /_/g' *
      g ليتم الاستبدال في أكثر من موضع إن وجد
      الآن سنقوم كالعادة بإنشاء مجلد نقوم فيه بأمثلتنا
      ...
      23-11-2016, 02:05 AM
    • المراقبة العالمية ! Global surveillance
      عبدالرحمـن محمد
      السلام عليكم ورحمة الله

      مقدمة :
      في يونيو 2013، سرَّب إدوارد سنودين، وهو عميل متعاقد مع وكالة الأمن القومي، مستندات تّصِف بريسم "ومجموعة برامج أخري" بأنه برنامج يتيح مراقبة معمقة للاتصالات الحية والمعلومات المخزنة. ويمكن من استهداف أي عميل لشركة منخرطة في برنامج بريسم، في حال كان هذا العميل يسكن خارج الولايات المتحدة، أو كان مواطنًا أمريكيًا له اتصالات تتضمن محتويات وِب خاصة بأشخاص خارج الولايات المتحدة. البيانات التي يقال أن بريسم يمكِّن من الحصول عليها تتضمن، رسائل البريد الإلكتروني، ومحادثات الفيديو والصوت، والصور، والاتصالات الصوتية ببرتوكول الإنترنت، وعمليات نقل الملفات، وإخطارات الولوج وتفاصيل الشبكات الاجتماعية.
      كشفت الوثائق المسرّبة أن NSA كانت قادرة على الدخول مباشرة إلى الخوادم الخاصة لكل من
      ...
      23-11-2016, 02:04 AM
    • اضافة مستخدم لينيكس جديد و استعمال نفس اسم الحساب لMySQL و قاعدة بيانات بإسمه ايضًا.
      superlinux
      طبعًا هذه استعملها لفتح حساب جديد لشخص يريد ان يستعمل مجلده المنزل (او home directory بالانجليزي) لحفظ موقع الويب خاصته. يعني هذه طريقة ارجو تكون خفيفة ظريفة لإدارة الخادم عليكم. و هكذا ابدؤوا بيع المواقع عالسريع.

      انا استعمل دبيان 8.0 جسي هنا.

      قبل أي شيء, لتوظيف المجلدات المنزل كلها لتكون محافظ لصفحات ويب لكل مستخدم. نفعّل الوحدة userdir:
      :
      a2enmod userdir
      بس على شان تفهم كيف تحفظ الامر السابق: a2 = apache2 web server , enmod =enable module
      هناك الكثير من الاوامر تخص خادم الويب اباتشي تبدأ بــ a2 .

      ثم حرر بأي محرر نصي مثل vi او pico ملف اعدادات الاباتشي:

      :
      vi /etc/apache2/apache2.conf
      ضع في آخر سطر في الملف على سطر مستقل لوحده ما يلي:
      :
      UserDir public
      UserDir disable root
      الكلمة public_html هو اسم مجلد موجود في المجلد المنزل مباشرة. بمعنى لو كان عندك اسم مستخدم اسمه saleem (سليم) , لازم سليم يضع موقعه على الخادم داخل مسار القرص /home/saleem/public_html/ . و التعل...
      23-11-2016, 02:03 AM
    يعمل...
    X