البحث في الموقع
المحتوى عن 'دليل راسبيري باي'.
-
تُعد سنس هات Sense HAT، التي اسُتخدمت في محطة الفضاء الدولية، لوحةً إلكترونيةً مستقلة ومتعددة الوظائف تُضاف إلى راسبيري باي عبر المنصة GPIO، ومزُوّدة بحسّاسات sensors ومصفوفة عرض ضوئية LED matrix display. تُدعم أجهزة راسبيري باي Raspberry Pi بنوع خاص من اللوحات الإلكترونية المضافة التي تُدعى بالتجهيزات المتصلة من الأعلى Hardware attached on top -أواختصارًا HAT-، والتي يمكنها إضافة أي شيء إلى راسبيري باي باي ابتداءً من المايكروفون مرورًا بالأضواء والمرحّلات Relays وحتى الشاشات. تُعد سنس هات من أكثر تجهيزات هات فائدةً وقد صّممت خصيصًا لمهمة الفضاء أسترو باي Astro Pi، وهي مهمةٌ مشتركةٌ بين مؤسسة راسبيري باي ووكالة فضاء المملكة المتحدة ووكالة الفضاء الأوروبية، والتي كانت قد اطّلعت على تجهيزات هات المُخصصة لراسبيري واختارت سنس هات لتنقلها إلى محطة الفضاء الدولية مع الصاروخ الذي حمل معدات المختبر المداري "Cygnus"؛ ولا تزال سنس هات التي لقبها رواد الفضاء "إد ED" و"إيزي Izzy" تُنفِّذ الشيفرات وتُجري اختبارات علمية يُساهم بها أطفال المدارس من كل أنحاء أوروبا. يمكنك الحصول على التجهيزة سنس هات نفسها لدى معظم موزعي راسبيري باي، كما يمكنك استخدام برمجيات تحاكي عمل سنس هات إن لم تشأ شراء واحدة. تعرف على سنس هات سنس هات هي لوحةٌ إلكترونيةٌ مُضافةٌ متعددة الوظائف تُوصل براسبيري باي، وتضم اللوحة مصفوفةً أبعادها 8X8 من المؤشرات الضوئية الحمراء والخضراء والزرقاء RGB القابلة للبرمجة والتي يمكن التحكم بها لإنتاج أي لون تقريبًا من ملايين الألوان المتاحة، إضافةً إلى متحكّم بمقبض ألعاب Joystick بخمس وجهات وستة حساسات مدمجة، هي: جيروسكوب Gyroscope، الذي يتحسس للتغيُّرات في زاوية الدوران مع الزمن، أو كما يُعرف تقنيًا بالسرعة الزاويّة angular velocity، وذلك بتعقب اتجاه حقل الجاذبية للأرض، وهو الحقل الناتج عن قوة الجاذبية التي تشد الأشياء إلى مركز الأرض. ببساطة، يستشعر الجيروسكوب دوران سنس هات بالنسبة لسطح الأرض ويحدّد سرعة دورانها. مقياس التسارع Accelerometer: خلافًا للجيروسكوب الذي يقيس تغيرات زاوية الحركة بالنسبة لسطح الأرض يقيس مقياس التسارع القوة المسببة لتسارع الحركة في الاتجاهات المختلفة، وستتمكن بقراءة البيانات الناتجة عن الحساسين السابقين من تحديد وجهة سنس هات وكيف تتحرك. مقياس حقل مغناطيسي Magnetometer، الذي يقيس شدة الحقل المغناطيسي، ويساهم أيضًا في تتبُّع حركة سنس هات بقياس شدة الحقل المغناطيسي الأرضي وتقدير جهة الشمال المغناطيسي، كما يُستخدم في الكشف عن الأجسام المعدنية والحقول الكهربائية. دُمجت الحساسات الثلاث السابقة ضمن رُقاقة واحدةٍ تحمل الاسم "‘ACCEL/GYRO/MAG" على لوحة سنس هات. حساس رطوبة، الذي يقيس كمية بخار الماء في الهواء وهذا ما يُعرف بالرطوبة النسبية relative humidity، التي تبدأ بالقيمة 0% (لا رطوبة في الهواء) وصولًا إلى 100% (الهواء مشبعٌ تمامًا ببخار الماء). يمكن استخدام بيانات الحساس لتوقع هطول الأمطار مثلًا. حساس ضغط بارومتري Barometric، الذي يقيس الضغط الجوي. وعلى الرغم من اعتقاد الكثيرين بارتباطه فقط بنشرات الطقس إلا أن له استخدامٌ آخر غير معروف، إذ يمكنه تعقبك إن كنت صاعدًا إلى تلة أو جبل أو نازلًا عنه نظرًا لتغيُّر الضغط الجوي للأرض عند الارتفاع أو الانخفاض عن مستوى سطح البحر. حساس درجة الحرارة لقياس درجة حرارة الوسط المحيط، وقد يتأثر بحرارة لوحة سنس هات، وبالتالي قد تحصل على حرارة أدنى أو أعلى من القراءة الصحيحة إذا كنت تضع باي ضمن حاضنة. لا يوجد حساس حرارة مستقل في سنس هات بل تستخدم حساسا الحرارة المدمجان مع حساسي الرطوبة والضغط، ويمكن لبرنامجك استخدام حساس أو حساسين فقط من هذه المجموعة. تثبيت سنس هات إذا اشتريت لوحة سنس هات، فابدأ بإخراجها من علبتها وتأكد من وجود جميع الأجزاء، وهي اللوحة نفسها وأربعة دعائم معدنية أو بلاستيكية تُعرف باسم المباعدات Spacers وثمانية براغي Screws. قد تجد أيضًا بعض الأرجل المعدنية المشابهة لأرجل GPIO على باي مثبتة على شريط بلاستيكي أسود، ادفع الشريط أسفل لوحة سنس هات في هذه الحالة والأرجل متجهة للأعلى حتى تسمع صوت إطباق. صُممت المباعدات لحماية سنس هات من الانحناء عند استخدام مقبض الألعاب، ورغم أن سنس هات ستعمل دون تثبيت المباعدات، إلّا أنّ استخدامها سيحمي لوحة سنس هات ولوحة راسبيري باي والمنصة GPIO من الضرر. ثبِّت المباعدات بدفع أربعة براغي من أسفل لوحة راسبيري باي إلى الأعلى عبر الثقوب الأربعة في كل زاوية، ثم لُف المباعدات فوق البراغي. ادفع سنس هات بعد التأكد من تطابق موقعها فوق منصة GPIO تمامًا نحو المنصة وحاول أن تجعلها مستويةً قدر الإمكان. ثبِّت سنس هات بواسطة البراغي الأربعة الباقية بإدخالها ضمن الثقوب الموجودة على زوايا سنس هات لتدخل ضمن المباعدات التي ثبتّها مسبقًا. ينبغي أن تكون سنس هات مستويةً تمامًا إن ثبّتها جيدًا ولن تنحني عندما تضغط على أزرار مقبض الألعاب. أعِد وصل باي إلى التغذية الكهربائية وسترى مصفوفة الأضواء على سنس هات وقد أضاءت بنمط ألوان قوس قزح ثم انطفأت. (شكل 1- ظهور نمط شكل قوس قزح عند وصل التغذية الكهربائية) فك البراغي العلوية الأربعة إذا أردت إزالة سنس هات، ثم ارفعها بحذر كي لا تثني أرجل GPIO كونها مرتبطةٌ بإحكام معها (قد تضطر إلى زحزحتها قليلًا بالمفك). أزِل المباعدات عن باي بعد ذلك لتتحرر البراغي السفلية الأربعة. مرحبا سنس هات سنبدأ مثل معظم المشاريع البرمجية بعرض رسالة ترحيب بمستخدمي سنس هات من خلال المصفوفة الضوئية، فإذا كنت ستستخدم مقلّد سنس هات، فعليك تشغيله بالنقر على أيقونة راسبيان والانتقال إلى فئة "برمجة Programming" ثم النقر على مقلّد سنس هات "Sense HAT Emulator". سكراتش ترحب بك شغّل سكراتش 2 من قائمة راسبيان ثم انقر على الفئة "كتل إضافية More Blocks" ضمن لوحة الكتل البرمجية، ثم انقر على زر "إضافة موسّع Add an Extension". اختر الموسّع "Pi SenseHAT"، ثم انقر "OK". ستظهر لك الآن جميع الكتل البرمجية التي تساعدك على التحكم بمختلف ميزات سنس هات بما في ذلك المصفوفة الضوئية وستجد هذه الكتل ضمن الفئة "كتل إضافية More Blocks". شكل 2-7 إضافة الموّسع "Pi SenseHAT" إلى سكراتش 2 اسحب الكتلة إلى منطقة بناء البرنامج، ثم ضع الكتلة تحتها مباشرةً وعدِّل النص، لتقرأ الكتلة عبارة "!Hello World" مع قيمة دوران مساوية 0 وبلونٍ أبيض وخلفية مُطفأة off. هناك طبعًا العديد من النقاط الواجب شرحها في الكتلة السابقة، لكننا سنكتفي الآن بالنقر على الراية الخضراء لتشغيل البرنامج ومراقبة سنس هات أو المقلّد. ستمر أحرف العبارة "!Hello, World" التي تكوّنها الأضواء البيضاء للمصفوفة تباعًا وببطء، كما هو موضح في الشكل التالي. تهانينا، نجح برنامجك في العمل. شكل 3-7 ستتحرك رسالتك خلال مصفوفة المؤشرات الضوئية بعد أن نجحت في عرض الرسالة لا بدّ من إلقاء نظرة على بقية خصائص الكتلة ، فبالإضافة إلى إمكانية تغيير الرسالة، يمكنك تغيير القيمة rotation التي تتحكم بطريقة عرض الرسالة على سنس هات. انقر على السهم الصغير بجوار rotation وغيِّر القيمة إلى 90 لتصبح الكتلة بالصيغة "Hello, World! at rotation 90 in colour white background off". شغِّل البرنامج وستلاحظ أنّ الرسالة ستتحرك من الأسفل إلى الأعلى وليس من اليسار إلى اليمين. شكل 4-7 ستتحرك الرسالة عموديًا الآن أعِد قيمة rotation إلى 0 وغيِّر لون الأضواء التي تعرض الرسالة بالنقر على السهم الصغير بجوار "in colour white"، ثم اختر لونًا من القائمة: أحمر red، أزرق blue، أصفر yellow، سماوي cyan، أرجواني magenta، أبيض white، إضافةً لخيار off لإطفاء الأضواء بدلًا من تشغيلها، وهو مكافئ للون الأسود. اختر حاليًا اللون الأصفر وانقر الراية الخضراء ولاحظ تغيّر لون النص. شكل 5-7 تغيير لون الرسالة المعروضة انقر أخيرًا على السهم الصغير بجوار الخيار background لترى قائمة الألوان السابقة نفسها. لن يتغير لون المؤشرات الضوئية التي تعرض الرسالة هذه المرة بل ألوان مجموعة المؤشرات التي لا تعرضها والتي تُسمى خلفية Background. غيِّر ألوان النص والخلفية لتصل إلى التشكيلة المثالية، فلن تتماشى بعض الألوان مع البعض الآخر. وطالما أنك قادر على تحريك رسالتك عبر الشاشة، يمكنك مشاهدة الحروف كلٌ على حدى. اسحب الكتلة خارج منطقة بناء البرنامج لحذفها واستبدلها بالكتلة ثم انقر الراية الخضراء وسترى الفرق. تعرض المصفوفة حرفًا واحدًا كل مرة في المكان نفسه حتى نغيّر ذلك دون أن تتحرك الحروف عبر المصفوفة أو تختفي. يُطبَّق على هذه الكتلة نفس النظام اللوني المطبَّق على الكتلة السابقة، لذلك حاول تغيير لون الحرف إلى الأحمر. شكل 6-7 يظهر على الشاشة حرف واحد بايثون ترحب بك حمّل أيًا من نمطي بيئة العمل ثوني Thonny البسيط، أو القياسي بالنقر على أيقونة راسبيان، ثم انتقل إلى فئة "برمجة Programming"، ثم انقر أخيرًا على أي من اختصاري ثوني. ستغطي واجهة ثوني واجهة المقلّد إذا كنت تستخدمه، لذلك غيِّر موقع النافذتين حتى تتمكن من عرضهما معًا على الشاشة. ستحتاج إلى إدراج مكتبة SenseHat، إذا كنت ستستخدم بايثون لكتابة برنامجك سواءٌ لتجهيزة سنس هات، أم للمقلّد. اكتب ما يلي في نافذة الشيفرة: from sense_hat import SenseHat sense = SenseHat() للمكتبة دالةٌ بسيطة تقرأ الرسالة وتنسِّقها لتظهر على مصفوفة الأضواء ومن ثم تحرِّكها بلطف. اكتب الشيفرة التالية الآن: sense.show_message("Hello, World!") احفظ برنامجك باسم "Hello Sense HAT"، ثم انقر أيقونة التشغيل "Run"، ستتحرك الرسالة ببطء على شاشة المصفوفة الضوئية. تهانينا، نجح برنامجك في العمل. from sense_hat import SenseHat إلى: from sense_emu import SenseHat وبالعكس. شكل 7-7 تحريك الرسالة عبر شاشة المصفوفة الضوئية. يوجد للدالة ()show_message ميزاتٌ أخرى، لذلك عُد إلى برنامجك وعدّل الدالة لتصبح على النحو التالي: sense.show_message("Hello, World!", text_colour=(255, 255, 0), back_colour=(0, 0, 255), scroll_speed=(0.05)) تُعرف هذه التعليمات التي تفصل بينها فاصلة "," داخل قوسي الدالة باسم المعاملات Parameters، وهي تتحكم بعمل الدالة من نواحٍ عدة، ويُعد ()=scroll_speed أبسط هذه المعاملات، إذ يتحكم بسرعة عرض الرسالة على الشاشة؛ فلو كانت قيمته 0.05، فستتحرك الرسالة بسرعة مضاعفة عن السرعة الاعتيادية، وكلما زادت القيمة كلما قلت السرعة. أما المعاملان ()=text_colour و ()=back_colour (مكتوبان وفق التهجئة البريطانية على خلاف تعليمات بايثون الأخرى) فيحددان لون النص ولون الخلفية، لكنهما لا يستخدمان أسماء الألوان بل يستخدمان النظام اللوني الثلاثي الذي تحدد فيه نسب الألوان الأساسية الأحمر ثم الأخضر ثم الأزرق واختصارًا RGB، إذ يمثل الرقم الأول من الثلاثية كمية اللون الأحمر في اللون المحدد والتي تأخذ القيم من 0 (لا لون أحمر) حتى 255 (الحد الأقصى للون الأحمر)، ويمثل الرقم الثاني كمية اللون الأخضر، والثالث كمية اللون الأزرق. انقر على أيقونة التشغيل "Run" وراقب سنس هات. لاحظ كيف تتحرك الرسالة التي تظهر بلون أصفر على خلفية زرقاء بسرعة أكبر. بدِّل قيم المعاملات السابقة لتحصل على طريقة العرض الملائمة. شكل 8-7 تغيير لون النص والخلفية. يمكنك استخدام المتغيرات لإعطاء أسماء مناسبة للون الذي تريده بدلًا من استخدام نظام RGB. لتجربة ذلك اكتب الشيفرة التالية قبل سطر الدالة ()sense.show_message: yellow = (255, 255, 0) blue = (0, 0, 255) ثم عدًل سطر الدالة نفسها ليصبح على النحو التالي: sense.show_message("Hello, World!", text_colour=(yellow), back_ colour=(blue), scroll_speed=(0.05)) إذا نقرت على أيقونة التشغيل مجددًا فلن تلحظ أية تغيرات، وستبقى رسالتك بلون أصفر وخلفية زرقاء وكل ما هناك أنك استخدمت المتغيرات لجعل اللون الذي اخترته مقروءًا بدلًا من استخدام مجموعة أرقام؛ وهكذا يمكن تعريف العدد الذي تشاء من الألوان ومنحها أسماءً، فيمكنك مثلًا تسمية اللون (255,0,0) باسم "أحمر red" واللون (255,255,255) باسم "أبيض white" وسيكون "الأسود black" هو حتمًا اللون (0,0,0). يمكنك كذلك عرض الرسالة مثل حروف متلاحقة واحدًا تلو الآخر بدل تحريكها، ولتنفيذ ذلك احذف سطر التعليمة: sense.show_message() واستبدله بالشيفرة التالية: sense.show_letter("Z") انقر على أيقونة التشغيل لترى الحرف "Z" على شاشة سنس هات، إذ سيبقى الحرف مكانه هذه المرة، فلا تتحرك الحروف المفردة بحد ذاتها على الشاشة. يمكنك كذلك التحكم في لون وخلفية الحرف من خلال الدالة ()sense.show_letter وباستخدام معاملات مشابهةٍ لمعاملات الدالة ()sense.show_message، جرّب ذلك. شكل 9-7 إظهار حرف وحيد الرسم بالأضواء لا تُستخدم المصفوفة الضوئية في سنس هات لعرض الرسائل فقط، بل يمكنك عرض الصور أيضًا، إذ يُعامل كل مؤشر ضوئي في المصفوفة مثل بكسل pixel (بكسل= عنصر-صورة أو بكسل كما هو شائع) مفرد في الصورة التي تختارها، وبالتالي ستكون قادرًا على إحياء برامجك بالصور وحتى الرسوم المتحركة. ولكي تتمكن من إظهار الرسوميات والصور، لا بدّ أن تكون قادرًا على تغيير كل مؤشر ضوئي على حدى، لذلك علينا أولًا فهم طريقة تنظيم المؤشرات الضوئية في مصفوفة سنس هات لكتابة البرنامج الصحيح الذي يضيء ويطفئ المؤشر الضوئي المطلوب. شكل 10-7 نظام الإحداثيات الخاص بالمصفوفة الضوئية. تضم المصفوفة ثمانية مؤشرات ضوئية في كل صف وثمانية في كل عمود، وتُعَد المؤشرات كما هو الحال في معظم لغات البرمجة إذ تبدأ من 0 وتنتهي عند الرقم 7، وسيكون المؤشر الضوئي في الزاوية اليسارية العليا في الصف 0 والعمود 0 أي إحداثياته (0,0)، إذ يمثِّل الإحداثي الأول قيمة X التي تشير إلى الأعمدة والإحداثي الثاني قيمة Y التي تشير إلى الأسطر. وستكون إحداثيات المؤشر في الزاوية اليمينية السفلية بناء على هذه المنظومة (7,7) وهكذا. يمكنك ملاحظة المؤشر الضوئي الأزرق مثلًا المبين في الشكل السابق عند الإحداثيات (0,2) والأحمر عند الإحداثيات (4,7). قد يفيدك رسم مخطط للمؤشرات الضوئية على ورقة مقسمة عندما تخطط لعرض صورة ما على شاشة سنس هات، كما يمكنك الاستعانة بالجداول الإلكترونية spreadsheets لتخطيط طريقة عرض الصورة مثل برنامج ليبر أوفيس كالك LibreOffice Calc. عرض الصور باستخدام سكراتش ابدأ مشروعًا جديدًا في سكراتش بعد حفظ مشروعك السابق إن أردت. حمّل الموسِّع "PI Sense HAT" من خلال الفئة "كتل إضافية More Blocks"، ولا تنس أن تعيد هذه الخطوة في كل مرة تنشئ فيها مشروعًا جديدًا يستخدم سنس هات وإلا لن تظهر الكتل التي تتحكم بهذه التجهيزة. اسحب الكتلة إلى منطقة بناء البرنامج، ثم ضع تحتها مباشرةً الكتلة . انقر على الراية الخضراء دون أن تنظر مباشرةً إلى المصفوفة الضوئية لأن المؤشرات ستضيء بلون أبيض لامع قد لا يكون النظر إليها مباشرة أمرًا مريحًا. شكل 11-7 لا تنظر مباشرةً إلى مصفوفة الأضواء عندما تضيء بلون أبيض لامع انقر على السهم الصغير بجوار الخيار white واختر لونًا مختلفًا، ثم أعد تشغيل البرنامج. اختر من جديد الخيار off بدلًا من اختيار لون محدد، ثم شغِّل البرنامج مجددًا لتُطفأ كل الأضواء في هذه الحالة. يمكنك استخدام نظام RGB لمزج اللون المطلوب إذا أردت لونًا خاصًا بك. لهذا اسحب الكتلة خارج منطقة بناء البرنامج واستبدلها بالكتلة انقر على الراية الخضراء وستضيء المؤشرات بلون أبيض لامع من جديد. يمكنك الآن تصميم اللون الذي تريد بتحديد كميات اللون الأحمر والأخضر والأزرق في الكتلة السابقة بعد الخيارات R و G و B على التوالي. يمكن أن تحمل أي كمية قيمًا من 0 حتى 255. عدّل الكتلة لتصبح ثم انقر الراية الخضراء لتضيء المصفوفة الآن بلون أخضر لامع. شكل 12-7 ستضيء المصفوفة كلها باللون الأخضر اللامع. جرب قيمًا مختلفة لمنظومة RGB لتحصل على اللون الذي تريده وسجل هذه القيم لاستخداماتك المستقبلية. ولكي تتمكن من عرض صورةٍ ما، لا بدّ أن تكون قادرًا على التحكم بكل مؤشر ضوئي على حدى. لتنشئ مثلًا نسختك عن البرنامج الذي يعرضه الشكل 10-7، الذي يُضاء فيه مؤشرين ضوئيين لبيكسلين باللون الأحمر والأزرق، غيِّر الكتلة إلى ، ثم اسحب كتلتي لتكونا تحتها مباشرةً وغير قيمهما لتكونا كما في الشكل التالي: انقر على الراية الخضراء لتشاهد الضوئين الأحمر والأزرق كما في الشكل 10-7. تهانينا، تستطيع الآن التحكم بكل مؤشر ضوئي على نحوٍ مستقل. عدّل الكتل السابقة كما في التسلسل التالي وأضف الكتل المناسبة لتحصل على البرنامج التالي: حاول أن تتوقع الصورة التي ستظهر على المصفوفة الضوئية بناءً على الإحداثيات التي استخدمتها في كتل التسلسل السابق قبل أن تنقر على الراية الخضراء، ثم شغّل البرنامج لترى إن كنت على حق. على الرغم من إمكانية استخدام كتل في عرض الصور البسيطة، لكن موسِّع سنس هات الموجود في النسخة سكراتش 2 لن يكون مناسبًا لعرض صور معقدة أو رسوميات متحركة. لذلك فكِّر في الانتقال إلى بايثون عند كتابة برنامجك. عرض الصور باستخدام بايثون ابدأ برنامجًا جديدًا في ثوني واحفظه باسم "Sense HAT Drawing" ثم اكتب الشيفرة التالية في نافذة الشيفرة وانتبه إلى استبدال sense_hat بمقابلتها sense_emu إذا كنت ستستخدم المقلّد: from sense_hat import SenseHat sense = SenseHat() وتذكر أنك ستحتاج كلا سطري الشيفرة السابقين لاستخدام سنس هات. أضف بعد ذلك السطر التالي: sense.clear(255, 255, 255) انقر على أيقونة التشغيل Run دون النظر مباشرةً إلى المصفوفة الضوئية لأنها ستضيء بأكملها باللون الأبيض اللامع عند تشغيل البرنامج. شكل 13-7 لا تنظر مباشرة إلى مصفوفة الأضواء عندما تضيء بلون أبيض لامع صُممت الدالة ()sense.clear لإلغاء برمجة كل المؤشرات الضوئية لكنها تقبل أيضًا معاملات لونية وفق نظام RGB، أي يمكنك تغيير لون المصفوفة إلى أي لون تريد. عدّل الشيفرة في السطر الأخير على النحو التالي: sense.clear(0, 255, 0) انقر على أيقونة التشغيل Run وسيتحول لون سنس هات إلى الأخضر اللامع. جرِّب ألوانًا مختلفة أو استخدم المتغيرات التي سمّيتها سابقًا بأسماء الألوان في برنامجك "Hello World" لتبسيط الأمر أكثر. شكل 14-7 ستضيء المصفوفة الضوئية باللون الأخضر اللامع. لإطفاء الأضواء، استخدم قيمة RGB الموافقة للون الأسود وهي (0,0,0)، كما يمكنك تنفيذ ذلك بطريقة أسهل وذلك بتعديل السطر الأخير من برنامجك ليصبح على النحو التالي: sense.clear() ستطفئ الدالة ()sense.clear أضواء سنس هات إن كانت أقواسها فارغة، وهذا ما ستحتاجه لإلغاء برمجة المؤشرات الضوئية بأكملها. شكل 15-7 استخدم الدالة sense.clear لإطفاء أضواء مصفوفة سنس هات. لتنشئ نسختك عن البرنامج الذي يعرضه الشكل 10-7 والمكوّن من مؤشرين ضوئيين محددين يضيئان باللونين الأحمر والأزرق، أضِف الشيفرة التالية مباشرةً بعد الدالة ()sense.clear: sense.set_pixel(0, 2, (0, 0, 255)) sense.set_pixel(7, 4, (255, 0, 0)) يمثِّل المعامل الأول من الدالة ()sense.set_pixel الإحداثي X (رقم العمود) لمنظومة إحداثيات المصفوفة، ويمثِّل المعامل الثاني الإحداثي Y، بينما يحدد الإحداثي الثالث لون المؤشر الضوئي بطريقة RGB. انقر على أيقونة التشغيل Run لترى تنفيذ الشيفرة، ولاحظ كيف ستضيء المصفوفة على نحوٍ مشابه لما يعرضه الشكل 10-7. احذف الآن السطرين السابقين واكتب الشيفرة التالية: sense.set_pixel(2, 2, (0, 0, 255)) sense.set_pixel(4, 2, (0, 0, 255)) sense.set_pixel(3, 4, (100, 0, 0)) sense.set_pixel(1, 5, (255, 0, 0)) sense.set_pixel(2, 6, (255, 0, 0)) sense.set_pixel(3, 6, (255, 0, 0)) sense.set_pixel(4, 6, (255, 0, 0)) sense.set_pixel(5, 5, (255, 0, 0)) تأمل إحداثيات المؤشرات الضوئية في الشيفرة السابقة وتوقع نتيجتها قبل تشغيل البرنامج، ثم تحقق من ذلك بعد التشغيل. وكما ترى سيكون رسم أي لوحة بتكرار استدعاء واحد للدالة ()sense.set_pixel بطيئًا، ومن الأفضل تغيير عدة بكسلات في الوقت نفسه. لهذا احذف كل الأسطر التي تستدعي الدالة ()sense.set_pixel واكتب الشيفرة التالية: g = (0, 255, 0) b = (0, 0, 0) creeper_pixels = [ g, g, g, g, g, g, g, g, g, g, g, g, g, g, g, g, g, b, b, g, g, b, b, g, g, b, b, g, g, b, b, g, g, g, g, b, b, g, g, g, g, g, b, b, b, b, g, g, g, g, b, b, b, b, g, g, g, g, b, g, g, b, g, g ] sense.set_pixels(creeper_pixels) سنشرح الشيفرة السابقة لاحقًا لكن ابدأ بتشغيل البرنامج لنرى إن استطعت تمييز الشكل الذي ستعرضه سنس هات. لاحظ كيف يُنشئ أول سطرين متغيرين نسند إليهما قيم RGB المحددة للونين الأخضر g والأسود b لتسهيل كتابة وقراءة الشيفرة؛ وتنشئ كتلة الشيفرة التي تليهما متغيرًا يضم بين قوسين مربعين ألوان جميع بكسلات الشاشة الضوئية تفصل بينها الفاصلة ",". لاحظ كيف استخدمنا المتغيرين السابقين g و b بدلًا من الأرقام في تحديد الألوان وسيظهر حلزون نتيجة تنفيذ الشيفرة كما في الشكل 16-7. تقبل الدالة (sense.set_pixels(creeper_pixels المتغير creeper_pixels مثل معامل، ثم ترسم المصفوفة كاملةً في اللحظة نفسها، وهذا أسهل طبعًا من رسم كل بكسل لوحده. شكل 16-7 عرض صورة على المصفوفة الضوئية. من الممكن أيضًا تدوير أو قلب الصورة لعرض الصورة بالشكل الصحيح عند تدوير سنس هات، أو لتصميم رسم متحرك بسيط انطلاقًا من صورة غير متناظرة. ابدأ بتعديل قيم المتغير creeper_pixels لنغمض عين الحلزون على النحو التالي: creeper_pixels = [ g, g, g, g, g, g, g, g, g, g, g, g, g, g, g, g, g, g, g, g, g, b, b, g, g, g, g, g, g, b, b, g, g, g, g, b, b, g, g, g, g, g, b, b, b, b, g, g, g, g, b, b, b, b, g, g, g, g, b, g, g, b, g, g ] انقر على Run وسترى عين الحلزون وقد أغمضت كما هو موضح في الشكل التالي. ولإنشاء رسمٍ متحرك انتقل إلى بداية برنامجك وأضِف السطر التالي: from time import sleep عُد إلى آخر البرنامج وأضف ما يلي: while True: sleep(1) sense.flip_h() انقر على زر التشغيل Run وسترى الحلزون وهو يغلق ويفتح عينيه بالتناوب. شكل 17-7 رسم متحرك من إطارين تقلب الدالة ()flip_h الصورة وفق محورها الأفقي، بينما تقلبها الدالة ()flip_v وفق محورها العمودي؛ وتستطيع أيضًا تدوير الصورة بزوايا 0 و 90 و 180 و 270 ثم العودة إلى 0 درجة باستخدام الدالة (sense.set_rotation(90 بعد استبدال 90 بالزاوية المطلوبة. حاول أن تستخدم هذه الدالة ليدور الحلزون بدلًا من إغماض عينيه> تحسس العالم من حولك من الممتع العمل مع المصفوفة الضوئية لسنس هات، لكن تظهر قوتها الحقيقية عند استخدام حساساتها المختلفة، إذ تتيح لك تلك الحساسات استشعار المحيط من درجة الحرارة إلى الحركة ومن ثم استخدام هذه المعلومات في برامجك بالطريقة التي تريد. تحسس البيئة المحيطة تأخذ حساسات الضغط والحرارة والرطوبة لسنس هات البيانات من البيئة المحيطة بها، لذلك فهي حساسات بيئية. استشعار البيئة المحيطة باستخدام سكراتش ابدأ برنامجًا جديدًا في سكراتش بعد حفظ البرنامج السابق إن أردت، ثم أضف الموّسع "Sense HAT" إلى فئة "كتل إضافية More Blocks". اسحب الكتلة إلى منطقة بناء البرنامج، وضع تحتها الكتلة . من المفيد تنفيذ هاتين الخطوتين في بداية برنامجك لتتأكد من عدم عرض أي شيء على المصفوفة الضوئية قد يكون عالقًا من برنامج سابق. اسحب بعد ذلك الكتلة الموجودة في الفئة "مظهر Look"، وضعها مباشرةً تحت الكتل السابقة. لقراءة الضغط الجوي، ابحث عن الكتلة في فئة "كتل إضافية More Blocks"، ثم اسحبها وأفلتها مكان الكلمة "!Hello" في الكتلة . انقر على الراية الخضراء، وستبلغك شخصية القط القراءة الحالية للضغط الجوي من حساس الضغط بالميلي بار، وستختفي الرسالة بعد ثانيتين. حاول أن تنفخ فوق سنس هات (أو تزيد قيمة الضغط عبر المحاكي) وأن تشغل البرنامج بالتوازي فسترى قراءة أعلى هذه المرة. شكل 18-7 عرض قراءة حساس الضغط ولكي نعرض مستوى الرطوبة بدلًا من الضغط، احذف الكتلة واستبدلها بالكتلة . شغِّل البرنامج الآن وسترى قيمة مستوى الرطوبة في الغرفة. جرّب كذلك أن تنفخ فوق سنس هات (أو تزيد قيمة الرطوبة عبر المحاكي) وأن تشغّل البرنامج بالتوازي فسترى قراءة أعلى هذه المرة لأن نفسك رطبٌ جدًا. شكل 19-7 عرض قراءة حساس الضغط إذا أردت الحصول على درجة الحرارة احذف الكتلة واستبدل بها الكتلة ، ثم شغِّل البرنامج مجددًا وستظهر درجة الحرارة بالدرجات المئوية (سلزيوس). قد لا تكون الدرجة المعروضة نفسها درجة حرارة الغرفة الفعلية، إذ تنتج راسبيري باي حرارةً أثناء عملها فتسخِّن سنس هات وحساساتها. شكل 20-7 عرض قراءة حساس الحرارة تحسس البيئة المحيطة باستخدام بايثون أنشئ برنامجًا جديدًا في ثوني واحفظه باسم "Sense HAT Sensors"، ثم اكتب الشيفرة التالية منتبهًا إلى استخدام المكتبة sense_emu بدلًا عن sense_hat عند استخدام المقلِّد: from sense_hat import SenseHat sense = SenseHat() sense.clear() من المفيد تنفيذ الأمر ()sense.clear في بداية برنامجك لتتأكد من عدم عرض أي شيء على المصفوفة الضوئية قد يكون عالقًا من برنامجٍ سابق. اكتب الأمر التالي لقراءة بيانات حساس الضغط: pressure = sense.get_pressure() print(pressure) انقر على أيقونة التشغيل Run وسترى قراءة الحساس مطبوعةً في نافذة المفسِّر بالميلي بار. حاول أن تنفخ فوق سنس هات، أو تزيد قيمة الضغط عبر المحاكي، وأن تشغِّل البرنامج بالتوازي فسترى قراءة أعلى هذه المرة. شكل 21-7 إظهار قراءة أعلى للضغط للانتقال إلى قراءة حساس الرطوبة، احذف السطرين السابقين ثم اكتب ما يلي: humidity = sense.get_humidity() print(humidity) انقر على أيقونة التشغيل Run، وسترى قراءةً أخرى في نافذة المفسّر تمثِّل الرطوبة النسبية بالنسبة المئوية. جرّب كذلك أن تنفخ فوق سنس هات (أو تزيد قيمة الرطوبة عبر المحاكي) وأن تشغل البرنامج بالتوازي فسترى قراءةً أعلى هذه المرة، فنفسك رطبٌ جدًا. شكل 22-7 إظهار قراءة حساس الرطوبة. ولتعرض قراءة حساس الحرارة، أزِل آخر سطرين واستبدلهما بالشيفرة التالية: temp = sense.get_temperature() print(temp) شغِّل البرنامج مجددًا وستظهر درجة الحرارة بالدرجات المئوية (سلزيوس). قد لا تكون الدرجة المعروضة نفسها درجة حرارة الغرفة الفعلية، إذ تنتج راسبيري باي حرارةً أثناء عملها فتسخن سنس هات وحساساتها. شكل 20-7 عرض قراءة حساس الحرارة تعطي سنس هات درجة الحرارة عادة بناءً على قراءة حساس الحرارة المدمج ضمن حساس الرطوبة، لكن إذا أردت قراءة الحساس الآخر المُدمج مع حساس الضغط استعمل الدالة ()sense.get_temperature_from_pressure، وقد تستخدم القراءتين معًا ثم تأخذ متوسطهما لدقة أفضل، لهذا احذف السطرين الأخيرين واكتب: htemp = sense.get_temperature() ptemp = sense.get_temperature_from_pressure() temp = (htemp + ptemp) / 2 print(temp) انقر على أيقونة التشغيل Run، وسترى قيمة درجة الحرارة المأخوذة مثل متوسطٍ لقراءتي الحساسين ضمن نافذة المفسِّر، وإذا كنت تستخدم المقلّد فستحصل على النتيجة نفسها في الحالات الثلاث. شكل 24-7 درجة الحرارة بناء على قراءتي كلا الحساسين استشعار الحركة يُشكّل الجيروسكوب وحساسا التسارع والحقل المغناطيسي ما يُسمى بوحدة قياس العطالة inertial measurement unit -أواختصارًا IMU-. وعلى الرغم من أنّ قراءة هذه الحساسات ستُؤخذ تقنيًا من البيئة المحيطة، مثل شدة الحقل المغناطيسي في الجوار، إلا أنها تُستخدم عادةً لاستشعار حركة سنس هات، إذ تظهر قيمة IMU مثل مجموعة قراءات لعدّة حساسات تسمح لك بعض لغات البرمجة بقراءة كل منها بصورةٍ مستقلة، بينما تعطيك بعضها الآخر قراءةً مشتركةً لكل الحساسات. ولكي تتعامل مع IMU، لا بدّ من فهم طبيعة حركة الأشياء. تتحرك سنس هات وباي المتصلة معها في فراغ ثلاثي الأبعاد يحدده معلم إحداثي ثلاثي المحاور كما يلي: المحور X وتُحدد عليه الحركة الجانبية من طرف إلى طرف. المحور Y وتُحدد عليه الحركة للأمام والخلف. المحور Z وتُحدد عليه الحركة للأعلى والأسفل. ويمكن لباي الدوران حول هذه المحاور، لكن وصف هذه الحركات سيتغير قليلًا؛ إذ يُدعى الدوران حول المحور X "تدحرج roll" وحول المحور Y "تقلّب pitch" وحول المحور Z "فتل Yaw". فعندما تدوّر سنس هات حول محورها القصير "Y" فأنت تُقلّبها، وعندما تدور حول المحور الطولي "X" تدحرجها، وتفتلها عندما تدور بوضعها الأفقي على الطاولة. فكّر بالأمر مثل طائرة، إذ تتقلَّب الطائرة بحلقة دائرية وهي تقلع حتى تصل إلى الارتفاع المطلوب وتتدحرج عندما تدور دوران النصر، وتفتل عندما تريد الدوران لتغيير الاتجاه. شكل 25-7 المحاور الفراغية لتحديد قيمة MUI لسنس هات استشعار الحركة باستخدام سكراتش ابدأ برنامجًا جديدًا وحمّل موسِّع سنس هات، ثم اسحب الكتلة إلى منطقة بناء البرنامج، وضع تحتها الكتلة ، ثم غيّرها بالنقر على الزر الصغير بجوار الكلمة "white" إلى . اسحب الكتلة إلى أسفل التسلسل السابق وضع داخلها الكتلة . ستحتاج إلى كتل ضم join blocks لإظهار قراءات المحاور الثلاث (تدحرج- تقلب- فتل)، إضافةً إلى كتل سنس هات الموافقة. تذكر إضافة فواصل ومسافات فارغة أثناء ترتيب كتل الضم لتسهيل قراءة النتيجة. انقر على الراية الخضراء لتشغيل البرنامج، ثم حاول تدوير سنس هات وباي بحذر كي لا تزيح الكابلات. ستظهر قيم المحاور الثلاث وتتغير باستمرار مع تغير وضع سنس هات. شكل 26-7 عرض قيم التقلب pitch والتدحرج roll والفتل yaw استشعار الحركة باستخدام بايثون ابدأ برنامجًا جديدًا في ثوني واحفظه باسم "Sense HAT Movement"، ثم اكتب الشيفرة التالية منتبهًا إلى استخدام المكتبة sense_emu بدلًا عن sense_hat عند استخدام المقلد: from sense_hat import SenseHat sense = SenseHat() sense.clear() لاستخدام معلومات عن IMU في تحديد الوجهة الحالية لسنس هات وفقًا لمحاورها الثلاث، اكتب الشيفرة التالية: orientation = sense.get_orientation() pitch = orientation["pitch"] roll = orientation["roll"] yaw = orientation["yaw"] print("pitch {0} roll {1} yaw {2}".format(pitch, roll, yaw)) انقر على أيقونة التشغيل Run وسترى قراءات اتجاه سنس هات على المحاور الثلاث. حاول تدوير سنس هات ثم انقر على أيقونة التشغيل مجددًا وستلاحظ تغيُّر القراءات بما يعكس الوجهة الجديدة. عرض قيم التقلب pitch والتدحرج roll والفتل yaw يمكن أن يسهم قياس MUI بأكثر من تحديد وجهة سنس هات فهو قادرٌ على اكتشاف الحركة. وللحصول على قراءة دقيقة للحركة، لا بدّ من قراءة MUI باستمرار من خلال حلقات، فلن تعطيك قراءة واحدة أية فائدة تُذكر في استشعار الحركة على خلاف تحديد الوجهة. احذف كل ما يأتي بعد الدالة ()sense.clear واكتب التالي: while True: acceleration = sense.get_accelerometer_raw() x = acceleration['x'] y = acceleration['y'] z = acceleration['z'] لدينا الآن ثلاثة متغيرات لتخزين قراءات مقياس التسارع على المحاور الثلاث: X للحركة يمينًا ويسارًا، Y للحركة أمامًا وخلفًا، Z للأعلى والأسفل. من الصعب أحيانًا قراءة بيانات مقياس التسارع، لذلك اكتب الشيفرة التالية لتدوير الرقم إلى أقرب عدد صحيح وبذلك يسهل فهمها: x = round(x) y = round(y) z = round(z) اطبع النتائج بعد ذلك كما يلي: print("x={0}, y={1}, z={2}".format(x, y, z)) انقر على أيقونة التشغيل وسترى قراءات مقياس التسارع مطبوعةً على شاشة المفسِّر، لكنه سيستمر في طباعة الأرقام بلا توقُّف وعليك النقر على أيقونة "Stop" لإيقاف البرنامج. شكل 28-7 قراءات مقياس التسارع مقرّبة إلى أقرب رقم صحيح. نلاحظ أن مقياس التسارع يعطي القراءة 1.0 للجاذبية (1G) على أحد المحاور (المحور Z إذا كانت باي وسنس هات أفقيتان على الطاولة) على الرغم من أن سنس هات لا تتحرك، والسبب وراء ذلك هو أن الحساس يستشعر الجاذبية الأرضية التي تشد سنس هات نحو مركز الأرض. حاول رفع سنس هات مع باي للأعلى بحذر أثناء عمل البرنامج، لكن انتبه كي لا تُزاح الكابلات. أمِل اللوحتان بحيث يتجّه منفذا الشبكة المحلية والناقل USB نحو الأرض فستتغير القراءة لتصبح 0G على Z و 1G على X، وستتحول القراءتان على X و Z إلى 0G وعلى Y إلى 1G عندما تميل اللوحتان بحيث يتجه منفذ HDMI لباي نحو الأرض. إذا حاولت أن تميلها بحيث يتجه منفذ HDMI نحو السقف ستتغير القراءة على Y لتصبح 1G-. وبمعرفة أن الجاذبية الأرضية هي تقريبًا 1G وفهم المحاور الفراغية بالطريقة التي عرّفناها سابقًا، ستتمكن من استعمال قراءات مقياس التسارع لتحديد توجّه اللوحة نحو الأسفل والأعلى، وستتمكن أيضًا من اكتشاف الحركة. حاول أن تهزّ اللوحتين وراقب الأرقام في نافذة المفسِّر، وكلّما زادت شدة الاهتزاز كلما زادت قراءة مقياس التسارع. عندما تستخدم الدالة ()sense.get_accelerometer_raw، فأنت تخبر سنس هات في هذه الحالة أن تعطِّل الحساسين الباقيين في IMU (الجيروسكوب ومقياس الحقل المغناطيسي) وتعيد قراءات مقياس التسارع فقط، ويمكن طبعًا فعل نفس الشيء عند استخدام أي حساسٍ آخر. استبدل السطر: acceleration = sense.get_accelerometer_raw() بالسطر: orientation = sense.get_gyroscope_raw() غيّر الكلمة acceleration في الأسطر الثلاثة داخل الحلقة إلى orientation، ثم انقر أيقونة التشغيل لترى قيم توجه سنس هات على المحاور الثلاث مدوّرةً إلى أقرب عدد صحيح. ستأتيك البيانات هذه المرة من الجيروسكوب فقط دون استخدام مقياسي الحقل المغناطيس والتسارع، ويفيد ذلك في تحديد وجهة سنس هات إن تحركت على ظهر روبوت مثلًا دون الحاجة لأخذ تعقيدات الحركة بالحسبان أو استخدامها في جوار مصدر قوي للإشعاع المغناطيسي. لاستخدام مقياس الحقل المغناطيسي، أوقف البرنامج ثم احذف كل أسطر برنامجك ما عدا الأربعة الأولى منه، ثم اكتب الشيفرة التالية تحت بداية الحلقة while True: north = sense.get_compass() print(north) شغِّل برنامجك وسترى اتجاه الشمال المغناطيسي وقد طُبع في نافذة المفسِّر. دوّر سنس هات بلطف وستلاحظ تغيرات القراءة نظرًا لانحراف توجهها بالنسبة للشمال المغناطيسي. لقد نجحت في صناعة بوصلة. قرِّب مغناطيسًا (يمكنك استخدام المغانط التي تُلصق على البرادات) من سنس هات وراقب تغيّر قراءة مقياس الحقل المغناطيسي. التحكم بمقبض الألعاب يتواجد في الزاوية اليمينية السفلية لسنس هات، وقد تراه صغيرًا لكنه فعّال جدًا وقادرٌ على تمييز إشارات الدخل من أربعة جهات (أمام وخلف ويمين ويسار)، كما يمتلك قناة دخل خامسة تصل إليها بالضغط على المقبض في منتصفه وكأنه زر الكبس في المنتصف. تحذير: لا ينبغي استخدام مقبض سنس هات ما لم تستخدم المباعدات التي تحدثنا عن تثبيتها سابقًا، لأن الضغط على المقبض سيثني سنس هات مما يسبب في تضررها وتضرر منصة GPIO معها. التحكم بمقبض الألعاب باستخدام سكراتش ابدأ برنامجًا جديدًا وحمّل موسِّع سنس هات، ثم اسحب الكتلة إلى منطقة بناء البرنامج وضع تحتها الكتلة واضبط الخيار "white" على "off". يرتبط مقبض سنس هات في سكراتش scratch مع مفاتيح الأسهم في لوحة المفاتيح، فعندما تضغط زر "أمام" في المقبض فهذا أمرٌ مماثل لضغط مفتاح السهم "أعلى" وكذلك الأمر عند ضغط زر المقبض اليساري فهذا مماثلٌ لضغط مفتاح السهم اليساري في لوحة المفاتيح وهكذا، بينما يطابق ضغط المقبض في منتصفه مثل زر الكبس ضغط المفتاح "Enter" في لوحة المفاتيح. تحذير: لا يتوفر مقبض الألعاب سوى على سنس هات الفيزيائية، فإذا كنت تستخدم المقلِّد فعليك بمفاتيح الأسهم على لوحة المفاتيح لمحاكاة المقبض. نظرًا للارتباط السابق، سنستعمل كتل الأحداث نفسها التي نستخدمها لقراءة مُدخلات لوحة المفاتيح. اسحب الآن الكتلة إلى منطقة بناء البرنامج، ثم غيّر الخيار فيها إلى "up arrow" بدلًا من "space". اسحب الكتلة وضعها تحت الكتلة السابقة حتى نرى نتيجة هذا البرنامج. تحرك إلى الأمام من خلال المقبض وستشاهد القط يحييك بالعبارة "!Hello". عدّل العبارة السابقة لتصبح "!Joystick Up" ثم أضف كتل أحداث Events وكتل مظهر Looks إلى برنامجك حتى يعطي الضغط على أي زر من أزرار المقبض الخمسة نتيجة على النحو التالي: اضغط على أزرار المقبض بكل الاتجاهات لكي ترى نتيجة عملك. التحكم بمقبض الألعاب باستخدام بايثون ابدأ برنامجًا جديدًا في ثوني واحفظه باسم "Sense HAT Joystick"، ثم اكتب الأسطر الثلاث التي تهيئ سينس هات وتطفئ أضواء المصفوفة: from sense_hat import SenseHat sense = SenseHat() sense.clear() استخدم تاليًا حلقةً لا نهائية while True وأخبر بايثون أن ينصت ضمنها إلى أحداث الدخل الناتجة عن الضغط على أزرار المقبض. سيزيح ثوني الشيفرة تلقائيًا بمسافة بادئة داخل الحلقة: while True: for event in sense.stick.get_events(): أضِف أخيرًا الشيفرة التي تنفذ شيئًا عند ضغط زر المقبض المحدد داخل حلقة for، وسيزيحها ثوني تلقائيًا أيضًا بمسافة بادئة: print(event.direction, event.action) انقر على أيقونة التشغيل Run، واضغط على الأزرار المختلفة لمقبض سنس هات وسترى أسماء الجهات التي تحركت نحوها قد طُبعت في نافذة المفسِّر. وستلاحظ أيضًا أن هناك حدثان مرتبطان بكبسةٍ واحدةٍ على أحد أزرار المقبض الأول عند الضغط على الزر والآخر عند تحريره. يمكن الاستفادة من هذا برمجيًا كما لو كنت تبرمج حركةً لشخصيةٍ في لعبة، بحيث تتقدم باتجاه محدد عند الضغط على زر ثم تتوقف بمجرد أن تحرره. يمكن استخدام المقبض لتفعيل دوال بدلًا من أن يكون استخدامها محدودًا ضمن حلقة "for". احذف كل الأسطر التي تلي الدالة ()sense.clear واكتب الشيفرة التالية: def red(): sense.clear(255, 0, 0) def blue(): sense.clear(0, 0, 255) def green(): sense.clear(0, 255, 0) def yellow(): sense.clear(255, 255, 0) تحوّل هذه الدوال المصفوفة الضوئية إلى لون وحيد (أحمر أو أزرق أو أخضر أو أصفر) لتسهيل طريقة عرض برنامجك. ولكي تستدعي هذه الدوال لا بُد من تحديد أي دالة تتوافق مع أي زرٍ للمقبض، لذلك اكتب الشيفرة التالية: sense.stick.direction_up = red sense.stick.direction_down = blue sense.stick.direction_left = green sense.stick.direction_right = yellow sense.stick.direction_middle = sense.clear يحتاج البرنامج الآن إلى حلقة لا نهائية تُعرف بالحلقة الأساسية التي تُبقي البرنامج مستمرًا في عمله لمراقبة الدخل القادم إلى باي عبر مقبض سنس هات بدلًا من تنفيذ الشيفرة مرةً واحدةً ثم توقف البرنامج. اكتب الشيفرة التالية: while True: pass انقر على أيقونة التشغيل وحاول التحكم بالمقبض وستشاهد تألق المصفوفة الضوئية بألوان مختلفة، ولإطفاء الأضواء اضغط على المقبض ككل لأن الضغط على منتصفه سيستدعي الدالة ()sense.clear التي تطفئ المصفوفة. تهانينا، أصبحت قادرًا على التقاط إشارات مقبض سنس هات. مشروع سكراتش: جهاز أضواء راقصة يتعلق بالحرارة طالما أنك انطلقت في مسيرتك في عالم سنس هات فقد حان الوقت لتضع كل ما تعلمته في تصميم جهاز أضواء راقصة حساس للحرارة، وهو جهاز يكون في أوج لمعانه عندما يكون باردًا ثم يبطئ تدريجيًا عندما يسخن. ابدأ مشروعًا جديدًا في سكراتش وحمّل موّسع سنس هات من فئة "كتل إضافية More Blocks". اسحب كما جرت العادة الكتلتين و . ولا تنسَ تغيير الخيار "white" إلى "off" في الكتلة الأخيرة. سنبدأ بتصميم الجهاز البسيط بحرفية، لذلك اسحب الكتلة إلى منطقة بناء البرنامج، ثم ضع بداخلها الكتلة ثم املأ جميع فراغاتها بكتلة المعامل . يمثِّل أول مربعين فارغين الإحداثيين X و Y لموقع المؤشر الضوئي في المصفوفة لذلك لا بُد من تعديل كتلتي اختيار الرقم العشوائي في كلا الفراغين لتصبح من 0 إلى 7 بدلًا من 1 إلى 10؛ وكذلك الأمر بالنسبة للفراغات الثلاث التالية التي تمثِّل كمية اللون الأحمر ثم الأخضر ثم الأزرق، فلا بُد من تغيير مجال المتغير العشوائي ضمنها ليكون من 0 إلى 255 بدلًا من 1 إلى 10. انقر على الراية الخضراء وسترى المصفوفة الضوئية في سنس هات تضيء بألوان عشوائية. شكل 29-7 ضاءة المؤشرات الضوئية بألوان عشوائية تهانينا، لقد صنعت جهاز بريق الكتروني. لا يتفاعل هذا الجهاز مع محيطه حتى اللحظة، لذلك اسحب الكتلة وضعها تحت الكتلة ضمن الكتلة . اسحب كتلة عامل القسمة وضعها مكان الرقم 1 في كتلة الانتظار، ثم اسحب الكتلة وضعها في فراغ كتلة عامل القسمة الأول وضع 10 في الفراغ الثاني. انقر الراية الخضراء مجددًا وستلاحظ أن حدة اللمعان قد انخفضت بوضوح، إلا إذا كنت تعيش في مكان بارد جدًا، ويعود السبب وراء ذلك إلى تصميمك تأخير زمني متعلِّق بالحرارة، إذ ينتظر برنامجك عددًا من الثواني تساوي قيمة درجة الحرارة مقسومةً على 10 قبل تنفيذ ما هو موجود داخل الحلقة؛ فلو كانت درجة الحرارة 20 مئوية سينتظر البرنامج ثانيتين، وينتظر ثانية إذا كانت درجة الحرارة 10 مئوية وأقل من ثانية إذا كانت تحت 10 درجات مئوية؛ أما إن كانت القراءة سالبة (الحرارة تحت الصفر المئوي)، فلن يكون هناك تأخير زمني إطلاقًا وستُنفذ الحلقة دون تأخير. تهانينا، لقد أنجزت بنفسك برنامجًا يُكامل بين مختلف ميزات سنس هات. للاطلاع على مشاريع أخرى تستخدم سنس هات، عليك بالملحق "D" (اطلع أكثر) مشروع بايثون: مسبار ترايكوردر طالما أنك انطلقت في مسيرتك في عالم سنس هات فقد حان الوقت لتضع كل ما تعلمته في تصميم جهاز ترايكوردر Tricorder، وهو جهاز يعرفه جيدًا محبي بعض أفلام الخيال العلمي (ستار ترك تحديدًا) بأنه مسبارٌ قادرٌ على تحليل بيانات الحساسات التي يضمها. ابدأ مشروعًا جديدًا في ثوني واحفظه باسم "Tricorder" ثم اكتب الشيفرة التالية: from sense_hat import SenseHat sense = SenseHat() sense.clear() علينا في الخطوة الثانية تعريف دوال لكل حساس من حساسات سنس هات، وسنبدأ بحساسات IMU: def orientation(): orientation = sense.get_orientation() pitch = orientation["pitch"] roll = orientation["roll"] yaw = orientation["yaw"] وطالما أننا سنحرك نتائج قراءة الحساسات على شاشة المصفوفة الضوئية، فمن الأفضل تدوير القراءات إلى رقمٍ عشري واحد بعد الفاصلة حتى لا ننتظر مرور عشرات الأرقام قبل أن ننتهي من عرض أحد النتائج: pitch = round(pitch, 1) roll = round(roll, 1) yaw = round(yaw, 1) سنحتاج أخيرًا إلى تحريك النتائج على المصفوفة لأن الترايكوردر مسبارٌ محمولٌ باليد، ولا حاجة لوصله إلى شاشة. sense.show_message("Pitch {0}, Roll {1}, Yaw {2}". format(pitch, roll, yaw)) لقد انتهينا الآن من إنشاء دالةٍ تقرأ وتُظهر وجهة سنس هات بناءً على مقياس IMU، وعلينا الآن إنشاء دوال مماثلة لبقية الحساسات. لنبدأ بحساس الحرارة: def temperature(): temp = sense.get_temperature() temp = round(temp, 1) sense.show_message("Temperature: %s degrees Celsius" % temp) انتبه إلى السطر الذي يعرض النتيجة على المصفوفة الضوئية ولاحظ وجود الرمز s%، ويُدعى هذا الرمز "محدد مكان placeholder" ويُستبدل بمحتوى المتغير temp، ويساعدك ذلك على تنسيق الخرج بطريقة جميلة تظهر فيها القراءة بين عنوان "Temperature" ووحدة القياس "degrees Celsius". سننشئ الآن دالةً لحساس الرطوبة: def humidity(): humidity = sense.get_humidity() humidity = round(humidity, 1) sense.show_message("Humidity: %s percent" % humidity) ثم لحساس الضغط البارومتري: def pressure(): pressure = sense.get_pressure() pressure = round(pressure, 1) sense.show_message("Pressure: %s millibars" % pressure) وأخيرًا للبوصلة التي تعتمد على قراءة حساس الحقل المغناطيسي: def compass(): for i in range(0, 10): north = sense.get_compass() north = round(north, 1) sense.show_message("North: %s degrees" % north) استخدمنا في الدالة السابقة حلقةً قصيرةً ومحدودةً لتأخذ عدة قراءات متلاحقة من مقياس الحقل المغناطيسي للتأكُّد من كفاية البيانات لإظهار قراءة دقيقة. عدِّل مجال الحلقة إلى 20 أو 30 وحتى 100 إن شعرت بأن القراءة غير مستقرة وذلك لتحسين الدقة. يتكون برنامجك الآن من خمس دوال تقرأ كلٌ منها بيانات أحد حساسات سنس هات ثم تحرِّك هذه البيانات على المصفوفة الضوئية. بقي علينا إيجاد طريقة لنختار الحساس الذي سنعرض بياناته ومن المؤكد أن مقبض سنس هات هو الحل الأمثل. اكتب الشيفرة التالية إذًا: sense.stick.direction_up = orientation sense.stick.direction_right = temperature sense.stick.direction_down = compass sense.stick.direction_left = humidity sense.stick.direction_middle = pressure تربط الشيفرة السابقة كل حساس بأحد أزرار الاتجاه لمقبض سنس هات؛ إذ يكون الزر الأعلى لقراءة الوجهة والأسفل لقراءة مقياس الحقل المغناطيسي (البوصلة) واليمين لقراءة حساس الحرارة واليسار لقراءة الرطوبة والأوسط لقراءة الضغط. لا بُدّ أخيرًا من وضع برنامجك بأكمله ضمن حلقةٍ لا نهائية رئيسية تصغي إلى أحداث الضغط على أزرار المقبض دون أن تنهي البرنامج مباشرةً. اكتب ما يلي: while True: pass انقر على أيقونة التشغيل Run وجرِّب الضغط على أزرار المقبض لقراءة أحد الحساسات. اضغط زرًا آخر حالما ينتهي عرض القراءة السابقة وراقب النتيجة. تهانينا، لقد صممت مسبار ترايكوردر محمول باليد مكتمل الوظائف. شكل 30-7 ستتحرك كل نتيجة عبر المصفوفة الضوئية للاطلاع على مشاريع أخرى تستخدم سنس هات، عليك بالملحق "D" (اطلع أكثر). ترجمة -وبتصرف- للفصل السابع "Physical computing with Sense HAT" من كتاب The official Raspberry Pi beginner's guide. اقرأ أيضًا المقال السابق: ربط راسبيري باي بعناصر إلكترونية وبرمجتها باستخدام سكراتش وبايثون ما هو حاسوب راسبيري باي Raspberry Pi؟ التعامل مع بيئة سطر الأوامر في راسبيري باي إعداد Raspberry Pi للعمل تجميع راسبيري باي والتحضير لاستعماله
-
تُعد أداة التهيئة في راسبيري باي حزمةً برمجيةً فعالةً لضبط كثيرٍ من الإعدادات على جهاز راسبيري باي، ابتداءً من الواجهات المتوفرة في الجهاز وصولًا إلى البرامج والتحكُّم بها عبر الشبكات الحاسوبية. قد يصعُب ضبط الإعدادات المختلفة على المستخدمين الجدد، لذلك سيأخذ هذا الملحق بيدك خطوةً خطوة في كل شرح كل إعداد وبيان الغاية منه. تستطيع تحميل الأداة من قائمة راسبيري باي ضمن فئة "التفضيلات Preferences"، أو من خلال واجهة سطر الأوامر بكتابة الأمر التالي في نافذة برنامج "الطرفية Terminal": raspi-config ستجد اختلافًا بين طريقتي عرض النسخة الرسومية لأداة التهيئة ونسخة واجهة سطر الأوامر، إذ ستظهر الخيارات في فئات مختلفة. سيعتمد هذا الملحق على النسخة الرسومية. نافذة النظام تضم نافذة النظام System tab خيارات تتحكم بمجموعة الإعدادات التالية: كلمة المرور Password: انقر على الزر "تغيير كلمة المرور Change Password" لاختيار كلمة مرور جديدة للمستخدم الحالي (المستخدم 'pi' هو المستخدم الافتراضي). اسم المضيف Hostname: وهو الاسم الذي يعرِّف به باي نفسه على الشبكات، إذ ينبغي أن يمتلك كل جهاز باي اسمًا فريدًا إن كان هناك عدة أجهزة على نفس الشبكة. واجهة الإقلاع Boot: سيقلع باي وصولًا إلى "سطح المكتب Desktop" بالوضع الافتراضي للإعداد، ويمكن اختيار "To CLI" للإقلاع وصولًا إلى واجهة سطر الأوامر التي شرحناها في الملحق "C". تسجيل دخول تلقائي Auto Login: عندما يكون الخيار "مثل مستخدم حالي As current user" مفعلًا (وهو مفعلٌ افتراضيًا)، سيحمّل راسبيان سطح المكتب دون طلب اسم المستخدم وكلمة المرور. التحقق من الاتصال بالشبكة عند الإقلاع Network Boot: إذا كان الخيار "انتظار شبكة الاتصال wait for network" مفعلًا، فلن يُحمّل راسبيان سطح المكتب حتى يضمن وجود اتصال بالشبكة. شاشة مؤقتة Splash Screen: عندما يُفعَّل هذا الخيار، تختفي رسائل إقلاع راسبيان خلف شاشة رسومية مؤقتة. فيديو باي 4 Pi 4 Video: يُتاح هذا الإعداد في النموذج Pi 4 ويعطيك القدرة على تبديل مخرج الفيديو، إذ يمكِّنك الخيار "4K HDMI" من بث الفيديوهات بدقة "4K" عبر أحد منفذي micro أو HDMI أو كلاهما؛ بينما يمكِّن الخيار "تماثلي Analog" عرض الفيديوهات المركبة composite video عبر منفذ الفيديو 3.5 مم، ويُعد هذا الخيار جيدًا إذا كان لديك شاشة أو تلفاز قديم ليس له منفذ HDMI. لا يُفعّل افتراضيًا أيًا من الخيارين السابقين وتُعرض الفيديوهات بدقة 1080p عبر منافذ micro أو HDMI. انتبه إلى أنّ تفعيل الخيار "4K" سيزيد من استهلاك الطاقة والحمل على وحدة المعالجة المركزية CPU ووحدة معالجة الرسوميات GPU، لذلك من الأفضل إلغاء تفعيل هذا الخيار إذا لم تكن بحاجته حاجةً ماسةً لتوجيه موارد الجهاز لمهامٍ أخرى. نافذة الواجهات وتضم الإعدادات التي تتحكم بواجهات العتاد الصلب المتوفرة على باي، وهي: الكاميرا Camera: يمكّن أو يعطّل واجهة الكاميرا التسلسلية Camera Serial Interface -أو اختصارًا CSI-، للتعامل مع تجهيزة كاميرا راسبيري باي. SSH: يمكّن أو يعطّل واجهة المفسر المؤمّنة Secure Shell Interface، والتي تسمح بتشغيل واجهة سطر الأوامر على باي من حاسوب آخر على الشبكة باستخدام عميل SSH. VCN: يمكّن أو يعطّل واجهة الشبكة الافتراضية Virtual Network Computing، والتي تسمح لك باستعراض الواجهة الرسومية لسطح مكتب باي من حاسوب آخر على الشبكة باستخدام عميل VCN. SPI: يمكّن أو يعطّل واجهة الطرفيات التسلسلية Serial Peripheral Interface، التي تُستخدم للتحكم ببعض التجهيزات المتصلة بالمنصة GPIO. I2C: يمكّن أو يعطّل الممر الناقل بين الدارات المتكاملة Inter-Integrated Circuit التي تُستخدم للتحكم ببعض التجهيزات المتصلة بمنصة GPIO. المنفذ التسلسلي Serial Port: يمكّن أو يعطّل المنفذ التسلسلي Serial port الخاص براسبيري باي والمُتاح عبر المنصة GPIO. واجهة سطر الأوامر التسلسلية Serial Console: تمكّن أو تعطّل واجهة الأوامر التسلسلية المتاحة للمنفذ التسلسلي، ويمكن تعديل هذا الإعداد عند تمكين الإعداد Serial Port. 1-Wire: يمكّن أو يعطّل الواجهة 1-Wire التي تُستخدم للتحكم ببعض التجهيزات المتصلة بمنصة GPIO. Remote GPIO: تمكّن أو تعطّل خدمة شبكة تسمح بالتحكم بمنصة GPIO لحاسوب باي من حاسوب آخر على الشبكة باستخدام المكتبة GPIO Zero. نافذة الأداء وتضم الإعدادات التي تتحكم بحجم الذاكرة المتاحة وسرعة عمل المعالج. رفع تردد التشغيل Overclock: يتيح لك هذا الإعداد جملةً من الخيارات التي تزيد أداء باي لكنه بالمقابل يزيد من استهلاك الطاقة والحرارة واحتمال قصر عمر التجهيزة؛ وهو غير متاح في كل نماذج باي. ذاكرة وحدة المعالجة الرسومية GPU Memory: وتتيح لك ضبط حجم الذاكرة المخصص للاستخدام من قبل معالج رسوميات باي. قد تزيد الذاكرة التي تزيد عن 128 ميغا بايت (افتراضية) الأداء أثناء تصيير الرسوميات ثلاثية الأبعاد والمهام الإعتيادية لوحدة معالجة الرسوميات للأغراض العامة general-purpose GPU -أو اختصارًا GPGPU-، على حساب الذاكرة المخصصة لنظام التشغيل راسبيان؛ بينما يحسِّن تخفيض الذاكرة المخصصة للرسوميات أداء بعض المهام الحساسة للذاكرة على حساب انخفاض أداء تصيير الرسوميات ثلاثية الأبعاد والكاميرا وبعض ميزات عرض الفيديوهات التي قد تصبح غير متاحة. نافذة إعدادات الموقع الجغرافي وتضم الإعدادات التي تتحكم بالمنطقة الجغرافية التي صّممت باي لتعمل ضمنها بما في ذلك إعدادات لوحة المفاتيح. محلي Locale: يسمح لك باختيار موقعك، وهو إعدادٌ يتعلق بالنظام نفسه ويضبط اللغة والبلد ومجموعات المحارف. انتبه إلى أنّ تغيير اللغة في هذا الإعداد سيؤثر فقط على لغة التطبيقات التي تتوفر ترجمةً لها إلى اللغة المختارة. المنطقة الزمنية TimeZone: ويتيح لك اختيار منطقتك الزمنية وذلك بانتقاء منطقة من العالم يليها اختيار أقرب مدينة إليك. إذا اتصلت باي بالانترنت وعرضت الساعة توقيتًا خاطئًا، يكون السبب عادةً اختيار منطقة زمنية خاطئة. لوحة المفاتيح Keyboard: يتيح لك اختيار نمط لوحة المفاتيح ولغتها ومخطط محارفها؛ فإذا لاحظت أن لوحة المفاتيح تطبع حروفًا أو رموزًا خاطئةً، يمكن تصحيحها من خلال هذا الإعداد. البلد الذي تستخدم فيه WIFI: ويسمح لك باختيار البلد لأغراض تنظيم استخدام أمواج الراديو للاتصال اللاسلكي. احرص على اختيار البلد الذي تستخدم فيه باي، فاختيارك لبلد آخر قد يُفقدك القدرة على الاتصال بنقاط الوصول اللاسلكية المجاورة التي قد تخضع لقوانين البث اللاسلكي. إذًا، من الأفضل اختيار البلد قبل محاولة الاتصال بالشبكات اللاسلكية. ترجمة -وبتصرف- للملحق The Raspberry Pi Configuration Tool من كتاب The Official Raspberry Pi Beginner's Guide اقرأ أيضًا المقال السابق: واجهة سطر أوامر راسبيان في راسبيري باي تجميع راسبيري باي والتحضير لاستعماله إعداد Raspberry Pi للعمل
-
تستطيع الوصول إلى معظم برامج راسبيري باي عبر سطح المكتب، إلا أنك تحتاج واجهةً لكتابة تعليمات نصية تُعرف بواجهة سطر الأوامر Command-line interface -أواختصارًا CLI- للوصول إلى بعض البرامج. يؤمن هذه الواجهة في راسبيان تطبيقٌ يُدعى "الطرفية Terminal". لن يحتاج معظم المستخدمين إلى تعلُّم العمل عبر واجهة سطر الأوامر CLI، لكن ما سيقدمه هذا الملحق هو مدخلٌ بسيط لمن يرغب بتعلم مزيدٍ عنها. فتح تطبيق الطرفية يصل المستخدم إلى CLI عبر برنامجٍ يُدعى "الطرفية Terminal"، وهو برنامج يُحمِّل ما يُعرف تقنيًا بواجة الطباعة الافتراضية عن بُعد Virtual teletype terminal؛ إذ تعود هذه التسمية إلى الفترة الزمنية التي أعطى فيها مستخدمي الحاسوب الأوامر عبر آلة كاتبة كهروميكانيكية بدلًا من استخدام لوحة المفاتيح والشاشة. يمكنك فتح الطرفية عن طريق النقر على أيقونة راسبيري لفتح القائمة والانتقال إلى فئة "برامج ملحقة Accessories"، ثم النقر على "الطرفية Terminal". يمكن سحب نافذة الطرفية إلى سطح المكتب كما يمكن تكبيرها وتصغيرها وتغيير حجم خط الكتابة إن كان من الصعب قراءته، أو ليناسب حجم النافذة وذلك بالنقر على القائمة "تحرير Edit" ثم اختيار "تكبير Zoom in"، أو "تصغير Zoom out"K أو بالضغط على المفتاح "CTRL" ثم أحد الزرين "+" أو "-". محث الطرفية أول ما تراه في الطرفية هو المحث Prompt الذي يكون منتظرًا تعليماتك. يظهر المحث في راسبيان على الشكل التالي: pi@raspberrypi:~ $ يشير الاسم ما قبل "@" إلى اسم المستخدم وما بعده إلى اسم الحاسوب الذي تستخدمه وهو افتراضيًا "raspberrypi". بعد الرمز ":" ستشاهد الرمز "~" وهو اختصارٌ يشير إلى المجلد الرئيسي Home directory ويمثِّل مجلد العمل الذي تعمل ضمنه حاليًا current working directory -أواختصارًا CWD-؛ أما الرمز "$" فيشير إلى أن المستخدم الحالي غير مفوّض unprivileged، أي يحتاج إلى كلمة مرور ليُنفّذ مهامًا، مثل إضافة أو إزالة البرامج. الانطلاق في العمل اكتب التعليمة التالية ثم اضغط المفتاح "Enter": cd Desktop سيتغير المُحِث إلى: pi@raspberrypi:~/Desktop $ أصبح سطح المكتب الآن هو مجلد العمل الحالي الذي يقع مباشرةً تحت المجلد الرئيسي، والذي يشير إليه الرمز "~"، ونُفِّذ ذلك من خلال تعليمة تغيير مجلد العمل cd. يمكنك العودة إلى المجلد الرئيسي بأربعة طرق، حاول أن تجرب كل منها على حدى، ثم جرّب استخدامها للعودة إلى مجلد فرعي لسطح المكتب. الطريقة الأولى- باستخدام الأمر التالي: cd .. إذ يُعد الرمز ".." اختصارًا للمجلد الذي يقع مباشرةً فوق مجلد العمل الحالي أو المجلد الأب، وطالما أنّ المجلد الرئيسي هو الأب المباشر لمجلد سطح المكتب فستصل إليه. عُد إلى سطح المكتب وحاول تجريب الأمر التالي. الطريقة الثانية- باستخدام الأمر التالي: cd ~ ويعني الأمر حرفيًا "توجَّه إلى المجلد الرئيسي"، إذ يمكنك الانتقال بهذه التعليمة إلى المجلد الرئيسي من أي مجلد تعمل عليه، على خلاف الطريقة الأولى التي تنقلك إلى المجلد الأب الأعلى مباشرةً من مجلد العمل الحالي. عُد إلى سطح المكتب وحاول تجريب الطريقة الثالثة التالية. الطريقة الثالثة- باستخدام الأمر التالي: cd إذا لم تضع عنوان المجلد الذي ستنتقل إليه بعد التعليمة cd سيقودك افتراضيًا إلى المجلد الرئيسي. عُد إلى سطح المكتب وحاول تجريب الأمر الأخير التالي. الطريقة الرابعة- باستخدام الأمر التالي: cd /home/pi إذ يمثِّل المسار ما بعد التعليمة cd المسار المطلق absolute path والذي سيعمل بغض النظر عن المجلد الحالي، وينقلك إلى المجلد الرئيسي من أي مجلد تعمل عليه كما هو حال التعليمتين السابقتين، لكن عليك ذكر اسم المستخدم (pi في حالتنا هذه). التعامل مع الملفات لكي تتمرن على أساليب التعامل مع الملفات، انتقل إلى سطح المكتب واكتب الأمر: touch Test سيظهر على سطح المكتب عند تنفيذ التعليمة السابقة ملفٌ اسمه "Test"، إذ تُستخدم التعليمة touch عادةً لتحديث معلومات الوقت والتاريخ لملف، لكن في الحالة التي لا يكون فيها هذا الملف موجودًا (مثل حالتنا) تُنشئ التعليمة هذا الملف. جرّب التعليمة التالية: cp Test Test2 سيظهر على سطح المكتب ملفٌ آخر باسم "Test2" ويمثّل نسخةً مطابقةً للملف الأصلي. لنحذف هذه النسخة على النحو التالي: rm Test2 لن يظهر الملف على سطح المكتب بعد الآن. حاول أن تجرّب الآن التعليمة التالية: mv Test Test2 تنقل هذه التعليمة الملف "Test"، إذ سيختفي عن سطح المكتب ليحل محله الملف "Test2"، الذي يعد نسخةً مطابقةً أيضًا عن الملف الأصلي، وتُستخدم هذه الطريقة في تغيير اسم ملف مثلًا. إذا لم يكن سطح المكتب هو مجلد العمل الحالي، قد تحتاج إلى معرفة ما يحتويه هذا المجلد من مجلدات وملفات لذلك اكتب التعليمة: ls إذ تًظهر هذه التعليمة قائمةً بمحتويات المجلد الحالي أو محتويات أي مجلد آخر تحدده لهذه التعليمة. أضِف بعض الخيارات إلى تعليمتك لتتمكن من عرض تفاصيل أكثر، مثل الملفات المخفية وحجم الملفات: ls -larth تتحكم الخيارات التالية بتعليمة ls: l: يعرض النتائج في قائمة عمودية طويلة. a: يعرض جميع الملفات والمجلدات. r: يعكس الترتيب الاعتيادي للمعروضات. t: يعرض المحتويات وفقًا لتاريخ أخر تعديل، ومع r سيعرض لك الملفات الأقدم في بداية القائمة. h: يُظهر حجم الملف بطريقة مقروءة للبشر ليسهل فهمه. تشغيل البرامج لا يمكن تشغيل بعض البرامج إلا باستخدام سطر الأوامر، بينما يمتلك البعض الآخر واجهات رسومية وواجهة لسطر الأوامر؛ إذ تُعد "أداة تهيئة البرمجيات Pi software configuration tool" مثالًا عن الحالة الأخيرة، والتي تُشغَّل عادةً من قائمة راسبيري باي. لنجرّب طريقة سطر الأوامر بكتابة التعليمة: raspi-config ستكون نتيجة التعليمة رسالة خطأ مفادها أنه لا يمكن تشغيل البرنامج إلا في حالة كان مستخدم جذر رئيسي root user، لذلك حاول تغيير التعليمة إلى: sudo raspi-config التوجيه sudo هو اختصار لعبارة "switch-user do"، وهي تجبر راسبيان على تنفيذ الأمر كأنه مستخدمٌ رئيسي. لا تستخدم هذا التوجيه ما لم يتطلب البرنامج الذي تشغله امتيازات عالية مثل حالة تثبيت أو إزالة برامج أو ضبط إعدادات النظام، فلا يجب أن تُشغّل لعبة مثلًا باستخدام sudo. اضغط على المفتاح "TAB" مرتين، ثم اختر "إنهاء Finish" واضغط على المفتاح "Enter" لإغلاق أداة التهيئة والعودة إلى واجهة سطر الأوامر. نفذ أخيرًا التعليمة التالية: exit التي ستنهي جلسة العمل وتغلق برنامج الطرفية. استخدام الطرفيات TTYs لا يمثِّل برنامج "الطرفية Terminal" الواجهة الوحيدة لسطر الأوامر، بل بالإمكان الانتقال إلى أية طرفيات قيد العمل، والتي تُعرف بواجهات الأوامر البعيدة teletype -أو اختصارًا TTYs-. للانتقال إلى tty2 اضغط على المفتاحين "CTRL" + "ALT" معًا واضغط معهما الزر "F2". لا بدّ من تسجيل دخولك باستخدام كلمة المرور واسم المستخدم، وستتمكن بعد ذلك من التعامل مع هذه الطرفية كما فعلنا سابقًا. هذه الطرفيات مفيدةٌ خاصةً عندما لا تكون قادرًا على الوصول إلى سطح المكتب لسببٍ أو لآخر. لمغادرة tty2 اضغط على المفتاحين "CTRL" + "ALT" معًا واضغط معهما الزر "F7". عند العودة إلى tty2 مجددًا سترى كل ما أنجزته سابقًا قبل مغادرتها. اكتب التعليمة exit ثم اضغط على المفاتيح "CTRL+ALT+F7" للعودة إلى سطح المكتب، وتأتي أهمية تنفيذ هذه التعليمة قبل مغادرة TTY في تسجيل خروجك تلقائيًا، إذ سيتمكن أي شخصٍ قادرٍ على الوصول إلى TTY من العبث بحسابك دون الحاجة لكتابة كلمة المرور. تهانينا، لقد اجتزت خطوتك الأولى في احتراف واجهة سطر الأوامر الخاصة بالنظام راسبيان. ترجمة -وبتصرف- للملحق The command-line interface من كتاب The Official Raspberry Pi Beginner's Guide اقرأ أيضًا المقال التالي: أداة التهيئة في راسبيري باي المقال السابق: تثبيت أنظمة التشغيل والبرامج على راسبيري باي إنشاء أمر جديد في بيئة سطر الأوامر في راسبيري باي التعامل مع بيئة سطر الأوامر في راسبيري باي
-
صُمم البرنامج "نوبس NOOBS" لتسهيل عملية تثبيت أنظمة التشغيل على راسبيري باي ما أمكن، إذ يمكنك شراء بطاقة ذاكرة microSD ثُبت عليها نوبس مسبقًا من أي موزّع لتجهيزات باي، أو اتباع التعليمات التالية لتثبيت البرنامج على بطاقة ذاكرة خاصة بك. تنزيل نوبس NOOBS لتثبيت نوبس على بطاقة ذاكرة فارغة، عليك تنزيل البرنامج من موقع ويب راسبيري باي على حاسوب قادر على قراءة بطاقة الذاكرة microSD و full-size SD مع محوِّل لبطاقة microSD، ويمكنك استخدام قارئ بطاقات ذاكرة بواجهة USB كذلك. استخدم المتصفح في الوصول إلى موقع التنزيلات الخاص براسبيري باي وانقر على برنامج نوبس المُعلّم بأيقونة راسبيري باي في الصفحة التي يحملها المتصفح، ثم انقر "تنزيل ملف مضغوط Download ZIP" ضمن الفئة "تنزيل نوبس دون اتصال أو عبر الشبكة NOOBS Offline and network install". يستغرق تنزيل نوبس وقتًا وخاصة إن كان الاتصال بالإنترنت بطيئًا. عند انتهاء التنزيل أدخل بطاقة الذاكرة في الحاسوب، وستظهر على شكل سواقة مفردة قابلة للإزالة، وقد تُضطرإلى تهيئتها format أولًا إن لم تظهر بهذا الشكل. خياري تنزيل: لاحظ وجود نسختين قابلتين للتنزيل على صفحة تنزيلات نوبس، هما: NOOBS و NOOBS Lite. تنزِّل النسخة الأولى نوبس ونسخة عن آخر إصدار لنظام التشغيل راسبيان في حزمة واحدة؛ بينما تنزِّل النسخة الثانية نوبس فقط. ما يحتاجه معظم المستخدمين هي النسخة الأولى، فلا تنزل النسخة الثانية إلا إذا كنت تخطط لتثبيت نظام تشغيل آخر غير راسبيان. تُثبَّت النسختان بالطريقة ذاتها كما نشرحها في هذا الملحق. تهيئة بطاقة الذاكرة microSD لتهيئة بطاقة ذاكرة مستخدمة سابقًا لتثبيت نوبس، ينبغي لمستخدمي ويندوز أو ماك أو إس تنزيل أداة تهيئة بطاقة الذاكرة "SD Card Association SD Memory Card Formatter"، ثم تثبيتها، أما بالنسبة لمستخدمي لينوكس، فالأداة "disk management tool" هي المستخدمة في حذف أية تقسيمات على البطاقة، ثم إنشاء جزء وحيد single partition وتهيئته وفق نظام الملفات VFAT، ثم إكمال هذا الدليل. أدخل بطاقة الذاكرة في الحاسوب إن لم تكن قد فعلت ذلك، ثم شغِّل الأداة "SD Card Formatter". ابحث عن بطاقة الذاكرة ضمن القائمة "اختر بطاقةً Select card"، إذ قد تجد أكثر من بطاقة لها نفس اسم بطاقتك إن كنت قد استخدمتها سابقًا مع راسبيري باي، لذلك اختر واحدةً منها في هذه الحالة وتحقق من اختيارك للقرص الصحيح (بطاقة الذاكرة) بالاطلاع على معلومات القرص في قسم "معلومات البطاقة card information" الذي يعرض حجم ونوع بطاقة الذاكرة microSD التي أدخلتها. حاول أن تختار الآخرى إن كانت المعلومات المعروضة ليست صحيحة (ليست معلومات بطاقتك)، وتحقق من صحة المعلومات من جديد حتى تتأكد تمامًا بأنها البطاقة الصحيحة. تحقق كذلك من عمل نسخة احتياطية لأية ملفات مخزنة عليها قد تحتاجها لاحقًا، ثم سمِّ البطاقة "NOOBS" من خلال الصندوق "عنوان وحدة التخزين volume label" وانقر زر "تهيئة format" وأكّد -عندما يُطلب منك ذلك- رغبتك في تهيئة القرص. لن يستغرق خيار التهيئة السريعة "quick format" سوى ثوانٍ معدودة ليكتمل. أغلق بعد ذلك أداة التهيئة. تثبيت نوبس وهي عمليةٌ بسيطة مثل عملية سحب وإفلات. ابحث عن ملف نوبس الذي نزلته مسبقًا وستجده عادةً في مجلد " التنزيلات Downloads". يُدعى هذا الملف "ملف أرشيف Archive file"، ويحتوي نسخًا عن كثيرٍ من الملفات التي ضُغطت ضمنه لتقليل حجمها وتسريع تنزيلها. انقر على الأرشيف نقرًا مزدوجًا لفتحه، ثم اضغط على المفتاحين "CTRL+ A" في نظام ويندوز، أو "⌘+A" في نظام ماك أو إس لاختيار جميع ملفات الأرشيف، ثم اسحب هذه الملفات إلى بطاقة الذاكرة microSD ثم أفلتها وانتظر حتى تكتمل عملية النسخ والتي قد تستمر عدة دقائق. أخرج بطاقة الذاكرة عندما ينتهي نسخ الملفات من الحاسوب وضعها في راسبيري باي. عندما تُقلع باي مرةً أخرى سيُحمّل برنامج نوبس وسيطلب منك اختيار نظام التشغيل الذي تود تثبيته. تثبيت البرامج وإزالتها يأتي مع نظام التشغيل راسيبان Raspbian مجموعةً من البرامج المُختارة من قبل مؤسسة راسبيري باي لكنها طبعًا ليست الوحيدة التي تعمل على راسبيان. سترشدك الأفكار التالية إلى طريقة تصفُّح برامج إضافية وتثبيتها أو إزالتها لتوسيع إمكانيات باي. بُنيت الإرشادات في هذا الملحق على ما شرحناه في المقال الثالث "نظام تشغيل راسبيري باي (راسبيان)" من هذه السلسلة دليل راسبيري باي حول استخدام بعض البرمجيات الأساسية، لذلك من الأفضل العودة إلى هذا الفصل -إن لم تفعل بعد- قبل استخدام الطرق التي سنشرحها في هذا الملحق. سعة بطاقة الذاكرة: تستهلك البرامج الإضافية التي تثبتها مساحةً أكبر على بطاقة الذاكرة. تسمح لك مثلًا بطاقات الذاكرة بحجم 16 جيجابايت أو أكثر بتثبيت برامج أكثر، ويمكنك التحقق من أن بطاقة الذاكرة التي تنوي استخدامها مناسبةٌ لراسبيري باي من خلال موقع دعم راسبيري. تصفح البرامج الموجودة يمكن تصفُّح قائمة البرمجيات المُتاحة لراسبيان، والتي تُعرف باسم مستودعات البرمجيات software repositories من خلال النقر على أيقونة راسبيري والانتقال إلى فئة "تفضيلات Preferences"، ثم النقر على "إضافة/ إزالة البرامج Add/Remove Software". ستظهر نافذة الأداة بعد عدة ثوانٍ. يتضمن الجانب الأيسر للنافذة قائمةً بالفئات تشبه تلك التي تراها في قائمة راسبيري باي. ستعرض لك نافذة إضافة / إزالة البرامج جميع البرمجيات التي تندرج تحت فئة معينة عند النقر عليها؛ ويمكنك أيضًا البحث عن برنامج أو توصيف برنامج بكتابته في صندوق البحث في أعلى يسار النافذة، مثل "محرر نصوص text editor"، أو "ألعاب games"، وستجد نتيجة البحث على هيئة قائمة من البرامج التي حققت معيار البحث من كل الفئات. لمزيدٍ من المعلومات حول أي برنامج منها، انقر عليه ضمن القائمة وستُعرض المعلومات في الفراغ أسفل النافذة. في حال ضمّت فئةٌ من الفئات كثيرًا من البرمجيات المتاحة للتثبيت، سيستغرق ذلك وقتًا أطول من نافذة إضافة/إزالة البرامج لعرضها. تثبيت برنامج فعّل مربع التحقق بجوار البرنامج الذي تريد تثبيته بالنقر عليه. ويمكنك طبعًا النقر على مربعات التحقق قبل مجموعة البرامج التي تحتاجها لكي تثبتها الأداة في نفس الوقت. ستتحول الأيقونة إلى جانب البرنامج الذي تختاره إلى أيقونة صندوق مفتوح وعليه الرمز "+" للإشارة إلى أنه جاهزٌ للتثبيت؛ وعندما تكتمل قائمة البرامج التي تحتاجها انقر على أحد الزرين "OK" أو "Apply"، إذ لا فرق بين الزرين السابقين سوى أنّ الأول يغلق النافذة عند الانتهاء من التثبيت بينما يبقيها الثاني مفتوحة. سيُطلب منك إدخال كلمة المرور للتأكد من هويتك، فلن ترغب بالتأكيد أن يعبث أحد بالبرامج التي تثبتها على باي قد تلاحظ أحيانًا أنّ مجموعة حزم قد جرى تثبيتها مع البرنامج الذي ثبته، إذ تُعرف هذه الحزم بالاعتماديات dependencies ويحتاجها برنامجك للعمل بصورةٍ جيدة، مثل حزمة المؤثرات الصوتية التي تحتاجها الألعاب، أو قاعدة بيانات للعمل مع مخدم ويب. يمكنك الوصول إلى برنامجك بعد اكتمال التثبيت ضمن الفئة التي ينتمي إليها في قائمة راسبيري باي. تذَكر أن الفئات في قائمة راسبيري باي قد تختلف عن الفئات في أداة إضافة / إزالة البرامج، وقد لا تجد اختصارًا لبعض البرامج التي ثبتّها في قائمة راسبيري إطلاقًا والتي تعرف ببرامج سطر الأوامر Command-line software، إذ ينبغي تشغيلها من برنامج الطرفية "Terminal". لمزيدٍ من المعلومات حول سطر الأوامر والطرفية راجع الملحق "C" (واجهة سطر الأوامر). إلغاء تثبيت برنامج لإزالة أو إلغاء تثبيت برنامج، افتح أداة إضافة / إزالة البرامج، ثم ابحث عن البرنامج الذي تريد إلغاء تثبيته وألغِ تفعيل مربع التحقق إلى جواره بالنقر عليه؛ كما يمكنك استخدام صندوق البحث لإيجاد البرنامج المطلوب؛ وتستطيع كذلك إلغاء تثبيت عدة برامج معًا بالنقر على مربع التحقق بجوار كل منها وإلغاء تفعيله، وسيتغير عندها شكل الأيقونة إلى صندوق مفتوح بجواره سلة محذوفات للإشارة بأن هذا البرنامج سيُحذف أو يُلغى تثبيته. انقر بعد ذلك على أحد الزرين "OK" أو "Apply" لتبدأ العملية، وسيطلب منك إدخال كلمة المرور إن لم تكن قد أدخلتها لسببٍ ما خلال الدقائق القليلة الماضية، كما قد يُطلب منك تأكيد عملية إلغاء تثبيت البرنامج وأية اعتماديات مرتبطة به أيضًا. سيختفي البرنامج من قائمة باي عند اكتمال عملية إلغاء التثبيت، ولن تُحذف طبعًا أية ملفات كنت قد أنشأتها بهذا البرنامج، مثل الرسوميات أو الصور أو المستندات وغيرها. ترجمة -وبتصرف- للملحقين Installing NOOBS to a microSD card و Installing and uninstalling software من كتاب The Official Raspberry Pi Beginner's Guide اقرأ أيضًا المقال السابق: ربط كاميرا مع لوحة راسبيري باي وتشغيلها تجميع راسبيري باي والتحضير لاستعماله ما هو حاسوب راسبيري باي Raspberry Pi؟
-
تستطيع التقاط صورٍ عالية الدقة وتسجيل مقاطع فيديو باستخدام تجهيزة الكاميرا، التي تتصل مع باي Pi Camera Module وتساعدك في إنشاء مشاريع محتوًى بصري مميزة. إذا كنت مهتمًا بإنتاج محتوًى بصري مهم، أو "رؤية حاسوبية Computer Vision" كما تُعرف في حقل الروبوت، فستكون كاميرا باي بدايةً جيدة. تظهر التجهيزة على شكل دارة صغيرة مربعة الشكل لها كابل شريطي ribbon cable يمكن وصله إلى راسبيري باي عبر المنفذ التسلسلي للكاميرا Camera Serial Interface -أو اختصارًا CSI-؛ مما يسمح لباي بالتقاط صورٍ ثابتة أو متحركة بدقةٍ عالية للاستخدامات المتنوعة. تُعرف كاميرا باي حتى لحظة تحرير هذه النسخة من الكتاب بأنها التجهيزة "v2" أو تجهيزة النسخة 2.1 المبنية على حساس الصورة "Sony IMX219"، وهو نفسه الحساس الذي قد تجده خلف هاتفك الذكي أو جهازك اللوحي. تصل دقة الحساس إلى 8 ميغا بكسل وهذا يعني أنه قادرٌ على التقاط صورٍ مكونة من 8 ملايين بيكسل pixel موزعةٍ إلى 3280 بيكسل عرضًا و2464 بيكسل طولًا (جداء الرقمين السابقين سيتجاوز قليلًا 8 ملايين). يمكن للكاميرا التقاط مقاطع فيديو إضافةً إلى الصور الثابتة وبدقة Full HD التي تعتمدها معظم أجهزة التلفاز بمعدلٍ يصل إلى 30 إطارًا في الثانية ليساعدك على إظهار حركةٍ سلسةٍ ويعزّز إمكانية تأثيرات الحركة البطيئة. يمكن رفع معدل الالتقاط إلى 60 إطارًا في الثانية بتخفيض الدقة إلى 720p وإلى 90 إطار في الثانية بتخفيض الدقة أكثر إلى 480p؛ وهي دقة منظومة VGA للشاشات التقليدية. تثبيت كاميرا راسبيري باي مثل تجهيزة إضافية، لا بدّ من فصل التغذية الكهربائية عن باي وسحب كابل التغذية قبل وصل تجهيزة الكاميرا. أوقف تشغيل راسبيري باي بالنقر على أيقونة راسبيري باي، ثم اختيار الأمر "إيقاف التشغيل Shutdown". انتظر حتى تتوقف باي عن العمل، ثم انزع كابل التغذية الكهربائية. افتح علبة الكاميرا وستجد دارةً صغيرةً مربعة هي الكاميرا نفسها وكابلًا شريطيًا سيكون متصلًا بالكاميرا في معظم الحالات. اقلب الكاميرا بحيث تواجه عدستها الأرض إذا لم يكن الكابل متصلًا بها، ثم ابحث عن وصلةٍ بلاستيكية مسطحة لها طرفان ناتئان قليلًا. اضغط على النتوئين للداخل واسحبهما للخلف، فيتحرك معك جزءٌ من الوصلة إلى الخارج. ازلق الكابل الشريطي في الوصلة بحيث تكون حافته الفضية إلى الأسفل والقطعة الزرقاء لطرفه نحو الأعلى، ثم ادفعه جيدًا في الوصلة وأعِد الجزء الذي سحبته إلى مكانه. يمكنك وصل أي من طرفي الكابل الشريطي إلى الكاميرا وتأكد عند وصله بأنه مركبٌ جيدًا، حيث يجب ألا يخرج من مكانه إذا حاولت سحبه. شكل 1-8 توصيل الكابل الشريطي إلى الكاميرا سنركِّب الطرف الآخر على باي بنفس الطريقة. جد أولًا منفذ الكاميرا "CSI" وارفع الغطاء قليلًا إلى الأعلى، وقد يكون من الأسهل لو أخرجت باي من حاضنتها إن كنت تستخدم واحدة. ازلق كابل الكاميرا في الوضعية التي يكون فيها منفذ HDM لراسبيري باي متجهًا نحوك، ثم ادفع الغطاء بلطف إلى مكانه. تأكد عند وصل الكابل بأنه مركبٌ جيدًا، حيث يجب ألا يخرج من مكانه إذا حاولت سحبه. شكل 2-8 توصيل الكابل الشريطي للكاميرا مع منفذ CSI لباي يأتي مع عدسة الكاميرا رقعةٌ بلاستيكية زرقاء لحمايتها من الخدش أثناء التصنيع والشحن والتركيب. جد النتوء الصغير على طرف الرقعة وانتزعه بلطف لتصبح الكاميرا جاهزةً للاستخدام. صل التغذية الكهربائية مجددًا إلى باي واتركها حتى تحمّل راسبيان. لا بدّ من إخبار باي أنك وصلت الكاميرا لتتمكن من استخدامها. انقر على أيقونة راسبيري، ثم انتقل إلى فئة "تفضيلات preferences" وانقر على "إعداد راسبيري باي Raspberry Pi Configuration". انقر على نافذة "واجهات interfaces" في نافذة الأداة السابقة عندما يكتمل تحميلها، ثم ابحث عن "كاميرا Camera" وانقر على زر الخيارات الدائري إلى يسار الكلمة "تمكين Enabled" لتفعيله. انقر الزر "OK"، ستطلب منك الأداة إذنًا لإعادة تشغيل باي. دعها تفعل ذلك وستصبح الكاميرا جاهزةً عندما يقلع النظام من جديد. شكل 3-8 لا بدّ من تفعيل الكاميرا باستخدام أداة إعداد راسبيري باي اختبار الكاميرا للتأكد من تثبيت الكاميرا وتفعيل واجهتها على نحوٍ صحيح، يمكن استخدام أداة الصور الثابتة rapistill وأداة الفيديو raspivid المصممتين لالتقاط الصور من خلال تجهيزة الكاميرا باستخدام واجهة سطر الأوامر command-line interface -أو اختصارًا CLI-. لن تجد هاتين الأداتين مثل بقية البرامج ضمن قائمة راسبيري باي الرئيسية بل ينبغي تحميلهما من برنامج الطرفية "Terminal"، الذي تجده في فئة "البرامج الملحقة Accessories". بالنقر على البرنامج ستظهر نافذةٌ لها خلفيةٌ سوداء وأسطرٌ باللونين الأزرق والأخضر تمثًِل الطرفية التي تسمح لك بالتعامل مع واجهة سطر الأوامر. شكل 4-8 نافذة برنامج الطرفية Terminal التي تسمح لك بالوصول إلى سطر الأوامر اكتب الأمر التالي في الطرفية لاختبار الكاميرا: raspistill -o test.jpg وبمجرد الضغط على المفتاح Enter ستظهر صورةٌ كبيرة لما تعرضه الكاميرا على الشاشة، ويُعرف ذلك باسم العرض المباشر والذي يستمر خمس ثوانٍ ما لم تحدد خلاف ذلك. تلتقط الكاميرا بعد 5 ثوان صورةً ثابتة لما تعرضه وتخزّنها في المجلد "home" باسم test.jpg. إذا أردت التقاط صورةٍ أخرى، نفِّذ التعليمة السابقة مجددًا ولا تنس تغيير اسم ملف الخرج بعد الخيار o- وإلا ستخزن الصورة الجديدة فوق القديمة. شكل 5-8 العرض المباشر للكاميرا إذا كانت صورة العرض المباشر مقلوبةً رأسًا على عقب، فعليك تنبيه raspistil بأن الكاميرا مقلوبة. صُممت تجهيزة الكاميرا لكي يكون الكابل الشريطي خارجًا من الحافة السفلية؛ فإذا كان خارجًا من أحد جانبي أو من أعلى باي كما هو الحال في بعض الكاميرات التي ينتجها طرفٌ ثالث، فعليك تدوير الصورة 90 أو 180 أو 270 درجة باستخدام الخيار rot-. استخدم ببساطة الأمر التالي إذا خرجت الكاميرا من الأعلى: raspistill -rot 180 -o test.jpg بينما لو خرجت الكاميرا مع الشريط من الجانب الأيمن، دوّر الصورة 90 درجة؛ ودوّرها 270 درجة، إذا خرجت من الجانب الأيسر؛ وإذا كانت الزاوية الأصلية لالتقاط الصورة غير صحيحة استخدم الخيار rot- لتدويرها إلى وضعها الصحيح. لرؤية الصورة الملتقطة: افتح برنامج "مدير الملفات File Manager" من قائمة راسبيري فئة "برامج ملحقة Accessories"، ثم انتقل إلى المجلد "home/Pi" وستجد الصورة باسم "test.jpg". انقر على الصورة نقرًا مزدوجًا لفتحها ضمن برنامج "عارض الصور image viewer". تستطيع بالطبع إرسال الصورة عبر البريد الإلكتروني؛ أو رفعها إلى موقع ويب؛ أو نقلها إلى وسيط تخزين خارجي. شكل 6-8 عرض الصورة الملتقطة تعرف على مكتبة picamera يعدّ استخدام مكتبة بايثون picamera الطريقة الأكثر مرونة في التحكم بتجهيزة كاميرا باي سواءً بالعرض المباشر أو بالتقاط الصور والفيديوهات، كما تسمح لك بدمج ما التقطته في برامجك الخاصة، وكذلك مع البرامج التي تستخدم المنصة GPIO من خلال مكتبة GPIO Zero. أغلق برنامج الطرفية إذا كان مفتوحًا بالنقر على زر الإغلاق X في أعلى يمين النافذة، ثم افتح ثوني بالطريقة المعتادة. أنشئ مشروعًا جديدًا واحفظه باسم "Camera". أدرج المكتبات التي يحتاجها برنامجك من خلال كتابة الأسطر التالية: from picamera import PiCamera from time import sleep camera = PiCamera() يتيح لك سطر الشيفرة الأخير التحكم بتجهيزة الكاميرا من خلال الدالة camera. لتبدأ العرض، اكتب الشيفرة التالية: camera.start_preview() sleep(10) camera.stop_preview() انقر على أيقونة التشغيل "Run" وسيختفي سطح المكتب ويحل مكانه عرضٌ مباشرٌ على كامل الشاشة لما تراه الكاميرا. حاول تحريك الكاميرا أو التلويح بيدك أمام عدساتها وستلاحظ تغيُّر الصورة المعروضة على الشاشة لتطابق التغيير الجاري. يتوقف العرض وينتهي تنفيذ برنامجك بعد عشر ثوانٍ. شكل 7-8 عرض ما تراه الكاميرا على كامل الشاشة. دوّر الصورة إذا ظهرت بزاوية عرضٍ خاطئة حتى تحصل على الاتجاه الصحيح وذلك باستخدام سطر الشيفرة التالي: camera.rotation = 180 بوضعه تحت السطر: camera = PiCamera() إذا كان العرض مقلوبًا رأسًا على عقب، ستجعله تعليمة الدوران السابقة بوضعه الصحيح. تسمح لك تعليمة الدوران بتدوير الصورة بزاوية 90 و 180 و 270 درجة، ويتعلق اختيار زاوية الدوران الصحيحة بمكان خروج كابل الكاميرا إذا كان من يمين تجهيزة الكاميرا أو أعلاها وهكذا. إذًا، تذكّر كتابة تعليمة دوران الصورة في بداية كل برنامج لتفادي العرض الخاطئ. التقاط صور ثابتة يتوجب تعديل برنامجك لالتقاط صورة وتخزينها بدلًا من عرض ما تراه الكاميرا فقط. ابدأ أولًا بتعديل قيمة التأخير الزمني (10)sleep إلى (5)sleep، ثم اكتب السطر التالي بعدها مباشرةً: camera.capture('/home/pi/Desktop/image.jpg') تُخزّن الدالة صورةً ثابتة، ولا بدّ أن تحدد ضمنها اسم الصورة التي تلتقطها ومكان تخزينها. لاحظ أنك تخزن الصورة في الشيفرة السابقة على سطح المكتب، ابحث عنها في جوار "سلة المحذوفات Wastebasket". ابعد نافذة ثوني إذا كانت تعيق الرؤية، ثم انقر على ملف الصورة التي التقطها برنامجك لتراها. تهانينا، لقد كتبت أولى برامجك للكاميرا! شكل 8-8 فتح الصورة التي التقطتها التقاط مقاطع فيديو تستطيع أيضًا تصوير مقاطع فيديو وتخزينها. احذف كل الشيفرة بين الدالتين ()camera.start_preview و()camera.stop_preview، ثم اكتب الشيفرة التالية تحت الدالة الأولى: camera.start_recording('/home/pi/Desktop/video.h264') sleep(10) camera.stop_recording() تعرض الكاميرا ما تراه كما في الحالة السابقة لكنها تسجل في نفس الوقت مقطع فيديو في ملفٍ على سطح المكتب. ستستمر العملية 10 ثوان، لذلك قد تفكر في فعل شيءٍ ما أمام الكاميرا ليبدو الفيديو أكثر تشويقًا، وسيتوقف بعد ذلك التسجيل. يمكنك حينها العودة إلى سطح المكتب ومتابعة الفيديو، حيث ستجده باسم "video.h264"، وستظهر رسالةٌ لطيفة على الطرفية عند انتهاء عرض الفيديو. تهانينا، ستلتقط من الآن فصاعدًا مقاطع فيديو باستخدام كاميرا باي! زر لتحريك الرسوميات سنحاول تصميم مشروعٍ مميز اعتمادًا على ما تعلمته في هذا المقال وخبرتك التي اكتسبتها في توصيل المكوّنات الفيزيائية إلى أرجل المنصة GPIO. سنُصمم استوديو خاص بك لتحريك الرسوميات والصور؛ حيث تمثّل تحريك الرسوميات عملية التقاط الكثير من الصور المتلاحقة لغرضٍ ما أو لشخص، ومن ثم تحريك الصور بتتابعٍ معين ليظهر الغرض وكأنه يتحرك. وبالطبع سترى أن الغرض ساكن إذا نظرت إلى كل صورةٍ على حدى؛ ولكن إذا عرضتها على نحوٍ متتابع بسرعة، فسيبدو وكأنه يتحرك وبالسرعة التي تريد. ستحتاج في هذا المشروع إلى: زر كبس Push button. لوحة اختبار. أسلاك بوصلات طرفية "M2M". زوج أسلاك بوصلات طرفية "M2F". أسلاك بوصلات "F2F"، إذا لم تستخدم لوحة الاختبار، وبالطبع سيصعب عليك عندها ضغط الزر براحة. إذا أردت أن تتذكر أية معلومات عن هذه المكوّنات، عليك مراجعة مقال "البرمجة الفيزيائية باستخدام سكراتش وبايثون". ستحتاج الآن إلى أغراض لتحريكها والتي قد تكون أي شيء، مثل لعبة أو زهرة أو شخصية. جمِّع الدارة أولًا بتثبيت الزر على لوحة الاختبار، ثم صِل مسار التغذية السالب للوحة مع أحد أرجل الأرضية GND للمنصة GPIO بواسطة سلك M2F. استخدم سلك M2M لوصل أحد أرجل الزر بمسار التغذية السالب للوحة وسلك M2F لوصل رجله الأخرى بالرجل GP2 للمنصة GPIO. الشكل 9-8 وصل الزر إلى أحد أرجل المنصة GPIO أنشئ مشروعًا جديدًا في ثوني واحفظه باسم "Stop Motion"، وابدأ بإدراج المكتبات اللازمة لعمل الكاميرا ومنصة GPIO: from picamera import PiCamera from gpiozero import Button camera = PiCamera() button = Button(2) اكتب الآن الشيفرة التالية: camera.start_preview() button.wait_for_press() camera.capture('/home/pi/Desktop/image.jpg') camera.stop_preview() انقر على أيقونة التشغيل وسيظهر على الشاشة العرض المباشر لما تراه الكاميرا؛ حيث سيبقى العرض على الشاشة مستمرًا حتى تضغط على الزر ليختفي العرض المباشر وينتهي برنامجك بعد أن يخزّن الصورة الملتقطة على سطح المكتب. ابحث عن الصورة التي تحمل الاسم "image.jpg" وحاول فتحها للتأكد أن البرنامج يعمل على مايرام. يتطلب تحريك الرسوميات إنشاء كثيرٍ من الصور لتعطي انطباعًا بالحركة عندما تعرض على نحوٍ متتالي، ولهذا ستحتاج إلى مجلدٍ خاص على سطح المكتب لتخزين جميع هذه الصور. انقر على سطح المكتب بالزر اليميني في أي مكانٍ فارغ، ثم اختر الأمر "إنشاء Create New" ثم "مجلد Folder" وسمِّه "animation" (استخدم أحرف صغيرةً بالكامل)، ثم انقر الزر "OK". شكل 10-8 إنشاء مجلد جديد لتخزين الصور التي تلتقطها الكاميرا. ليس مريحًا إعادة تشغيل برنامجك في كل مرة تلتقط فيها صورة، لذا لا بدّ من تغييره ليستخدم حلقة. وعلى خلاف الحلقات التي استخدمناها سابقًا ستحتاج إلى حلقةٍ تنهي العملية بسلاسة؛ فلو أوقفت البرنامج والكاميرا في حالة العرض المباشر، فلن تكون قادرًا على الوصول إلى سطح المكتب بعده! ستحتاج لإنجاز الأمر إلى تعليمتي try وexcept. احذف كل الشيفرة التي تأتي بعد الدالة camera.start_preview، ثم اكتب: frame = 1 تُنشئ هذه التعليمة المتغير الجديد frame وتسند له القيمة 1. يخزِّن البرنامج في هذا المتغير رقم الإطار الحالي وسنستخدمه للتأكُّد من تخزين ملفٍ جديد كل مرة وإلا ستُخزن الصور فوق بعضها كلما ضُغط الزر. سننشئ الآن الحلقة على النحو التالي: while True: try: تخبر التعليمة try بايثون بأن ينفذ ما بداخلها من التعليمات، والتي ستكون تعليمات التقاط الصورة: button.wait_for_press() camera.capture('/home/pi/Desktop/animation/frame%03d.jpg' % frame) frame += 1 نلفت انتباهك إلى عدة حيلٍ ذكية في الشيفرة السابقة وأولها استخدام التعبير 03d%؛ والذي يسمح بإضافة أصفارٍ إلى عددٍ ليُكتب بثلاث خانات؛ أي سيُكتب العدد "1" على النحو التالي "001"، ويكتب العدد "12" على النحو التالي "012". يساعدك هذا الحل على تخزين الصورة وفق الترتيب الصحيح دون أن تخزّن فوق بعضها. أما التعليمة frame% في آخر السطر ستجعل بايثون يستخدم رقم الإطار اسمًا لملف الصورة الملتقطة. يزيد السطر الذي يليه قيمة المتغير frame بمقدار واحد فستتحول قيمته من 1 إلى 2 عند أول ضغطة على الزر وهكذا. سنستخدم التعليمة except لتحديد نهاية عملية التقاط الصور وتخزينها. اكتب الشيفرة التالية منتبهًا للإزاحة؛ ولذلك أزِل مستوًى واحدًا من المسافة البادئة في السطر الأول حتى يعرف بايثون أنها ليست جزءًا من try: except KeyboardInterrupt: camera.stop_preview() break سيبدو البرنامج الكامل على النحو التالي: from picamera import PiCamera from time import sleep from gpiozero import Button camera = PiCamera() button = Button(2) camera.start_preview() frame = 1 while True: try: button.wait_for_press() camera.capture('/home/pi/Desktop/animation/frame%03d.jpg' % frame) frame += 1 except KeyboardInterrupt: camera.stop_preview() break انقر على أيقونة التشغيل "Run"، ثم اضغط مفتاحي لوحة المفاتيح "Ctrl" و"C". ليس بالضرورة ضغط المفتاحين معًا فيكفي ضغط "Ctrl" باستمرار ثم ضغط "C" وتحرير المفتاحين بعدها. ينفِّذ هذان الزران معًا ما يُسمى مقاطعة interrupt مصدرها لوحة المفاتيح لإيقاف عمل البرنامج. وهذا ما يفعله تمامًا السطر: except KeyboardInterrupt: حيث تتوقف عملية التقاط الصور مباشرةً عندما ننفِّذ طلب مقاطعةً بواسطة لوحة المفاتيح؛ وإلا ستعيق نافذة العرض المباشر للكاميرا الوصول إلى سطح المكتب إذا أنهيت البرنامج بالنقر على أيقونة الإيقاف "Stop". على الرغم من تنفيذ بايثون لأية شيفرات صحيحة، لكن في حالتنا يأتي أمر الإيقاف من الشيفرة التي ستنهي العرض المباشر للكاميرا ومن ثم توقِف البرنامج على النحو الصحيح. وهكذا ستكون مستعدًا الآن لتحريك الرسوميات. ثبِّت الكاميرا في مكانٍ مناسب لالتقاط صورة الغرض الذي تريد تحريكه، وتأكد بأنه ثابت لا يتحرك، فإذا تحركت الكاميرا ستُفسد العملية. ضع الغرض في موقعه الأولي، ثم انقر أيقونة التشغيل وراقب العرض المباشر للكاميرا لتتأكد أن كل شيء في مكانه الصحيح. اضغط الزر لالتقاط أول صورة (أول إطار)، ثم حرِّك الغرض بلطف؛ فكلما كان اختلاف الموقع بين الصورتين ضئيًلا كان الرسم المتحرك الناتج أكثر نعومة. اضغط الزر مرةً أخرى لالتقاط الإطار الثاني وحرِّك الغرض وهكذا كرّر العملية حتى تنتهي. كلما زاد عدد الصور المُلتقطة، كلما زادت مدة الرسم المتحرك الذي تصممه. اضغط مفتاحي لوحة المفاتيح "Ctrl+C" لإيقاف البرنامج ثم افتح المجلد "animation" على سطح المكتب بالنقر المزدوج عليه. تحقق من أي صورة بالنقر عليها نقرًا مزدوجًا واستعراض تفاصيلها. شكل 11-8 الصور الملتقطة في المجلد المخصص لها ليس لدينا حتى اللحظة سوى مجلدٍ ممتلئ بالصور الثابتة ولا بدّ من تحويلها إلى فيديو لكي ننشئ الرسم المتحرك الذي نريده. لذلك، انقر على أيقونة باي وانتقل إلى فئة "البرامج الملحقة Accessories"، ثم انقر على برنامج الطرفية "terminal" التي تمثّل واجهة سطر الأوامر(ستُناقش بمزيدٍ من التفصيل في الملحق "C"). بعد أن يكتمل تحميل برنامج الطرفية استخدم الأمر التالي للانتقال إلى المجلد "animation" على سطح المكتب: cd Desktop/animation وانتبه أن يكون الحرف D في كلمة Desktop كبيرًا؛ لأن راسبيان حساسٌ لحالة الأحرف فلن يعمل أي أمر إذا لم تكتبه تمامًا كما هو في الأصل. عندما تنتقل إلى المجلد المطلوب اكتب الأمر التالي: avconv -r 1 -i frame%03d.jpg -r 10 animation.h264 يحمل الأمر السابق البرنامج avconv، الذي يقرأ الصور الثابتة من المجلد ويحوّلها إلى فيديو يُدعى animation.h264. قد يستغرق الأمر عدة دقائق وفقًا لعدد الصور الثابتة في المجلد؛ وستعرف أنه انتهى من عمله عندما ترى محث الطرفية يومض في سطرٍ جديد. ابحث عن الملف "animation.h264" في مجلد الصور وانقر عليه نقرًا مزدوجًا لتشغيله، كما يمكنك استخدام الطرفية بكتابة الأمر التالي: omxplayer animation.h264 بمجرد تحميل الفيديو سترى ما أنجزته. تهانينا، لقد حولت باي إلى أداة لإنشاء الرسوم المتحركة. إذا رأيت أن الفيديو سريع كثيرًا أو بطيء كثيرًا، غيِّر الخيار r 10- في تعليمة تشغيل البرنامج avconv زيادةً أو نقصانًا؛ حيث يتحكم هذا الخيار بمعدل الإطارات المعروضة في الثانية. كلما زاد المعدل كلما كان الفيديو أكثر دقة وسلاسة لكنه سيعرض مشاهدًا أقل في حجم محدد للمقطع. والعكس صحيح، فنقصان المعدل يجعل الملف أقل نعومة لكنه سيعرض مشاهدًا أكثر في نفس الحجم. إذا أردت أخيرًا حفظ مقطع الفيديو انقله إلى المجلد "فيديوهات Videos" وإلا سيُسجَّل مقطع فيديو جديد فوقه في كل مرةٍ تشغِّل فيها برنامجك. الإعدادات المتقدمة للكاميرا إذا أردت التمتُّع بقدرةٍ أكبر على التحكم بإعدادات تجهيزة كاميرا راسبيري باي، يمكنك الاستفادة من مكتبة picamera في بايثون للوصول إلى الإعدادات المختلفة للكاميرا، وقد فصلنا فيما يلي هذه الإعدادات مع قيمها الافتراضية لتستخدمها لاحقًا في برامجك: إعداد الموازنة التلقائية للون الأبيض camera.awb_mode يضبط هذا الإعداد الموازنة التلقائية للون الأبيض في الكاميرا: camera.awb_mode = 'auto’ ويُضبط على أحد الخيارات التالية: off auto افتراضي. sunlight cloudy shade tungsten fluorescent incandescent flash horizon بدِّل بين الخيارات السابقة إذا رأيت الصورة مائلةً للزرقة أو الاصفرار. إعداد الإضاءة camera.brightness يحدّد مقدار إضاءة الصورة الملتقطة. camera.brightness = 50 حيث تكون الصورة مظلمةً عندما تكون قيمة الإعداد 0 وشديدة الإضاءة (أقرب إلى اللون الأبيض) عندما تكون قيمته 100. إعداد التأثيرات اللونية camera.color_effects يغيّر هذا الإعداد التأثيرات اللونية التي تستخدمها الكاميرا، حيث يُترك هذا الإعداد عادةً دون تغيير. camera.color_effetcs = None لكن إن زوّدت الإعداد بزوجٍ من الأرقام، سيغير ذلك طريقة تسجيل الكاميرا للألوان. حاول أن تضع القيمة (128،128) لإنتاج صورٍ بالأبيض والأسود. إعداد وضوح الصورة camera.contrast يضبط هذا الإعداد وضوح الصورة؛ حيث تجعل القيم العالية الصورة أكثر حيوية؛ بينما تجعل القيم المنخفضة الصورة باهتةً جدًا. يمكنك استخدام قيم بين 100- وهي القيمة الدنيا و 100 وهي أعلى قيمة. camera.contrast = 0 إعداد القص camera.crop يسمح لك بقص أجزاءٍ من الصورة من الأطراف أو الأعلى والتقاط الجزء الذي تريده من الصورة. camera.crop = (0.0, 0.0, 1.0, 1.0) حيث تمثّل الأرقام ما بين القوسين إحداثيات X و Y والعرض والارتفاع. تُلتقط الصورة افتراضيًا بأكملها، لكن إن أردت رؤية تأثير هذا الإعداد، حاول تغيير آخر قيمتين إلى 0.5- و 0.5. إعداد التعويضات camera.exposure_compensation يضبط يدويًا كمية الضوء الواصل إلى حساس الكاميرا الضوئي عند التقاط الصورة. camera.exposure_compensation = 0 وعلى خلاف تغيير السطوع brightness يتحكم هذا الإعداد بالكاميرا نفسها وليس بالصورة، ويأخذ قيمه بين 25- (معتمٌ جدًا) إلى 25 (ساطع جدًا). إعداد درجة الإضاءة camera.exposure_mode يضبط نمط التعرض الضوئي exposure (نمط تحديد كمية الضوء التي تصل إلى الحساس الضوئي للكاميرا) أو المنطق الذي تتبعه الكاميرا في تحديد هذه الكمية. camera.exposure_mode = ‘auto’ يأخذ هذا الإعداد هذه القيم: off auto افتراضي night backlight spotlight sports snow beach verylong fixedfps antishake fireworks إعداد معدل التقاط الإطارات camera.framerate يحدِّد عدد الصور التي تلتقطها الكاميرا في الثانية عند تصوير مقطع فيديو أو ما يسمى معدل التقاط الإطارات. camera.framerate = 30 تسمح لك المعدلات العالية بالتقاط فيديوهات أكثر نعومة، لكنها تستهلك حجمًا أكبر في الذاكرة. وبالتالي يرتبط المعدل الالتقاط العالي بانخفاض الدقة المستخدمة التي يمكن التحكم بها أيضًا من خلال الإعداد "camera.resolution". إعداد القلب الأفقي camera.hflip camera.hflip = False يقلب هذا الخيار الصورة الملتقطة أفقيًا أو بالنسبة للمحور X عندما يأخذ القيمة True. إعداد التأثيرات camera.image_effect يطبق هذا الإعداد مجالًا من التأثيرات على تيار الفيديو والتي ستظهر في العرض المباشر وفي الصور والفيديوهات المخزّنة. camera.image_effect = ‘none’ هذه التأثيرات هي: blur cartoon colorbalance colorpoint colorswap deinterlace1 deinterlace2 denoise emboss film gpen hatch negative none oilpaint pastel posterise saturation sketch solarize washedout watercolor إعداد camera.ISO يغيّر إعدادات ISO للكاميرا والتي تؤثر على حساسيتها للضوء. camera.ISO = 0 تضبط الكاميرا هذا الإعداد تلقائيًا وفقًا لكمية الضوء المتاحة. كما يمكنك ضبطه يدويًا باختيار أحد القيم التالية: 100 أو 200 أو 320 أو 400 أو 500 أو 640 أو 800؛ وكلما زادت القيمة تحسَّن أداء الكاميرا في ظروف الإضاءة المنخفضة؛ لكن ستزداد في المقابل خشونة الصور أو الفيديوهات الملتقطة. إعداد camera.meter_mode يتحكم بكيفية تحديد الكاميرا لكمية الضوء المتاح عندما تضبط مقدار تعرضها للضوء. camera.meter_mode = ‘average’ تقسِّم الكاميرا افتراضيًا كمية الضوء التي تصلها بالتساوي على كامل الصورة. وإليك بقية الخيارات: backlit matrix spot إعداد الدقة camera.resolution يضبط هذا الإعداد دقة الصورة أو الفيديو المُلتقط على هيئة زوجٍ من الأعداد يمثّلان العرض والارتفاع. camera.resolution = (1920,1080) يُساعدك اختيار دقةٍ منخفضة على توفير مساحة التخزين وزيادة معدل الالتقاط؛ بينما تسمح لك الدقة العالية في زيادة جودة الصورة لكنها تستهلك مساحة تخزينٍ أكبر. إعداد التدوير camera.rotation يتحكم بزاوية تدوير الصورة. camera.rotation = 0 يأخذ هذا الإعداد قيمًا من 0 درجة مرورًا بالزاوية 90 و 180 و 270 رجوعًا إلى 0. استخدم هذا الخيار عندما لا تكون قادرًا على ضبط موقع الكاميرا وخرج الكابل من أسفل التجهيزة. إعداد الإشباع camera.saturation يضبط هذا الإعداد درجة إشباع الصورة أو درجة وضوح الألوان ويأخذ قيمًا بين 100- و 100. camera.saturation = 0 إعداد الحدة camera.sharpness يضبط هذا الإعداد حدة تمايز ألوان الصورة ويأخذ قيمًا بين 100- و 100. camera.sharpness = 0 إعداد سرعة الغالق camera.shutter_speed يحدد سرعة فتح وإغلاق غالق الكاميرا shutter عند التقاط صورة أو فيديو. camera.shutter_speed = 0 يمكن ضبط هذا الإعداد يدويًا بواحدة الميكرو ثانية، وكلما زادت مدة بقاء الغالق مفتوحًا كان ذلك أفضل للبيئات المنخفضة الإضاءة والعكس صحيح في البيئات عالية السطوع؛ ويفضل أن يبقى هذا الخيار على وضعه الافتراضي بحيث يُضبط من قِبل الكاميرا تلقائيًا. إعداد القلب العمودي camera.vflip يقلب هذا الخيار الصورة الملتقطة عموديًا أو بالنسبة للمحور Y عندما يأخذ القيمة True. camera.vflip= False إعداد التثبيت camera.video_stabilization يفعِّل هذا الخيار تقنية تثبيت الفيديو عندما يأخذ القيمة True. camera.video_stabilization = False فعّل هذا الخيار عندما تتحرك الكاميرا أثناء التسجيل كأن تكون مرتبطة بروبوت أو محمولة باليد، وذلك لتخفيف الاهتزازات في مقطع الفيديو الذي تصوره. يمكنك الاطلاع على مزيدٍ من المعلومات عن الإعدادات السابقة والإعدادات التي لم نذكرها على الموقع الرسمي للمكتبة picamera ترجمة -وبتصرف- للفصل الثامن "The Raspberry Pi Camera Module" من كتاب The official Raspberry Pi beginner's guide. اقرأ أيضًا المقال السابق: الحوسبة الفيزيائية: برمجة راسبيري باي مع لوحة سنس هات Sense HAT بدء استخدام راسبيري باي تعرف على جهاز راسبيري باي Raspberry Pi تجميع راسبيري باي والتحضير لاستعماله
-
يمكن برمجة عمل مكوّنات فيزيائية إضافةً إلى تطوير البرمجيات التي تُنفّذ على الشاشة، مثل المكوّنات الإلكترونية التي تتصل مع باي عبر أرجل المنصة GPIO، أو ما يُعرف باسم الحوسبة الفيزيائية physical computing. يتبادر إلى الأذهان أثناء التفكير بمصطلحي برمجة programming أو كتابة شيفرة Coding، بأنها برمجيات الحاسوب software مباشرةً، لكن الأمر ليس كذلك دومًا؛ فقد نكتب برمجياتٍ تتعامل مباشرةً مع العتاد الصلب hardware، ويُعرف هذا النوع من البرمجة باسم الحوسبة الفيزيائية أو برمجة المكونات الفيزيائية، حيث ترتبط الحوسبة الفيزيائية كما يوحي اسمها بالتحكم بتجهيزات فيزيائية حقيقية؛ فعندما تغيّر برنامجًا في الغسالة الآلية لضبط درجة حرارة حساس الحرارة القابل للبرمجة، أو عندما تضغط زرًا عند إشارة المرور لتعبر الطريق بأمان، فأنت تُنفِّذ حوسبةً فيزيائيةً. يُعد حاسوب راسبيري باي أداة رائعة لتعلم الحوسبة الفيزيائية بفضل منصة أرجل الدخل والخرج ذات الأغراض العامة general-purpose input/output -أو اختصارًا GPIO-. التعرف على منصة الأرجل GPIO ستجد منصة أرجل الدخل والخرج العامة GPIO، المكونة من صفين من الأرجل أو الدبابيس المعدنية عند الحافة العلوية لراسبيري باي، وستمنحك هذه المنصة القدرة على توصيل تجهيزات فيزيائية مثل المؤشرات الضوئية LEDs، أو القواطع switches إلى باي للتحكم بها من خلال برامجٍ تصممها بنفسك. قد يكون اسم المنصة مربكًا، لكنه يصف بالفعل ما تتكون منه، حيث يمكنك استخدام أي رجلٍ لاستقبال إشارةٍ كهربائية وعندها تُدعى رجل دخل input pin أو لإرسال إشارة كهربائية وتدعى عندها رجل خرج output pin. كما تُعرف باسم منصة Header، لأن الأرجل مجمعةٌ ومرتبةٌ وظاهرةٌ على اللوحة الإلكترونية للجهاز، ومن هنا يأتي اسم "منصة الدخل والخرج ذات الأغراض العامة general-purpose input/output header". تتكون المنصة من 40 رجلًا معدنيًا، حيث يمكنك استخدام بعضها في الاتصال مع تجهيزاتٍ خارجية، بينما يزوّدك بعضها بالتغذية الكهربائية، ويُحجز بعضها لأغراض التواصل مع تجهيزات مخصصة لتوسيع راسبيري باي، مثل Sense HAT التي سنشرحها مفصلًا في مقال لاحق. إذًا، هناك فئاتٌ مختلفةٌ للأرجل ولكلٍّ منها وظيفته الخاصة والتي سنلخصها في الجدول التالي: table { width: 100%; } thead { vertical-align: middle; text-align: center; } td, th { border: 1px solid #dddddd; text-align: right; padding: 8px; text-align: inherit; } tr:nth-child(even) { background-color: #dddddd; } نوع الرجل التيار الكهربائي مصدر التغذية والوظيفة أرجل 3V3 تعطي تغذية كهربائية جهدها 3.3 فولت مصدر تغذية كهربائية جهده 3.3 فولت وهو نفسه الجهد الذي يعمل عليه راسبيري باي داخليًا أرجل 5v تعطي تغذية كهربائية جهدها 5 فولت مصدر تغذية كهربائية جهده 5 فولت وهو نفسه الجهد الذي يدخل إلى راسبيري باي عبر منفذ USB-C أرجل الأرضية (Ground (Gnd وتمثل أرجل الأرضية التي يُقاس الجهد بالنسبة إليها وتُعد 0 فولت تُستخدم وصلة الأرضية لإكمال الدارة الكهربائية المرتبطة بمصدر التغذية. أرجل دخل وخرج GPIO XX أرجل الدخل والخرج للأغراض العامة وأرقامها من خانتين XX وهي الأرجل التي تتحكم بسلوكها من خلال برامجك وتُعرّف بأرقام من 2 وحتى 27 أرجل توصيل تجهيزات موسِّعة ID EEPROM أرجل محجوزة لاستخدامات خاصة محجوزة للاتصال بالتجهيزات المرتبطة بالأعلى Hardware Attached on Top -أو اختصارًا HAT- وغيرها من التجهيزات الملحقة. تمنحك المنصة GPIO طريقةً ممتعةً وآمنةً في نفس الوقت لتتمرن على الحوسبة الفيزيائية، لكن ينبغي الحذر في التعامل معها؛ لذلك لا تحاول ثني الأرجل عند فصل أو وصل التجهيزات؛ ولا تصل أبدًا رجلين ببعضهما مباشرةً عن طريق الخطأ أو متعمدًا إذا لم يُطلب منك ذلك بوضوحٍ في توجيهات المشروع الذي تبنيه، حيث تُعرف هذه الحالة بالدارة المقصورة، وقد تؤدي إلى ضررٍ غير قابلٍ للإصلاح في راسبيري تبعًا للأرجل التي قُصرت. العمل مع العناصر الإلكترونية تمثل المنصة GPIO جزءًا فقط مما ستحتاجه لتبدأ مسيرتك في الحوسبة الفيزيائية، بينما تمثل العناصر الإلكترونية، وهي الأجهزة التي ستتحكم بها عبر GPIO، الجزء الآخر. ستجد آلاف العناصر الإلكترونية المتاحة، لكن معظم مشاريع GPIO مكوّنةٌ من العناصر التالية: لوحة اختبار مثقبة breadboard وتعرف أيضًا باللوحة التي لا تحتاج إلى لحام solderless، حيث تسهل هذه الأداة تأمين الاتصال بين العناصر الإلكترونية لمشروعك بسهولة؛ فبدلًا من وصل العناصر عن طريق الأسلاك، تؤمن لك لوحة الاختبار ثقوبًا تدفع فيها أرجل العناصر لتتصل ببعضها عبر مساراتٍ معدنيةٍ مخفيةٍ تحت السطح البلاستيكي للّوحة. ستجد في كثيرٍ من لوحات الاختبار أقسامًا منفصلةً لتوزيع التغذية الكهربائية، وهذا سينعكس على سهولة بناء الدارات. لن تحتاج إلى لوحة الاختبار للبدء بالحوسبة الفيزيائية طبعًا، لكنها أداةٌ مفيدةٌ جدًا. وصلات طرفية jumpers تُستخدم لوصل العناصر الإلكترونية إلى باي أو مع بعضها بعضًا إذا لم تستخدم لوحة الاختبار. يتوفر ثلاثة أنواع من الوصلات الطرفية، هي: وصلة مذكرة- مؤنثة "M2F"، والتي ستحتاجها لوصل لوحة الاختبار مع أرجل المنصة GPIO. وصلة مؤنثة- مؤنثة "F2F"، والتي تُساعد في ربط العناصر ببعضها إذا لم تستخدم لوحة اختبار. وصلة مذكرة- مذكرة "M2M"، وهي تُستخدم لربط نقطةٍ (مجموعة ثقوب متصلة ببعضها) من لوحة اختبار بنقطةٍ أخرى. ستحتاج بعض هذه الأنواع من الوصلات الطرفية أو جميعها تبعًا لمشروعك؛ فإذا استخدمت لوحة الاختبار مثلًا، فلن تحتاج الوصلة F2F. قاطع آني أو زر كبس push button وهو نوعٌ القواطع أو الأزرار مشابهة للتي نستخدمها في مقبض الألعاب، وتأتي عادةً برجلين أو أربعة ويعمل كلاهما مع باي. يُعد زر الكبس عنصر دخل، حيث يمكن لبرنامجك مراقبة هذا الزر عندما يُكبس ليُنفِّذ مهمةً ما. يتواجد أيضًا نوعٌ آخر من القواطع المعروفة باسم القواطع الدائمة latching، وهي تُبقِي التيار الكهربائي موصولًا عند تحويلها إلى وضع التوصيل على خلاف أزرار الكبس، التي يجب عليك الاستمرار في ضغط أزرار الكبس حتى يستمر التيار الكهربائي بالمرور. المؤشرات الضوئية LEDs أو ثنائي المساري الضوئي Light Emitting Diode وهي أجهزة خرج يمكن التحكم بها من خلال البرامج مباشرةً، حيث يُضيء المؤشر عندما يمر فيه التيار الكهربائي، ومن المؤكد أنك تستخدمها في منزلك سواءً الصغيرة منها، مثل التي تنبهك أن غسالتك في وضع التشغيل، أو الكبيرة التي تُنير بها الغرفة. تأتي هذه الأضواء بأشكالٍ وألوانٍ وأحجامٍ كثيرة، لكنها لا تتناسب جميعها مع راسبيري باي، فلا تستخدم تلك التي صُممت للعمل على جهدٍ 5 أو 12 فولت. المقاومات Resistors وهي عناصر إلكترونية تتحكم بتدفق التيار الكهربائي، وتتوفر بقيمٍ متنوعة تُقاس بواحدة الأوم Ohms ويرمز لهذه الواحدة بالرمز Ω. وكلما زادت قيمة المقاومة مقدرةً بالأوم قلَّ تدفق التيار الكهربائي عبرها. تُعد حماية المؤشرات الضوئية من استجرار تيار كهربائي مرتفع قد يؤدي إلى تضررها أو إحداث ضررٍ بباي من أكثر استخدامات المقاومات شيوعًا في مشاريع الحوسبة الفيزيائية الخاصة براسبيري باي، ولهذا السبب ستحتاج إلى مقاوماتٍ قيمتها بحدود Ω 330. يُقدّم الكثير من مزوّدي العناصر الإلكترونية مجموعاتٍ كاملةً من المقاومات تتضمن عددًا من القيم المختلفة للاستخدامات الشائعة مما يمنحك مرونةً أكثر في اختيار المقاومات المناسبة. جرس تنبيه كهروانضغاطي Piezoelectric buzzer ويدعى عادةً منبه buzzer، أو مصوت sounder؛ وهو جهاز خرج يصدر ضجيجًا صوتيًا كما تُصدر المؤشرات الضوئية أضواءً، ويتألف المنبه من غلافٍ بلاستيكي يضم صفيحتين معدنيتين تهتزان باتجاهين متعاكسين عند مرور التيار في الجهاز، فيصدر الصوت المميز له. للمنبه نوعان، فعال Active أو غير فعّال passive، فاحرص على استخدام المنبه الفعّال لأنه أبسط استخدامًا. مكونات وعناصر إلكترونية شائعة مثل المحركات التي تحتاج إلى لوحة تحكمٍ خاصةٍ لتوصيلها إلى باي، وحسّاسات الأشعة تحت الحمراء IR sensors التي تستشعر الحركة، وحسّاسات الرطوبة والحرارة التي يمكن استخدامها لتوقع حالة الطقس، والمقاومات الضوئية LDRs وهي أجهزة دخلٍ تلتقط الضوء على عكس المؤشرات الضوئية. يزوّدك الباعة في كافة أنحاء العالم بمكوّناتٍ مخصصةٍ للحوسبة الفيزيائية لاستخدامها مع راسبيري باي، ويمكن أن تكون مفردةً أو ضمن علب أدوات تزوّدك بكل ما تحتاجه لتبدأ، انظر حولك من الباعة والموزعين المحليين أو أصحاب المتاجر الإلكترونية أو الدوليين الذين يشحنون الطلبات إلى بلدك. لإكمال المشاريع في هذا الفصل ينبغي تأمين العناصر والمكوّنات التالية: ثلاث مؤشرات ضوئية LEDs، أحمر وأخضر وأصفر أو كهرماني. قاطعين آنيين أو زري كبس. منبّه فعّال Active وصلات طرفية من النوعين مذّكرة- مؤنثة "M2F" ومؤنثة-مؤنثة "F2F". لوحة اختبار ووصلات طرفية من نوع مذّكرة- مذّكرة "M2M" ولك الحرية في استخدام هذين المكونين أو عدمه. قراءة الرموز اللونية للمقاومات وتقدير قيمتها تُصنّع المقاومات لتغطي مجالاتٍ واسعةٍ من القيم، ابتداءً من مقاومةٍ معدومةٍ تماثل قطعةً من سلك، وحتى قيمٍ مرتفعةٍ جدًا يمكن أن يصل حجمها إلى حجم ساقك. لن تجد قيمة المقاومة مطبوعةً عليها سوى في بضعةٍ أنواعٍ من المقاومات، وبدلًا من ذلك يستخدم المصنعون ترميزًا لونيًا خاصًا على شكل خطوطٍ أو أشرطةٍ تلتف حول جسم المقاومة. لقراءة قيمة المقاومة: احمل المقاومة بحيث تكون مجموعة الخطوط المتقاربة إلى اليسار والخط المفرد إلى اليمين. انظر إلى لون الخط الأول وخذ القراءة من العمود الأول المُسمى خط أول/ ثانيفي الجدول، ثم انظر إلى الخط الثاني وخذ قيمته من نفس العمود فستحصل على الرقمين الأول والثاني من قيمة المقاومة؛ فلو كان الخطان برتقاليان، فسيكون الرقمان الأول 3 والثاني 3 ويشكلان العدد 33؛ وإذا احتوت المجموعة اليسارية ثلاث خطوط، كرّر الأمر بالنسبة للخط الثالث وستحصل على الرقم الثالث من قيمة المقاومة؛ وفي حال احتوت أربعة خطوط، فعليك الرجوع إلى الإنترنت لقراءة الترميز. table { width: 100%; } thead { vertical-align: middle; text-align: center; } td, th { border: 1px solid #dddddd; text-align: right; padding: 8px; text-align: inherit; } tr:nth-child(even) { background-color: #dddddd; } اللون خط أول/ثاني مضاعفات (خط ثالث) السماحية (الخط المفرد) أسود 0 ×100 - بني 1 ×101 ±1% أحمر 2 ×102 ±2% برتقالي 3 ×103 - أصفر 4 ×104 - أخضر 5 ×105 ±0.5% أزرق 6 ×106 ±0.25% بنفسجي 7 ×107 ±0.1% رمادي 8 ×108 ±0.05% أبيض 9 ×109 - ذهبي - ×10-1 ±5% فضي - ×10-2 ±10% بلا لون - - ±20% يمثّل الخط الثالث أو الرابع في المجموعة اليسارية القيمة الواجب جدائها بالعدد الذي شكلته الخطوط السابقة للحصول على القيمة الاسمية للمقاومة. انتبه إلى أن 100=1 و 101=10 و 102=100 و 103=1000 وهكذا؛ فلو كان الخطان الأول والثاني برتقاليان والثالث برتقالي، فهذا يعني أن قيمة المقاومة هي العدد 33 مضروبًا بالعدد 1000 وستكون النتيجة 3000 أوم. يمثّل الخط المفرد السماحية tolerance؛ وهي مقياسٌ لاقتراب القيمة الاسمية للمقاومة من القيمة الفعلية التي تعطيها، حيث تعني المقاومات الرخيصة التي تأتي بخط سماحيةٍ فضي مثلًا أن القيمة الفعلية للمقاومة ستزيد أو تقل عن القيمة الإسمية بمقدار 10%، أي أن مقاومةً قيمتها الاسمية 1000 أوم قد تكون فعليًا في المجال 900- 1100 أوم؛ بينما تأتي المقاومات المرتفعة السعر مثلًا بخط سماحية رمادي، أي باختلافٍ لا يتعدى 0.05 % أعلى أو أدنى من القيمة الاسمية. لن تؤثر السماحيات كثيرًا في مشاريع الهواة، حيث ستعمل أية مقاومة كما هو مطلوب بغض النظر عن سماحيتها. يبقى علينا الإشارة إلى موضوع المضاعفات، فعندما تتجاوز قيمة المقاومة 1000 أوم ستُقدّر بواحدة الكيلو أوم "kΩ"؛ أي إذا كانت قيمة المقاومة 2200 أوم، فستكتب على الشكل 2.2 كيلو أوم؛ أما عندما تتجاوز قيمته 1000 كيلو أوم أو 1000000 أوم، فستُقدَّر عندها بالميغا أوم "MΩ"، أي إذا كانت قيمة المقاومة 22000000، فستكتب 2.2 ميغا أوم. مشروعك الأول: مرحبا أيها الضوء يمثّل تشغيل مؤشرٍ ضوئي الخطوة التقليدية الأولى في الحوسبة الفيزيائية، تمامًا كما تمثّل طباعة عبارة "!Hello world" على الشاشة الخطوة الأولى لتعلم البرمجة. سنحتاج في مشروعنا هذا إلى: مؤشر ضوئي LED. مقاومة قيمتها 330 أوم أو أية مقاومة قريبةٍ منها وصلات طرفية مؤنثة-مؤنثة. ابدأ بالتحقق من صلاحية المؤشر الضوئي الذي ستستخدمه من خلال قلب لوحة باي حتى تصبح المنصة GPIO عموديةً وفي الجهة اليمنى من اللوحة. صِل أحد طرفي المقاومة 330 أوم إلى أي رجل 3.3 فولت (يُشار إليها في لوحة باي بالرمز 3V3) مستخدمًا سلكًا مزودًا بوصلةٍ طرفية مؤنثة-مؤنثة، ثم صل الطرف الآخر للمقاومة بالرجل الأطول (الرجل الموجبة) للمؤشر الضوئي والتي تُعرف بالمصعد أو الأنود Anode. صِل بعد ذلك الرجل الأقصر (الرجل السالبة) للمؤشر الضوئي والتي تُعرف بالمهبط أو الكاثود cathode إلى أي رجٍل أرضيةٍ GND في المنصة GPIO، كما هو موضحٌ في الشكل التالي. شكل 1-6 صل المؤشر الضوئي إلى أرجل باي ولاتنس المقاومة! سيضيء المؤشر طالما باي يعمل، وإذا لم يحدث ذلك، تأكّد من توصيلات الدارة من خلال التحقق من قيمة المقاومة، حيث من المفترض ألّا تكون عالية جدًا، وتحقق من التوصيل الجيد للأسلاك والوصلات الطرفية، ثم تأكد من استخدامك للأرجل الصحيحة للمنصة GPIO والأرجل الصحيحة للمؤشر الضوئي الذي لن يعمل إلا إذا وصلت رجله الأطول إلى جهدٍ موجب والأخرى إلى جهدٍ سالب، حيث تُعد الرجل الأرضية بمثابة جهدٍ سالب. بمجرد أن يضيء المؤشر فهو جاهزٌ للبرمجة، لذلك افصل الوصلة الطرفية من الرجل "3V3" وصلها بالرجل رقم 25 للمنصة GPIO، والتي يُشار إليها على لوح باي بالرمز GP25، وسينطفئ عندها المؤشر الضوئي. شكل 2-6 افصل السلك عن الرجل 3V3 وصله بالرجل GP25 أصبحت الدارة جاهزةً، وتستطيع الآن كتابة برنامج بلغة سكراتش أو بايثون لتشغيل وإطفاء المؤشر الضوئي. التحكم بالمؤشر الضوئي باستخدام برنامج سكراتش 2 افتح برنامج سكراتش 2 من قائمة راسبيري باي، ثم انقر على زر "كتل أخرى More Blocks" ضمن لوح الكتل البرمجية، واختر بعدها "إضافة موسِّع Add an Extension"، واختر الموسِّع "Pi GPIO" ثم انقر الزر OK. سيُحمّل الأمر الكتل البرمجية اللازمة للتحكم بأرجل المنصة GPIO باستخدام سكراتش، حيث سترى هذه الكتل البرمجية في لوحة الكتل البرمجية ضمن الفئة "كتل أخرى More Blocks". شكل3-6 إضافة الموسِّع Pi GPIO إلى سكراتش 2 ابدأ بسحب الكتلة إلى منطقة بناء البرنامج، ثم ضع تحتها الكتلة . عليك الآن اختيار رقم رجل المنصة الذي تستخدمه، لذلك انقر على السهم الصغير المتجه للأسفل في الكتلة السابقة واختر الرقم 25 من القائمة المنسدلة لتخبر سكراتش أنك ستتحكم بالرجل رقم 25 من المنصة. انقر على الراية الخضراء وسترى أنّ المؤشر يضيء، وهكذا ستكون برمجت بنفسك أول مشروع حوسبةٍ فيزيائية. عند النقر على المثمن الأحمر لإيقاف البرنامج لن ينطفئ المؤشر الضوئي، لأنك أنهيت البرنامج دون أن تخبر باي بأن تطفئه؛ فكل ما طلبته منه في برنامجك هو تشغيله من خلال output high أو خرج مرتفع، وهذا يعني أن تقدّم للرجل جهدًا موجبًا يعادل 3.3 فولت في راسبيري. لإطفائه مجددًا انقر على السهم الصغير المتجه للأسفل والمجاور لعبارة "output high" واختر "output low". انقر على الراية الخضراء مجددًا، فسينطفئ المؤشر. لجعل الأمر أكثر متعةً، أضف كتلة حلقةٍ لا متناهية مع كتلتي لبناء برنامجٍ يومض المؤشر باستمرار أي ينطفئ ثانيةً ويضيء ثانية. انقر على الراية الخضراء وراقب كيف سيضيء المؤشر لمدة ثانية ثم ينطفئ لمدة ثانية ويستمر بالوميض باستمرار دون توقف. انقر على المثمن الأحمر لإيقاف البرنامج وتحقق من حالة المؤشر لحظة إيقاف البرنامج فيما إذا كان يضيء أم لا. التحكم بالمؤشر الضوئي باستخدام بايثون افتح برنامج ثوني Thonny انطلاقًا من قائمة راسبيري باي، ثم انقر أيقونة جديد New في شريط أدوات ثوني لإنشاء برنامجٍ جديد، ثم انقر أيقونة Save لحفظ البرنامج باسم "Hello LED". لا بُدّ من استخدام مكتبة GPIO Zero للتعامل مع أرجل المنصة GPIO، لكننا لن نحتاج إلى المكتبة بأكملها في هذا المشروع. أدرج هذا الجزء من المكتبة بكتابة الأمر التالي: from gpiozero import LED انظر المقال السابق البرمجة باستخدام لغة بايثون للتعرف على بيئة ثوني. ستخبر مكتبة GPIO Zero الآن عن الرجل التي يتصل بها المؤشر الضوئي من خلال الشيفرة التالية: led = LED(25) يعطي السطران السابقان بايثون القدرة على التحكم بالمؤشر الضوئي المتصل براسبيري باي، ويخبرانه بالرجل أو الأرجل في حال كنت تتحكم بأكثر من مؤشرٍ في دارتك. اكتب السطر التالي لإضاءة المؤشر: led.on() والسطر التالي لإطفائه: led.off() تهانينا، فأنت تتحكم بأرجل المنصة GPIO باستخدام بايثون. حاول تكرار تعليمتي التشغيل والإطفاء. في حال كان كان المؤشر مطفأً أصلًا، فلن تُنفَّذ التعليمة: led.off() ويحصل الأمر نفسه إذا استخدمت تعليمة تشغيل المؤشر وهو مضاءٌ أصلًا. لجعل برنامجك أكثر واقعية، اكتب الشيفرة التالية: from gpiozero import LED from time import sleep led = LED(25) while True: led.on() sleep(1) led.off() sleep(1) يُدرج هذا البرنامج الدالة LEDمن المكتبة GPIO Zero والدالة sleep من المكتبة time، ثم يبني حلقةً لا متناهية لتكرار إضاءة المؤشر لمدة ثانية ثم إطفائه لمدة ثانية. انقر على أيقونة التشغيل Run لترى المؤشر يومض. راقب حالة المؤشر عند النقر على أيقونة الإيقاف Stop عندما يكون المؤشر مضاءً أو مُطفأً. استخدام لوحة الاختبار المثقبة سيكون المشروع التالي أسهل تنفيذًا في حال استخدمت لوحة اختبارٍ لترتيب وتوصيل العناصر، حيث يغطي وجه لوحة الاختبار الثقوب الموزعة وفق نظامٍ محددٍ لتلائم العناصر، ويتباعد أي ثقبين عن بعضهما مقدار 2.54 ميليمتر. ستجد أسفل هذه الثقوب شرائطًا معدنيةً تصل بين كل مجموعةٍ من الثقوب كما تفعل الوصلات الطرفية التي تعاملنا معها سابقًا. الشكل: لوحة الاختبار المثقبة تصطف الثقوب في صفوفٍ وأعمدة، وتُقسم اللوحة إلى قسمين، أو ثلاثة أقسامٍ منفصلةٍ من الثقوب، وقد تجد على بعض اللوحات أرقامًا من الأعلى للصفوف وأحرفًا على الجانب للأعمدة لتحديد مكان ثقبٍ معيّن؛ حيث ستجد مثلًا الثقب A1 في الصف 1 والعمود الأول A أقصى وأعلى اليسار، والثقب B3 في الصف الثالث والعمود الثاني B، وهكذا. ترتبط الثقوب في كل صفٍ ببعضها عبر شريطٍ معدني مخفي؛ حيث تمثّل بمجموعها نقطة توصيلٍ واحدة، أي أن كل الثقوب التي تحمل الرقم 1 مرتبطةٌ معًا والتي تحمل رقم 2 كذلك؛ بينما لا ترتبط ثقوب الصف 1 مع ثقوب الصف 2 إطلاقًا ما لم يصل بينهما سلكٌ فيتحول الصفّان إلى نقطةٍ واحدة. يمكن أن تضم لوحات الاختبار الكبيرة شريطين جانبيين من كل جهة، معلّمين بخطين أحمر وأسود، أو أحمر وأزرق، وقد صُممت هذه الأعمدة من الثقوب لتسهيل توصيل التغذية الكهربائية إلى بقية الثقوب، حيث يمكن وصل سلكٍ من رجل راسبيري باي "3V3" أو "5V" إلى خط التغذية ذو اللون الأحمر، والإشارة الموجبة وسلك من الرجل GND إلى الخط الأسود أو الأزرق ذي الإشارة السالبة. تجدر الإشارة إلى أن ثقوب الخط الأحمر متصلةٌ معًا وكذلك ثقوب الخط الآخر، ولا يوجد اتصالٌ أبدًا بين الخطين. من السهل إضافة العناصر الإلكترونية إلى لوحة الاختبار، فما عليك فعله هو ثني أرجل العنصر الإلكتروني الطرية ودفعها بلطفٍ في الثقوب المناسبة حتى تأخذ مكانها. استخدم وصلاتٍ طرفية M2M للوصل بين نقطة (صف ثقوب) وأخرى، ومن النوع M2F لوصل نقاطٍ من اللوحة مع أرجل باي. لا تحاول حشر أرجل عدّة عناصرٍ في ثقبٍ واحد؛ وإذا أردت وصلها معًا، فتذكر أن وضعها في صفٍ واحدٍ يجعلها متصلةً معًا بالشريط المعدني المخفي. مراقبة إشارة صادرة عن ضغطة زر إنّ عملية تمرير التيار الكهربائي من باي إلى المؤشر الضوئي والمعروفة بعملية خرج إشارة، هي أحد شقي الوظيفة المختلطة "دخل/ خرج input/output" لبعض أرجل منصة GPIO، حيث يمكن استخدام الرجل نفسها لاستقبال تيار كهربائي، وتُعرف بعملية دخل إشارة إلى باي أيضًا. سنحتاج في هذا المشروع إلى: لوحة اختبار. أسلاك بوصلات طرفية M2M وأخرى M2F. قاطع آني أو زر كبس. يمكن استخدام أسلاك بوصلة طرفية F2F بدلًا من لوحة الاختبار، لكنك ستواجه صعوبة في الضغط على الزر دون أن تتسبب في تفلّت بعض الأسلاك. ابدأ بإضافة الزر إلى اللوحة؛ فإذا كان للزر رجلين فقط، فعليك حشر كل رجلٍ في صفٍ مختل؛ أما إذا كان للزر أربعة أرجل، فاحشر رجلي الطرف الأول في عمودٍ واحد وسيدخُل رجلي الطرف الثاني تلقائيًا في عمودٍ آخر. صل بين رجل الأرضية GND في باي وخط التغذية السالب على لوحة الاختبار باستخدام سلكٍ ذو وصلاتٍ طرفية M2F، ثم صل أحد أرجل الزر بخط التغذية السالبة مستخدمًا سلك M2M، كما هو موضح في الشكل التالي. أخيرًا، صِل الرجل الآخرى للزر إذا كان ذا رجلين، أو الرجل التي تقع على نفس الجانب إذا كان الزر بأربعة أرجل إلى الرجل GP2 في المنصة GPIO. شكل 4-6 توصيل الزر إلى المنصة GPIO مراقبة إشارة صادرة عن ضغطة زر باستخدام سكراتش ابدأ مشروع سكراتش جديد واسحب الكتلة إلى منطقة بناء البرنامج، ثم أضف تحتها الكتلة وغيّر gpio إلى 2 gpio بالنقر على السهم المجاور واختيار هذه القيمة من القائمة المنسدلة ليتطابق مع الرجل التي وصلتها بالزر. انقر كذلك على السهم الصغير بجوار "output high" وحوِّلها إلى "input" لتهيئة الرجل على أنها رجل دخل لاستقبال الإشارات الكهربائية. لن يحدث الآن شيء عند النقر على الراية الخضراء لأنك أخبرت سكراتش باستخدام الرجل GP2 على أنها رجل دخل، لكنك لم تخبرها ما الذي ستفعله عند تلّقي إشارة الدخل؛ لذلك اسحب الكتلة وضعها في نهاية السلسلة، ثم ضع ضمنها الكتلة ابحث عن الكتلةوضعها في الفراغ الذي يأخذ شكل مسدس داخل الجزء ، ثم انقر على السهم الصغير بجوار "gpio" واختر 2 لتخبر الكتلة الشرطية أن تتحقق من دخل الزر رقم 2 في منصة GPIO. اسحب أخيرًا الكتلة وضعها في فراغ الجزء من الكتلة الشرطية، ثم غيِّر الكلمة "!Hello" إلى "!Button pushed"، ودع الجزء فارغ حاليًا. تجري الكثير من الأحداث في الشيفرة السابقة، لكننا سنبدأ باختبارها أولًا. لذلك انقر الراية الخضراء، ثم اضغط الزر على لوحة الاختبار. من المفترض أن تخبرك الشخصية الاعتيادية على مسرح سكراتش وهي القط أنك ضغطت الزر، وبالتالي ستكون قد أنجزت مهمتك بقراءة إشارة دخل وصلت إلى منصة GPIO بنجاح. ربما لاحظت أن ما داخل الجزء من العبارة الشرطية هو المكان الذي يجب أن توضع فيه الشيفرة الفعلية للتعامل مع الضغط على زر الكبس في لوحة الاختبار، إلا أن هذه الشيفرة في الجزء الآخر . سيسبب هذا الأمر ارتباكًا، لأنك تتوقع أن ضغط الزر سينقل رجل المنصة إلى حالة الجهد المرتفع "high"، لكن الحالة المعاكسة هي الصحيحة في راسبيري باي؛ فعندما تخصص رجلًا من أرجل المنصة على أنها رجلٌ لاستقبال إشارة الدخل، فسيصبح جهدها مرتفعًا "high"؛ وعندما نضغط الزر، فإننا في الواقع سنصل رجل الدخل إلى جهد الأرضية GND، أي سنسحب جهده إلى الحالة المنخفضة "low". أمعن النظر في دارتك، ستجد اتصال الرجل GP2 التي تمثّل الجهد الموجب في الدارة مع رجل الأرضية عن طريق زر الكبس، وبالتالي ستصبح صفرًا (حالة منخفضة) عند ضغط الزر ولن يُنفَّذ الجزء من العبارة الشرطية بل الجزء . تذكر دائمًا أن راسبيري باي تستشعر ضغطة الزر عندما تنتقل حالة رجل الدخل من الحالة المرتفعة إلى المنخفضة. سنضيف الآن مؤشرًا ضوئيًا إلى الدارة؛ لذلك صل الرجل GP25 بمقاومة، وصِل طرفها الآخر برجل المؤشر الضوئي الطويلة، ثم صِل أخيرًا رجل المؤشر الأقصر بخط التغذية السالب في لوحة الاختبار. اِسحب الكتلة خارج الكتلة الشرطية واحذفها، ثم أضِف الكتلة إلى الجزء من العبارة الشرطية، وتذكر اختيار العدد 25 بالنقر على سهم القائمة المنسدلة، ثم أضف الكتلة إلى الجزء الآخر . انقر على الراية الخضراء ثم اضغط الزر. لاحظ أنّ المؤشر سيضيء طالما أنك تستمر بالضغط على الزر، وسينطفئ إذا حررته. تهانينا، تستطيع الآن التحكم برجلٍ من أرجل المنصة GPIO بناءً على إشارة دخلٍ تتلقاها رجلٌ أخرى. مراقبة إشارة صادرة عن ضغطة زر باستخدام بايثون انقر على أيقونة جديد New في شريط أدوات ثوني لتُنشئ مشروعًا جديدًا، ثم احفظه باسم "Button Input". سنستخدم رجلًا من GPIO على أنها رجل دخل بنفس طريقة استخدامها مثل رجل خرج، لكننا سنحتاج إلى جزءٍ آخر من المكتبة GPIO Zero، لذلك اكتب الشيفرة التالية: from gpiozero import Button button = Button(2) لجعل شيفرةٍ ما تعمل عند ضغط الزر، سنستخدم الدالة wait_for_press المدمجة مع المكتبة GPIO Zero، لذلك اكتب الشيفرة التالية: button.wait_for_press() print("You pushed me!") انقر على أيقونة التشغيل Run ثم اضغط الزر، فتظهر العبارة "!You pushed me" في نافذة المفسِّر أسفل نافذة ثوني. تهانينا، لقد قرأت بنجاحٍ إشارة الدخل القادمة إلى المنصة GPIO. انقر من جديد على الأيقونة Run إذا أردت اختبار البرنامج مجددًا، لأن شيفرته لا تحتوي حلقاتٍ لمراقبة الزر على الدوام، وسيتوقف كل شيءٍ بمجرد طباعة العبارة الموجودة في نهاية الشيفرة. أعِد توصيل المؤشر الضوئي والمقاومة إذا لم تكن قد فعلت ذلك وفقًا للطريقة المُعتمدة في الفقرة السابقة. ولقراءة دخل الزر وإضاءة المؤشر، لا بدّ من إدراج جزئي المكتبة GPIO Zero المخصصين لذلك. أضِف سطري الشيفرة التاليين إلى بداية البرنامج: from gpiozero import LED from time import sleep ثم أضِف السطر: led = LED(25) بعد السطر: button = Button(2) ثم احذف سطر التعليمة print وضع مكانها الأسطر التالية: led.on() sleep(3) led.off() سيبدو برنامجك الآن على النحو التالي: from gpiozero import LED from time import sleep from gpiozero import Button button = Button(2) led = LED(25) button.wait_for_press() led.on() sleep(3) led.off انقر على أيقونة Run ثم اضغط على الزر، سيضيء المؤشر لثلاث ثوانٍ ثم ينطفئ وينتهي البرنامج. تهانينا، تستطيع الآن التحكم برجلٍ من أرجل المنصة GPIO بناءً على إشارة دخل تتلقاها رجلٌ أخرى باستخدام بايثون. تشغيل منبه صوتي إن التحكم بجهاز للإنذار والتنبيه باستخدام المؤشرات الضوئية أمرٌ عظيم، لكنه لن يخدمك كثيرًا إذا كنت تنظر بالاتجاه الآخر، وسيكون الحل باستخدام منبهٍ صوتي buzzer مسموعٍ في كل أرجاء الغرفة. سنحتاج في هذه الفقرة إلى: لوحة اختبار. أسلاك بوصلات طرفية منوعة M2F وF2F، إذا لم تشأ استخدام لوحة اختبار. منبه صوتي فعّال Active. يُعامل المنبه الصوتي الفعّال مثل المؤشر الصوتي من ناحية التوصيل والبرمجة. استخدم دارة توصيل المؤشر الضوئي نفسها لكن استبدل المؤشر الضوئي بالمنبه ولا تستخدم مقاومة لأن المنبه يحتاج إلى تيارٍ أعلى ليعمل. إذًا، صِل الرجل "GP15" بأحد رجلي المنبه مباشرةً، وصِل الرجل الأخرى له بأحد أرجل الأرضية "GND" للمنصة GPIO؛ أما في الحالة التي يمتلك فيها المنبه ثلاثة أرجل، صِل الرجل المعلّمة بإشارة "+" إلى رجل "3V3" والمعلمة بإشارة "-" إلى رجل أرضية "GND" والثالثة المُعلّمة بالحرف "s" (إشارة signal) إلى الرجل GP15. شكل 5-6 توصيل المنبه الصوتي إلى المنصة GPIO التحكم بالمنبه الصوتي باستخدام سكراتش أنشئ مشروعًا جديدًا مطابقًا لمشروع تشغيل المؤشر الضوئي، أو حمّله إذا كنت قد خزنته، وغيّر رقم الرجل في الكتل ليصبح 15، وبالتالي سيتحكم سكراتش بالرجل GP15. انقر على الراية الخضراء وسيبدأ المنبه بإصدار صوتٍ لمدة ثانية ثم يتوقف لمدة ثانية. إذا لم يصدر سوى صوت نقرةٍ فقط وليس صوتًا متواصلًا خلال فترة تشغيل المنبه، فما تستخدمه هو منبهٌ غير فعّال passive؛ والذي يحتاج إلى إشارةٍ مهتزةٍ مستمرة حتى تتحرّض الصفيحتان المعدنيتان وتهتزان لإنتاج الصوت؛ بينما يولد المنبه الفعّال active إشارةً مهتزةً سريعة بنفسه. عند تنفيذ برنامج سكراتش على منبهٍ غير فعّال، ستهتز الصفيحتان مرةً واحدةً وتتوقفان بعدها، ويصدر صوت النقرة الذي لن يتكرر حتى يبدّل برنامج سكراتش حالة الرجل من منخفضة إلى مرتفعة. انقر الآن على المثمن الأحمر لإيقاف البرنامج، واحرص أن يكون ذلك عندما لا يصدر المنبه صوتًا، وإلا سيستمر في ضجيجه حتى يعمل البرنامج مرةً ثانية. التحكم بالمنبه الصوتي باستخدام بايثون يُعد التحكم بمنبهٍ صوتي مشابهًا تمامًا للتحكم بمؤشر ضوئي عند استخدام المكتبة GPIO Zero، فللمنبه أيضًا حالتان: تشغيل أو إطفاء. سنحتاج بالطبع إلى دالةٍ مختلفة، وهي buzzer. ابدأ مشروعًا جديدًا في ثوني واحفظه باسم Buzzer، ثم اكتب الشيفرة التالية: from gpiozero import Buzzer from time import sleep عليك أيضًا تحديد رجل GPIO التي تتصل بالمنبه الصوتي، حتى تتمكن من التحكم به، لذا اكتب الشيفرة التالية: buzzer = Buzzer(15) تتطابق بقية الشيفرة مع مثيلاتها التي تتحكم بالمؤشر الضوئي ما عدا أنك ستستخدم كلمة "buzzer" بدلًا من "led"، وأنّ رقم رجل GPIO مختلف. اكتب إذًا الشيفرة التالية: while True: buzzer.on() sleep(1) buzzer.off() sleep(1) انقر على أيقونة Run وستسمع مباشرةً صوت المنبه لمدة ثانية ثم يختفي الصوت مدة ثانية، ولن تسمع سوى صوت نقرةٍ وجيزة كل ثانية بدلًا من صوتٍ مستمر في حال استخدمت منبهًا غير فعّال، كونه يفتقر إلى مولد إشارةٍ قادرٍ على توليد إشارةٍ سريعة التغير لإنتاج اهتزازٍ متواصلٍ للصفيحتين المعدنيتين. انقر الآن على المثمن الأحمر لإيقاف البرنامج، واحرص أن يكون ذلك عندما لا يصدر المنبه صوتًا، وإلا سيستمر في ضجيجه حتى يعمل البرنامج مرةً ثانية. المشروع الثاني: إشارات المرور الضوئية لقد اطلعت حتى الآن على طريقة استخدام المؤشرات الضوئية والأزرار والمنبهات الصوتية مثل أجهزة دخلٍ وخرج، لذلك حان الوقت لتستفيد مما تعلمته في مشروع حوسبةٍ فيزيائيةٍ واقعي، وهو مشروع إشارات مرور ضوئية مزودةٍ بزرٍ يمكنك ضغطه لعبور الشارع. ستحتاج في هذا المشروع إلى: لوحة اختبار. ثلاث مؤشرات ضوئية أحمر وأصفر وأخضر. ثلاث مقاومات قيمة كل منها 330 أوم. منبه صوتي. زر. مجموعة من الأسلاك بوصلات طرفية M2M وM2F. لبناء الدارة: صِل المنبه بالرجل "GP15"، والمؤشر الضوئي الأحمر بالرجل "GP25"، والأصفر بالرجل "GP8"، والأخضر بالرجل "GP7"، والزر بالرجل "GP2"، ولا تنس وصل مقاومة 330 أوم بين الرجل الطويلة لكل مؤشرٍ ضوئي ورجل GPIO المتصل بها، ثم صِل الأرجل القصيرة للمؤشرات بخط التغذية السالب على لوحة الاختبار. صِل أخيرًا خط التغذية السالبة بأي رجلٍ أرضية GND من أرجل GPIO باستخدام سلكٍ ذي نهاياتٍ طرفية M2F. شكل 6-6 مخطط التوصيل لمشروع الإشارات الضوئية ابدأ مشروعًا جديدًا في سكراتش 2 ثم اسحب الكتلة إلى منطقة تنفيذ البرنامج. سنخبر سكراتش بعد ذلك بأن الرجل "GP2" المتصلة بالزر هي رجل دخل وليس خرج؛ لذلك اسحب الكتلة من فئة "كتل أخرى More Blocks" إلى أسفل الكتلة . انقر السهم بجوار الرقم 0 واختر الرقم 2، ثم انقر على السهم الصغير الآخر بجوار "output high" واختر "input". سننشئ تاليًا سلسلة الكتل المتحكمة بإشارات المرور، لذلك اسحب الكتلة إلى منطقة بناء البرنامج، ثم ضع داخلها الكتل التي تسمح بتشغيل وإطفاء المؤشرات الضوئية الثلاث وفق نمطٍ محدد، أي كم ثانية سيعمل الأحمر ثم ينطفئ ثم الأصفر ثم الأخضر. لا تنس أنّ المؤشر الأحمر مرتبطٌ بالرجل "GP25" والأصفر بالرجل "GP8" والأخضر بالرجل "GP7". انقر على الراية الخضراء وراقب المؤشرات الضوئية، حيث سيضيء أولًا المؤشر الأحمر ثم كلا المؤشرين الأحمر والأصفر، ثم ينطفئان ليعمل الأخضر ثم الأصفر وتتكرر العملية. يتناسب النمط السابق مع نمط إشارات المرور في المملكة المتحدة، عدّله بما يناسب النمط المستخدم في بلدك إذا أردت. لمحاكاة مرور المشاة، لا بدّ لبرنامجك من مراقبة الزر إذا ضُغط أم لا. أوقف البرنامج بالنقر على المثمن الأحمر في حال كان يعمل. اسحب الكتلة إلى برنامجك لتكون داخل الكتلة مباشرةً، ثم انقل الكتل التي تتحكم بإشارات المرور إلى الجزء ولا تضع شيئًا في الوقت الحالي ضمن الفراغ الذي سيحمل شرط تنفيذ هذا الجزء. لا يغير المشاة الضوء إلى الأحمر بالضغط على الزر ساعة يشاؤون كي يعبروا الشارع، بل سينتظرون تحوُّل الإشارة إلى الأحمر. لبناء ذلك، اسحب كتلة أخرى تليها كتلة ، ثم اسحب كتلة إلى داخلها، وضع المعامل في فراغ الشرط للجزء ، ثم ضع الكتلة ضمن فراغ المعامل. أنشئ أخيرًا متغيرًا جديدًا باسم "pushed"، ثم ضع الكتلة داخل الجزء من الكتلة الشرطية. ستراقب هذه السلسلة من الكتل الحالة التي يُضغط فيها الزر ومن ثم تسند القيمة 1 إلى المتحول pushed، أي ستتذكر أنك ضغطت على الزر دون أن تنفذ شيئًا في الوقت الحالي. عُد إلى السلسلة السابقة من الكتل واسحب العامل إلى داخل فراغ الشرط في الجزء ، ثم اسحب الكتلة إلى فراغ المعامل الأول واكتب 0 في فراغه الآخر. انقر على الراية الخضراء وراقب الإشارات الضوئية. اضغط الزر على لوحة الاختبار، فلن تلاحظ شيئًا للوهلة الأولى؛ لكن عندما ينتهي نمط عمل الإشارات وذلك بإضاءة المؤشر الأصفر، ستنطفئ المؤشرات الضوئية وتبقى على هذا الحال، وذلك بفضل المتغير pushed. يبقى علينا الآن إسناد مهمةٍ أخرى لزر عبور المشاة غير إطفاء الإشارات. اسحب الكتلة إلى داخل الجزء للكتلة الشرطية في تسلسل الكتل الرئيسي، وتذّكر تغيير رقم الرجل ليطابق الرجل الموصولة مع المؤشر الأحمر. ابقى داخل الجزء وانشئ نمطًا لتشغيل المنبه الصوتي وذلك بسحب الكتلة ووضع تسلسل الكتل التالي: ، ثم ، ثم الكتلة ، ثم ضمنها، ولا تنس تغيير رقم الرجل لتلائم تلك المتصلة مع المنبه. أخيرًا، ضع الكتلة مباشرةً تحت الكتلة وبعدها الكتلة التي تغير قيمة المتغير pushed إلى 0 لتنهي حالة ضغط الزر فلا يتكرر تسلسل تشغيل المنبه إلى ما لانهاية. انقر الآن على الراية الخضراء، ثم اضغط الزر على لوحة التحكم، وبعد انتهاء نمط تشغيل الإشارات الضوئية، سيضيء المؤشر الأحمر ويبدأ المنبه بإصدار صوتٍ ينبه المشاة بأن الوضع آمنٌ لعبور الشارع. سيتوقف الصوت بعد ثانيتين وتعود إشارات المرور إلى العمل وفق النمط المحدد. تهانينا، لقد أنجزت برنامجًا يتحكم بمجموعة إشارات مرورية مزودةٍ بآلية لمساعدة المشاة في العبور الآمن. مشروع بلغة بايثون: لعبة سرعة رد الفعل لقد اطلعت حتى الآن على طريقة استخدام المؤشرات الضوئية والأزرار مثل أجهزة دخل وخرج، لذلك حان الوقت لبناء مشروع حوسبةٍ فيزيائيةٍ واقعي، وهو لعبةٌ مؤلفةٌ من لاعبين لقياس سرعة رد فعل كلٍ منهما وتحديد زمن الاستجابة الأسرع. ستحتاج في هذا المشروع إلى: لوحة اختبار. مؤشر ضوئي. مقاومة 330 أوم. زري كبس. بعض الأسلاك ذات الوصلات الطرفية M2F وM2M. سنبدأ بناء الدارة بوصل الزر الأول الذي نضعه على الجانب اليساري للوحة الاختبار مع الرجل "GP14" للمنصة GPIO، والزر الآخر في الجانب اليميني مع الرجل "GP15". نصل بعد ذلك طرف المقاومة بالرجل "GP4" وطرفها الآخر بالرجل الطولية للمؤشر الضوئي. نصل الأرجل الباقية للزرين والمؤشر مع خط التغذية السالب في لوحة الاختبار، ثم نصل الخط مع أي رجلٍ أرضية GND للمنصة GPIO، كما هو موضح في الشكل التالي. شكل 7-6 توصيل عناصر لعبة رد الفعل الأسرع أنشئ مشروعًا جديدًا في ثوني واحفظه باسم"Reaction Game". سنستخدم لكتابة الشيفرة الدالتين LED و button من المكتبة GPIO Zero، والدالة sleep من المكتبة time. سندرج دالتي المكتبة GPIO Zero على سطرٍ واحد باستخدام الفاصلة ",". اكتب الشيفرة التالية: from gpiozero import LED, Button from time import sleep حدد الآن أرجل GPIO المتصلة مع المؤشر الضوئي والزرين، لذلك اكتب الشيفرة التالية: led = LED(4) right_button = Button(15) left_button = Button(14) أضِف بعد ذلك تعليمات تشغيل وإطفاء المؤشر الضوئي للتحقق من عمله: led.on() sleep(5) led.off() انقر على أيقونة التشغيل Run وسترى أن المؤشر سيضيء مدة خمس ثوانٍ ثم ينطفئ وينتهي البرنامج. لكن سيكون إطفاء المؤشر الضوئي بعد 5 ثوانٍ أمرًا متوقعًا في لعبةٍ مثل التي نبنيها، لذلك أضف السطر التالي: from random import uniform بعد السطر: from time import sleep تتيح لك المكتبة random إمكانية توليد أعدادٍ عشوائية وفق قاعدة التوزيع المنتظم uniform distribution)، لذلك استبدل تعليمة (5)sleep بالسطر التالي: sleep(uniform(5, 10)) إذا شغّلت البرنامج مجددًا، سترى أن المؤشر يضيء مدةً عشوائيةً بين خمس وعشر ثوان. جرّب ذلك بتشغيل البرنامج مراتٍ عديدة وقياس مدة الإضاءة في كلِّ مرة. لاحظ كيف ستختلف أزمنة الإضاءة، مما يجعل توقع لحظة توقف المؤشر عن الإضاءة غير متوقعة. سنضيف الآن الدالة المُسماة pressed لتفعيل عمل زري اللاعبين، لذلك اكتب الشيفرة التالية في آخر برنامجك: def pressed(button): print(str(button.pin.number) + " won the game") تميّز بايثون التعليمات الواقعة داخل دالةٍ من خلال إزاحتها إلى اليمين، وهذا ما يفعله ثوني تلقائيًا. أضِف أخيرًا السطرين التاليين لاستشعار ضغط اللاعب على زره: right_button.when_pressed = pressed left_button.when_pressed = pressed لا تزح السطرين السابقين كي لا يعدّهما بايثون جزءًا من الدالة. شغّل البرنامج وحاول هذه المرة الضغط على أحد الزرين في اللحظة التي ينطفئ فيها المؤشر الضوئي، ستظهر عندها رسالةً في نافذة المفسِّر أسفل نافذة ثوني مفادها أن الزر قد ضُغط، لكن ستظهر الرسالة في كل مرةٍ يُضغط فيها أيٌّ من الزرين دون تمييز، وستعرض رقم الرجل التي تلقت إشارة الزر بدلًا من إظهار اسمٍ ملائمٍ للاعب. لتحسين الوضع، سنبدأ بسؤال اللاعبين عن اسميهما، لذلك اكتب الشيفرة التالية: left_name = input("Left player name is ") right_name = input("Right player name is ") تحت السطر: from random import uniform عُد إلى الدالة واستبدل محتواها بالشيفرة التالية: if button.pin.number == 14: print (left_name + " won the game") else: print(right_name + " won the game") شغِّل البرنامج من جديد، ثم اختر اسمين للاعبين وحاول الضغط على الزر بأقصى سرعة عند توقف إضاءة المؤشر. سترى هذه المرة ظهور اسم اللاعب بدلًا من رقم الرجل، لكن ستظهر الرسالة بمجرد ضغطت الزر دون أن تعرف من هو الأسرع. لإصلاح الأمر سندرج الدالة exit من المكتبة "sys" اختصارًا للكلمة System، تحت آخر سطرٍ لإدراج الدوال في برنامجك: from os import _exit اكتب التعليمة التالية في آخر سطرٍ من أسطر الدالة pressed: _exit(0) وانتبه إلى إزاحة التعليمة بمقدار أربع مسافاتٍ فارغة عن بداية تعريف الدالة لأنها جزءٌ منها. ستنهي هذه التعليمة البرنامج بمجرد أن يُضغط أحد الزرين، وبالتالي يفوز اللاعب الذي يضغط أولًا. سيبدو برنامجك بشكله النهائي على النحو التالي: from gpiozero import LED, Button from time import sleep from random import uniform from os import _exit left_name = input("Left player name is ") right_name = input ("Right player name is ") led = LED(4) right_button = Button(15) left_button = Button(14) led.on() sleep(uniform(5, 10)) led.off() def pressed(button): if button.pin.number == 14: print(left_name + " won the game") else: print(right_name + " won the game") _exit(0) right_button.when_pressed = pressed left_button.when_pressed = pressed شغِّل البرنامج واختر اسمين للاعبيك، ثم انتظر حتى ينطفئ الضوء واضغط على الزرين بأقصى سرعة، فسيظهر فقط اسم اللاعب الأسرع الذي حقق الفوز. ستشاهد أيضًا في نافذة المفسِّر سطرين تظهرهما بايثون، أولهما (Backend terminated (returncode: 0؛ والذي يعني أن بايثون تلّقى الأمر (exit(0_ وأوقف البرنامج، والثاني . . . Use 'Stop/Restart' to restart the backend؛ والذي يخبرك أن البرنامج قد أُوقِف وعليك النقر على أيقونة الإيقاف Stop لإنهائه. شكل 8-6 حالما يتحدد الفائز عليك إيقاف برنامجك تهانينا، لقد أنجزت لعبةً إلكترونيةً حقيقية. ترجمة -وبتصرف- للفصل السادس "Physical computing with scratch and python" من كتاب The official Raspberry Pi beginner's guide. اقرأ أيضًا المقال السابق: البرمجة باستخدام لغة بايثون في تطبيقات راسبيري باي تجميع راسبيري باي والتحضير لاستعماله إنشاء لعبة أضواء باستخدام برنامج سكراتش وحاسوب راسبيري باي لعبة تخفيف التوتر باستخدام سكراتش وحاسوب راسبيري باي تصميم لعبة السلك والحلقة باستخدام برنامج سكراتش وحاسوب راسبيري باي
-
لا يقتصر استخدام راسبيري باي على التعامل مع البرامج التي صممها آخرون، بل بناء برمجياتٍ خاصةٍ بك لتلبية أية احتياجات. سواءٌ امتلكت خبرةً في إنشاء البرامج بكتابة الأوامر والتعليمات أم لا، فستجد منصة راسبيري باي ممتازةً لبناء البرامج واختبارها. تعد لغة سكراتش مفتاحًا إلى كتابة البرامج على باي بأسلوبٍ سهل، وهي لغةٌ برمجةٌ بصرية طوّرها معهد ماساشوسيتس للتكنولوجيا MIT. تعتمد لغات البرمجة التقليدية على كتابة تعليماتٍ نصية ينفّذها الحاسوب كما لو أنك تكتب وصفةً لتحضير كعكة، بينما تساعدك سكراتش scratch على كتابة برنامجك خطوةً بخطوة باستخدام الكتل البرمجية؛ وهي قطعٌ برمجية مكتوبة مسبقًا تُعرَض على شكل قطعٍ مشابهةٍ لقطع الأحجية الملوّنة، كما أن سكراتش scratch لغةٌ ممتازةٌ في بداية مسيرتك في البرمجة سواء كنت صغيرًا أو متقدمًا في السن، ولكن لا تنخدع بمظهرها الودود والملوّن؛ فهي بيئةٌ برمجيةٌ قويةٌ ومتكاملةٌ وظيفيًا وقادرةٌ على كتابة كل ما تتخيله من برمجيات، ابتداءً بالألعاب البسيطة والرسوميات المتحركة وانتهاءً بالبرمجيات التفاعلية المعقدة لمشاريع الروبوتات. ستتعلم في هذا المقال خطواتك الأولى في تعلم البرمجة باستخدام لغة سكراتش التي تعتمد على الكتل البرمجية. تعرف على سكراتش تمثّل المناطق التالية الواجهة الرئيسية للبرنامج بإصداره الثاني: A- المسرح: تتحرك شخصية البرنامج Sprite فيه وفقًا للبرنامج الذي تكتبه. B- الشخصية التفاعلية Sprite: وهي الشخصيات أو الكائنات التي تتحكم بها من خلال برنامج سكراتش وتظهر على المسرح. C- منطقة التحكم بالمسرح: وتُستخدم لتغيير المسرح مثل إضافة الصور والخلفيات. D- قائمة الشخصيات: وتظهر فيها كل الشخصيات التي أنشأتها أو حمّلتها في سكراتش. E- لوحة الكتل البرمجية: وتضم كل القطع البرمجية المتاحة لبرامجك، وتُرتب على شكل فئاتٍ ملونة وفقًا لوظائفها. F- الكتل البرمجية: تضم أسطرًا برمجيةً مكتوبةً مسبقًا ولها وظيفةُ محددة تسمح لك ببناء برنامجك خطوةً بخطوة. G- منطقة بناء البرنامج: حيث تسحب وتفلت الكتل البرمجية ضمنها لتكوين برنامجك. إصدارات سكراتش يأتي راسبيان حتى لحظة إعداد السلسلة بنسختي سكراتش، هما النسخة الأصلية والنسخة المحدّثة 2 وكلاهما ضمن قسم البرامج في قائمة راسبيان. كُتب هذا المقال باستخدام سكراتش 2، فلا تخطئ وتفتح نسخة سكراتش الأصلية، حيث من الممكن أن تختلط عليك الأمور جديًا، ولسوء الحظ لن يعمل سكراتش 2 على Pi Zero نموذج A أو +A أو B أو +B. وتجدر الإشارة أن أحدث الإصدارات هي سكراتش 3. اكتب برنامجك الأول باستخدام سكراتش لفتح سكراتش 2، انقر على أيقونة القائمة، ثم انقل المؤشر إلى فئة البرمجة وانقر على Scratch 2 وستظهر واجهة البرنامج خلال ثوانٍ. يختلف سكراتش عن غيره من لغات البرمجة بأنك لن تصيغ أوامرك للحاسوب على هيئة تعليماتٍ نصية تكتبها بنفسك، بل عن طريق اختيار كتلةٍ برمجيةٍ مناسبة من لوحة الكتل البرمجية. ابدأ رحلتك بالنقر على فئة المظهر Looks ضمن لوحة الكتل البرمجية وسط نافذة البرنامج، حيث ستُظهر لك هذه الفئة كتلًا باللون الأرجواني. ابحث عن الكتلة ، ثم اسحبها إلى منطقة بناء البرنامج إلى يمين النافذة، كما هو موضح في الشكل التالي. شكل 1-4 جر وإفلات كتلة برمجية ألقِ نظرةً على شكل الكتلة التي نقلتها، ستجد فتحةً في أعلاها، وجزءًا بارزًا لوصل الكتلة مع غيرها في الأسفل تمامًا مثل قطعةٍ من لعبة تركيب الأحجيات، وهذا ما يدفعك للتفكير بوجود كتلةٍ قد ترتبط بها من الأعلى وكتلةٍ من الأسفل. ويوجد أعلى الكتلة التي نقلتها للتو في برنامجنا بادئ البرنامج Trigger. انقر على فئة الأحداث Events ضمن لوحة الكتل البرمجية والتي تضم كتلًا ملونةً باللون البني الفاتح، ثم اسحب الكتلة المُسماة بكتلة القبعة إلى منطقة البناء بحيث يلتصق تقريبًا الجزء البارز منها بالفتحة أعلى كتلة ، حيث ستلاحظ ظهور إطارٍ أبيض عند تقريب كتلة القبعة، أفلتها عندئذ. ليس ضروريًا أن تكون دقيقًا في وضع كتلة فوق أخرى، فعندما تقترب كفاية من بعضها ستنزلق في مكانها تمامًا مثل قطعةٍ من قطع أحجية. كرر العملية إذا لم تنجح في المحاولة الأولى. لقد اكتمل برنامجك الآن، انقر على أيقونة الراية الخضراء لتشغيله. إذا سار كل شيءٍ على ما يرام، ستحييك شخصية القط من على المسرح بالعبارة '!Hello'، كما هو موضحٌ في الشكل التالي، وسينتهي برنامجك بنجاح. شكل 2-4 نجاح برنامجك الأول قبل المضي للأمام، اختر اسمًا لبرنامجك واحفظه من خلال النقر على قائمة ملف File، ثم حفظ Save. لدى ظهور نافذة الحفظ، اكتب اسم البرنامج ثم انقر زر حفظ Save، كما هو موضح في الشكل التالي. شكل 3-4 احفظ البرنامج باسم يمكنك تذكره. الخطوة التالية: تتابع الكتل البرمجية يمتلك برنامجك كتلتين فقط وتعليمةً واحدةً تجعل القط يقول '!Hello' في كل مرةٍ يعمل فيها البرنامج بنقر الراية الخضراء. لتطوير برنامجك أكثر، لا بدّ أن تتعلم المزيد عن سَلسَلة الكتل البرمجية Sequencing. تُعد برامج الحاسوب بأبسط وصف لها سلسلةً من التعليمات مثل وصفةٍ لتحضير طبقٍ ما، حيث تُنفَّذ كل تعليمةٍ بعد الأخرى بطريقةٍ منطقية تُدعى السلسلة الخطية. احذف الكتلة بالنقر عليها في منطقة بناء البرنامج، ثم اسحبها إلى لوحة الكتل البرمجية، وبذلك ستبقى فقط كتلة بادئ البرنامج ، كما هو موضحٌ في الشكل التالي. شكل 4-4 لحذف كتلة جرها خارج منطقة البناء ببساطة انقر على فئة الحركة Motion، التي تضم كتلًا باللون الكحلي، ثم اسحب الكتلة وضعها تحت كتلة القبعة (بادئ البرنامج) في منطقة بناء البرنامج، وكما يدل اسمها، فإنها ستُعطي أمرًا لشخصية القط بالتحرك عددًا من الخطوات بالاتجاه الذي يأخذه. سنضيف مزيدًا من التعليمات لتشكل سلسلة. انقر على فئة الصوت Sound، والتي تضم كتلًا باللون الزهري الغامق، ثم انقر على الكتلة واسحبها لتستقر تحت الكتلة ، وأعد النقر مجددًا على فئة الحركة Motion واسحب الكتلة وضعها أسفل كتلة الصوت، ثم انقر على العدد '10' واستبدله بالعدد '-10' لتصبح الكتلة على النحو التالي . انقر الآن على أيقونة الراية الخضراء لتنفيذ البرنامج. سيتحرك القط 10 خطواتٍ إلى اليمين ويصدر الصوت "مياو Meow" (تأكد من وجود مكبر صوت أو سماعة رأس)، ثم يعود إلى نقطة البداية، وسيكرّر القط ما فعله تمامًا عند النقر مجددًا على الراية. تهانينا! لقد أنجزت سلسلةً من التعليمات المتتابعة التي ينفذها سكراتش واحدةً تلو الأخرى من الأعلى إلى الأسفل. نظرًا لتنفيذ سكراتش تعليمةً واحدةً في كل مرة من السلسلة، سيكون التنفيذ سريع جدًا، لذلك حاول أن تحذف الكتلة بإبعاد الكتلة لتنفصل عنها، ثم انقلها خارج منطقة البناء واستبدلها بالكتلة الصوتية الأبسط ، ثم أعد الكتلة لتتصل بها من الأسفل. انقر الراية الخضراء لتشغيل البرنامج من جديد ولن تلاحظ حركة القط. في واقع الأمر، تحرك القط وعاد إلى مكانه دون أن تلاحظ ذلك لأن العملية حدثت بسرعةٍ كبيرة؛ والسبب في ذلك الكتلة التي لا تنتظر الصوت حتى ينتهي قبل أن ينتقل التنفيذ إلى الكتلة التالية، ونظرًا لسرعة راسبيري باي، ستُنفَّذ التعليمة التالية قبل أن تدرك ذلك. سنستخدم طريقةً أخرى للالتفاف على الموضوع دون الحاجة إلى الكتلة ، لذلك سننفِّذ التالي: انقر على فئة التحكم Control، التي تضم كتلًا باللون الذهبي، ثم اسحب الكتلة وضعها بين الكتلة والكتلة . انقر على الراية الخضراء مجددًا وسترى أن القط سينتظر بعد أن يتحرك إلى اليمين ثانيةً واحدةً ثم يعود للخلف، وتُعرف هذه التعليمة بتعليمة التأخير الزمني Delay، وهي الأساس في التحكم بالمدة الزمنية التي سيستغرقها تنفيذ سلسلة التعليمات. تنفيذ حلقة من التعليمات من المؤكد أنك لاحظت تنفيذ سلسلة التعليمات السابقة مرةً واحدةً فقط، حيث يتحرك القط بعد نقر الراية الخضراء، ثم يصدر صوتًا ويعود إلى مكانه، ثم يتوقف البرنامج حتى تنقر الراية مرةً أخرى، ولكن ليس بالضرورة أن تجري الأمور هكذا؛ حيث يقدم سكراتش نوعًا من الكتل البرمجية تُدعى الحلقة Loop. انقر على فئة التحكم Control وابحث عن الكتلة البرمجية ، ثم اسحبها إلى منطقة بناء البرنامج واحشر عارضتها العليا بين الكتلة والكتلة لتضم ضمن عارضتيها بقية الكتل. تتوسع الكتلة التي تأخذ شكل حرف C لتُحيط بمجموعة الكتل البرمجية التي ينبغي تنفيذها بصورةٍ متسلسلةٍ وباستمرار. انقر على الراية الخضراء وستدرك ما تفعله الكتلة ؛ فبدلًا من تنفيذ برنامجك مرةً واحدةً، سيعمل مرةً تلو المرة دون نهاية. تُعرف هذه الفكرة في عالم البرمجة باسم الحلقة اللامتناهية infinite loop؛ أي الحلقة التي لا تنتهي. إذا شعرت بالإزعاج من صوت القط المتكرر، انقر على المثمّن الأحمر بجانب الراية الخضراء لإيقاف البرنامج. اسحب الكتلة والكتل الواقعة أسفلها خارج الكتلة وضعهم جميعًا تحت كتلة القبعة ، ثم اسحب الكتلة خارج منطقة بناء البرنامج لحذفها. انقر واسحب الكتلة وضعها تحت الكتلة لتحيط ببقية الكتل تمامًا كما فعلت سابقتها. انقر على الراية الخضراء لتنفيذ البرنامج. ستعتقد للوهلة الأولى أنه يعيد تنفيذ البرنامج السابق بتكرير التعليمات مرارًا، لكن ما سيحدث أنه سيتوقف عن التنفيذ بعد تكرار التعليمات عشر مرات، وتُعرف هذه الفكرة باسم الحلقة المنتهية definite loop والتي يمكنك فيها تحديد نهاية الحلقة. تُعدّ الحلقات أدواتٍ قويةً برمجيًا، حيث تُستخدم بكثرة خاصةً عند برمجة الألعاب وبرامج تحسس المحيط. استخدام المتغيرات والعبارات الشرطية لا بدّ من المرور أخيرًا على مفهومين هامين قبل البدء بكتابة برامج سكراتش، هما المتغيرات والعبارات الشرطية؛ حيث تُعرّف المتغيرات Variables كما يوحي اسمها، بأنها قيمٌ قابلةٌ للتغيير مع الوقت وبتوجيهٍ من البرنامج. وللمتغيّر خاصيتين رئيسيتين، هما الاسم Name والقيمة Value التي يُخزّنها، وليس بالضرورة أن تكون قيمة المتغير أعدادًا، بل قد تكون كلماتٍ أو نصوصًا أو قيمًا منطقية (صحيح أو خاطئ)، أو أن تكون فارغةً تمامًا وتدعى عندها لا شيء null. المتغيرات أدواتٌ برمجيةٌ فعّالةٌ جدًا، فكّر مثلًا بطريقة تتبع بعض مؤشرات لعبة، مثل سلامة الشخصيات، أو سرعة حركة الأشياء، أو المستوى الحالي للعبة، أو النتيجة فجميعها قيمٌ نتعقبها من خلال متغيرات. انقر على قائمة ملف File واحفظ برنامجك الحالي بالنقر على حفظ المشروع Save Project، ثم ابدأ مشروعًا جديدًا فارغًا بالنقر على جديد New. انقر على فئة البيانات Data التي تضم كتلًا باللون البرتقالي، ثم انقر على الزر 'أنشئ متغيرًا Make a Variable' وسمِّ المتغير بالاسم'loops' كما هو موضحٌ في الشكل التالي، ثم انقر زر OK. ستكون النتيجة سلسلةً من الكتل ضمن لوحة الكتل البرمجية. شكل 5-4 تسمية المتغير انقر ثم اسحب الكتلة إلى منطقة بناء البرنامج، حيث تخبر هذه التعليمة برنامجك أن يجعل قيمة المتغّير صفرًا. انقر بعد ذلك على فئة المظهر Looks واسحب الكتلة إلى أسفل . سيقول القط ما هو مكتوب في الكتلة كما رأينا سابقًا، لكن وبدلًا من ذلك يمكنك استخدام متغيّر. انقر مجددًا على فئة البيانات Data ضمن لوحة الكتل البرمجية، ثم اختر الكتلة التي تُدعى كتلة المُخبر Reporter block، حيث ستجدها في أعلى القائمة وبجوارها مربع تحقق. ضع هذه الكتلة فوق الكلمة '!Hello' ضمن الكتلة . ستكون النتيجة كتلةً برمجيةً مركبةً هي . انقر على فئة أحداث Events ضمن لوحة الكتل البرمجية واسحب الكتلة إلى قمة سلسلة الكتل في منطقة بناء البرنامج. انقر الراية الخضراء وسترى القط يقول '0'، وهي القيمة التي أسندتها للمتغير 'loops'، كما هو موضحٌ في الشكل التالي. شكل 6-4 سيقول القط هذه المرة قيمة المتغيّر يمكن أن تتغير قيم المتغيرات. انقر على فئة البيانات Data في لوحة الكتل البرمجية، ثم انقر واسحب الكتلة إلى أسفل سلسلة الكتل، ثم انقر بعد ذلك على فئة التحكم Control، بعدها انقر واسحب الكتلة وضعها مباشرةً تحت الكتلة بحيث تحيط بقية الكتل في السلسلة. انقر على الراية الخضراء مجددًا، وسترى القط يعد من '0' إلى '9'؛ ويحدث هذا لأن برنامجك يغيّر أو يعدّل قيمة المتغير نفسه، وفي كل مرةٍ تُنفَّذ فيها الحلقة، يضيف البرنامج '1' إلى قيمة المتغيّر 'loops'، كما هو موضحٌ في الشكل التالي. الشكل 7-4 بتعديل قيمة المتغير، يعد القط تصاعديًا الآن يمكن الاستفادة من المتغيرات بما هو أكثر من مجرد تعديل قيمتها. انقر واسحب الكتلة خارج إطار الكتلة وضعها أسفلها، انقر بعد ذلك على الكتلة واسحبها نحو لوحة الكتل البرمجية لحذفها، ثم استبدلها بالكتلة وتأكد بأنها متصلةٌ بأسفل الكتلة وتحيط بالكتلتين الباقيتين. انقر على فئة العوامل Operators التي تضم كتلًا باللون الأخضر، ثم انقر واسحب الكتلة وافلتها في الفتحة المماثلة لها في كتلة . تمكّنك هذه الكتلة من موازنة قيمتين بما في ذلك المتغيّرات. انقر على فئة البيانات Data واسحب كتلة المُخبِر إلى الفراغ الأول للكتلة ثم انقر الفراغ الثاني واكتب العدد '10'. انقر على الراية الخضراء فوق منطقة المسرح وستلاحظ أن البرنامج يعمل مثل السابق، حيث يعد القط من '0' إلى '9' ثم يتوقف البرنامج. يعود السبب في ذلك إلى عمل الكتلة بنفس طريقة عمل الكتلة تمامًا، لكنها توازن قيمة المتغير 'loops' بالقيمة المقابلة في الكتلة وهي '10'، وسيتوقف البرنامج عندما تصل قيمة المتغير إلى '10'، كما هو موضح في الشكل التالي. الشكل 8-4 استخدام الكتلة 'repeat until' مع كتلة عامل الموازنة تُعرف هذه التعليمة باسم عامل الموازنة comparative operator، فهي توازن حرفيًا بين قيمتين. انقر على فئة العوامل Operators ضمن لوحة الكتل البرمجية واطلّع على الكتلتين الباقيتين أعلى وأسفل الكتلة التي تحتوي الرمز '=. لاحظ أنهما كتلتي موازنة أيضًا، حيث يوازن العامل '>' بين قيمتين ويعطي القيمة 'صحيح True' عندما تكون قيمة الطرف الأيسر أصغر تمامًا من قيمة الطرف الأيمن، بينما يحدث العكس عند استخدام العامل '<'. انقر على فئة التحكم Control ضمن لوحة الكتل البرمجية وابحث عن الكتلة ، ثم اسحبها إلى منطقة بناء البرنامج وضعها مباشرةً أسفل الكتلة . ستغلّف تلقائيًا الكتلة لذلك انقر واسحب هذه الأخيرة وضعها لتستقر أسفل الكتلة وليس ضمنها. انقر على فئة المظهر Looks، ثم انقر واسحب الكتلة إلى داخل الكتلة ، وانقر بعد ذلك على فئة العوامل Operators، ثم انقر واسحب الكتلة إلى الفتحة التي تطابقها في الكتلة . الكتلة هي كتلةٌ شرطية، أي أنّ تنفيذ الكتل التي تقع بداخلها مرتبطٌ بتحقق شرطٍ معين. انقر على فئة البيانات Data ثم اسحب الكتلة إلى المربع الفارغ الأول للكتلة ، وانقر بعدها على المربع الفارغ الثاني واكتب '5'، ثم انقر أخيرًا على الكلمة '!Hello' في الكتلة واكتب العبارة 'That’s high' مكانها. شغّل البرنامج بالنقر على الراية الخضراء وسيعمل البرنامج بدايةً كما سبق، حيث سيعُد القط تصاعديًا من الصفر، لكن عند وصول العد إلى الرقم '6' وهو الرقم الأكبر مباشرةً من '5'، ستُفعَّل الكتلة وسيعلّق comment القط على الرقم الأعلى الذي سيظهر، كما هو مبينٌ في الشكل التالي. تهانينا! ستكون قادرًا من الآن فصاعدًا على العمل مع المتغيرات والكتل الشرطية. شكل 9-4 سيُعلِّق القط عندما يصل العد إلى 6 تحدّي الأعلى والأدنى: كيف ستغيّر البرنامج حتى يعلّق القط على الأرقام الأصغر من '5' بدلًا من الأكبر؟ هل يمكنك تغيير البرنامج حتى يعلّق على القيم الأعلى والأدنى من '5'؟ لتبسيط العملية جرّب الكتلة . المشروع الأول: رائد الفضاء الخارق بعد فهم الطريقة التي يعمل بها سكراتش، حان الوقت لإنجاز مشروع تفاعلي أكثر؛ وهو مؤقتٌ يتحكم بأفعال رائد فضاء، حيث صُمم هذا المشروع لتكريم رائد وكالة الفضاء الأوروبية البريطاني "تيم بيك Tim Peake" وللوقت الذي قضاه في محطة الفضاء الدولية. احفظ مشروعك السابق إذا أردت ذلك، ثم افتح مشروعًا جديدًا بالنقر على قائمة ملف File، ثم جديد New، وسمِّ مشروعك قبل أن تبدأ العمل بالنقر على ملف File، ثم حفظ المشروع Save Project، وليكن اسمه 'Astronaut Reaction Timer'. يعتمد المشروع على صورتين، الأولى هي خلفية المسرح، والثانية هي الشخصية ولن تجدهما بالطبع ضمن موارد سكراتش المدمجة وعليك تنزيلها. انقر على أيقونة راسبيري باي، ثم انقل مؤشر الفأرة إلى إنترنت Internet وبعدها إلى متصفح الويب كروميوم Chromium Web Browser وانقر عليه، ثم اكتب العنوان 'rpf.io/astronaut-backdrop' ضمن شريط العنوان عندما يكتمل تحميل البرنامج واضغط على الزر Enter، انقر بعد ذلك بالزر اليميني للفأرة على صورة الفضاء لتظهر لك قائمةٌ اختر منها الأمر حفظ الصورة باسم 'Save image as'، ثم اختر مجلدًا لحفظها وانقر الزر حفظ Save، كما هو مبينٌ في الشكل التالي. الشكل 10-4 حفظ صورة الخلفية انقر على زر التراجع بجوار شريط العنوان ثم اكتب عنوان الصورة الأخرى 'rpf.io/astronaut-sprite' واضغط على الزر Enter. احفظ الصورة الموجودة بنفس الطريقة، وأغلق كروميوم إذا أردت أو استخدم شريط المهام للعودة إلى سكراتش 2. إذا كنت تتابع معنا هذا المقال منذ بدايته فمن المفترض أن تكون واجهة سكراتش 2 مألوفةً بالنسبة إليك. ستعتمد الشروحات في المشاريع القادمة على معرفتك بالأشياء ومواقعها ضمن الواجهة؛ فإذا نسيت أين تجد شيئًا ما، عُد إلى الخلف وانظر إلى الصورة التفصيلية للواجهة التي شرحناها بداية هذا الفصل. انقر بالزر الأيمن للفأرة على شخصية القط الموجودة على المسرح واحذفه، ثم ابحث عن أدوات التحكم بالمسرح الموجودة أسفل ويسار نافذة سكراتش 2 وانقر على أيقونة رفع الخلفيات، والتي ستكون على شكل مجلد مفتوح يخرج منه سهمٌ للأعلى. ابحث عن صورة باسم Space-background.png ضمن مجلد التنزيلات Downloads وانقر عليها، ثم اضغط الزر OK. ستتحول الآن خلفية المسرح البيضاء إلى صورةٍ للفضاء كما هو موضح في الشكل التالي، وستُستبدل منطقة بناء البرنامج بمنطقة الخلفيات التي يمكنك الرسم على الخلفية ضمنها. لإعادة منطقة بناء البرنامج، انقر على النافذة الفرعية Scripts أعلى نافذة سكراتش 2. شكل 11-4 تظهر خلفية الفضاء على المسرح حمّل الشخصية الجديدة بالنقر على أيقونة الشخصيات بجوار عبارة شخصية جديدة 'New sprite' أعلى منطقة الشخصيات. ابحث عن الصورة Astronaut-Tim.png ضمن مجلد تنزيلات Downloads، ثم انقر عليها واضغط الزر OK. ستظهر الشخصية الجديدة تلقائيًا على المسرح وقد لا تكون في المنتصف، انقر عليها واسحبها حتى تصبح أسفل منتصف المسرح بقليل ثم أفلتها، كما هو موضح في الشكل التالي. شكل 12-4 اسحب شخصية رائد الفضاء إلى أسفل منتصف المسرح ستتمكن الآن من إكمال مشروعك بعد أن وضعت الخلفية الجديدة والشخصية المطلوبة في المكان الصحيح. ابدأ الآن بإنشاء متغيرٍ جديد باسم 'time' وتأكد من تفعيل الخيار "جميع الشخصيات For all sprites" ثم اضغط الزر OK. انقر على الشخصية لاختيارها ثم أضف الكتلة إلى منطقة بناء البرنامج، وأضف بعد ذلك الكتلة ، ثم انقر على الكلمة '!Hello' واستبدلها بالعبارة '?Hello! British ESA Astronaut Tim Peake here. Are you ready'. أضِف الكتلة ثم الكتلة وغيّر هذه الأخيرة لتقول 'انقر على الفضاء !Hit Space'. اختر فئة الاستشعار Sensing والتي تضم كتلًا باللون الأزرق الفاتح، ثم أضف الكتلة التي تتحكم بمتغيرٍ خاصٍ مدمجٍ مع سكراتش لأغراض التوقيت وسنستخدمه لتقدير سرعة تفاعلك مع اللعبة. أضِف كتلة التحكم ، ثم ضع كتلة الاستشعار في الفراغ الأبيض ضمنها. سيوقف هذا الأمر البرنامج مؤقتًا حتى تضغط المفتاح SPACE في لوحة المفاتيح. إذًا، سيقيس المؤقت الآن الفترة الزمنية التي تبدأ بظهور الرسالة '!Hit Space' وحتى تضغط المفتاح SPACE. سنجعل رائد الفضاء تيم Tim يخبرك كم الزمن الذي استغرقته حتى ضغطت المفتاح SPACE وبطريقةٍ سهلة القراءة، حيث ستحتاج لتنفيذ الأمر إلى كتلة العوامل . تأخذ الكتلة قيمتين بما في ذلك المتغيرات، ثم تضمهما سويّةً الأول ثم الثاني وهذا ما يُعرف برمجيًا باسم الدمج Concatenation. ابدأ بالكتلة، ثم اسحب الكتلة وضعها فوق الكلمة '!Hello'، واكتب في الفراغ الأول لكتلة الضم العبارة ' Your reaction time was' وتأكد من ترك محرف مسافةٍ فارغةٍ في نهاية الجملة. اسحب كتلة ضمٍ أخرى وضعها في الصندوق الثاني لكتلة الضم السابقة. وأخيرًا اسحب الكتلة من فئة استشعار Sensing، وضعها في الصندوق الفارغ الأول لكتلة الضم الثانية، ثم اكتب كلمة 'seconds ' في الصندوق الفارغ الثاني لكتلة الضم الثانية، وتأكد من وجود مسافةٍ فارغةٍ قبلها. اسحب أخيرًا كتلة البيانات إلى نهاية سلسلة التعليمات، ثم استبدل الرقم '0' بكتلة الإخبار . أصبحت اللعبة الآن جاهزةً للاختبار، لذلك انقر على الراية الخضراء واستعد. اضغط المفتاح SPACE فور رؤيتك للرسالة '!Hit Space' وحاول أن تحطّم زمن اللعبة القياسي. شكل 13-4 حان وقت اللعب يمكنك توسيع المشروع أكثر بحسابك المسافة التقديرية التي ستقطعها محطة الفضاء الدولية وهي تدور حول الأرض خلال الفترة التي استغرقتها حتى تضغط المفتاح SPACE، وذلك بعد الأخذ بالحسبان أن سرعتها تصل إلى 7 كيلومترات في الثانية. أنشئ أولًا متغيرًا باسم 'distance'، ولاحظ كيف تتغير الكتل تلقائيًا في فئة البيانات Data لإظهار المتغير الجديد، وستبقى كتل المتغير السابق في البرنامج كما هي. أضف الكتلة ، ثم اسحب كتلة عامل الجداء وضعها فوق القيمة '0' للكتلة السابقة، ثم اسحب الكتلة وضعها فوق الفراغ الأول لكتلة عامل الجداء واكتب الرقم '7' في الفراغ الثاني لها. ستقرأ الكتلة المركبة التي أنشأتها أخيرًا قيمة المقدار الذي يمثِّل الزمن الذي استغرقته حتى ضغطت المفتاح SPACE مضروبًا بالرقم '7'، وهي المسافة التي ستقطعها محطة الفضاء الدولية خلال هذه الفترة. أضف الكتلة وغيّر الزمن من '1' إلى '4 ثوان'، ثم اسحب كتلةً أخرى وضعها في نهاية السلسلة، وضع ضمنها كتلتي ضم كما فعلت سابقًا. اكتب في الفراغ الأول للكتلة الأولى الجملة ' In that time the ISS travels around' واترك مسافةً فارغةً في نهايتها. ستملأ كتلة الضم الثانية الفراغ الثاني من كتلة الضم الأولى، اكتب في الفراغ الثاني لكتلة الضم الثانية الكلمة 'kilometres ' واترك مسافةً فارغةً قبلها. اسحب كتلة العوامل وضعها في الفراغ الأول لكتلة الضم الثانية، ثم اسحب الكتلة وضعها داخل الفراغ الوحيد للكتلة السابقة. تُدوِّر الكتلة العدد إلى أقرب عددٍ صحيح أكبر أو أصغر منه، وبالتالي ستظهر النتيجة عددًا صحيحًا سهل القراءة بدلًا من عددٍ فائق الدقة صعب القراءة بسبب وجود عددٍ كبيرٍ من الأرقام بعد الفاصلة. انقر على الراية الخضراء لتنفيذ البرنامج لتلاحظ المسافة التي ستقطعها محطة الفضاء الدولية خلال الوقت الذي تستغرقه في ضغط المفتاح SPACE، كما هو موضحٌ في الشكل التالي. تذكر أن تحفظ البرنامج عند الانتهاء لتتمكن من تشغيله مجددًا دون عناء كتابته من جديد. الشكل 14-4 سيخبرك تيم كم المسافة التي قطعتها محطة الفضاء الدولية المشروع الثاني: سباحة فنية متزامنة تستخدم معظم الألعاب أكثر من زر للتحكم بمجرياتها، وسنوضح هذه الفكرة في مشروعنا الحالي باستخدام زري لوحة المفاتيح ← و→. أنشئ مشروعًا جديدًا واحفظه باسم 'Synchronised Swimming'، ثم انقر على المسرح وبعدها على نافذة الخلفيات. انقر على اللون الأزرق المائي ضمن لوحة الألوان، ثم انقر على أيقونة الدلو التي تملأ الخلفية بلونٍ محدد، وانقر بعدها على الخلفية البيضاء للمسرح لتصبح باللون المطلوب، كما يبين الشكل التالي. شكل 15-4 املأ الخلفية باللون الأزرق انقر بالزر الأيمن على شخصية القط، ثم اختر الأمر "حذف delete". انقر على الأيقونة "اختر شخصية من المكتبة choose sprite from library" لتعرض لك مجموعة الشخصيات المدمجة مع سكراتش 2، وانقر على فئة الحيوانات Animals ثم اختر الشخصية 'Cat1 Flying'، وبعدها انقر الزر OK. ستفيدنا هذه الشخصية جيدًا في السباحة أيضًا! شكل 16-4 اختر شخصية من المكتبة انقر على الشخصية الجديدة، ثم اسحب كتلتي أحداث من النوع إلى منطقة بناء البرنامج. انقر في الكتلة الأولى على السهم الصغير المتجه للأسفل بجانب الكلمة 'space' واختر 'left arrow' من قائمة الخيارات، ثم اسحب كتلة الحركة وضعها أسفل كتلة الحدث when left arrow pressed (عند الضغط على السهم الأيسر)، وكرّر نفس العملية على كتلة الحدث الثانية لتغيّر زر 'space' بالزر 'right arrow'، وضع تحتها الكتلة . لاحظ أن مجموعتي الكتل السابقتين ستبقيان منفصلتين ولا تمثلان سلسلةً واحدة. اضغط الزرين ← و→ لاختبار برنامجك، حيث ستلاحظ أن القط سيدور بالجهة التي تريد وفقًا للزر الذي تضغط عليه. انتبه أنك لست بحاجةٍ إلى النقر على الراية الخضراء لتنفيذ البرنامج، لأن كتلة بادئ البرنامج التي استخدمتها سابقًا ستبقى فعّالة دومًا حتى لو لم يكن البرنامج في وضع 'التشغيل running' بالمعنى العام. كرّر الخطوات السابقة مرتين لكن اختر الزرين 'up arrow' و'down arrow' في كتلتي الأحداث وضع الكتلتين و بدلًا من كتلتي الدوران. اضغط الآن على الأسهم في لوحة المفاتيح لترى القط يدور ويسبح إلى الأمام والخلف. لجعل حركة القط أكثر واقعية، يمكنك تغيير مظهره، ويُعرف هذا الأمر في سكراتش بتغيير الزي costume. انقر على شخصية القط ثم على النافذة الفرعية المُسماة أزياء Costumes فوق لوحة الكتل البرمجية، وانقر على الزي 'cat1 flying-a'، ثم انقر على أيقونة 'X' الدائرية التي ستظهر على زاوية الزي اليسارية العليا لحذفه. اختر الزي 'cat1 flying-b' واستخدم الصندوق أعلاه لتغيير الاسم إلى 'right'، كما هو موضحٌ في الشكل التالي. شكل 17-4 إعادة تسمية الزي انقر بزر الفأرة الأيمن على الزي الجديد 'right' في النافذة الفرعية أزياء Costume، ثم انقر 'نسخة أخرى duplicate' لإنشاء نسخةٍ جديدةٍ، ثم انقر على هذه النسخة لاختيارها وسمِّها 'left'. انقر بعد ذلك على أيقونة عكس الاتجاه يمين- يسار وستجدها في شريط الأيقونات بجوار صندوق تغيير اسم الزي في النافذة الفرعية أزياء Costumes، وهكذا ستحصل على زيين، أحدهما 'right' ووجه القط فيه نحو اليمين، والآخر 'left' ووجه القط فيه نحو اليسار، كما هو موضحٌ في الشكل التالي. شكل 18-4 نسخ الزي ثم قلبه وتسميته 'left' انقر على النافذة الفرعية المُسماة منطقة بناء البرنامج Scripts، ثم اسحب إليها كتلتي مظهر من النوع و، وضَعهما أسفل كتلتي الحدث left arrow (عند الضغط على السهم الأيسر) و right arrow (عند الضغط على السهم الأيمن) بحيث يتوافق السهم اليميني مع الزي اليميني واليساري مع اليسار. جرب السهمين اليميني واليساري الآن في لوحة المفاتيح وستلاحظ أن القط يدير وجهه باتجاه الحركة. وللحصول على الطابع الأولمبي للسباحة المتزامنة، سنحتاج إلى المزيد من السباحين، كما سنحتاج إلى طريقةٍ لإعادة ضبط موقع الشخصية. أضِف الكتلة وضع تحتها كتلة الحركة ، وغيّر القيم الصفرية إذا كان ذلك ضروريًا، أضف بعد ذلك الكتلة . عند النقر على الراية الخضراء سيُوجّه القط إلى منتصف المسرح (النقطة (0,0)) وسيشير إلى اليمين. لإنشاء عددٍ أكبر من السباحين، أضف كتلة التحكم بعد تغيير قيمتها الافتراضية '10' إلى '6'، ثم ضع كتلة التحكم داخلها. ولجعل السباحين يتحركون بحيث لا يتوجهون جميعهم إلى نفس الوجهة، أضف الكتلة فوق الكتلة ضمن الكتلة . انقر على الراية الخضراء لترى أن السباحين قد ظهروا! ستحتاج إلى بعض الموسيقى لإكمال اللمسة الأولمبية، لذلك انقر على النافذة الفرعية المُسماة أصوات Sounds والموجودة فوق لوحة الكتل البرمجية، ثم انقر الأيقونة 'اختر صوتًا جديدًا من المكتبة choose new sound from library'. انقر على فئة أصوات موسيقية Music Loops واختار الصوت الذي يعجبك بعد تجريب الأصوات بالنقر على أيقونات التشغيل. اخترنا في برنامجنا الصوت 'dance around'، انقر OK لانتقاء الصوت، ثم انقر على واجهة بناء البرنامج Scripts لفتح منطقة البرنامج مجددًا. شكل 19-4 اختر الموسيقى من مكتبة الأصوات أضف كتلة أخرى إلى منطقة بناء البرنامج، ثم أضف كتلة التحكم . أضف داخل كتلة التحكم الكتلة ، وتذكر أن تضع اسم المقطوعة الموسيقية التي تختارها وليس بالضرورة 'dance around'. انقر على الراية الخضراء لاختبار البرنامج، وانقر على المثمَّن الأحمر لإيقاف البرنامج وإسكات الموسيقى إذا أردت. يمكنك محاكاة رقصةٍ كاملةٍ من خلال إضافة محرّض حدث جديد event trigger إلى برنامجك، ولهذا أضِف كتلة الأحداث ثم الكتلة وتحتها الكتلة ، وضع داخل كتلة التكرار الأخيرة الكتلتين و. انقر على الراية الخضراء، ثم انقر على المفتاح SPACE وشاهد الرقصة. لا تنس حفظ البرنامج عندما تنتهي. شكل 20-4 البرنامج الكامل للسباحة المتزامنة المشروع الثالث: لعبة القوس والسهم لقد بدأت بخط طريقك نحو احتراف سكراتش، لهذا لا بُدّ أن ترفع مستوى التحدي قليلًا بتصميم لعبة قوسٍ وسهم، والتي يُطلب فيها من اللاعب إصابة هدفٍ بقوسٍ مُتأرجحٍ وسهم. لنبدأ بتنزيل موارد اللعبة من ملف ArcheryResources.sb2 مستعينين بمتصفح كروم، حيث تستغرق العملية عدة ثوانٍ فقط. افتح بعدها برنامج سكراتش 2، ثم انقر على قائمة الملف File، ثم اختر تحميل مشروع Load Project. انقر على 'pi' في الجزء اليساري من النافذة وابحث عن المجلد 'تنزيلات Downloads'، وانقر على الملف ArcheryResources.sb2 ثم انقر الزر فتح Open. سيسألك البرنامج إذا كنت تريد استبدال محتوى البرنامج الذي تعمل عليه حاليًا، لذلك انقر إلغاء Cancel ثم احفظ برنامجك أولًا إذا أردت الاحتفاظ به، وإلا انقر الزر OK. شكل 21-4 موارد مشروع القوس والسهم يحتوي المشروع على خلفية وشخصية، ولكن دون أية شيفرات لتشغيل اللعبة، لذا عليك إضافتها بنفسك. ابدأ بإضافة الكتلة ثم الكتلة وانقر فيها على السهم المتجه للأسفل واختر 'رسالة جديدة New Message'، ثم اكتب فيها 'new arrow' قبل النقر على الزر OK. ستظهر الكتلة الآن على الشكل . رسالة البث broadcast هي رسالةٌ يصدرها جزءٌ من البرنامج ويتلقاها جزءٌ آخر؛ ولتستفيد حقيقةً من هذه الرسالة، أضف الكتلة ثم حوّلها لتصبحمن خلال النقر على السهم المتجه للأسفل واختيار 'new arrow'. أضف الكتلتين ثم أسفل الكتلة ، وغيّر القيمة الافتراضية في الكتلتين السابقتين كما يناسبك بعد سحبهما إلى منطقة بناء البرنامج. انقر على الراية الخضراء وراقب ما فعلته حتى اللحظة، حيث ستقفز شخصية السهم التي يستخدمها اللاعب للتصويب على الهدف إلى الزاوية اليمينية السفلى من المسرح ويتضاعف حجمها 4 مرات. لزيادة التحدي في اللعبة، أضف محاكاةً لحركة التأرجح عندما يُشدُّ القوس ويصوّب اللاعب. لفعل ذلك اسحب الكتلة وضع تحتها الكتلة، وغيّر القيمة '1' إلى '0.5'، ثم ضع كتلة العوامل مكان الفراغين اللذان يحملان الرقمين '150' و '-150' في الكتلة السابقة؛ وهذا يعني أنّ السهم سيغيّر اتجاهه على المسرح عشوائيًا وسيبتعد عن الهدف مسافةً عشوائيةً أيضًا، مما سيزيد صعوبة إصابة الهدف. انقر على الراية الخضراء وراقب ما يحدث؛ حيث سيتحرك السهم ضمن المسرح مغطيًا أجزاءًا مختلفةً من الهدف، لكن حتى هذه اللحظة لا توجد وسيلةٌ لإطلاق السهم؛ لذلك اسحب الكتلة وضع بعدها كتلة التحكم ، ثم انقر على السهم المتجه للأسفل في هذه الكتلة وغيّرها إلى كتلة . انقر الراية الخضراء إذا أوقفت برنامجك، ثم اضغط المفتاح SPACE وستلاحظ أن السهم سيتوقف عن الحركة. بداية جيدة، لكنك بحاجةٍ إلى تمثيل السهم متجهًا إلى الهدف؛ لذلك أضف الكتلة واتبعها بالكتلة ، ثم انقر زر الراية الخضراء لتشغيل البرنامج مجددًا، وسيبدو السهم الآن متحركًا نحو الهدف. لجعل اللعبة أكثر متعةً، لا بدّ من وسيلةٍ لإظهار النتيجة؛ لذلك أضف الكتلة وتأكد أنها تحت الكتلة وليس داخلها، ثم ضع داخل الفراغ المخصص في الكتلة كتلة الاستشعار . ولاختيار اللون الصحيح، انقر على المربع الملون داخل الكتلة، ثم انقر على البقعة الصفراء داخل الهدف الموجود على المسرح، وهكذا سيعرف اللاعب أنه حقق نتيجةً برميته. أضِف الكتلتين و داخل الكتلة ، ثم أضف أخيرًا الكتلة بعد الكتلة ، وذلك لتمنح اللاعب سهمًا جديدًا في كل مرةٍ يطلق فيها السهم. انقر على الراية الخضراء لتبدأ اللعبة، وحاول أن تصيب العين الصفراء منتصف الهدف، وإذا فعلتها ستسمع هتافًا تشجيعيًا وستُكافأ بمئتي نقطة. ستعمل اللعبة الآن، لكن حاول استخدام ما تعلمته في هذا الفصل في إضافة نقاطٍ لإصابة الأجزاء الأخرى من الهدف، كأن يحصل اللاعب على 100 نقطةٍ عند إصابة الدائرة الحمراء و50 عند إصابة اللون الأزرق. اطلع على الملحق D، الذي يحمل العنوان "اطلع أكثر" للمزيد من مشاريع سكراتش. ترجمة -وبتصرف- للفصل الرابع "Programming with scratch" من كتاب THE OFFICIAL Raspberry Pi Beginner’s Guide. اقرأ أيضًا المقال التالي: البرمجة باستخدام لغة بايثون في تطبيقات راسبيري باي المقال السابق: جولة في راسبيان: نظام تشغيل راسبيري باي إنشاء لعبة أضواء باستخدام برنامج سكراتش وحاسوب راسبيري باي لعبة تخفيف التوتر باستخدام سكراتش وحاسوب راسبيري باي
-
الآن وبعد أن تعرّفت على سكراتش Scratch في المقال السابق، البرمجة باستخدام سكراتش Scratch في راسبيري، ستكتشف في هذا المقال كيفية كتابة شيفرة نصية باستخدام لغة البرمجة بايثون Python. سُميت اللغة بايثون Python تيمنًا بالفرقة الكوميدية مونتي بايثون Monty Python، وتطورت هذه اللغة التي أنشأها غويدو فان روسوم Guido van Rossum من مشروع هواة أُطلق للمرة الأولى عام 1991 إلى لغة البرمجة المحبوبة التي تقف خلف الكثير من البرمجيات والمشاريع حاليًا. بايثون هي لغة برمجةٍ نصية على عكس اللغة البصرية سكراتش؛ حيث تُكتب التعليمات باستخدام لغةٍ مبسطةٍ وبتنسيقٍ محددٍ ينفذها الحاسوب لاحقًا. تُعد بايثون خطوةً ثانيةً رائعةً في طريق احتراف البرمجة بالنسبة للذين اكتسبوا خبرةً في استخدام سكراتش، حيث تمُدّهم بمرونةٍ أكبر وبيئة عملٍ برمجية تقليدية. وليس الغرض من هذا الكلام إيصال فكرةٍ أن اللغة صعبة التعلم، حيث يمكن لأي مهتم وبقليلٍ من التدريب كتابة برامج بايثون لأغراضٍ مختلفة انطلاقًا من آلة حاسبة بسيطة، وصولًا إلى ألعاب على درجة من التعقيد. بُني هذا المقال على المفاهيم والمصطلحات التي قدمناها في مقال البرمجة باستخدام لغة سكراتش، لذلك ستجد هذا المقال أسهل إدراكًا إذا نفذت التمارين التي شُرحت في المقال السابق، وننصح بالعودة والعمل عليها إذا لم تفعل ذلك بعد. ثوني Thonny: بيئة تطوير بايثون المتكاملة تتألف الواجهة الرئيسية للبيئة من الأجزاء التالية: A- شريط الأدوات: يقدم لك "النمط البسيط simple mode" للبيئة شريط أدواتٍ بأيقوناتٍ مريحةٍ للمستخدم، تساعدك في إنشاء وحفظ وتحميل وتشغيل برامج بايثون، كما تساعدك على اختبار برامجك بطرقٍ عدة. B- منطقة كتابة الشيفرة: وهي المنطقة التي تكتب فيها تعليمات بايثون، وتقسم إلى منطقةٍ رئيسية لكتابة الشيفرة، ومنطقةٍ جانبية طولانية تشكل هامشًا لإظهار أرقام الأسطر. C- منطقة مفسّر أوامر بايثون Python shell: ويسمح لك المُفسِّر في كتابة تعليماتٍ مستقلةٍ، ثم تنفيذها بضغط المفتاح Enter، كما تزوّدك بمعلوماتٍ عن البرامج الجاري تنفيذها. D- منطقة المتغيرات: ويظهر فيها أي متغيرٍ تنشئه في برنامجك، بالإضافة إلى قيمته الحالية، لسهولة المراجعة. انطلق مع بايثون ستجد ثوني مثل غيره من البرامج المثبتة مسبقًا على راسبيان ضمن قائمة راسبيري باي. انقر على الأيقونة ثم انقل مؤشر الفأرة إلى قسم البرمجة Programming، ثم انقر على Thonny Python IDE. ستظهر بعد ثوانٍ واجهة النمط البسيط لثوني والتي تُحمَّل افتراضيًا. يُعَد ثوني Thonny حزمة برمجياتٍ تُعرف باسم بيئة التطوير المتكاملة Integrated Development Environment -أو اختصارًا IDE-. إن التسمية معقدةً في الواقع لكنها سهلة الشرح؛ فهي تجمع أو تُكامل جميع الأدوات المختلفة التي تحتاجها لكتابة وتطوير برمجيات ضمن واجهة عمل أو بيئةٍ واحدة. هناك الكثير من بيئات التطوير التي يدعم بعضها عدة لغات برمجةٍ مختلفة، بينما يدعم البعض الآخر لغةً واحدةً مثل ثوني. وعلى خلاف سكراتش التي تقدم لك كتلًا برمجيةً بصريةً تبني من خلالها برنامجك، ستكتب تعليماتك مثل أي لغة برمجةٍ تقليدية عند استخدام بايثون. ابدأ برنامجك الأول بالنقر ضمن نافذة Python shell أسفل ويسار نافذة ثوني، واكتب التعليمات التالية، ثم اضغط المفتاح Enter. print("Hello, World!") سيعمل البرنامج مباشرةً ويُظهر لك العبارة "!Hello, World" ضمن نفس النافذة، كما هو موضحٌ في الشكل التالي، وهذا ما طلبته تمامًا. فما يفعله مفسر سطر الأوامر shell هو قراءة تعليماتك وتفسير معناها. يًدعى هذه الأسلوب الأسلوب التفاعلي والذي يشابه إلى درجةٍ ما الحوار وجهًا إلى وجه مع أحدهم؛ فعندما تنهي ما تقوله سيرد عليك الشخص الآخر وينتظر حتى تقول شيئًا ما من جديد. شكل 1-5 يطبع بايثون الرسالة Hello, World في نافذة مفسر الأوامر يمكنك كتابة التعليمات في منطقة الشيفرة إلى يسار نافذة ثوني أيضًا. انقر على النافذة واكتب الشيفرة السابقة تمامًا، ثم اضغط المفتاح Enter. لن يحدث شيء هذه المرة، بل سينتقل المؤشر إلى سطرٍ جديد في نافذة الشيفرة، ولا بدّ أن تنقر أيقونة التشغيل Run الموجودة في شريط أدوات ثوني من أجل تنفيذ تعليماتك، حيث سيُطلب منك حفظ برنامجك، لهذا اختر اسمًا مناسبًا، مثل "Hello World"، ثم انقر زر الحفظ Save. ستُطبع الآن هذه العبارة في نافذة المفسِّر بمجرد حفظ برنامجك. >>>> %Run 'Hello World.py' Hello, World! يمثّل السطر الأول توجيهًا للمفسر بتشغيل البرنامج الذي حفظته لتوّك، بينما يمثل الثاني نتيجة التنفيذ. تهانينا، لقد كتبت ونفذت أول برامج بايثون بالاسلوبين التفاعلي والتقليدي (الكتابة في نافذة الشيفرة). شكل2-5 تشغيل برنامجك البسيط الحلقات وإزاحة التعليمات تستخدم سكراتش كما رأينا كتلًا تمثّل شيفراتٍ محضرةً مسبقًا، ثم تربط بين هذه الكتل مثل قطع لعبة الأحجية؛ بينما تمتلك بايثون طريقتها الخاصة في التحكم بتسلسل التعليمات التي يُبنى عليها البرنامج وهي الإزاحة indentation. أنشئ برنامجًا جديدًا بالنقر على الأيقونة جديد New في شريط أدوات ثوني، حيث لن يغلق ثوني برنامجك القديم بل سيفتح إلى جواره نافذةً فرعيةً جديدة. اكتب في النافذة الجديدة التعليمات التالية: print("Loop starting!") for i in range (10): تطبع التعليمة في السطر الأول رسالةً بسيطةً ضمن المفسِّر تمامًا كما فعل البرنامج السابق، بينما يبدأ السطر الثاني تشكيل حلقةٍ محدودةٍ تعمل بنفس الطريقة التي عرفناها في سكراتش؛ حيث يُسنَد العداد i إلى الحلقة ويُعطى سلسلةً من الأعداد عبر التعليمة range والتي تحدد رقم البداية 0 صعودًا حتى 9 دون بلوغ العدد 10. يُخبر رمز النقطتين المتعامدتين ":" بايثون أن التعليمات التالية ستكون جزءًا من الحلقة؛ حيث نلاحظ وجود التعليمات التي ينبغي أن تكون ضمن الحلقة فعلًا داخل الكتلة التي تشبه شكل الحرف "C" في سكراتش؛ بينما يكون الأمر مختلف في بايثون، حيث يجب أن تُزاح بداية أسطر التعليمات الموجودة داخل الحلقة بمقدار أربع مسافاتٍ فارغة بالموازنة مع سطر تعريف الحلقة، وهذا ما يفعله ثوني تلقائيًا عند الضغط على مفتاح Enter بعد السطر الثاني وكتابة التعليمة التالية: print("Loop number", i) ستدفع المسافات الفارغة هذا السطر إلى اليمين موازنةً بالأسطر السابقة، وهذا هو الأسلوب الذي تعتمده بايثون للتمييز بين التعليمات داخل وخارج الحلقة، ونقول عندها أن التعليمات متداخلة Nested. لاحظ أنه بمجرد ضغط المفتاح Enter للانتقال إلى السطر التالي، سيستمر ثوني بإزاحة السطر آخذًا بالحسبان أن السطر الجديد لا يزال ضمن الحلقة، وللتراجع عن ذلك ضع المؤشر في بداية السطر واضغط الزر BACKSPACE مرةً واحدة. print("Loop finished!") وهكذا يكتمل برنامجك ذو الأسطر الأربعة، حيث سيُنفَّذ السطر الأول مرةً واحدةً كونه خارج الحلقة وكذلك السطر الرابع، بينما سيُنفّذ السطر الثالث عشرة مرات لوقوعه ضمن الحلقة التي يُعرّفها السطر الثاني: print("Loop starting!") for i in range (10): print("Loop number", i) print("Loop finished!") انقر على أيقونة التشغيل Run، احفظ البرنامج، وانظر إلى نافذة المفسّر لترى نتيجة التنفيذ: Loop starting! Loop number 0 Loop number 1 Loop number 2 Loop number 3 Loop number 4 Loop number 5 Loop number 6 Loop number 7 Loop number 8 Loop number 9 Loop finished! شكل 3-5 تنفيذ الحلقة إزاحة التعليمات أحد مصادر قوة بايثون، وفي نفس الوقت السبب الأكثر شيوعًا لكي لا يعمل البرنامج كما هو متوقع؛ فعندما تبحث عن أخطاء برنامج بالعملية التي تُدعى تنقيح الأخطاء Debugging، تحقق دومًا من الإزاحة وخاصةً عند ترتيب حلقاتٍ ضمن حلقات. يدعم بايثون أيضًا الحلقات اللامتناهية التي تُنفّذ ما بداخلها من تعليمات دون توقف. لتشاهد ذلك بدّل السطر الثاني من البرنامج ليصبح: while True نفِّذ البرنامج الآن وستحصل على رسالة خطأ: name 'i' is not defined لأنك حذفت السطر الذي أنشأ المتغير i وأسند قيمةً إليه. لإصلاح المشكلة اجعل السطر الثالث على النحو التالي: print("Loop running!") انقر على أيقونة التشغيل Run، وقد ترى العبارة "!Loop starting" إذا كنت سريعًا بما يكفي، لأن ما ستشاهده تاليًا تكرارُ لا ينتهي للعبارة "!Loop running"، ولن ترى بالطبع العبارة "!Loop finished" لعدم وجود نهاية للحلقة، ولدى الانتهاء من طباعة رسالة "!Loop running" يعود مجددّا إلى البداية من جديد، وبالتالي الحلقة لا متناهية. شكل 4-5 حلقة لا متناهية ستستمر حتى توقف البرنامج بنفسك انقر على أيقونة إيقاف Stop في شريط أدوات ثوني لإيقاف عمل برنامجك (مقاطعة عمل البرنامج)، فستظهر لك رسالةً في نافذة المفسِّر وسيتوقف البرنامج دون أن يصل حتى إلى السطر 4. العبارات الشرطية والمتغيرات المتغيرات أدواتٌ برمجيةٌ هامةٌ جدًا في جميع اللغات ولا تقتصر مهمتها على التحكم بالحلقات فقط. ابدأ برنامجًا جديدًا بالنقر على الأيقونة جديد New في شريط أدوات ثوني، ثم اكتب الشيفرة التالية في نافذة الشيفرة: userName = input ("what is your name? ") انقر على الأيقونة Run واحفظ برنامجك بالاسم "Name Test"، ثم راقب ما يحدث في نافذة المفسِّر. ستُسأل عن اسمك، لذلك اكتبه في نافذة المفسِّر واضغط المفتاح Enter. وبما أن برنامجك مكوّنٌ من تعليمةٍ واحدة، فلن يحدث أكثر من ذلك، لكن ستلاحظ ظهور المتغير وقيمته تلقائيًا في نافذة المتغيرات إلى يمين نافذة ثوني كما هو موضحٌ في الشكل التالي، وستبقى المتغيرات في نافذتها حتى عند توقف البرنامج، ليسهل عليك إدراك ما فعله البرنامج. شكل 5-5 تساعدك نافذة المتغيرات على تتبع المتغيرات وقيمها وحتى يقدّم البرنامج شيئًا مفيدًا، ضع عبارة شرطية ضمنه بكتابة التعليمات التالية: if userName == "Clark Kent": print("You are Superman!") else: print("You are not Superman!") لاحظ أن ثوني سيزيح الشيفرة تلقائيًا إذا وجد ذلك ضروريًا، لكنه لا يعرف متى يتوقف عن إزاحة الشيفرة؛ لذلك عليك حذف المسافات الفارغة بنفسك. انقر على الأيقونة "Run" واكتب اسمك في نافذة المفسِّر؛ فإذا صدف وكان اسمك Clark Kent، سترى الرسالة "You are Superman". شغل البرنامج من جديد واحرص أن يكون اسمك Clark Kent بحرفي C وK كبيرين كما هو في الشيفرة تمامًا، سيميّز البرنامج عندها أنك Superman فعلًا، كما هو موضحٌ في الشكل التالي. شكل 6-5 ألا يحب أن تكون في الخارج تحمي العالم يُستخدم الرمز "==" في بايثون للموازنة المباشرة؛ أي سيرى إذا كانت قيمة المتغير userName مطابقة للنص الموجود في برنامجك. يمكنك استخدام عوامل موازنة comparison operators أخرى إذا كنت تتعامل مع الأعداد، مثل العامل "<"، الذي يعني أكبر من، و">"، الذي يعني أصغر من، و"<=" الذي يعني أكبر من أو يساوي، و">="، الذي يعني أصغر من أو يساوي، كما يوجد العامل "=!" ويعني لا يساوي وهو المعاكس المباشر للعامل "==". يمكن استخدام عوامل الموازنة ضمن الحلقات أيضًا. احذف الأسطر من 2 إلى 5 واكتب الشيفرة التالية: while userName != "Clark Kent": print("You are not Superman - try again!") userName = input ("What is your name? ") print("You are Superman!") انقر على الأيقونة Run مرةً أخرى، ستلاحظ سؤال البرنامج عن اسمك مرارًا وتكرارًا حتى تؤكد له أنك "Superman"، كما هو موضحٌ في الشكل التالي، أي حتى تكتب الاسم "Clark Kent" كما لو أنه كلمة سر من نوعٍ ما. إذًا، عليك كتابة الاسم "Clark Kent" حتى تخرج من الحلقة، أو تنقر الأيقونة Stop في شريط أدوات ثوني. تهانينا، لقد تعلمت الآن استخدام العبارات الشرطية وعوامل الموازنة. شكل 7-5 سيستمر البرنامج بسؤالك عن اسمك حتى تكتب Clark Kent المشروع الأول: السلحفاة والثلج طالما أنك تعرّفت على الطريقة التي تعمل بها بايثون فقد حان الوقت للعمل مع الرسوميات وتصميم بلورات الثلج باستخدام أداة تُدعى turtle "سلحفاة". تُصنَّع الأشكال الفيزيائية للروبوتات وفقًا لأسماء الحيوانات التي تحاكيها، لهذا تُصنّع السلاحف على شكل قلمٍ يتحرك وفق خطٍ مستقيم ويلتف ويرتفع أو ينخفض؛ وهذا يعني برمجيًا أن تتحرك وتقف وترسم خطًا عندما تتحرك. لا تمتلك بايثون أداة سلحفاةٍ مدمجة مثل غيرها من اللغات، مثل لغة Logo وتوزيعاتها، لكنها تأتي ضمن مكتبةٍ ذات إضافاتٍ برمجية لتزيد قدرة بايثون. وتُعرف المكتبات Libraries بأنها تجميعاتٌ Bundles لشيفراتٍ تضيف تعليماتٍ جديدة لتوسيع إمكانيات بايثون، ويمكن أن تضمها إلى برامجك من خلال الأمر import. أنشئ برنامجًا جديدًا بالنقر على الأيقونة New، ثم اكتب الشيفرة التالية: import turtle عند استخدام التعليمات التي تتيحها مكتبةٌ ما، لا بُدّ من كتابة اسم المكتبة تليها نقطةٌ، ثم اسم التعليمة. قد يغدو هذا الأمر مزعجًا مع الوقت، لذلك يمكن إسناد هذا الأمر إلى متغيرٍ باسمٍ مختصر قد يكون حرفًا واحدًا مثلًا، لكننا سنختار اسم حيوانٍ أليفٍ لهذه السلحفاة على النحو التالي: pat = turtle.Turtle() ولاختبار السلحفاة لا بدّ أن نعطيها عملًا لتنفّذه، لذلك اكتب الشيفرة التالية: pat.forward(100) انقر الآن على أيقونة التشغيل Run، ثم احفظ برنامجك باسم "Turtle Snowflakes". ستظهر نافذةٌ رسوميةٌ جديدةٌ باسم Turtle Graphics، عندما يعمل البرنامج لتعرض نتيجة التنفيذ، وسترى تحرٌّك السلحفاة "pat" للأمام مقدار 100 وحدةٍ راسمةً خطًا مستقيمًا، كما هو وضحٌ في الشكل التالي. شكل 8-5 تتحرك السلحفاة إلى الأمام وترسم خطًا مستقيمًا عُد إلى نافذة ثوني الرئيسية إذا حجبتها النافذة الرسومية، وذلك بالنقر على نافذة ثوني أو تصغير النافذة الرسومية. انقر على أيقونة الإيقاف Stop لإغلاق النافذة الرسومية. نظرًا لمشقة كتابة كل تعليمة من تعليمات حركة السلحفاة، سنستعمل حلقةً Loop، لذلك احذف السطر الثالث واكتب الشيفرة التالية مكانه: for i in range(2): pat.forward(100) pat.right(60) pat.forward(100) pat.right(120) شغل البرنامج لتشاهد متوازي الأضلاع الذي ترسمه السلحفاة والموضح بالشكل التالي. شكل 9-5 بدمج الانعطافات والحركات يمكن رسم الأشكال ولتحويل الشكل إلى بلورة ثلج، أوقف البرنامج، ثم ضع الحلقة السابقة ضمن حلقةٍ جديدة بتعديل السطر 3 ليصبح على النحو التالي: for i in range(10): ووضع سطر الأوامر التالي في نهاية البرنامج: pat.right(36) لن يعمل البرنامج حاليًا لعدم إزاحة الحلقة الداخلية بصورةٍ صحيحة، لذلك أزح الأسطر من 4 إلى 8 إلى الأمام بإضافة أربع مسافاتٍ فارغة قبل كلٍ منها. إليك الشيفرة الصحيحة: import turtle pat = turtle.Turtle() for i in range(10): for i in range(2): pat.forward(100) pat.right(60) pat.forward(100) pat.right(120) pat.right(36) انقر على أيقونة التشغيل Run وشاهد كيف ترسم السلحفاة متوازي الأضلاع كما فعلت سابقًا، ثم تستدير بزاوية 36 درجة وترسم متوازي أضلاعٍ آخر وتستدير بنفس المقدار وترسم آخرًا وهكذا حتى ترسم 10 أشكالٍ متداخلة، كما هو موضحٌ في الشكل التالي. شكل 10-5 تداخل متوازيات الأضلاع على الشاشة تعطي شكلًا مشابهًا لبلورة الثلج يمكن رسم السلحفاة في بايثون بعدة ألوان. أضف الأسطر التالية قبل السطر الثالث لتدفع الأسطر إلى الأسفل: turtle.Screen().bgcolor("blue") pat.color("cyan") شغَّل برنامجك من جديد لترى تأثير الشيفرة، حيث سيتغير لون خلفية النافذة الرسومية إلى الأزرق ولون بلورة الثلج لتصبح رمادية، كما هو مبينٌ في الشكل التالي. تغيير لون الخلفية ولون شذرة الثلج يمكن اختيار الألوان عشوائيًا من قائمةٍ أيضًا وذلك باستخدام المكتبة random. عُد إلى بداية برنامجك واكتب الشيفرة التالية لتصبح في السطر الثاني: import random غيَّر لون الخلفية في السطر الرابع من اللون الأزرق "blue" إلى اللون الرمادي "grey"، ثم أنشئ متغيرًا جديدًا يُدعى "colours" بكتابة الشيفرة التالية لتحل مكان السطر الخامس: colours = ["cyan", "purple", "white", "blue"] يُعرف النوع السابق من المتغيرات بالقائمة list ويُحدَّد بقوسين مربعين. وضعنا في القائمة بعض الألوان المحتملة لبلورة الثلج وعليك الآن أن تخبر بايثون باختيار لونٍ منها في كل مرةٍ تُكرر فيها الحلقة. أضف في آخر البرنامج الشيفرة التالية وانتبه أن تبتعد عن بداية السطر أربع مسافاتٍ فارغة لتكون ضمن الحلقة الخارجية: pat.color(random.choice(colours)) انقر الآن على أيقونة التشغيل Run وسيرسم البرنامج بلورة الثلج التي تشبه نجمة النينجا من جديد، ولكن ستختار بايثون هذه المرة لونًا مختلفًا لكل متوازي أضلاعٍ من قائمة الألوان السابقة، وهذا يعطي البلورة ألوانًا مبهجة، كما هو موضحٌ في الشكل التالي. شكل12-5 استخدام ألوان عشوائية لرسم بتلات شذرة الثلج ولتظهر البلورة أقرب إلى بلورة الثلج الحقيقية وليس إلى نجمة النينجا، أضف الشيفرة التالية ابتداءً من السطر السادس وتحت قائمة الألوان: pat.penup() pat.forward(90) pat.left(45) pat.pendown() ستدفع التعليمتان penup وpendown بالقلم نحو الورقة وخارجها في روبوت سلحفاة واقعي، لكنهما تخبران السلحفاة في بايثون بالبدء برسم الخط أو التوقف. سنستخدم الآن دالةً بدلًا من الحلقة؛ والدالة function هي مجموعةٌ من التعليمات الممكن استدعائها سويةً في أي وقت كما لو أنك تصمم تعليمة بايثون خاصةٍ بك. ابدأ بحذف شيفرة رسم بلورات الثلج المبنية على متوازي الأضلاع وهي الشيفرة الموجودة بين الأمر: pat.color("cyan") في السطر 10 ضمنًا وحتى الأمر: pat.right(36) في السطر 17. اترك الأمر: pat.color(random.choice(colours)) بعد أن تضع الرمز "#" في بداية السطر، ويُعرف ذلك بتعليق السطر؛ أي أن بايثون سيتجاهل تنفيذه. يمكن أيضًا استخدام "#" لإضافة ملاحظاتٍ عن شيفرتك، لجعلها سهلة الفهم وخاصةً عندما تعود لقرائتها بعد عدة أشهرٍ، أو إذا أردت إرسالها إلى شخصٍ آخر. أنشئ دالتك التي سنسميها ()branch، وذلك بكتابة الشيفرة التالية في السطر العاشر تحت تعليمة ()pat.pendown مباشرةً: def branch(): ستعرف التعليمة السابقة الدالة ()branch، وسيضيف ثوني تلقائيًا إنزياحًا للتعليمات التي ستأتي ضمن الدالة. اكتب الشيفرة التالية وانتبه جيدًا إلى الإزاحة، لأنك سترتّب شيفراتٍ متداخلة وفق ثلاث سوياتٍ من الإزاحة: for i in range(3): for i in range(3): pat.forward(30) pat.backward(30) pat.right(45) pat.left(90) pat.backward(30) pat.left(45) pat.right(90) pat.forward(90) أخيرًا، أضف حلقةً إلى نهاية برنامجك لكن قبل سطر الاختيار العشوائي للون، والذي وضعت الرمز "#" قبله، وذلك لاستدعاء الدالة التي أنشأتها: for i in range(8): branch() pat.left(45) ستبدو الشيفرة الكاملة للمشروع على النحو التالي: import turtle import random pat = turtle.Turtle() turtle.Screen().bgcolor("grey") colours = ["cyan", "purple", "white", "blue"] pat.penup() pat.forward(90) pat.left(45) pat.pendown() def branch(): for i in range(3): for i in range(3): pat.forward(30) pat.backward(30) pat.right(45) pat.left(90) pat.backward(30) pat.left(45) pat.right(90) pat.forward(90) for i in range(8): branch() pat.left(45) # pat.color(random.choice(colours)) انقر على أيقونة التشغيل Run وراقب السلحفاة وهي ترسم بلورة الثلج وفقًا لتعليماتك. تهانينا، تبدو بلورة الثلج الآن أكثر واقعية، وهذا موضحٌ في الشكل التالي. شكل 13-5 تمنح التفرعات الإضافية شذرة الثلج شكلًا أكثر واقعية المشروع الثاني: إيجاد الاختلافات المخيفة يمكن لبايثون التعامل أيضًا مع الصور والأصوات، وسنستخدم ذلك في تصميم لعبة إيجاد الاختلاف بين صورتين لكن مع نكهةٍ مرعبةٍ لتفاجئ اللاعب. يحتاج المشروع إلى صورتين، الأولى هي الصورة الرئيسية وتتكون من قسمين متناظرين مع اختلافاتٍ محدودةٍ جدًا، والثانية هي الصورة المرعبة التي ستظهر فجأة. كما نحتاج أيضًا إلى ملفٍ صوتي لتعزيز التأثير المرعب. انقر على أيقونة راسبيري باي وانتقل إلى المتصفح كروميوم، ثم اكتب في شريط الأدوات العنوان rpf.io/spot-pic وبعدها اضغط المفتاح Enter. بعد ان يحمل المتصفح الصور، انقر عليها بالزر اليميني للفأرة واختر "حفظ الصورة باسم Save image as"، ثم خزنها في المجلد home/pi/، وكرّر نفس الأمر لتنزيل الصورة الأخرى من العنوان rpf.io/scary-pic. يختلف الأمر بالنسبة للملف الصوتي الموجود على العنوان rpf.io/scream، حيث سيبدأ المتصفح كروميوم بتنزيل الملف تلقائيًا إلى مجلد "التنزيلات Downloads"، لذلك لا بُدّ من نقله إلى المجلد home/pi/. لنقل الملف، انقر على أيقونة راسبيري باي مرورًا بفئة البرامج الملحقة Accessories، ثم انقر على برنامج مدير الملفات File Manager، وافتح مجلد التنزيلات Downloads وابحث عن ملفٍ باسم "scream.wav". انقر على الملف بالزر اليميني، ثم اختر قص Cut، ثم انتقل إلى المجلد home/pi/ وانقر على أيّ مكانٍ فارغٍ من نافذته بالزر اليميني، ثم اختر لصق Paste. يمكنك الآن إغلاق كروميوم ومدير الملفات. انقر على الأيقونة جديد New في شريط أدوات ثوني لإنشاء مشروعٍ جديد، حيث سنستخدم هنا أيضًا مكتبةً جديدةً تدعى "Pygame" لتوسيع إمكانيات بايثون، ويُلمِّح اسم هذه المكتبة كما نرى إلى علاقتها بالألعاب. اكتب الشيفرة التالية: import pygame سنحتاج في هذا المشروع إلى إدراج أجزاءٍ محددةٍ من المكتبة Pygame بالإضافة إلى أجزاءٍ من مكتباتٍ أخرى، ولتنفيذ ذلك اكتب الشيفرة التالية: from pygame.locals import * from time import sleep from random import randrange تختلف التعليمة from عن التعليمة import بأنها تدرج جزءًا محددًا من المكتبة بدلًا من إدراجها بالكامل. أما الآن فعلينا إعداد المكتبة Pygame، وتدعى هذه العملية التهيئة initialisation، حيث تحتاج Pygame معرفة ارتفاع وعرض جهاز العرض الذي تستخدمه أو ما يُسمى دقة جهاز العرض، لذلك اكتب الشيفرة التالية: pygame.init() width = pygame.display.Info().current_w height = pygame.display.Info().current_h أما الخطوة النهائية في تهيئة Pygame فهي إنشاء نافذة العرض التي تُدعى شاشة وفق مصطلحات المكتبة. اكتب الشيفرة التالية لإنجاز ذلك: screen = pygame.display.set_mode((width, height)) pygame.quit() يشير الفراغ بين السطرين السابقين إلى أن شيفرة برنامجك ستكون بينهما. انقر على أيقونة التشغيل Run واحفظ برنامجك باسم"Spot the difference" ثم راقب التنفيذ. ستُنشئ المكتبة نافذةً بخلفيةٍ سوداء لا تلبث أن تختفي مباشرةً نظرًا لتنفيذ تعليمة الخروج **()quit**، كما ستلاحظ امتلاء نافذة المتغيرات بعددٍ كبيرٍ من المتغيرات الجديدة التي ولّدتها Pygame تلقائيًا، كما هو موضحٌ في الشكل التالي. لا تلقِ بالًا لهذا الآن. شكل 14-5 لا تلق بالًا للمتغيرات الجديدة التي ستظهر في نافذة المتغيرات لعرض الصورة الأولى من أجل إيجاد الاختلاف بين قسميها، اكتب في الفراغ بين سطري الشيفرة السابقين السطر الجديد التالي: difference = pygame.image.load('spot_the_diff.png') ولتملأ الصورة شاشة العرض، لا بدّ من تغيير أبعاد الصورة لتتناسب مع دقة جهاز العرض الذي تستخدمه، لهذا اكتب الشيفرة التالية: difference = pygame.transform.scale(difference, (width, height)) أصبحت الصورة جاهزةً الآن في الذاكرة وعليك عرضها على الشاشة بعملية تُعرف باسم نقل البتات blitting، لذلك اكتب الشيفرة التالية: screen.blit(difference, (0, 0)) pygame.display.update() ينقل السطر الأول الصورة إلى الشاشة، بينما يطلب السطر الثاني من Pygame تحديث الشاشة، وستبقى الصورة دون السطر الثاني في مكانها الصحيح، لكنها في الذاكرة ولن تتمكن من رؤيتها. انقر على أيقونة Run، ستظهر الصورة على الشاشة لبرهة وتختفي، كما هو موضحٌ في الصورة التالية. الشكل 15-5 الصورة الأساسية للعبة "جد الاختلافات" لعرض الصورة مدةً أطول، اكتب الشيفرة التالية: sleep(3) في السطر الذي يسبق التعليمة: pygame.quit() انقر على أيقونة التشغيل Run وسترى أن الصورة ستُعرض لفترةٍ أطول على الشاشة. أضف الآن الصورة المفاجِئة إلى برنامجك بكتابة الشيفرة التالية: zombie = pygame.image.load('scary_face.png') zombie = pygame.transform.scale(zombie, (width, height)) تمامًا قبل السطر: pygame.display.update() أضف تأخيرًا زمنيًا لتبقى صورة الزومبي المخيفة فترةً أطول بكتابة الشيفرة التالية: sleep(3) وانقل أخيرًا بتات صورتك إلى الشاشة وحدّثها ليرى اللاعب الصورة المخيفة. لتنفيذ ذلك، اكتب الشيفرة التالية: screen.blit(zombie, (0,0)) pygame.display.update() انقر على أيقونة التشغيل Run وراقب ما يحدث. ستظهر الصورة الأساسية للعبة لكن ستحل محلها صورة الزومبي المخيفة بعد ثلاث ثوان، كما هو موضحٌ في الشكل التالي. شكل 16-5 سترعب أحدهم بالتأكيد لكن ظهور الصورة المرعبة بعد ثلاث ثوانٍ سيجعل الأمر متوقعًا، ولتفادي ذلك بدّل السطر: sleep(3) الذي يقع قبل تعليمة نقل بتات الصورة المخيفة بالسطر التالي: sleep(randrange(5, 15)) تختار التعليمة السابقة عددًا عشوائيًا بين 5 و 15 وتؤخر البرنامج هذه المدة. سنحمّل الآن الملف الصوتي وذلك بإضافة السطر التالي: scream = pygame.mixer.Sound('scream.wav') فوق تعليمة التأخير الزمني الأخيرة مباشرةً. سنشغل الملف الصوتي بعد عرض الصورة المخيفة فورًا بكتابة التعليمة: scream.play() ثم ضع تعليمة إيقاف الصوت: scream.stop() قبل التعليمة الأخيرة في البرنامج: pygame.quit() انقر على أيقونة التشغيل Run واستمتع بإنجازك؛ فبعد عرض الصورة البريئة التي سيجد اللاعب الاختلافات بين قسميها، ستظهر فجأة صورة الزومبي المخيفة مع صوتٍ دمويٍ مخيف. إذا ظهرت صورة الزومبي قبل أن يبدأ الصوت، يمكنك تعديل ذلك بإضافة تأخيرٍ زمني بسيط وفق التعليمة: sleep(0.4) قبل السطر: screen.blit(zombie, (0,0)) ستبدو الشيفرة الكاملة للمشروع على النحو التالي: import pygame from pygame.locals import * from time import sleep from random import randrange pygame.init() width = pygame.display.Info().current_w height = pygame.display.Info().current_h screen = pygame.display.set_mode((width, height)) difference = pygame.image.load('spot_the_diff.png') difference = pygame.transform.scale(difference, (width, height)) screen.blit(difference, (0, 0)) pygame.display.update() zombie = pygame.image.load('scary_face.png') zombie = pygame.transform.scale (zombie, (width, height)) scream = pygame.mixer.Sound('scream.wav') sleep(randrange(5, 15)) scream.play() screen.blit(zombie, (0,0)) pygame.display.update() sleep(3) scream.stop() pygame.quit() كل ما عليك فعله الآن هو دعوة أصدقائك للعب، وتأكد من توصيل مكبرات الصوت. المشروع الثالث: المتاهة بعد أن تعرّفت أكثر على بايثون، حان الوقت لاستخدام مكتبة Pygame في إنجاز مشروعٍ أكثر تعقيدًا، وهو لعبة متاهة ووحشٌ يلاحق اللاعب، مبنيةٌ على تعليماتٍ نصية، حيث تُعرف هذه الألعاب بالمغامرات ذات الأوامر الكتابية أو الخيال التفاعلي، وتعود إلى الزمن الذي لم تتمكن فيه الحواسب من التعامل مع الرسوميات وأصرَّ حينها معجبوا هذه الأجهزة بأن الرسوميات الأكثر وضوحًا هي تلك التي نرسمها في مخيلتنا. يُعدُّ هذا البرنامج أكثر تعقيدًا من البرامج السابقة في هذا المقال، لذلك كُتبت شيفرته جزئيًا لتسهيل الأمر. نزّل شيفرة المشروع بفتح متصفح كروميوم وكتابة العنوان التالي rpf.io/rpg-code في شريط العناوين ثم الضغط على المفتاح Enter، حيث ستجد الشيفرة عند اكتمال التنزيل التلقائي في مجلد التنزيلات Downloads. عُد الآن إلى ثوني وانقر أيقونة التحميل Load، ثم ابحث عن الملف rpg-rpg.py في مجلد التنزيلات Downloads وانقر على زر التحميل Load. انقر الآن على أيقونة التشغيل Run لتتعرف على الطريقة التي تُنفَّذ فيها المغامرات الكتابية، وسيظهر الخرج في نافذة المُفسِّر أسفل نافذة ثوني. كبِّر نافذة ثوني لتسهل عليك القراءة. اللعبة بسيطةٌ جدًا كما تبدو الآن. هناك غرفتان دون أغراض، ويبدأ اللاعب في الصالة، وهي أولى الغرفتين. اكتب 'go south' للذهاب نحو المطبخ، ثم اضغط المفتاح Enter، كما هو موضحٌ في الشكل التالي؛ واكتب 'go north' للعودة من المطبخ إلى الصالة. يمكنك أيضًا كتابة أوامر، مثل 'go west' أو 'go east'، ولكن ستظهر لك رسالة خطأ لعدم وجود غرفٍ في هذه الاتجاهات. شكل17-5 هنالك غرفتان فقط حتى الآن انقر على أيقونة الإيقاف Stop لإيقاف البرنامج، وانظر إلى المتغير rooms ضمن نافذة المتغيرات، ويُدعى هذا النوع من المتغيرات القاموس، واسُتخدِم من أجل إخبار اللعبة بالغرف المتوفرة وإلى أيِّ غرفةٍ يقود طريقٌ معين. يمكنك الانتقال إلى السطر 29 من الشيفرة لرؤية النقطة التي أُنشئ فيها هذا المتغير وكيف استُعمل. لجعل اللعبة أكثر متعةً، أضِف غرفةً جديدةً هي غرفة الطعام شرق الصالة. لتنفيذ ذلك، ابحث عن المتغير rooms في الشيفرة ووسِّعه بوضع فاصلة "," بعد القوس "{" في السطر 38، وأضِف الشيفرة التالية، دون التدقيق كثيرًا على الإزاحة في القاموس: 'Dining Room' : { 'west' : 'Hall' } ستحتاج أيضًا إلى مخرج للغرفة فلن تولّده الشيفرة تلقائيًا؛ لذلك انتقل إلى بداية السطر 33 وأضِف فاصلة "," ثم أضِف السطر التالي: 'east' : 'Dining Room' انقر الآن على أيقونة التشغيل Run، واختبر الغرفة الجديدة من خلال كتابة الأمر 'go east' لتنتقل من الصالة إلى غرفة الطعام، واكتب الأمر 'go west' للعودة من غرفة الطعام إلى الصالة. تهانينا، صنعت غرفةً بنفسك. شكل 18-5 لقد صنعت غرفة بنفسك لن يكون الأمر ممتعًا إذا لم يكن في الغرفة أغراض؛ لذلك سنضيف شيئًا إلى الغرفة بتعديل قاموس الغرفة. أوقف البرنامج وابحث عن القاموس Hall في نافذة الشيفرة، ثم أضف فاصلةً "," في نهاية السطر: 'east' : 'Dining Room' ثم اضغط المفتاح ENTER واكتب مايلي: 'item' : 'key' انقر على أيقونة التشغيل Run مجددًا، حيث ستخبرك اللعبة بوجود غرضٍ جديدٍ، وهو المفتاح 'key'. يمكنك كتابة الأمر 'get key' لتتمكن من التقاطه وإضافته إلى قائمة الأغراض التي تحملها، ويُطلق على هذه القائمة اسم المقتنيات inventory، وهي تبقى معك أثناء تنقلك بين الغرف. شكل 19-5 سيضاف المفتاح إلى مقتنياتك انقر على أيقونة Stop لإيقاف اللعبة. علينا الآن جعل اللعبة أكثر تشويقًا من خلال إضافة وحشٍ إليها ينبغي تفاديه؛ ولهذا ابحث عن القاموس 'Kitchen'، وأضف إليه الغرض 'monster' الذي سيمثل الوحش كما أضفت الغرض السابق 'key'، وتأكد من وضع فاصلةٍ "," في نهاية السطر الذي يسبق السطر الجديد الذي ستضيفه: 'item' : 'monster' حتى يكون الوحش قادرًا على مهاجمة اللاعب، لا بدّ من إضافة منطقٍ لهذه العملية؛ لذلك انتقل إلى آخر سطرٍ في البرنامج، وأضِف الأسطر التالية بما فيها السطر الذي يبدأ بالرمز "#". ستساعدك أسطر التعليقات على فهم برنامجك عندما تعود إليه بعد فترةٍ من الزمن، ولا تنسى إزاحة الأسطر بصورةٍ مناسبة: # player loses if they enter a room with a monster if 'item' in rooms[currentRoom] and 'monster' in rooms[currentRoom]['item']: print('A monster has got you... GAME OVER!') break انقر على أيقونة Run مجددًا، ثم حاول الدخول إلى المطبخ، ستكون نهايتك. شكل 20-5 وحش في المطبخ لجعل اللعبة ذات معنىً، سنضيف أغراضًا جديدةً وغرفةً أخرى ووسيلةً للفوز تقتضي بمغادرة المنزل بسلام وبحوزتك كل الأغراض. ابدأ بإضافة غرفةٍ أخرى إلى المتغير rooms كما أضفت غرفة الطعام 'Dining Room' وسمِّها هذه المرة 'Garden'، وأضف مخرجًا إليها من غرفة الطعام 'Dining Room'؛ لهذا عليك أولًا وضع فاصلةٍ "," في نهاية السطر الأخير من القاموس 'Dining Room' ثم إضافة السطر التالي: 'south' : 'Garden' قبل القوس "{" في نهاية 'Dining Room' وأضف فاصلةً "," بعده. بعد أن وضعت مخرجًا إلى الغرفة 'Garden'، أضف هذه الغرفة بعد 'Dining Room' بكتابة الشيفرة التالية: 'Garden' : { 'north' : 'Dining Room' } أضف الغرض 'potion' إلى القاموس 'Dining Room' ولا تنسى الفاصلة "," في نهاية السطر الذي يسبقه: 'item' : 'potion' انتقل أخيرًا إلى نهاية البرنامج وأضف الشيفرة التي تتحقق من امتلاك اللاعب كل الأغراض لإبلاغه بالفوز. # player wins if they get to the garden with a key and a potion if currentRoom == 'Garden' and 'key' in inventory and 'potion' in inventory: print('You escaped the house... YOU WIN!') انقر أيقونة Run وحاول إنهاء اللعبة بالتقاط الغرضين 'key' و'potion' قبل التوجه إلى الحديقة. لا تدخل إلى المطبخ فالوحش موجودٌ هناك. ولإضفاء نكهةٍ إلى اللعبة، يمكنك إضافة إرشاداتٍ تساعد اللاعب على إنهاء اللعبة؛ ولتنفيذ الأمر انتقل إلى بداية البرنامج، وابحث عن الدالة ()showInstructions وأضف النص التالي ضمنها: Get to the Garden with a key and a potion Avoid the monsters! ستظهر الإرشادات السابقة في بداية برنامجك بمجرد تشغيل اللعبة. تهانينا، لقد أنجزت لعبة متاهةٍ مبنيةٍ على أوامر نصية. شكل 21-5 يعرف اللاعب الآن ما عليه فعله ترجمة -وبتصرف- للفصل الخامس Programming with python من كتاب THE OFFICIAL Raspberry Pi Beginner’s Guide. اقرأ أيضًا جولة في راسبيان: نظام تشغيل راسبيري باي تجميع راسبيري باي والتحضير لاستعماله تعرف على جهاز راسبيري باي Raspberry Pi
-
ستتعلم في هذا المقل كيفية استثمار نظام التشغيل راسبيان Raspbian، حيث يمتلك راسبيري باي القدرة على تشغيل مجالٍ واسعٍ من البرمجيات متضمنةً عددًا من أنظمة التشغيل المختلفة، التي يعتمد عليه الجهاز أساسًا ليعمل. يُعدّ راسبيان نظام التشغيل الرسمي لمؤسسة راسبيري باي، وأكثر أنظمة التشغيل المستخدمة مع باي شعبية، حيث بُني راسبيان اعتمادًا على نظام التشغيل ديبيان لينكس Debian Linux، وقد صُمم خصيصًا ليناسب جهاز راسبيري باي، ويأتي مع حزمةٍ من البرمجيات والإضافات المثبتة مسبقًا والجاهزة للعمل. إذا استخدمت سابقًا أنظمة تشغيل مثل مايكروسوفت ويندوز، أو آبل ماك، أو إس؛ فالأمر مشابهٌ على راسبيان، حيث يعتمد على مبادئ النافذة والأيقونة والقائمة ومؤشر الفأرة نفسها، وستألف بيئة العمل بسرعة. سيحضِّرك هذا المقال للانطلاق في العمل ويعرّفك على بعض البرمجيات المجمّعة خصيصًا. معالج الإعداد الترحيبي Welcome Wizard سترى هذا المعالج عند ظهور سطح مكتب راسبيان للمرة الأولى، وهو أداةٌ مفيدةٌ تساعدك على تغيير بعض إعدادات النظام من أجل تهيئته بما يناسب طبيعة ومكان استخدامك الراسبيري باي. شكل 1-3 معالج الإعداد الترحيبي انقر على زر التالي Next، ثم اختر بلدك ولغتك ونطاقك الزمني Time zone بالنقر على القائمة المنسدلة الموافقة لكل خيار، كما هو موضحٌ في الشكل التالي. إذا كنت تستخدم لوحة مفاتيح عربية، فانقر على صندوق التحقق المجاور حتى تتأكد من أن راسبيان سيستخدم مخطط لوحة المفاتيح العربية الصحيح؛ وإذا أردت استخدام اللغة الإنكليزية أيًا كانت لغتك الأم، فانقر على صندوق التحقق Use English language لتفعيله، ثم انقر زر التالي Next عندما تنتهي. شكل 2-3 اختيار اللغة ستطلب منك الشاشة الثانية للمعالج تغيير كلمة السر الخاصة بالمستخدم الافتراضي pi، حيث تكون الكلمة الافتراضية raspberry، ومن المهم جدًا أن تختار كلمة سر جديدة لأسبابٍ أمنية. أدخل الكلمة في كلا الصندوقين (كلمة السر وتأكيدها) كما هو موضحٌ في الشكل التالي، وبالنقر على مربع التحقق بجوار إخفاء المحارف Hide characters ستكون قادرًا على رؤية الكلمة التي تكتبها، كما يجب أن تكون كلمة المرور متطابقةً في الصندوقين. شكل 3-3 إعداد كلمة سر جديدة تسمح لك الشاشة التالية المُوضحة بالشكل التالي باختيار الشبكة اللاسلكية التي ستتصل بها من خلال قائمةٍ من الشبكات المتوفرة، حيث يمكنك التَنقُّل عبر عناصر القائمة باستخدام الفأرة أو لوحة المفاتيح حتى تجد اسم شبكتك، بعد ذلك انقر عليها وانقر على زر التالي Next. سيُطلب منك كتابة كلمة مرور الشبكة اللاسلكية إذا كانت محميّة Secure، حيث من الأفضل أن تكون محمية، وتُعرف هذه الكلمة أيضًا بـ pre-shared key، وستجد هذا المفتاح عادةً على علبة الموجّه أو أسفل الموجِّه نفسه. انقر على زر التالي Next للاتصال بالشبكة، وإذا كنت لا تريد الاتصال بشبكة لاسلكية، فانقر زر تخطي Skip. شكل 4-3 اختيار الشبكة اللاسلكية تتحقق الشاشة التالية المُوضحة بالشكل التالي من وجود تحديثات updates لراسبيان وبقية البرمجيات على باي، وتتيح لك تثبيتها، حيث يُحدّث راسبيان بانتظامٍ لإصلاح الثغرات وإضافة ميزاتٍ جديدة وتحسين الأداء. انقر زر التالي Next لتثبيت التحديثات المتوفرة أو تخطي Skip لتجاوز العملية. قد يستغرق تنزيل التحديثات بعض الوقت، وستظهر نافذةٌ تخبرك أن النظام مُحدّث عند انتهاء عملية التثبيت، انقر بعدها على الزر OK. شكل 5-3 التحقق من وجود تحديثات ستسألك الشاشة الأخيرة من المعالج والموضحة في الشكل التالي عما إذا كنت تريد إعادة إقلاع النظام rebooting، حيث لن تُفعّل بعض التغييرات دون إعادة تشغيل راسبيري باي. وإذا طُلب منك ذلك، فانقر على زر إعادة الإقلاع Reboot، وسيعيد باي تشغيل نفسه، لكن معالج الإعداد الترحيبي سيختفي هذه المرة ويصبح باي جاهزًا للعمل. شكل 6-3 إعادة إقلاع راسبيان التعرف على سطح المكتب تُعرف نسخة راسبيان المُثبَّتة على معظم أجهزة راسبيري باي على أنها راسبيان مع سطح مكتب راسبيري باي، وذلك للدلالة على واجهة المستخدم الرسومية الرئيسية. تحتل مساحة سطح المكتب صورةً تُدعى خلفية سطح المكتب Wallpaper؛ حيث تدل العلامة A في الشكل التالي عليها، وستظهر فوقها البرامج التي تشغلها. ستشاهد في أعلى سطح المكتب شريط المهام Taskbar عند العلامة B، والذي يمكِّنك من تحميل أي برنامجٍ من البرامج التي وضعتها ضمنه، ويُشار إلى البرامج التي جرى تشغيلها بالمهمَّات tasks من مكان العلامة C في هذا الشريط. سطح مكتب راسبيان سنوضّح الآن أقسام سطح المكتب التي تشير إليها العلامات في الشكل السابق، وهي: A: خلفية سطح المكتب. B: شريط المهام. C: مهمّة. D: لوحة النظام system tray. E: إزالة الوسائط. F: أيقونة بلوتوث. G: أيقونة شبكة الاتصال. H: أيقونة حجم الصوت. I: الساعة. J: شريط تشغيل البرامج Launcher. K: أيقونة القائمة أو أيقونة راسبيري. L: أيقونة سلة المحذوفات. M: أيقونة السوّاقات Drivers القابلة للإزالة. N: شريط عنوان النافذة. O: تصغير النافذة. P: تكبير النافذة. Q: إغلاق النافذة. تقع لوحة النظام D على يسار شريط القائمة menu bar ويظهر فيها رمزٌ لإزالة أي وسيط تخزينٍ قابلٍ للإزالة، مثل سواقة تخزين USB إذا وصلتها بالجهاز. سيسمح لك النقر على هذا الرمز بإزالة وإخراج الوسيط بأمان، وستجد في أقصى يسار الشريط الساعة I، وستشاهد بالنقر عليها تقويمًا رقميًا موضحًا في الشكل التالي. شكل 8-3 تقويم رقمي تجد إلى جانب الساعة أيقونةً على شكل مكبر صوت H، يمكنك النقر عليها بزر الفأرة الأيسر لضبط حجم الصوت، وبالزر الأيمن لاختيار المخرج الصوتي الذي يستخدمه باي. كما ستجد أيقونة شبكة الاتصال G إلى جانب مكبر الصوت، حيث ستظهر قوة الإشارة على شكل أشرطةٍ متتابعةٍ إذا كنت متصلًا بشبكةٍ لاسلكية، وسترى فقط سهمين عموديين متعاكسين إذا كنت متصلًا بشبكةٍ سلكيةٍ محلية. انقر على أيقونة شبكة الاتصال لعرض قائمة الشبكات اللاسلكية المتاحة في الجوار، وعلى أيقونة البلوتوث F للاتصال بأجهزة البلوتوث المجاورة لراسبيري، كما هو موضح في الشكل التالي. شكل 9-3 قائمة الشبكات اللاسلكية المتاحة يتوضع شريط تشغيل البرامج J على يمين شريط القائمة، ويضم أيقونات البرامج التي ثبتَّها عند تثبيت راسبيان، وقد لا ترى جميع أيقونات البرامج على شريط التشغيل، حيث يتوضع بعضها ضمن قائمة راسبيري الموجودة أقصى يسار شريط القائمة، ويمكنك فتح القائمة بمجرد النقر على أيقونتها. شكل 10-3 قائمة راسبيان تُقسم البرامج الموجودة في قائمة راسبيري إلى فئاتٍ تدل أسماؤها على طبيعة البرامج ضمنها، حيث تضم فئة البرمجة Programming مثلًا البرامج المصممة لمساعدتك في كتابة برامجك الخاصة كما سترى في مقال لاحق حول البرمجة باستخدام سكراتش Scratch وما يليه؛ بينما ستسلّيك الألعاب Games لبعض الوقت. لن نستعرض بالطبع جميع البرامج في هذا الدليل، لذلك جرّب أن تتعلم بنفسك ما تريده منها. متصفح الويب كروميوم Chromium سنتمرن الآن على استخدام باي بتشغيل متصفح كروميوم على النحو التالي: انقر على أيقونة راسبيري في الزاوية اليسارية العليا لسطح المكتب لتظهر لك قائمة البرامج، ثم انتقل بعدها إلى فئة الإنترنت وانقر على أيقونة متصفح كروميوم، كما هو مبين في الشكل التالي. شكل 11-3 متصفح كروميوم سيبدو لك كروميوم مألوفًا إذا استخدمت سابقًا متصفح الويب جوجل كروم Google Chrome على حاسوبٍ آخر، حيث يتيح لك كروميوم مثل أي متصفح ويب زيارة المواقع المختلفة ومشاهدة مقاطع الفيديو والتمتع بالألعاب والتواصل مع أشخاص آخرين حول العالم من خلال المنتديات المختلفة أو مواقع المحادثة المباشرة. ابدأ باستخدام كروميوم من خلال تكبير نافذته إلى الحد الأقصى لتملأ نافذة سطح المكتب؛ حيث ستجد ثلاث أيقوناتٍ متجاورةٍ في أقصى يسار شريط عنوان نافذة كروميوم N. انقر على الأيقونة الموجودة في الوسط والتي تحمل رمز سهمٍ متّجِهٍ للأعلى P، وهي أيقونة تكبير النافذة لتشغل مساحة سطح المكتب؛ أما الأيقونة التي تأتي على يسارها فهي تصغير النافذة O، والتي تُخفي النافذة حتى تنقر عليها في شريط المهام أعلى سطح المكتب. وتحمل بالطبع أيقونة الإغلاق Q رمز الضرب إلى يمين أيقونة التكبير. إذا أردت تصفح الإنترنت فما عليك سوى النقر على شريط العناوين Address bar أعلى المتصفح؛ وهو الشريط الأبيض الطويل الذي ينتهي برمز عدسة البحث، ومن ثم كتابة العنوان الذي تريد التوجه إليه، مثل www.raspberrypi.org، ثم اضغط على زر Enter وسيحمّل كروميوم الموقع المطلوب كما هو موضح في الشكل التالي. تستطيع البحث عما تريده أيضًا بدلًا من كتابة عنوان محدد، كأن تكتب راسبيري باي، أو راسبيان، أو أية عباراتٍ أخرى، وسيبحث كروميوم عن محتوىً يضم هذه العبارات. شكل 12-3 تحميل موقع ويب راسبيري باي عبر كروميوم قد تظهر لك عدة نوافذٍ فرعية tabs ضمن نافذة كروميوم عند تشغيله للمرة الأولى، حيث يمكنك التنقل بينها بمجرد النقر على النافذة، كما يمكنك إغلاق نافذة فرعية محددة بالنقر على رمز الضرب الموجود على الطرف الأيمن للنافذة. لفتح نافذة فرعية جديدة، انقر على زر النافذة الفرعية الموجود إلى يمين آخر نافذة فرعية مفتوحة، أو اضغط معًا زري لوحة المفاتيح CTRL وT. تُعَد النوافذ الفرعية وسيلةً جيدةً لتصفح عدة مواقع ويب معًا دون ازدحام نوافذ كروميوم على الشاشة. انقر على زر الإغلاق عند الإنتهاء من العمل على كروميوم. مدير الملفات File Manager تُخزّن جميع الملفات في المجلد الرئيسي Home، سواءٌ كانت قصيدةً كتبتها، أو برنامجًا أو مقطع فيديو أعددته، أو صورةً نزّلتها من موقع ويب. وللوصول إلى هذا المجلد، انقر على زر القائمة، ثم انتقل إلى الملحقات Accessories، وبعدها انقر على مدير الملفات File Manager. شكل 13-3 برنامج مدير الملفات يتيح لك مدير الملفات إمكانية تصفّح الملفات والمجلدات الموجودة على بطاقة الذاكرة الأساسية microSD، أو أية وسائط تخزينٍ قابلةٍ للإزالة، مثل سواقات التخزين المحمولة بواجهة USB، حيث ينقلك البرنامج عند تشغيله إلى المجلد الرئيسي مباشرةً، ويضم هذا المجلد بدوره مجلداتٍ فرعيةٍ subdirectories أخرى مرتبةٍ في فئات كما هو حال برامج قائمة راسبيري، وأهمها: سطح المكتب Desktop الذي يضم ما تراه من ملفات على سطح المكتب، فإذا خزّنت ملفًا ضمن هذا المجلد سيظهر على سطح المكتب، وبالتالي يسهّل عليك إيجاده وفتحه. المستندات Documents: وهو المجلد الرئيسي لمعظم الملفات التي تُنشئها. التنزيلات Downloads: تُخزَّن ضمنه الملفات التي نزّلتها من الإنترنت عبر المتصفح كروميوم تلقائيًا. MagPi: يحتوي على نسخةٍ إلكترونية من مجلة MagPi؛ وهي المجلة الرسمية لمؤسسة راسبيري باي. الموسيقى Music: يضم ملفات موسيقى كنت قد أنشأتها أو خزنتها على راسبيري باي. الصور Pictures: وهو مجلدٌ فرعيٌ مخصصٌ لتخزين الصور. عام Public: طالما أن معظم الملفات والمجلدات خاصة، فما تضعه في هذا المجلد يصبح عامًا؛ أي يمكن لأي مستخدمٍ الوصول إليه حتى لو كان له معلومات استيثاق خاصة، مثل اسم المستخدم وكلمة المرور. الفيديوهات Videos: وهو مجلدٌ فرعيٌ مخصصٌ لتخزين مقاطع الفيديو، ويمثّل وجهة البحث الأولى لبرامج تشغيل الفيديو. تُقسم نافذة مدير الملفات إلى قسمين: القسم الأيسر الذي يعرض المجلدات الموجودة على راسبيري باي، والقسم الأيمن الذي يعرض الملفات والمجلدات الفرعية الموجودة ضمن المجلد الذي اخترته من مجلدات القسم الأيسر. إذا وصلت أحد وسائط التخزين القابلة للإزالة بأحد منافذ USB، فستظهر لك نافذةً تسألك عما إذا كنت تريد تصفح محتويات وسيط التخزين باستخدام مدير الملفات File Manager، كما هو مبين في الشكل التالي، انقر زر OK لتتمكن من ذلك. شكل 14-3 توصيل وسيط تخزين قابل للإزالة بإمكانك نسخ الملفات من الأجهزة القابلة للإزالة إلى بطاقة الذاكرة microSD أو العكس، وذلك بفتح مجلد بطاقة الذاكرة الخاصة براسبيري باي ومجلد الجهاز القابل للإزالة في نافذتين مختلفتين لمدير الملفات، ثم الضغط المستمر على الملف الذي تريد نسخه بزر الفأرة اليساري وسحبه إلى النافذة الأخرى، ثم إفلاته ضمنها، وتُعرف هذه العملية باسم السحب والإفلات Drag and Drop. هناك طريقةٌ أخرى لنسخ الملفات من خلال النقر مرةً واحدةً على الملف، ثم النقر على قائمة التحرير Edit واختيار نسخ Copy، والانتقال بعد ذلك إلى النافذة الأخرى والنقر على قائمة التحرير Edit، ثم اختيار لصق Paste. يمكنك أيضًا اختيار أمر النقل Move من قائمة التحرير Edit بدلًا من النسخ Copy، لكن الفرق بينهما أن عملية النقل ستحذف الملف من المجلد الأصلي بعد نقله إلى المجلد الجديد. يتيح راسبيان إمكانية تنفيذ العمليتين السابقتين عبر اختصارات لوحة المفاتيح، حيث يمكنك تنفيذ عملية النسخ بالضغط على زري CTRL وC معًا ؛ وتنفيذ النقل أو القص بالضغط على زري CTRL وX معًا؛ أما النسخ، فمن خلال الضغط على زري CTRL وV معًا. الشكل 15-3 سحب وإفلات ملف أغلق نافذة مدير الملفات حين تنتهي من تجربته، وأغلق أية نوافذٍ أخرى قد فتحتها بالنقر على زر الإغلاق في أعلى يمين النافذة، بعد ذلك أخرج وسائط التخزين القابلة للإزالة إذا وصلت أحدها براسبيري باي من خلال النقر على زر الإخراج Eject أعلى يمين الشاشة، ثم سحب الجهاز من منفذ USB. مجموعة البرامج المكتبية ليبر أوفيس LibreOffice وهي وسيلةٌ أخرى لاختبار إمكانيات راسبيري باي. انقر على أيقونة راسبيري، ثم انقل الفأرة إلى أدوات المكتب Office وانقر على محرر النصوص ليبر أوفيس رايتر LibreOffice Writer؛ وهو البرنامج الذي يعالج النصوص ضمن مجموعة ليبر أوفيس المكتبية ذات الشعبية الواسعة والمماثلة لغيرها من المجموعات المكتبية، مثل مايكروسوفت أوفيس Microsoft Office، وجوجل دوكس Google Docs. من الممكن ألا تجد ليبر أوفيس مُثبّتًا افتراضيًا مع بعض نسخ راسبيان، لذلك استخدم أداة برمجيات مفيدة Recommended Software لتثبيته، والتي سنتحدث عنها لاحقًا في هذا المقال. شكل 16-3 محرر نصوص ليبر أوفيس يتيح لك محرر نصوص ليبر أوفيس رايتر إمكانية كتابة المستندات وتنسيقها بطرقٍ مُلفتة، حيث يمكنك تغيير نمط الخط ولونه وقياسه، وإضافة التأثيرات والصور والمخططات البيانية والرسومية والجداول وغيرها من المحتويات، كما يساعدك المحرر على تتبع الأخطاء، حيث يّظلل مباشرةً أخطاء الكتابة باللون الأحمر وأخطاء القواعد بالأخضر أثناء الكتابة. ابدأ تجربتك بكتابة مقطعٍ عما تعلّمته حتى الآن عن راسبيري باي وبرمجياته، واختبر مختلف الأيقونات الموجودة أعلى نافذة المحرر لتكتشف عملها، وحاول أن تزيد حجم الكلمات وأن تغيّر لون النص. إذا لم تكن واثقًا من عمل أية أيقونة، فمرّر مؤشر الفأرة فوقها وسيظهر لك مربع ملاحظات tooltip يخبرك عن عمل الأيقونة. احفظ عملك إذا كنت مقتنعًا به بالنقر على قائمة ملف File، ثم خيار الحفظ Save، واختر اسمًا مناسبًا لملفك، ثم انقر زر حفظ Save. شكل 17-3 حفظ ملف يُعدُّ محرر النصوص ليبر أوفيس رايتر جزءًا من مجموعة ليبر أوفيس المكتبية المتكاملة، وستجد بقية برامج المجموعة في فئة أدوات المكتب Office ضمن قائمة راسبيري إلى جانب ليبر أوفيس رايتر. هذه البرامج هي: ليبر أوفيس بيس LibreOffice Base: قاعدة بياناتٍ لتخزين المعلومات والبحث عنها بسرعة وتحليلها. ليبر أوفيس كالك LibreOffice Calc: جداول Spreadsheet لمعالجة الأرقام وإنشاء المخططات والرسومات. ليبر أوفيس درو LibreOffice Draw: برنامج رسوميات لإنشاء الصور والمخططات. ليبر أوفيس إمبرس LibreOffice Impress: برنامج عروض تقديمية لتصميم شرائح عرض وتقديمها. ليبر أوفيس ماث LibreOffice Math: محرّر صيغٍ رياضية لكتابة معادلات وعبارات رياضية بالشكل المناسب، ثم استخدامها في برامجٍ أخرى. إذا أعجبك العمل على ليبر أوفيس، فيمكنك استخدامه على أجهزة حاسوبٍ أخرى. نزّل البرنامج من موقع ليبر أوفيس libreoffice.org بما يتناسب مع نظام التشغيل لديك سواءٌ كان مايكروسوفت ويندوز، أو توزيعات لينوكس، أو آبل ماك، أو إس وثبته بعد ذلك؛ وإذا أردت التعرف أكثر على ما يقدمه لك ليبر أوفيس، فانظر قسم ليبر أوفيس في أكاديمية حسوب. أداة البرمجيات المفيدة Recommended Software على الرغم من تنوع حزمة البرامج التي تأتي مع راسبيان، فهو قادرٌ على تشغيل الكثير غيرها، حيث ستجد مجموعةً من أفضل البرامج ضمن الأداة Recommended Software، ولا بدّ أن يتصل جهازك بالإنترنت لاستخدامها. انقر على أيقونة راسبيري وانتقل بمؤشر الفأرة إلى تفضيلات Preferences، ومن ثم إلى أداة البرمجيات مفيدة Recommended Software، حيث ستبدأ الأداة بمجرد تشغيلها بالبحث عبر الإنترنت عن البرمجيات المتوفرة، وستعرض بعد ثوانٍ معدودة قائمةً بحزم البرمجيات المتوافقة مع راسبيان كما هو موضحٌ في الشكل التالي، وتكون مرتبةً ضمن فئات تمامًا مثل البرامج في قائمة راسبيري. انقر على أي فئةٍ في القسم اليساري من النافذة لاستعراض البرامج التي تنتمي إليها، أو انقر على كل البرامج All Programs لعرض كل شيء. شكل 18-3 أداة Recommended Software إذا وجدت مربع التحقق بجانب البرنامج مُعلّمًا، فالبرنامج مثبتٌ بالفعل على جهازك؛ وإذا لم يكن كذلك، فيمكنك تعليمه بالنقر عليه حتى يُثبَّت، حيث يمكنك اختيار القدر الذي تشاء من البرمجيات لتثبيتها سويةً، لكن قد لا تتسع بطاقة الذاكرة لها إذا كان حجم البطاقة أقل من المطلوب. وبنفس الطريقة، يمكنك إلغاء تثبيت البرامج من خلال البحث عن البرنامج المثبت مسبقًا، حيث سترى مربع التحقق إلى جواره معلّمًا. انقر عليه لإزالة العلامة، وبالطبع يمكنك عكس العملية إن أخطأت لسبب ما. عندما ترى أنك اخترت ما تريد تثبيته أو إزالته، فانقر على زر OK لتبدأ العملية، كما هو موضحٌ في الشكل التالي، وبعد انتهاء تنزيل البرامج المطلوبة وتثبيتها سيظهر لك صندوق حوار، انقر الزر OK لإغلاق الأداة Recommended Software. شكل 19-3 إلغاء تثبيت برنامج يمكنك استخدام أداة إضافة وإزالة البرامج Add/Remove Software لتثبيت أو إزالة برنامج، وستجدها أيضًا ضمن نفس فئة التفضيلات Preferences في قائمة راسبيان؛ حيث تعرض هذه الأداة مجالًا أوسع من البرامج، لكن معظمها لم يُختبر من قبل مؤسسة راسبيري باي. أداة ضبط راسبيري باي Configuration Tool آخر ما سنتعرف عليه في هذا المقال هي أداة الضبط Raspberry Pi configuration tool التي تشابه معالج الإعداد الترحيبي، حيث تساعدك الأداة في تغيير مجموعةٍ متنوعةٍ من إعدادات راسبيان. انقر على أيقونة راسبيري، وانتقل بمؤشر الفأرة إلى تفضيلات Preferences، ومن ثم إلى أداة ضبط راسبيري باي Raspberry Pi Configuration المُبينة في الشكل الآتي. تنقسم نافذة الأداة إلى أربع نوافذٍ فرعية تتحكم كلٌ منها بمزايا محددة لراسبيان؛ أولى هذه النوافذ هي النظام System، وتظهر عند فتح البرنامج مباشرةً، حيث تمكّنك هذه النافذة من تغيير كلمة سر حسابك على راسبيان وتعيين اسمٍ لجهازك، وهو الاسم الذي يميِّز جهاز راسبيري باي عند الاتصال بشبكاتٍ محلية سلكيةٍ أو لاسلكية، وغيرها من الإعدادات. مع ذلك، لا تحتاج معظم هذه الإعدادات لأي تغيير. تضم النافذة الفرعية الثانية المُسماة واجهات Interfaces فئةً أخرى من الإعدادات التي يظهر معظمها غير مفعّلٍ disabled، حيث لا ينبغي تغيير هذه الإعدادات إلا عند إضافة طرفيةٍ جديدة لراسبيري، مثل تجهيزة الكاميرا وبالطريقة التي يطلبها صانعوا الطرفية فقط، ويُستنثنى من هذه القاعدة الخيارات التالية: الخيار SSH: الذي يفعّل ميزة Secure Shell، حيث تسمح هذه الميزة بالولوج إلى راسبيري باي من حاسوبٍ آخر على الشبكة باستخدام عميل SSH. الخيار VCN: الذي يفعّل ميزة Virtual Network Computer، حيث تسمح هذه الميزة بالتحكم في جهاز راسبيري باي عبر جهاز حاسوبٍ آخر باستخدام عميل VCN. الخيار Remote GPIO: الذي يسمح لك باستخدام أرجل المنصة GPIO لجهاز راسبيري باي من خلال حاسوبٍ آخر على الشبكة، وسنتعرف على ذلك لاحقًا عند تطرقنا للحوسبة الفيزيائية باستخدام بايثون وسكراتش في مقال لاحق. شكل 20-3 أداة ضبط راسبيري باي تساعدك النافذة الفرعية الثالثة "الأداء Performance" على ضبط حجم الذاكرة المخصصة لوحدة معالجة الرسوميات GPU، بالإضافة إلى زيادة أداء بعض نماذج راسبيري باي من خلال العملية المعروفة باسم رفع تردد العمل Overclocking. وكما أشرنا سابقًا، يُفضَّل عدم تغيير شيءٍ من إعدادات هذه الفئة. أما النافذة الأخيرة "إعدادت محلية Localization"؛ فهي مخصصةٌ لإعداداتٍ مثل تغيير الموقع، والذي يتحكم بدوره باللغة التي يستخدمها راسبيان وكيفية عرض الأرقام، بالإضافة إلى تغيير المنطقة الزمنية وتنسيق لوحة المفاتيح وتغيير اسم الدولة لأغراضٍ تتعلق بالشبكات اللاسلكية WiFi. يفضل حاليًا نقر زر Cancel لإغلاق الأداة دون تغيير أي شيء. إيقاف التشغيل بعد أن استُكشف سطح مكتب راسبيان، فقد حان الوقت لتعلّم إيقاف تشغيل راسبيري باي بأمان، حيث يُبقي راسبيري باي مثل غيره من الحواسيب جميع الملفات التي تعمل عليها في الذاكرة المتطايرة من النوع RAM، التي تفقد محتواها عند انقطاع التغذية الكهربائية. وبطبيعة الحال، تنتقل المستندات التي أنشأتها عند حفظها من الذاكرة المتطايرة إلى الذاكرة الدائمة المتمثلة ببطاقة الذاكرة microSD، وهذا كافٍ لتطمئن أنّ كل شيء على ما يرام. لكن ما يحدث أن راسبيان يفتح مجموعةً من الملفات التي يستخدمها أثناء العمل، وإذا فُصلت التغذية الكهربائية لسببٍ أو لآخر، فستبقى هذه الملفات مفتوحةً وقد ينتج عن ذلك خللٌ في نظام التشغيل، كما قد تضطر أيضًا إلى إعادة تثبيته. لهذا لابدّ من وسيلةٍ لإبلاغ راسبيان بإغلاق كل هذه الملفات استعدادًا لفصل التغذية الكهربائية، وهذا ما يُعرف بإيقاف التشغيل. انقر على أيقونة راسبيري في الزاوية اليسارية العليا لسطح المكتب، وانقر على إيقاف التشغيل Shut Down. ستظهر لك شاشةٌ تضم ثلاثة خيارات، هي إيقاف تشغيل Shut Down وإعادة إقلاع Reboot وتسجيل خروج Logout، كما هو موضحٌ بالشكل التالي. لدى اختيارك أمر إيقاف التشغيل Shut Down (وهو الأكثر استخدامًا)، فإنك تخبر راسبيان أن يغلق كافة البرمجيات والملفات المفتوحة ومن ثم يطفئ راسبيري باي. بعد أن تصبح شاشة العرض سوداء، انتظر عدة ثوانٍ حتى يختفي الضوء الأخضر على باي ومن ثم يمكنك فصل التغذية الكهربائية؛ ولإعادة تشغيل باي صل كابل الطاقة الكهربائية مجددًا. شكل 21-3 إيقاف تشغيل راسبيري باي تمر عملية إعادة الإقلاع Reboot بمراحل إيقاف التشغيل نفسها وذلك بإغلاق كل شيء، لكنها ستعيد تشغيل باي بدلًا من قطع التغذية الكهربائية عنه، أي كأنك أوقفت تشغيل الجهاز ثم فصلت كابل الطاقة الكهربائية وأعدت وصله. ستضطر إلى إعادة إقلاع باي عندما تجري تعديلات معينة على نظام التشغيل مثل تثبيت تحديثاتٍ محددة لبرمجياته البنيوية، أو أن يعمل أحد البرامج بصورةٍ خاطئة وتُعرف هذه الحالة بالانهيار crashing، فيؤثر على أداء راسبيان. أخيرًا، ستلمس فائدة تسجيل الخروج Logout إذا كان هناك أكثر من مستخدمٍ لجهاز راسبيري باي، حيث تغلق هذه العملية كل البرامج المفتوحة، وتنتقل بك إلى شاشة تسجيل الدخول Login التي تطلب منك إدخال اسم المستخدم وكلمة المرور؛ وإذا نقرت عن طريق الخطأ على تسجيل الخروج، فيمكنك العودة بسهولةٍ إلى العمل بكتابة pi اسمًا للمستخدم وأية كلمة سر كنت قد اخترتها في معالج الإعداد الترحيبي الذي شرحناه بداية هذا المقال. ترجمة -وبتصرف- للفصل الثالث Using your Raspberry Pi من كتاب The official Raspberry Pi Beginners Guide اقرأ أيضًا المقال السابق: تجميع راسبيري باي والتحضير لاستعماله تعرف على جهاز راسبيري باي Raspberry Pi المدخل الشامل لتعلم علوم الحاسوب أنظمة التشغيل للمبرمجين
-
يتضمن هذا المقال تعريفًا بالتجهيزات الأساسية التي تحتاجها للعمل على راسبيري باي وكيفية توصيلها وإعدادها للعمل، حيث صُمم جهاز راسبيري باي ليكون سهل الإعداد وسريعًا قدر الإمكان، لكنه سيتأثر بالمكونّات الخارجية المُتصلة به، والتي تُدعى طرفيات peripherals مثل بقية الحواسيب. قد يبدو لك الأمر مربكًا للوهلة الأولى عندما تتأمل اللوحة المجردة لجهاز راسبيري باي، والتي تبدو مختلفةً تمامًا عن الحواسب الموضوعة في حواضن مغلقة، وستظن أنّ الوضع سيصبح أكثر تعقيدًا. في الواقع لن يحدث ذلك، حيث ستتعامل جيدًا مع راسبيري باي خلال عشر دقائق إن اتبعت ببساطةٍ خطوات هذا المقال. إذا كنت تمتلك عدة مبتدئي راسبيري باي Starter Kit والتي تباع عادةً مثل مجموعة متكاملة، فسيكون لديك كل ما يلزم لتبدأ العمل، وما عليك سوى تأمين شاشة حاسوب أو تلفازٍ قادرٍ على الاتصال بمنفذ HDMI لترى ما ينفّذه جهاز راسبيري باي؛ أما إذا لم تقتنِ بعد عدة مبتدئي راسبيري باي، فستحتاج إلى الأتي: جهاز راسبيري باي 4 نموذج B. مصدر تغذية كهربائي بمخرج USB-C: جهده 5 فولت وتياره 3 أمبير. ويُفضّل شراء مصدر التغذية الرسمي الخاص براسبيري باي كونه يتلاءم مع التبدلات السريعة لكمية الطاقة الكهربائية التي يتطلبها الجهاز. بطاقة ذاكرة من نوع microSD ثُبِّت عليها برنامج NOOBS، حيث تعمل بطاقة الذاكرة مثل مخزنٍ دائمٍ لراسبيري باي، وتحتوي على كل الملفات التي تخزنها والبرامج التي تثبتها بما في ذلك نظام التشغيل. قد تكفي ذاكرة بحجم 8GB لتبدأ العمل، لكن ستساعدك ذاكرة بحجم 16GB على توسيع عملك لاحقًا، ومن الأفضل والأوفر من ناحية الوقت أن يأتي برنامج NOOBS مثبتًا مسبقًا على بطاقة الذاكرة. برنامج NOOBS هو اختصارٌ لبرنامج لجهاز جديد New Out-Of Box Software، حيث تُوضع نسخةٌ منه على بطاقة ذاكرة مهيأة حديثًا ليتولى شؤون تنصيب نظام التشغيل المناسب بمجرد وضعها في راسبيري باي وتشغيله. راجع الملحق A للحصول على إرشادات حول تنصيب NOOBS على بطاقة ذاكرة فارغة إن لم يكن مثبتًا مسبقًا. فأرة ولوحة مفاتيح بمنفذ USB يتيحان لك التحكم بجهاز راسبيري باي، حيث ستعمل أية تجهيزاتٍ تأتي بمنفذ USB مع راسبيري باي بصورةٍ جيدة، سواءً السلكية منها أو اللاسلكية، لكن قد تستجر بعض لوحات المفاتيح المخصصة للألعاب، والتي تأتي مع أضواءٍ ملونة كميةً كبيرةً من الطاقة الكهربائية، وبالتالي لن يكون العمل معها موثوقًا. كابل من نوع Micro-HDMI لنقل الصوت والصورة من راسبيري باي إلى شاشة الحاسوب أو التلفاز، حيث يحمل أحد طرفيه وصلةً صغيرة الحجم من نوع micro-HDMI، بينما يحمل الطرف الآخر وصلة HDMI ذات حجمٍ قياسي لتوصيل الكابل مع جهاز العرض الذي تستخدمه. يمكنك كذلك استخدام كابل HDMI ذو طرفين قياسيين ومحوّل موائمة من HDMI إلى micro-HDMI، من أجل وصل الكابل مع راسبيري باي؛ وإذا كانت الشاشة التي تستخدمها لا تدعم HDMI، فاستخدم محوّل موائمة من micro-HDMI إلى منفذ العرض الرقمي DVI-D أو منفذ العرض الكلاسيكي VGA؛ ومن أجل توصيل راسبيري باي إلى جهاز تلفاز قديم يستخدم إشارة الفيديو المركبة composite video أو يمتلك مقبس SCART، استخدم كابل TRRS صوت وصورة، بقطر 3.5 ميليمتر مشابه لمقبس سماعات الرأس التي تتصل مع الهواتف المحمولة. تستطيع استخدام راسبيري باي بأمان دون حاضنة، لكن تجنب وضعه على سطحٍ معدني ناقلٍ للتيار الكهربائي، لما قد يسبب قصرًا في إحدى داراته، حيث يُجنّبك استخدام حاضنةٍ هذه المشكلة، لكنه يبقى أمرًا اختياريًا. تحتوي مجموعة أدوات المبتدئين على أية حال حاضنة راسبيري باي الرسمية، كما ستجد العديد من الحاضنات التي تنتجها أطرافٌ أخرى في نقاط البيع المختصة. ستحتاج أيضًا إلى كبل شبكة network cable إن كنت تنوي وصل راسبيري باي إلى شبكة سلكية محلية بدلًا من الاتصال اللاسلكي WiFi، وبالطبع لا بدّ من وصل الطرف الآخر للكابل بمحوّل شبكة network switch أو موجِّه router. لن تحتاج إلى الكابل إن قررت استخدام الاتصال اللاسلكي WiFi، لكنك ستحتاج إلى اسم الشبكة اللاسلكية التي ستنضم إليها مع مفتاحها أو عبارة المرور الصحيحة. إعداد العتاد الصلب Hardware أخرج راسبيري باي من صندوقه، وحاول إمساكه من حوافه بدلًا من المساحات الفارغة التي قد تجدها ضمن اللوحة؛ والمقصود هنا المساحات التي لا تحتوي على عناصر إلكترونية أو رقاقات، فمن الأفضل اتباع هذا الأسلوب من الآن وصاعدًا. انتبه جيدًا عندما تقترب من أرجل المنصات Header pins؛ فأي التواءٍ في أحدها قد يوقعك بمشاكلٍ أبسطها صعوبة التعامل مع أية طرفياتٍ قد تضيفها إلى راسبيري باي عبر هذه المنصات، وأسوؤها هو حدوث قِصَر في أحد الدارات وتضرر الجهاز بالكامل. فعلى الرغم من متانة راسبيري باي، لا يعني ذلك إطلاقًا أنه لا يتضرر. تجميع الحاضنة إذا قررت وضع جهازك في حاضنة لمزيدٍ من الحماية، فستكون خطوتك الأولى هي تثبيت لوحة راسبيري باي ضمنها؛ وفي حال استخدمت حاضنة راسبيري باي الرسمية، فابدأ بفصلها إلى قطعتين، القاعدة الحمراء والغطاء الأبيض. ومن أجل تجميع الحاضنة، اتبّع الخطوات التالية: 1- احمل القاعدة بحيث تصبح النهاية المرتفعة على يسارك والمنخفضة إلى يمينك. 2- أمسك اللوحة (دون وجود بطاقة الذاكرة) من غلافي منفذي USB ومحوّل الشبكة المحلية، ثم أَمِل اللوحة قليلًا، وادفع بمنافذ USB-C وmicro-HDMI وAV إلى الفتحات المقابلة ضمن القاعدة الحمراء. أنزل الناحية الأخرى التي تمسكها رويدًا رويدًا لتأخذ مكانها. 3- ثبّت مشابك الغطاء الأبيض في فتحتهما على يسار القاعدة فوق مدخل بطاقة الذاكرة، ثم اضغط الطرف الآخر للغطاء بلطفٍ نحو الأسفل حتى تسمع صوت الإطباق. إدخال وتوصيل بطاقة الذاكرة microSD اقلب حاضنة راسبيري باي إذا كنت تستخدم واحدة، ثم ازلق بطاقة الذاكرة ضمن حاضنتها، بحيث تكون لصاقة عنوان البطاقة بالاتجاه المعاكس للوحة راسبيري باي، ولن تدخل البطاقة على أية حال إلا باتجاهٍ واحدٍ وينبغي أن تدخل بسلاسةٍ دون ضغط زائد. ستنزلق بطاقة الذاكرة داخل الحاضنة وتتوقف دون صوت إقفال. إذا أردت إزالة البطاقة لاحقًا، فماعليك سوى إمساك نهايتها الظاهرة وسحبها بلطفٍ نحو الخارج، كما يجب الانتباه إلى ضرورة دفع البطاقة للداخل بلطفٍ أولًا لتحريرها إذا كنت تستخدم نماذجًا قديمة من راسبيري باي، لكن هذا غير ضروري أبدًا في النموذجين باي 3 و4. وصل لوحة المفاتيح والفأرة صِل كابل لوحة المفاتيح من نوع USB إلى أي منفذٍ من منافذ USB الأربعة، سواءً من النوع 2.0، أو 3.0 الموجودة على لوحة باي. إذا استخدمت الحاضنة الرسمية لباي، فستجد إشارةً في مؤخرتها إلى منفذ USB المخصص للفأرة، وإذا لم تستخدم الحاضنة فصِل الفأرة بأيٍ من منافذ USB الشاغرة. سيدخل مقبس USB للفأرة أو لوحة المفاتيح في المنفذ الموجود على باي بكل سهولة ودون ضغطٍ زائد، لكن إذا واجهتك صعوبةٌ في إدخاله، فلا بد من وجود مشكلةٍ ما، لذلك تأكد قبل كل شيء من جهة مقبس USB إذا كان اتجاه دخوله صحيحًا، وإلا فغيّر الاتجاه. وصل شاشة العرض صِل نهاية كابل micro-HDMI صغيرة الحجم بمنفذ micro-HDMI على راسبيري باي بجوار مدخل التغذية USB-C، وصِل الطرف الآخر ذو القياس المعياري بشاشة العرض. إذا اشتملت شاشتك على أكثر من منفذ HDMI، فتذكر رقم المنفذ الذي وصلت به راسبيري باي، لأنك ستُضطر إلى تغيير دخل الشاشة إلى هذا المنفذ وإلا لن ترى شيئًا. إذا لم ترى رقمًا بجانب المنفذ، فبدِّل منافذ دخل الشاشة عن طريق جهاز التحكم الخاص بها واحدًا تلو الآخر حتى ترى راسبيري باي. التوصيل الاختياري لراسبيري باي بكابل الشبكة المحلية Ethernet استخدم كابل شبكة محلية (كابل إيثرنت Ethernet) مزوّد بمقبس RJ45 في كلا الطرفين، ثم ادفع أحد النهايتين ضمن منفذ الشبكة السلكية في راسبيري باي، بحيث يكون الظفر البلاستيكي للمقبس نحو الأسفل حتى تسمع صوت القفل. ولنزع الكابل، اضغط الظفر البلاستيكي نحو الأعلى، ثم اسحب الكابل نحو الخارج بلطف. صِل الطرف الآخر للكابل إلى أي منفذٍ حر في موزع الشبكة السلكية network hub أو في الموجّه router بنفس الطريقة. وصل التغذية الكهربائية إلى راسبيري باي هي الخطوة الأخيرة في عملية التركيب. لا تُوصل التغذية الكهربائية حتى تكون مستعدًا لإعداد برمجيات الجهاز، حيث لا يملك راسبيري باي مفتاحًا لفصل ووصل الطاقة، وسيعمل بمجرد تغذيته بالكهرباء. صِل بداية مقبس USB-C لعلبة التغذية بالمنفذ المقابل له على راسبيري باي، حيث ينبغي أن يدخل المقبس بسهولة ضمن المنفذ بكلا الوضعين. إذا جاءت علبة التغذية مع كابلٍ قابل للنزع، فتأكد أنّ طرفه الآخر متصلٌ بجسم مصدر التغذية. صِل علبة التغذية إلى مأخذ الطاقة الكهربائية ثم شغّله. عندها سيبدأ راسبيري باي العمل مباشرةً. إعداد نظام تشغيل راسبيري باي عليك إعداد برمجيات الجهاز وعلى رأسها نظام التشغيل الذي يتحكم بوظائف باي حتى يعمل جهازك جديًا، لهذا صُمم برنامج NOOBS، وهو اختصارٌ إلى برمجيات الجهاز الجديد New Out-Of-Box Software، ويُستخدم لجعل العملية سهلةً قدر الإمكان؛ حيث يعطيك البرنامج حرية الاختيار بين عدة أنظمة تشغيل لتثبيتها تلقائيًا بالنيابة عنك. وأفضل ما في الأمر أنك ستنجز ذلك بنقر الفأرة عدة مرات فقط. عند تشغيل الجهاز للمرة الأولى، أو عند إقلاعه تمهيديًا Boot بوجود نسخة حديثة التثبيت من برنامج NOOBS على بطاقة الذاكرة microSD، سترى شاشةً تحمل شعار راسبيري باي ونافذةً صغيرةً في الزاوية اليسارية العليا تشير إلى تقدم العملية، وبعد فترةٍ وجيزة قد تستمر دقيقة سترى للمرة الأولى بطاقة الذاكرة التي تحمل برنامج NOOBS كما تبدو في الصورة التالية: برنامج NOOBS دون تثبيت أي نظام تشغيل ستعرض عليك تلك القائمة أنظمة التشغيل الممكن تثبيتها على جهازك، حيث تضم هذه القائمة نظامي تشغيل معياريين، هما: راسبيان Raspbian: وهو إصدارٌ من نظام تشغيل ديبيان لينوكس Debian Linux مصُممٌ خصيصًا لراسبيري باي. ليبريليك LibreELEC: وهو نسخةٌ من برنامج Kodi Entertainment Centre. تستطيع كذلك تحميل أنظمة تشغيل أخرى إن كنت متصلًا بالشبكة السلكية أو عن طريق تفعيل الاتصال اللاسلكي WiFi إذا كان متوفرًا من خلال النقر على الأيقونة (Wifi networks (w ضمن شريط الأيقونات العلوي لقائمة NOOBS. و لتثبيت نظام التشغيل، انقر بزر الفأرة اليساري فوق الخيار Raspbian Full، سترى بعد ذلك أنّ لون الأيقونة (Install (i لم يعد رماديًا وهذا دليلٌ على أن نظام التشغيل الذي اخترته أصبح جاهزًا للتثبيت. انقر على الأيقونة (Install (i بزر الفأرة اليساري وسترى عندها رسالة تحذير تخبرك بأن تثبيت نظام التشغيل سيمحو أية بياناتٍ قد خزنتها سابقًا على بطاقة microSD، وتستثني بالطبع الرسالة برنامج NOOBS الذي يبقى على حاله. انقر "Yes" لتبدأ عملية التثبيت. قد يستغرق تثبيت النظام من 10 إلى 30 دقيقة بناءً على سرعة بطاقة الذاكرة microSD، حيث يسمح لك شريط التقدم أسفل النافذة بمتابعة حالة تثبيت النظام. سترى أيضًا شريط عرض يُظلِّل بعض ميزاته الأساسية (سنتعرف أكثر على هذا الشريط وعلى نظام التشغيل في المقال التالي المتمحور حول استثمار نظام تشغيل راسبيري باي)، وحالما ينتهي تثبيت النظام ستظهر لك نافذة تحمل الزر "OK"، عندها انقر على هذا الزر لتعيد إقلاع باي على نظام التشغيل الذي ثبتّه توًّا. قد تلاحظ أثناء الإقلاع الكثير من الأسطر النصية المعروفة باسم رسائل الإقلاع تمر على الشاشة. قد يستغرق الأمر دقيقةً أو دقيقتان عند إقلاع نظام التشغيل راسبيان للمرة الأولى، حيث يكيّف النظام نفسه ليستغل المساحة الفارغة من بطاقة الذاكرة microSD أفضل استغلال، وستلاحظ أنّ العملية ستكون أسرع بكثير خلال الإقلاعات اللاحقة. أخيرًا، سترى لبرهة نافذةً تحمل شعار راسبيري باي قبل أن يظهر لك سطح مكتب راسبيان Raspbian ومعالج إعداد النظام setup wizard. وهكذا يكون تثبيت نظام التشغيل على راسبيري باي قد اكتمل تمامًا وأصبح جاهزًا للإعداد؛ وهذا ما ستتعلمه في المقال التالي. ترجمة -وبتصرف- للفصل الثاني Getting started with your Raspberry Pi من كتاب The official Raspberry Pi Beginners Guide. اقرأ أيضًا المقال السابق: تعرف على جهاز راسبيري باي Raspberry Pi المدخل الشامل لتعلم علوم الحاسوب أنظمة التشغيل للمبرمجين
-
ستتعرف من خلال سلسلة المقالات هذه على تفاصيل جهاز راسبيري باي؛ الحاسوب الجديد الذي لا يتعدى حجمه حجم بطاقتك الإئتمانية، وستكتشف الكمّ الكبير من المكونات التي يدعمها، وما الذي ستقدمه لك هذه المكونات. يُعَد راسبيري باي Raspberry Pi جهازًا مميزًا، فهو حاسوبٌ متكامل وظيفيًا ضمن علبةٍ صغيرة رخيصة الثمن، فلو كانت غايتك هي جهازٌ تستخدمه لتصفح الإنترنت أو للألعاب، أو كنت مهتمًا بتطوير برامجك الخاصة أو تصميم دوائرك الإلكترونية أو تجهيزاتٍ خاصة بك، فجهاز راسبيري باي ومجتمع هواته ومحترفيه الرائعين سيشكلان السند الحقيقي لك في كل خطوةٍ تخطوها. تُعرف أجهزة راسبيري باي بأنها حواسيبٌ مجمّعةٌ على لوحة إلكترونية مفردة single board؛ فهي عبارة عن حاسوب مثل الحواسيب المكتبية أو المحمولة أو الهواتف الذكية، لكنه جُمِّع على لوحةٍ واحدةٍ طُبعت عليها جميع الدوائر الإكترونية المُكوِّنة له. يتمتع راسبيري باي مثل غيره من الحواسيب وحيدة اللوحة بميزةٍ مهمة، وهي أنه صغير الحجم، حيث لا يتعدى حجمه حجم البطاقة الائتمانية، ولا يعني ذلك إطلاقًا أنّ قدرته أضعف بل يستطيع تنفيذ ما يستطيع تنفيذه أي حاسوبٍ أكبر وأكثر استهلاكًا للطاقة، لكن ليس بالسرعة نفسها بالضرورة. ظهرت عائلات راسبيري باي نتيجةً للرغبة في تشجيع طرقٍ أكثر تقدّمًا في تعليم الحوسبة حول العالم، وقد انطلقت من فكرةٍ بسيطةٍ تبناها مخترعي راسبيري، الذين أنشؤوا لاحقًا مؤسسة راسبيري باي غير الربحية والتي أثبتت شعبيتها الكبيرة، فقد بيعت بضعة آلافٍ من القطع التي جُمِّعت عام 2012 لاختبار أنواع المياه، وتبعها مباشرةً شحنٌ لملايين الأجهزة إلى كل أصقاع الأرض في السنوات التالية. وجدت هذ التجهيزات طريقها إلى المنازل وصفوف التعليم والمكاتب ومراكز البيانات والمعامل، وحتى إلى الزوارق المقادة ذاتيًا والبالونات التي تُطلق إلى الفضاء. أُصدرت نماذجٌ متعددة من راسبيري باي تباعًا بعد إصدار النموذج الأصلي B، وحمل كلٌ منها مواصفاتٍ محسنة أو ميزاتٍ مخصصة لاستخداماتٍ محددة، حيث تتميز العائلة راسبيري باي زيرو Raspberry Pi Zero مثلًا، بأنها نسخةٌ مصغرةٌ عن أجهزة راسبيري باي ذات الأبعاد الكاملة، لكنها تفتقر إلى ميزاتٍ عدة وخصوصًا منافذ USB المتعددة ومنفذ الاتصال مع الشبكات السلكية حتى يكون مخططها أصغر وأقل استهلاكًا للطاقة الكهربائية. تشترك جميع نماذج راسبيري باي بميزةٍ هامةٍ، وهي التوافق Compatibility؛ فالبرنامج الذي تكتبه لنموذجٍ ما، سيعمل على كل النماذج الأخرى، كما أنك قادرٌ على نقل أحدث نسخةٍ من نظام تشغيل راسبيري باي وتشغيله على النموذج الأولي الأصلي (نموذج B)، حيث سيعمل ببطء بالتأكيد، لكنه سيعمل. سنتعرف خلال سلسلة المقالات هذه على راسبيري باي 4 نموذج B، وهو النموذج الأحدث والأقوى من أجهزة راسبيري باي، ومع ذلك من السهل تطبيق ما تعلمته على أية نماذجٍ أخرى من عائلة راسبيري باي، حيث لا داعي للقلق مما إذا كان نموذجك مختلفًا. تُظهر أجهزة راسبيري باي جميع مكوّناتها ومنافذ اتصالها وجميع ميزاتها، على خلاف الحواسيب التقليدية التي تخفي تفاصيلها في حاويتها cases، ويمكنك طبعًا شراء حاويةٍ مستقلةٍ لراسبيري باي لحماية الجهاز إن أردت. سيتيح لك ذلك فرصةً رائعةً لتعلم كيفية عمل الأجزاء المختلفة للحاسب، وسيسهل عليك معرفة ماذا يحدث وأين، وذلك عندما نصل إلى المرحلة التي نتعلم فيها طريقة توصيل أجهزة إضافيةٍ إلى لوحتك، أو ما يُعرف بالطرفيات peripherals. شكل 1-1 راسبيري باي 4 نموذج B يُظهر الشكل السابق جهاز راسبيري باي 4 نموذج B كما يبدو من الأعلى. حاول أن تُبقي لوحة الجهاز في الوضعية التي نعرضها في الصورة عندما تستخدم هذا الكتاب لتعلم راسبير باي، فقد تختلط عليك الأمور في بعض مراحل العمل، مثل ترتيب الأرجل في واجهة الدخل والخرج العمومية GPIO، والذي سنتحدث عنه بالتفصيل في الفصل السادس. وعلى الرغم من وجود الكثير من الأشياء المُدمجة في لوحة راسبيري باي الصغيرة، لكن فهم هذا الجهاز يُعَد أمرًا يسيرًا. وسنبدأ بمكوّناته، وهي الدوائر التي تجعل كل شيءٍ يعمل. مكونات راسبيري باي يتألف الجهاز مثل بقية الحواسيب التقليدية من مكوّناتٍ مختلفة لكلٍ دورها في المنظومة، حيث ستجد المكوّن الأكثر أهميةً قريبًا من مركز اللوحة على الوجه العلوي مغطّىً بغطاءٍ معدني، وهو رقاقة النظام المدمجة System-On-Chip -أو اختصارًا SoC-، كما هو موضحٌ في الشكل التالي. شكل 2-1 رقاقة النظام المدمجة يوحي اسم هذا المكوّن بما ستجده إذا نزعت الغطاء المعدني، وهو رقاقةٌ سيليكونيةٌ معروفةٌ باسم الدارة المتكاملة integrated circuit، وتضم كامل منظومة راسبيري باي بما فيها وحدة المعالج المركزية Central Processing Unit -أو اختصارًا CPU-، التي تمثل من الناحية الوظيفية دماغ الحاسب، ووحدة معالجة الرسوميات Graphics Processing Unit -أو اختصارًا GPU-، التي تتعامل مع نواحي الإظهار البصري. وطالما أن الدماغ سيغدو بلا فائدةٍ دون ذاكرة، فستجد إلى جانب رقاقة النظام رقاقةً أخرى تبدو مثل مربع بلاستيكي أسود كما هو موضحٌ في الشكل الآتي، وهي ذاكرة الوصول العشوائي Random Access Memory -أواختصارًا RAM-. ستكون ذواكر الوصول العشوائي مسرحًا لتنفيذ كل أعمالك التي لن تنتقل إلى الذاكرة الدائمة المتمثّلة ببطاقة ذاكرة من النوع microSD إلا عندما تخزِّن عملك. يُعرف نوعا الذاكرة السابقين بالذواكر المتطايرة والذواكر الدائمة غير المتطايرة؛ حيث تفقد ذواكر الوصول العشوائي المتطايرة RAM محتواها عند انقطاع التغذية الكهربائية، بينما تحتفظ الذاكرة غير المتطايرة الموجودة على بطاقة microSD بمحتواها. شكل 3-1 ذاكرة الوصول العشوائي لجهاز راسبيري باي ستجد على الزاوية اليمينية العليا من اللوحة غطاءً معدنيًا آخر يغطي منظومة الراديو التي تمنح جهاز راسبيري باي القدرة على الاتصال اللاسلكي كما هو موضحٌ في الشكل التالي، وتضم المنظومة وظيفيًا مكوّنين، أحدهما مكوّن الاتصال اللاسلكي بتقنية WiFi للاتصال مع شبكات الحاسب، والآخر مكوّن الاتصال اللاسلكي بتقنية بلوتوث Bluetooth للاتصال مع الطرفيات مثل الفأرة، أو نقل البيانات من وإلى الأجهزة الذكية المجاورة مثل الهواتف والحساسات. شكل 4-1 وحدة الاتصال الراديوي تُشاهد على الحافة السفلية للوحة رقاقةً سوداء أخرى مغلفةً بالبلاستيك خلف مجموعة منافذ الناقل التسلسلي العالمي Universal serial Bus -أو اختصارًا USB-؛ وهي رقاقةٌ التحكم بمنافذ USB والمسؤولة عن تشغيلها، كما ستجد إلى جانبها رقاقةً التحكم بالشبكة السلكية؛ وهي رقاقةٌ سوداء أصغر حجمًا تدير منفذ الاتصال السلكي المحلي Ethernet. ستجد في الناحية اليسارية العليا وإلى الأعلى قليلًا من مأخذ التغذية الكهربائية للّوحة عبر منفذ USB-C، رقاقةً سوداء أصغر حجمًا من بقية الرقاقات تُعرف باسم الدارة المتكاملة لإدارة الطاقة Power Management integrated circuit -أو اختصارًا PMIC-، كما هو موضحٌ في الشكل التالي؛ حيث تدير هذه الدارة الطاقة الكهربائية التي تصل عبر منفذ USB-C لتغطي حاجة جهاز راسبيري باي. شكل 5-1 الدارة المتكاملة لإدارة الطاقة PMIC لا تقلق إن بدا لك الأمر صعبًا، فلست مضطرًا إلى معرفة موضع كل مكوّن أو دوره لتستخدم راسبيري باي. منافذ الاتصال في راسبيري باي يضم جهاز راسبيري باي مجموعةً من المنافذ التي سنستعرضها خلال السطور القليلة التالية. منافذ الناقل التسلسلي العالمي USB ستجد هذه المنافذ في وسط الحافة السفلية للوحة وإلى يمينها، وتمنحك القدرة على الاتصال مع الطرفيات المتوافقة مع الناقل USB، مثل الفأرة ولوحة المفاتيح وآلات التصوير الرقمية والذواكر المتنقلة flash drives. يوجد نوعين لمنافذ USB من الناحية التقنية هما على النحو الأتي: USB 2.0: صُمم وفقًا للنسخة الثانية من معيار الناقل التسلسلي العالمي، وبالإمكان تمييزه من خلال القطعة البلاستيكية السوداء داخله. USB 3.0: وهو المنفذ الأسرع بينهما، وصُمم وفقًا للنسخة الثالثة الأحدث من المعيار السابق، وتستطيع تمييزه من خلال القطعة البلاستيكية الزرقاء داخله. الشكل 6-1 منافذ USB لجهاز راسبيري باي منفذ الاتصال السلكي المحلي Ethernet يتواجد على يمين منافذ USB -كما هو موضحٌ في الشكل التالي-، ويُعرف أيضًا بمنفذ الشبكة network port، ويُستخدم للاتصال مع شبكات الحاسوب سلكيًا عبر كابلٍ ينتهي بمقبسٍ من النوع RJ45 شبيهٍ بمقبس سلك الهاتف لكنه أوسع. ستجد مؤشرين ضوئيين LEDs أسفل المنفذ يمثلان مؤشري الحالة؛ يعطيانك فكرةً عن نجاح الاتصال من عدمه. شكل 7-1 منفذ الاتصال السلكي لجهاز راسبيري باي مخرج صوتي-بصري AV يتواجد على الحافة اليسارية للوحة راسبيري باي فوق منفذ الاتصال السلكي، ويُعرف أيضًا باسم مخرج سماعات الرأس، وهو بقطر 3.5 ميليمتر، كما هو موضحٌ بالشكل التالي. يُستخدم هذا المخرج لوصل الجهاز مع سماعات الرأس، كما يمكن وصله مع مكبر صوت Speaker للحصول على جودةٍ صوتيةٍ أعلى. لهذا المخرج ميزةٌ خفية، إذ بإمكانه نقل إشارة الفيديو، وبالتالي وصله إلى الشاشات أو أجهزة الإسقاط وغيرها من أجهزة العرض التي تدعم إشارة الفيديو المركبة التي تنتقل عبر كابلٍ ينتهي بطرفية الغلاف مدبب الرأس ثنائي الحلقة tip-ring-ring-sleeve -أواختصارًا TRRS-، وذلك تمامًا مثل المقبس التقليدي لسماعات الرأس التي تتصل بالهواتف المحمولة. شكل 8-1 مخرج صوتي-بصري بقطر 3.5 ميليمتر مدخل كاميرا التصوير يتوضع فوق مخرج AV مباشرةً، ويأتي على شكل وصلةٍ غريبة المظهر مزودةٍ بغطاء بلاستيكي قابلٍ للسحب، ويُعرف أيضًا باسم واجهة الكاميرا التسلسلية Camera Serial Interface -أواختصارًا CSI-. يوضح الشكل التالي هذا المنفذ الذي يسمح بالاتصال مع الكاميرا المُصممة خصيصًا لجهاز راسبيري باي، والتي سنتعلم التعامل معها في الفصل الثامن. شكل 9-1 وصلة كاميرا راسبيري باي منفذ واجهة الوسائط المتعددة عالية الدقة micro-HDMI يتوضع على الحافة اليسارية للوحة الجهاز وفوق وصلة الكاميرا مباشرةً، وهو منفذٌ من النموذج micro الذي يأتي أصغر حجمًا من منافذ HDMI المعيارية التي تراها في وحدات الألعاب أو أجهزة التلفاز، كما هو موضحٌ في الشكل التالي. تنقل هذه المنافذ إشارات الصوت والفيديو بجودةٍ عالية، ويمكنك استخدامها لوصل راسبيري باي بجهازٍ أو جهازي عرض، مثل شاشات الحاسوب أو أجهزة التلفاز أو أجهزة الإسقاط. شكل 10-1 منفذ HDMI منفذ USB-C للتغذية بالطاقة الكهربائية يأتي مباشرةً فوق منفذ HDMI، ويُستخدم لإيصال التغذية الكهربائية إلى لوحة راسبيري باي كما هو موضحٌ في الشكل التالي. من المؤكد أنك رأيت منفذ USB-C في الهواتف الذكية والأجهزة اللوحية وغيرها من الأجهزة المحمولة. ولا يُنصح بالطبع استخدام شواحن الهواتف المحمولة في تغذية راسبيري باي على الرغم من إمكانية ذلك، كما يفضّل استخدام مصدر التغذية المعتمد من قبل راسبيري باي. شكل 11-1 منفذ USB-C كمدخل تغذية بالطاقة الكهربائية واجهة شاشة الإظهار وهي وصلةٌ شبيهةٌ بوصلة الكاميرا، حيث يوضح الشكل التالي موصل الشاشة display connector، أو واجهة شاشة الإظهار Display Serial Interface -أو اختصارًا DSI-، والتي تقع على الحافة العليا للوحة الجهاز، حيث تُستخدم لتوصيل شاشة اللمس الخاصة براسبيري باي الموضحة بالشكل الثاني. شكل 12-1 وصلة DSI الخاصة براسبيري باي شكل 13-1 شاشة لمس راسبيري باي منصة GPIO تكون منصة أرجل الدخل والخرج للأغراض العامة general-purpose input/output أو اختصارًا GPIO، متواجدةً على الحافة اليمينية للوحة راسبيري باي، وتتكون من 40 رِجلًا معدنيةً pins منتظمةً في صفين يضم كلٌ منهما 20 رجلًا كما هو موضحٌ في الشكل التالي. تستخدم راسبيري باي هذه الأرجل للتخاطب مع عناصر الوسط الخارجي، مثل المؤشرات الضوئية LEDs والأزرار وغيرها، بما في ذلك الحساسات الإلكترونية، مثل حسّاسات درجة الحرارة ومقابض الألعاب joysticks، وشاشات مراقبة معدلات النبض. سنتعرف على عمل هذه الأرجل في الفصل السادس المتمحور حول الحوسبة الفيزيائية وبرمجة المكوّنات باستخدام بايثون Python وسكراتش Scratch. شكل 14-1 منصة GPIO منصة أرجل التغذية عبر شبكة الاتصال المحلية PoE منصة PoE هي اختصارٌ للمصطلح Power Over Ethernet، وهي تقنيةٌ لنقل الطاقة الكهربائية عبر سلكين ضمن كابل الاتصال، وتُستخدم هذه المنصة التي تقع أسفل ويسار منصة GPIO، والمؤلفة من أربعة أرجل أصغر حجمًا، مثل إضافةٍ لتغذية جهاز راسبيري باي عبر شبكة الاتصال السلكية المحلية بدلًا من منفذ USB-C. موصل بطاقة الذاكرة من نوع microSD وهو المنفذ الأخير الذي نستعرضه، ويقع على الوجه السفلي للّوحة مقابل مأخذ شاشة الإظهار DSI، كما هو موضحٌ في الشكل التالي. تمثل بطاقة الذاكرة microSD أداة التخزين الدائمة لنظام راسبيري باي، حيث توضع هذه البطاقة داخل الحاضنة المخصصة لها لتخزِّن كل الملفات التي تحتاجها، وكل البرامج التي تثبتها بالإضافة إلى نظام التشغيل الذي يقود الجهاز. شكل 15-1 حاضنة بطاقة الذاكرة من نوع microSD طرفيات راسبيري باي لن يقدم لك جهاز راسبيري باي الكثير بمفرده، فحاله حال حاضنة الحاسوب المكتبي بمفردها، ومن أجل استغلال إمكانيات الجهاز لا بدّ من تأمين الطرفيات المناسبة، حيث ستحتاج بالحد الأدنى إلى بطاقة ذاكرة من نوع microSD لتخزين البيانات، وشاشة أو تلفاز لترى ما تفعل، إلى جانب لوحة مفاتيح وفأرة لإيصال تعليماتك، كما ستحتاج إلى مصدر تغذية بالطاقة الكهربائية يعطي الجهاز جهدًا ثابتًا مقداره 5 فولت وتيار شدته 3 أمبير أو أفضل. وهكذا ستحصل على حاسوبٍ قادرٍ على العمل تمامًا، وسنتعلم كيفية ربط هذه الطرفيات مع جهاز راسبيري باي في الفصل الثاني. لا تمثل الطرفيات التي أشرنا إليها كل ما يمكنك استخدامه مع راسبيري باي، حيث تضم قائمة الطرفيات الرسمية التي تنتجها راسبيري باي مايلي: حاضنة للوحة الجهاز Raspberry case، والتي تؤمن حمايةً للّوحة دون أن تعيق وصولك إلى المنافذ المختلفة للجهاز. تجهيزة الكاميرا Camera Module: ستجد تفاصيلها في الفصل الثامن. شاشة لمس راسبيري باي متصلة مع منفذ شاشة الإظهار وتؤمن عرضًا بصريًا وواجهة لمس على هيئة جدول. الطرفية Sense HAT متعددة الوظائف والموضحة في الشكل التالي، وهي طرفيةٌ ذكيةٌ ترتبط بالجهاز Hardware Attached Top، وتنفذ العديد من الوظائف التي سنتعرف عليها في الفصل السابع المتمحور حول الحوسبة الفيزيائية باستخدام Sense HAT. تجهيزات متنوعة من أطراف أخرى، حيث ستجد في الأسواق الكثير من الأدوات والتجهيزات تبدأ بتلك التي تحول راسبيري باي إلى حاسوبٍ محمول أو إضافاتٍ تمنح جهازك القدرة على فهم الكلام، وحتى الرد عليك. شكل 16-1 الطرفية Sense HAT تذكر أنك بحاجةٍ إلى تعلم الكثير عن راسبيري باي قبل شراء تلك الطرفيات. ترجمة -وبتصرف- للفصل الأول Get to Know your Raspberry Pi من كتاب The Official Raspberry Pi] Beginner's Guide. اقرأ أيضًا المدخل الشامل لتعلم علوم الحاسوب أنظمة التشغيل للمبرمجين