The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.
Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by eng.hd10, 2019-04-18 03:46:12

SimplyRaspberryPi

SimplyRaspberryPi

‫الرصل السادس‪ :‬برمجة منا ذ التحكم الإلكتروني بالبايثوي‬ ‫‪88‬‬

‫سلكي والتحكم عن بعد‬

‫الفصل السادس‪ :‬برمجة منافذ‬

‫التحكم الإلكتروني بالبايثون‬

‫مخارج التحكم ‪GPIO‬‬ ‫يشرح هذا الرصل استخدام الراسبيري في‬
‫لغات البرمجة التي تدعماا الراسبيري‬ ‫مشاريع التحكم الإلكتروني عن طريق الة ‪GPIO‬‬
‫بحيث تتحول الراسبيري إلى بديل متطور عن‬
‫مأدمة عن لغة بايثوي‬
‫‪ 2‬مشاريع تحكم مختلرة‬ ‫المتحكمات الدايأة ‪Microcontrollers‬‬

‫راسبيري باي ببساطة ‪89‬‬

‫مخارج التحكم ‪GPIO‬‬

‫‪ GPIO‬هي اختصار لعبارة ‪( General-purpose input/output‬النأاط العامة التي تستخدم كدخل أو‬
‫خرج)‪ ،‬تمتلك لوىة الراسبيري ‪ 20‬نأطة توصيل كاربية(‪ )pins‬تسمط ‪ GPIO‬بعضاا يستخدم في التحكم‬
‫الإلكتروني (‪ )outputs‬والبعض في الأستشعار (‪ )imput‬والبعض في امداد الطااة والبعض مخصص‬

‫لبروتوكولات الاتصالات بين المكونات والأجازة الإلكترونية المختلرة‪.‬‬

‫منا ذ الطااة‬

‫)‪ : Pin (1, 17‬مخرج للطااة بررع جاد ‪ 3.3‬ولت ويستطيع هذا المخرج تو ير تيار كاربي‬
‫ىتط ‪ 51‬مللي أمبير‪ ،‬لاىظ انه في ىالة سحب تيار اعلط من ‪ 51‬مللي اد يتضر منظم الجاد‬

‫ولوىة الراسبيري‪.‬‬
‫)‪ : Pin (2, 4‬مخرج (أو مدخل) للطااة بررع جاد ‪ 5‬ولت‪ ،‬يتصل هذا المخرج بمنرذ الة‬
‫‪ MicroUSB‬علط اللوىة والمسؤل عن تو ير الطااة ويستطيع تو ير تيار كاربي علط ىسب‬
‫الشاىن الكاربي المتصل بالة‪ MicroUSB‬ويمكن استخدامه كمدخل للطااة عن طريق‬

‫توصيل بطارية بررع جاد ‪ 5‬ولت لتشغيل‪.‬‬
‫)‪ : Pin (6, 9, 14, 20, 25‬نأاط التوصيل بالأرضي )‪Ground (GND‬‬

‫الرصل السادس‪ :‬برمجة منا ذ التحكم الإلكتروني بالبايثوي‬ ‫‪90‬‬

‫سلكي والتحكم عن بعد‬ ‫منا ذ التحكم‬

‫)‪ : Pin (3, 5, 7, 8, 10, 11, 12, 13, 15, 16, 18, 19, 21, 22, 23, 24, 26‬تمتلك الراسبيري ‪ 19‬منرذ‬

‫خاص‪ ،‬هذه المنا ذ يمكن استخدماا في التحكم الإلكتروني إما علط صورة ‪ Output‬أو ‪ Input‬ويتم ضبط‬

‫وضع تشغيلاا عن طريق البرمجة كما سنرى في الرصول الأادمة‪.‬‬

‫ملاىظة هامة‪ :‬ترايم الة ‪ Pins‬علط الراسبيري باي مختلف عن ترايم الة ‪ GPIO‬مثلا المنرذ ‪ Pin‬رام ‪ 3‬هو‬
‫‪ GPIO2‬والمنرذ رام ‪ 11‬هو ‪ GPIO 17‬لذلك يجب الرجوع دائما الى الصورة الموجودة بالأعلط‬
‫والمسماة ‪ Raspberry Pi GPIO pin map‬والتي سيتم طرىاا بصورة مرصلة أكثر في الرصول الأادمة‬

‫باذي الله‪.‬‬

‫بروتوكلات الاتصالات‬

‫بروتوكول الأتصالات هي مجموعة من التأنيات التي توصل الأجازة و المكونات الإلكترونية مع بعضاا‬
‫البعض لتتبادل البيانات‪ ،‬في ىياتنا اليومية نستخدم عشرات بروتوكولات الاتصالات مثلا ‪ 802.11 g‬هو‬
‫اسم أطار بروتوكول اتصال لاسلكي لتأنية الة ‪ WiFi‬والذي نستخدمة في الاتصال بالشبكات اللاسلكية‬

‫وبروتوكول ‪ TCP/IP‬المستخدم في تنظيم عناوين الشبكات والإنترنت‪.‬‬

‫تدعم الراسبيري ‪ 0‬بروتوكولات للاتصالات مخصصة للأطع الإلكترونية وهي ‪i2C, SPI, UART, 1Wire‬‬
‫والتي تمكننا من الاتصال بالعديد من المكونات الإلكترونية وزيادة ادرة الراسبيري باي علط التحكم في‬
‫عشرات وىتط مئات الأجازة الإلكترونية باستخدام هذه البروتوكولات والتي سنرى مدى أهيمتاا‬

‫بالترصيل في صل " التحكم المتأدم "‪.‬‬

‫تعمل هذه البروتوكولات علط نرخ منا ذ الة ‪ GPIO‬ىيث يتم ضبط المنرذ علط العمل اما كة ‪ input‬أو‬
‫‪ Output‬أو ‪ Communication Protocol‬وذلك من خلال التلاعب باعدادات هذه المنا ذ في نظام‬

‫التشغيل لينكخ وباستخدام لغات البرمجة مثل بايثوي أو السي‪.‬‬

‫لغات البرمجة التي تدعماا الراسبيري‬

‫تعمل الراسبيري بنظام لينكخ والذي يعني اناا تمتلك الدعم الكامل لمعظم لغات البرمجة التي يدعماا‬
‫لينكخ مثل ‪ ...C, C++, C# (Mono), Java, Python, Perl, Ruby, Pascal‬الخ‪ ،‬كل هذه اللغات يمكنك‬
‫استخداماا في عمل أي نوع من التطبيأات سواش تطبيأات سطح المكتب أو سير رات أو ىتط تطبيأات‬
‫للتحكم في المنا ذ الإلكترونية ‪ GPIO‬ىيث سنجد مكتبات برمجية يمكن اضا تاا لأي من هذه اللغات‬

‫راسبيري باي ببساطة ‪91‬‬

‫للتحول إلى أداة للتحكم في الة ‪ GPIO‬بساولة ويسر‪ ،‬في هذا الكتاب سيكوي التركيز الأكبر علط لغة‬
‫البايثوي ‪ Python‬مع وضع مأدمة عن لغة ‪ Scratch‬ولغة ‪ C‬باستخدام مكتبة ‪ WiringPi‬و التي تجعل‬

‫برمجة الراسبيري طبيه جدا ببرمجة آردوينو‪.‬‬

‫ما هي اللغة الأ ضل للتحكم في الة ‪ GPIO‬؟‬

‫الأجابة علط هذا السؤال صعبة‪ ،‬علط ىسب نوع التطبيق الذي تريده تتحدد اللغة‪ ،‬مثلا لغة البايثوي‬
‫هي اطار لغة للتحكم في الة ‪ GPIO‬ستجد لها دعم كبير جدا علط الإنترنت من مجتمع الراسبيري‪ ،‬كما‬
‫تدعم العديد من المكتبات كما سنرى في الرصول الأادمة‪ ،‬اما لغة السي ‪ C‬تأدم سرعة ائأة في التحكم‬
‫في الة ‪ GPIO‬ىتط أنه يمكنك اي تولد إطارات (ذبذبات) إلكترونية من مخارج الراسبيري بسرعة تصل‬

‫إلى ‪ 251‬ميجا هرتز ( ‪ 250,000,000‬نبضة في الثانية الواىدة)‪.‬‬

‫بينما نجد لغة سكراتش سالة جدا لدرجة أي طرل صغير يستطيع أي يبني باا أنظمة روبوتات متطورة‬
‫بساولة ويسر ودوي كتابة اكواد برمجية معأدة ىيث تعتمد هذه اللغة علط الرسومات (والتي تتحول يما‬

‫بعد الى لغة بايثوي)‪.‬‬

‫علط أي ىال سيرتكز الكتاب علط لغة بايثوي باعتبارها الأطار وصاىبة التطبيأات الأكثر علط الراسبيري‬
‫باي‪ ،‬وفي النااية ىرية الاختيار راجعة إليك‪.‬‬

‫يمكنك الرجوع إلى الرابط التالي والذي يحتوي علط مرجع طامل عن ‪ GPIO‬واللغات البرمجية التي‬
‫تدعم التحكم باذه المخارج مع طرح مختصر لمميزات كل لغة عن الأخرى‬

‫‪http://elinux.org/RPi_Low-level_peripherals‬‬

‫الرصل السادس‪ :‬برمجة منا ذ التحكم الإلكتروني بالبايثوي‬ ‫‪92‬‬

‫سلكي والتحكم عن بعد‬

‫مأدمة عن لغة بايثوي‬

‫ظلت كلمة البايثوي "الأصلة" تعبر عن ثعباي ضخم يعيش في اناار الأمازوي‬
‫وبعض مستنأعات ا ريأيا لكن ماإي اتط عام ‪ 1771‬ىتط اكتسب هذا الاسم‬
‫طاره جديدة بين المبرمجين ةصبحت كلمة البايثوي تعبر عن أطار لغات البرمجة مرتوىة المصدر في‬

‫العالم والتي تعتبر من لغات المستوى العالي وتتميز ببساطة كتابتاا واراشتاا مأارنة ببااي اللغات‪.‬‬

‫تعتبر لغة بايثوي لغة ترسيرية‪ ،‬متعددة الأغران وتستخدم بشكل واسع في العديد من المجالات‪ ،‬كبناش‬
‫البرامج المستألة باستخدام الواجاات الرسومية ‪ GUI‬وفي عمل برامج الويب‪ ،‬بالإضا ة إلى استخداماا‬
‫كلغة برمجة نصية للتحكم في أداش بعض من أطار البرامج المعرو ة أو في بناش برامج ملحأة لها‪ ،‬كما تدعم‬
‫البرمجة المتوازية وبرمجة الحواسيب الخاراة )‪Supercmputers (cluster – parrallel programming‬‬

‫كما تدعم برمجة منا ذ التحكم ‪ GPIO‬في لوىة الراسبيري باي‪.‬‬

‫بشكل عام يمكن استخدام بايثوي لبرمجة البرامج البسيطة للمبتدئين‪ ،‬ولإنجاز المشاريع الضخمة كةي لغة‬
‫برمجية أخرى في نرخ الوات‪ .‬غالبا ما ُينصح المبتدئين في ميداي البرمجة بتعلم هذه اللغة لساولتاا‬
‫واوتاا في ذات الوات‪ ،‬ومع ذلك نجد مؤسسات عملااة تستخدم هذه اللغة داخل برامجاا مثل جوجل‬

‫و مؤسسة الرضاش الدولي "ناسا‪."NASA‬‬

‫غالبا ما تحصل هذه اللغة علط الترتيب الرابع أو الخامخ في اائمة أطار لغات البرمجة في العالم (تبعا‬
‫لأىصائيات مواع ‪ GitHUB‬الشاير لمشاركة الأكواد البرمجية)‪ ،‬نشةت بايثوي في مركز ‪ CWI‬مركز العلوم‬
‫والحاسب الآلي بةمستردام علط يد "جويدو اي ُرزوم" ‪ Guido van Rossum‬في أواخر الثمانينات‪،‬‬
‫وكاي أول إعلاي عناا في عام ‪ ،1771‬تم كتابة نواة اللغة بلغة السي ‪ C‬أطلق اي رُزوم اسم "بايثوي" علط‬

‫لغته تعبيًرا عن إعجابه بِرراَة مسرىية هزلية طايرة من بريطانيا‪ ،‬كانت تطلق علط نرساا اسم مونتي بايثوي‬
‫‪Monty Python‬‬

‫مميزات لغة بايثوي‬

‫تعمل علط جميع أنظمة التشغيل واصدارتاا المختلرة‪ :‬ويندوز – لينكخ (ومشتأاته) – يونكخ‬
‫(ومشتأاته) – أنظمة الهواتف المحمولة مثل ‪ Symbian‬و ‪Android‬‬

‫وجود أغلب المكتبات الإضا ية معاا تسطيع في بايثوي إيجاد مكتبة لكل طيش وأغلب هذه‬
‫المكتبات تةتي مر أة مع اللغة‪ ،‬لكن هناك اليل من المكتبات التي تحتاج الى تحميلاا من مصادر‬
‫خارجية ومن الأمثلة علط هذه المكتبات‪ :‬البلوتوث‪ ،‬منا ذ التحكم الإلكتروني‪ ،‬واجاات الويب‪،‬‬

‫راسبيري باي ببساطة ‪93‬‬

‫التعامل مع الشبكة و الإنترنت‪ ،‬برمجة الحواسيب الرائأة‪ ،‬تطبيأات سطح المكتب‪ ،‬مكتبات‬
‫لتصميم الألعاب ثنائية وثلاثية الأبعاد ‪ ....‬إلخ‪.‬‬
‫التكامل مع ‪ ++C‬و ‪Java‬‬

‫تعمل ضمن بيئة تراعلية أو عبر سكربتات (ملرات) مكتوبة‬
‫التعامل مع اواعد البيانات التالية‬

‫‪Oracle, sybase , PostGres, mSQL , persistence , dbm o‬‬

‫في هذا الكتاب سيرتكز الشرح علط ادرة البايثوي علط التعامل مع منا ذ التحكم الإلكتروني ‪GPIO‬‬
‫وبعض تطبيأات الإنترنت‪ ،‬والدليل علط اوة هذه اللغة كلغة لبرمجة التحكم الإلكتروني أنه إذا ما بحثت‬
‫في الإنترنت عن المشاريع الإلكترونية والبرمجية المتعلأة بالراسبيري غالبا ستجد هذه المشاريع مكتوبة‬

‫بلغة البايثوي لذلك سةركز علط طرح أكبر عدد من الأمثلة والمشاريع باستخدام هذه اللغة الرائعة‪.‬‬

‫تةتي البايثوي مدمجة في معظم أنظمة لينكخ سواش لأجازة الحاسب الآلي أو علط لوىة الراسبيري باي‬
‫سنستخدم في هذا الكتاب الإصدارة رام ‪ 2.9‬من البايثوي مع العلم اي الاصدارة الثالثة اد صدرت بالرعل‪،‬‬
‫وسبب اختياري للإصدارة الثانية هي اىتوائاا علط العديد من المكتبات البرمجية التي لم تنأل بعد‬
‫للإصدارة الثالثة‪ ،‬علط أي ىال تتو ر مكتبة التحكم في الة‪ GPIO‬لكل من الإصدارتين الثانية و الثالثة ولن‬

‫تجد اختلا ات جذرية في الأكواد وطريأة الكتابة بين كلتا الإصدارتين في مشاريع التحكم‪.‬‬

‫إذا أىببت دراسة لغة بايثوي من الجوانب التطبيأية الأخرى (للاف التحكم الإلكتروني) مثل تطبيأات‬
‫سةةةةطح المكتةب واواعد البيانات‪ ،‬السةةةةير رات ‪ ..‬الخ‪ ،‬يمكنك الرجوع للمرجع العربي الرائع " تعلم‬
‫الةةبرمجةةة مةةع بةةايةةثةةوي ‪ " ٣‬والةةذي يمةةكةةنةةك تحةةمةةيةةلةةة مجةةانةةا مةةن الةةرابةةط الةةتةةالةةي‪:‬‬

‫‪http://librebooks.org/learn_programming_with_python3/‬‬

‫الرصل السادس‪ :‬برمجة منا ذ التحكم الإلكتروني بالبايثوي‬ ‫‪94‬‬

‫سلكي والتحكم عن بعد‬

‫اساسيات لغة بايثوي‬

‫مرسر بايثوي التراعلي‬

‫تتماز لغة بايثوي بإمكانية عمل برامج عن طريق كتابتاا في ملف (سكربت) أو تشغيلاا مباطرة ومشاهده‬
‫النتائج ور كتابتاا عن طريق مرسر بايثوي التراعلي والذي يمكنك تشغيله من سطر الأوامر مباطرة عبر كتابة‬
‫‪ python‬أو يمكنك تشغيله بالضغط مرتين علط أيأونة ‪ IDLE‬علط سطح المكتب ليظار ‪ Python Shell‬كما‬

‫في الصورة التالية‪:‬‬

‫طخصيا أ ضل التعامل مع مرسر البايثوي من سطر الأوامر‬

‫العمليات الأساسية‬

‫سنكتب أول برنامج لعرن جملة "مرىبا أياا العالم" ‪ Hello World‬وذلك عن طريق كتابة الأمر ‪ print‬ثم‬

‫الجملة المراد عرضاا مثل الصورة التالية‪:‬‬

‫" ‪print " Hello World‬‬

‫سنجد أي مرسر بايثوي التراعلي اد اظار النتيجة ورا بمجرد الضغط علط زر ‪Enter‬‬

‫راسبيري باي ببساطة ‪95‬‬

‫العمليات الحسابية‪:‬‬

‫تستطيع البايثوي الأيام بالعمليات الحسابية مباطرة مثل الجمع‪ ،‬الطرح‪ ،‬الأسمة‪ ،‬الضرب‪.‬‬
‫اكتب ‪ 1+1‬ثم اضغط ‪Enter‬‬

‫اكتب ‪( 2*2-1‬ضرب ‪ 2‬في ‪ 2‬ثم طرح ‪)1‬‬

‫تعريف المتغيرات‪:‬‬

‫لتعريف أي متغير رامي في لغة البايثوي كل ما عليك علة هو كتابة اسم (المتغير = ايمته) ولعرن ايمة‬

‫المتغير نكتب ‪ print‬ثم اسم المتغير‬

‫‪x=2‬‬
‫‪print x‬‬

‫لتغير المتغيرات النصية (كلمة أو جملة) نكتب اسم المتغير ثم = "الكلام الذي يحتويه المتغير" – لا تنسط‬

‫علامات " " بين ايمة المتغير مثل‪:‬‬

‫"‪myName = "Abdallah El-Masry‬‬
‫‪print myName‬‬

‫كما يمكنك الدمج بين العمليات الحسابية والمتغيرات في نرخ الأمر مثل أي تكتب‬

‫‪x=2+3+2‬‬
‫‪print x‬‬

‫لإغلاع المرسر التراعلي من سطر الأوامر نضغط علط زر ‪Ctrl+D‬‬

‫الرصل السادس‪ :‬برمجة منا ذ التحكم الإلكتروني بالبايثوي‬ ‫‪96‬‬

‫سلكي والتحكم عن بعد‬ ‫ىرظ البرنامج في سكربت‬

‫في الأمثلة السابأة استخدمنا البايثوي في تنريذ الأوامر مباطرة عبر المرسر التراعلي‪ ،‬لكن بالتةكيد عندما‬

‫نبني مشاريع ىأيأة سنحتاج لكتابة برامج ثابتة لا تضيع منا بمجرد غلق المرسر و لعمل هذا يمكننا‬

‫استخدام أي محرر نصوص وكتابة نرخ الأوامر السابأة و ىرظاا علط صورة سكربت (ملف نصي) بامتداد‬
‫‪ py‬وهو امتداد جميع برامج البايثوي‪.‬‬

‫برنامج لجمع رامين‬

‫‪x=3‬‬
‫‪y=1+2‬‬
‫‪sum=x+y‬‬
‫‪print sum‬‬

‫ا تح برنامج ‪ LeafPad‬من اائمة ‪ ، Accssories‬ثم اكتب النص و اىرظ الملف باسم ‪ sum.py‬داخل‬
‫المجلد ‪/home/pi‬‬

‫لتشغيل البرنامج ا تح سطر الأوامر واكتب‬

‫‪python sum.py‬‬

‫تنصيب مكتبة التحكم‬

‫ابل الشروع في استخدام بايثوي للتحكم بالة‪ GPIO‬سنأوم بتنصيب مكتبة التحكم الإلكتروني ‪rpi.gpio‬‬

‫والتي يمكننا الحصول علياا مباطرة من سطر الأوامر عن طريق‪:‬‬
‫‪sudo apt-get update‬‬
‫‪sudo apt-get install –y python-dev python-rpi.gpio‬‬

‫راسبيري باي ببساطة ‪97‬‬

‫المثال الأول‪ :‬تشغيل و إطراش ليد ‪Blinking Led‬‬

‫المكونات المطلوبة‪:‬‬ ‫الهدف من المثال‬

‫لوىة التجارب ‪Bread Board‬‬ ‫تشغيل الدايود الضوئي و اطراشة (عمل‬

‫لوىة راسبيري باي‬ ‫لاش‪ )Flash‬إلى ما لا نااية‬

‫دايود ضوئي ‪Led‬‬

‫مأاومة ‪ 311‬أوم‬

‫أسلاك توصيل‬

‫تجايز أجزاش المشروع‪:‬‬

‫ام بوضع الدايود الضوئي علط لوىة التجارب ووصل الطرف السالب مع المأاومة الة ‪ 311‬أوم و الطرف‬

‫الموجب مع المنرذ رام ‪ 11‬علط لوىة الراسبيري‪ ،‬ثم وصل طرف المأاومة الآخر بالطرف علط السالب‬

‫علط لوىة الراسبيري‪ ،‬المرىلة التالية ستكوي كتابة الكود البرمجي الذي سيتحكم في تشغيل و اغلاع‬

‫الدايود الضوئي‪.‬‬

‫الرصل السادس‪ :‬برمجة منا ذ التحكم الإلكتروني بالبايثوي‬ ‫‪98‬‬
‫سلكي والتحكم عن بعد‬
‫الكود البرمجي‬
‫‪import time‬‬
‫‪import RPi.GPIO as GPIO‬‬

‫)‪GPIO.setmode(GPIO.BOARD‬‬
‫)‪GPIO.setup(11, GPIO.OUT‬‬

‫‪while True:‬‬
‫)‪GPIO.output(11,0‬‬
‫)‪time.sleep(1‬‬
‫)‪GPIO.output(11,1‬‬
‫)‪time.sleep(1‬‬

‫يمكنك كتابة كود البرنامج اما عن طريق محرر النصوص علط الواجاه الرسومية ‪ Leafpad‬أو محرر‬
‫النصوص الذي يعمل من سطر الأوامر ‪،nano‬كلاهما يصلح لكتابة أي كود برمجي مع العلم اي محرر نانو‬
‫يحتوي بعض المميزات الخاصة لكتابة الأكواد البرمجية مثل تلوين الكود (هذه الخاصية تسال اراشة‬

‫الكود)‪.‬‬

‫استخدام محرر النصوص ‪LeafPad‬‬

‫ا تح برنامج ‪ LeafPad‬من اائمة ‪ ، Accssories‬ثم اكتب النص و اىرظ الملف باسم ‪blinkpin11.py‬‬
‫داخل المجلد ‪/home/pi‬‬

‫لا تنسةةةط ترك المسةةةا ة بعد‬ ‫استخدام محرر النصوص ‪Nano‬‬
‫‪ while True‬عةةن طةةريةةق‬
‫الضةةةغةط عةلط زر ‪ Tab‬في‬
‫الجةانةب الأيسةةةر من لوىة‬

‫المراتيح‬

‫يعتبر محرر النصوص نانو من أاوى محررات النصوص في بيئة سطر الأوامر داخل أنظمة لينكخ لما له من‬

‫ادرة علط التعرف علط العديد من لغات البرمجة و الأدرة علط البحث و التنسيق داخل الملرات لذلك‬

‫سةستخدم هذا البرنامج دائما في كتابة النصوص البرمجية‪.‬‬

‫راسبيري باي ببساطة ‪99‬‬

‫تشغيل نانو بسيط جدا كل ما عليك علة هو تح برنامج سطر الأوامر و كتابة ‪ nano Your-File‬ىيث‬
‫تستبدل ‪Your-File‬باسم الملف الذي تريد تحريرة و اذا لم يكن هذا الملف موجود سيأوم برنامج نانو‬

‫بعمل ملف جديد وتسميتة علط هذا الأسم‪ ،‬في هذا المثال سةستخدم الأمر‬
‫‪nano blinkpin11.py‬‬

‫سيأوم برنامج نانو بعمل ملف جاهز لاستأبال أوامر بلغة البايثوي‪ ،‬والآي كل ما عليك علة هو كتابة الأكواد‬
‫البرمجية السابأة وسيظار الكود المكتوب في محرر النصوص كالتالي‪:‬‬

‫لحرظ الملف أضغط ‪Ctrl+x‬ثم ستظار رسالة في الأسرل تسةلك اذا ما كنت تريد ىرظ البرنامج عندها‬
‫اضغط زر ‪ y‬ثم اضغط ‪ Enter‬ليتم ىرظ الملف‪.‬‬

‫تشغيل البرنامج‬

‫ام بتنريذ الأمر التالي في سطر الأوامر‪:‬‬

‫‪sudo python blinkpin11.py‬‬

‫ولاىظ ما يحدث للدايود الضوئي (يضيئ لمدة ثانية و يطنرئ لمدة ثانية)‪.‬‬

‫لاغلاع البرنامج أضغط علط زر ‪( Ctrl + C‬أغلب برامج لينكخ التي تعمل من سطر الأوامر يمكن اغلاااا‬

‫الرصل السادس‪ :‬برمجة منا ذ التحكم الإلكتروني بالبايثوي‬ ‫‪100‬‬

‫سلكي والتحكم عن بعد‬
‫باذه الطريأة)‪ ،‬ثم ام بتشغيل البرنامج مرة ثانية ولاىظ الرسالة الجديدة التي ستظار علط الشاطة‪ ،‬في‬

‫المرة الأولى التي طغلنا باا البرنامج سيعمل دوي أي يظار طيش علط الشاطة و سيبدأ الدايود الضوئي‬

‫‪ Led‬بالانارة و الانطراش كل ثانية لكن عند تشغيل البرنامج للمرة الثانية ستظار رسالة تخبرك بةي "المخرج‬

‫الذي تريد استخدام الآي اد يكوي ُمستخدما بالرعل"‬

‫هذه الرسالة تظار عند تشغيل برنامج تلو الآخر علط نرخ المنرذ (نرخ الة‪ ،)Pin‬يمكنك تجاهل هذه‬
‫الرسالة واذا أىببت اخرائاا اكتب )‪ GPIO.setwarnings(False‬في ملف برنامج التحكم كالتالي‪:‬‬

‫طرح الكود‬

‫أمر اسةةةتدعاش المكتبات‪ :‬يمثل هذا الجزش بداية أي برنامج في‬ ‫‪import time‬‬
‫معظم لغات البرمجة وهو إضا ة المكتبة البرمجية ‪ time‬المسؤلة‬ ‫‪import RPi.GPIO as GPIO‬‬

‫عن ايةاس الزمن و أو تنريةذ أمر معين لرترة محةددة من الزمن‪،‬‬

‫المكتبة الثانية هي ‪ RPi.GPIO‬و هي مكتبة التحكم في الة‪ GPIO‬الخاصة بالراسبيري باي‪.‬‬

‫)‪ GPIO.setmode(GPIO.BOARD‬أمر الترعيل‪ :‬هذا الأمر يستخدم في ترعيل جميع منا ذ الة‪GPIO‬‬

‫و يجعلاا جاهزة لاستأبال أوامر التحكم‪ ،‬كما يرتب المنا ذ بناش علط مكاناا علط لوىة الراسبيري باي‪.‬‬

‫اعداد وظيرة الة‪ :Pin‬هذا الأمر يحدد وظيرة أي ‪ Pin‬علط‬ ‫)‪GPIO.setup(11, GPIO.OUT‬‬

‫الة‪ GPIO‬و يحدد هل ستعمل كمخرج ‪ OUT‬أم كمدخل ‪ IN‬ويمثل رام ‪ 11‬رام الة‪ Pin‬التي نريد التحكم‬

‫باا‪ ،‬مع ملاىظة انه في ىالة استخدام اكثر من ‪ Pin‬يجب كتابة كيرية تشغيلاا ‪ IN‬أو ‪ OUT‬في بداية‬

‫البرنامج‪ ،‬علط سبيل المثال نريد تشغيل الة ‪pin‬رام ‪ 11‬كمخرج و الة ‪Pin‬رام ‪ 23‬كمدخل اذا سنكتب‪:‬‬

‫)‪GPIO.setup(11, GPIO.OUT‬‬
‫)‪GPIO.setup(23, GPIO.IN‬‬

‫راسبيري باي ببساطة ‪101‬‬

‫‪ while True:‬تكرار الأوامر إلى مالا نااية‪ :‬تستخدم دوال التكرار ‪ loops‬في‬
‫تنريذ مجموعة من الأوامر لعدد معين من المرات أو إلا ما لا‬

‫نااية و عند كتابة الأمر ‪ while True:‬اذا يعني أي جميع الأوامر التي تكتب بعدها ستنرذ إلا ما لا نااية أو‬

‫ىتط يتم اغلاع البرنامج أو اغلاع الراسبيري باي نرساا‪.‬‬

‫‪while True:‬‬ ‫لاىظ انه يجب ترك مسا ة ابل كل سطر نريد إدخاله داخل‬
‫عملية التكرار و ذلك عن طريق الضغط علط زر ‪ Tab‬في‬
‫‪command to do‬‬
‫‪another thing to do‬‬ ‫الجانب الأيسر من لوىة المراتيح‬
‫‪another thing to do‬‬

‫)‪ GPIO.output(11,0‬تشغيل و اغلاع المخارج‪ :‬يستخدم الأمر ‪GPIO.output(pin,‬‬
‫)‪ status‬في تشغيل او اغلاع أي منرذ ‪ GPIO‬ىيث نستبدل ‪pin‬‬

‫برام المخرج المراد تشغيلة أو اطرائة و نستبدل ‪ status‬بحالة الشغيل و هي اما = ‪ 1‬و تعني تشغيل المنرذ‬

‫( رع الجاد = ‪ 3.3‬ولت) و اما = صرر و تعني اغلاع المنرذ( رع الجاد = صرر)‪.‬‬

‫)‪Time.sleep(1‬‬
‫التحكم في زمن التشغيل و الإغلاع‪ :‬يستخدم الأمر‬

‫)‪ time.sleep(time‬في تحديد زمن تنريذ الأمر الذي يسبأة‪ ،‬مثلا اذا كاي الأمر الذي يسبأة يشغل المنرذ‬

‫رام ‪ 11‬و كتبنا )‪ time.sleep(5‬اذا يعني أي المنرذ رام ‪ 11‬سيظل يعمل لمدة ‪ 5‬ثواني‪.‬‬

‫)‪GPIO.output(11,0‬‬ ‫‪ ‬أغلق المخرج رام ‪ ( 11‬رع الجاد = صرر)‬

‫)‪time.sleep(1‬‬ ‫‪ ‬انتظر لمدة ثانية‬

‫)‪GPIO.output(11,1‬‬ ‫‪ ‬طغل المخرج رام ‪ ( 11‬رع الجاد = ‪ 3.3‬ولت)‬

‫)‪time.sleep(1‬‬ ‫‪ ‬انتظر لمدة ثانية‬

‫يمكن كتابة الأمر )‪ GPIO.output(pin,status‬علط صورة ‪ True‬أو ‪ False‬بحيث تمثل كلمة ‪ True‬تشغيل‬

‫المخرج (بدلا من ‪ )1‬و تمثل كلمة ‪ False‬اغلاع المخرج(بدلا من‪ ،)0‬علط سبيل المثال يمكننا تعديل‬

‫البرنامج ليصبح كالتالي‪:‬‬

‫‪import time‬‬
‫‪import RPi.GPIO as GPIO‬‬
‫)‪GPIO.setmode(GPIO.BOARD‬‬
‫)‪GPIO.setup(11, GPIO.OUT‬‬

‫‪while True:‬‬
‫)‪GPIO.output(11, False‬‬
‫)‪time.sleep(1‬‬
‫)‪GPIO.output(11, True‬‬
‫)‪time.sleep(1‬‬

‫الرصل السادس‪ :‬برمجة منا ذ التحكم الإلكتروني بالبايثوي‬ ‫‪102‬‬

‫سلكي والتحكم عن بعد‬ ‫تطوير المثال الأول‬

‫سنأوم بتطوير المثال الأول لكي يعرن رسالة علط الشاطة تخبرنا بةي الليد يعمل الآي أو الليد مغلق‪،‬‬

‫لعمل هذا التعديل سنضيف الأمر ‪ print‬مع الرسالة التي نريد عرضاا ليصبح الكود كالتالي‪:‬‬
‫‪import time‬‬
‫‪import RPi.GPIO as GPIO‬‬
‫)‪GPIO.setmode(GPIO.BOARD‬‬
‫)‪GPIO.setup(11, GPIO.OUT‬‬

‫‪while True:‬‬
‫)‪GPIO.output(11,False‬‬
‫")‪print "Led on Pin 11 is now OFF (output = zero volt‬‬
‫)‪time.sleep(1‬‬

‫)‪GPIO.output(11,True‬‬
‫")‪print "Led on Pin 11 is now ON (output = 3.3 volt‬‬
‫)‪time.sleep(1‬‬

‫صورة الكود بعد التعديل علط برنامج نانو‬

‫و الآي أعد تشغيل البرنامج ولاىظ ما سيظار علط الشاطة بالتزامن مع تشغيل و اغلاع الدايود الضوئي‪.‬‬

‫‪103‬‬ ‫راسبيري باي ببساطة‬

‫المثال الثاني‪ :‬اراشة دخل من مرتاح(سويتش)‬

‫المكونات المطلوبة‪:‬‬ ‫الهدف من المثال‪:‬‬

‫لوىة التجارب ‪Bread Board‬‬ ‫اراشة دخل رامي ‪Digital Input‬‬

‫لوىة راسبيري باي‬ ‫باستخدام سويتش و عرن النتيجة علط‬

‫مأاومة ‪ 11‬كيلوم أوم‬ ‫الشاطة‬

‫مرتاح ضغط ‪( push button‬سويتش)‬

‫أسلاك توصيل‬

‫تجايز أجزاش المشروع‪:‬‬

‫ام بتوصيل طرف السويتش الأول بمخرج الجاد الموجب ‪ 3.3‬ولت الموجود علط الراسبيري ثم وصل‬

‫الطرف الأخر بالمأاومة الة‪ 11‬كيلو أوم‪ ،‬بعد ذلك وصل طرف المأاومة المتأاطع مع السويتش بالمنرذ رام‬

‫‪ 23‬علط لوىة الراسبيري‪ ،‬في النااية وصل طرف المأاومة الأخر بالطرف الأرضي ‪ ،GND‬وفي النااية ام‬

‫بعمل ملف جديد باستخدام محرر النصوص "نانو" عن طرع الأمر‬

‫‪nano inputRead.py‬‬

‫الرصل السادس‪ :‬برمجة منا ذ التحكم الإلكتروني بالبايثوي‬ ‫‪104‬‬

‫سلكي والتحكم عن بعد‬ ‫الكود البرمجي‬

‫‪import time‬‬
‫‪import RPi.GPIO as GPIO‬‬
‫)‪GPIO.setmode(GPIO.BOARD‬‬
‫)‪GPIO.setup(23, GPIO.IN‬‬
‫‪while True:‬‬

‫‪if (GPIO.input(23)==True):‬‬
‫")‪print "'Input is True (3.3 volt‬‬

‫‪else:‬‬
‫")‪print "'Input is False (zero volt‬‬

‫)‪time.sleep(1‬‬

‫طكل الكود بعد الأنتااش من كتابته علط محرر النصوص‬

‫بعد الأنتااش من كتابة الكود اىرظ الملف وام بتشغيل البرنامج ثم لاىظ ما سيظار علط الشاطة وام‬
‫بالضغط علط المرتاح ولاىظ ما سيظار علط الشاطة‪.‬‬

‫طرح الكود‬

‫‪import time‬‬
‫‪import RPi.GPIO as GPIO‬‬

‫تم استخدام أول سطرين في البرنامج لاستدعاش مكتبة التحكم في الزمن ومكتبة التحكم في الة ‪.GPIO‬‬
‫)‪GPIO.setmode(GPIO.BOARD‬‬
‫)‪GPIO.setup(23, GPIO.IN‬‬

‫الأمر )‪ GPIO.setmode(GPIO.BOARD‬يستخدم لترعيل مخارج الراسبيري باي ‪GPIO‬وجعلاا‬

‫مستعدة للعمل و الأمر )‪ GPIO.setup(23,GPIO.IN‬يجعل الراسبيري باي تشغل المنرذ رام ‪ 23‬في وضع‬

‫الإدخال ‪ input‬ىتط يتم اراشة أي إطارة كاربية تدخل عليه‪.‬‬

‫‪105‬‬ ‫راسبيري باي ببساطة‬

‫‪if (GPIO.input(23)==True):‬‬ ‫في هذا الجزش استخدمنا واىد من أطار الأوامر‬
‫")‪print "'Input is True (3.3 volt‬‬ ‫في لغات البرمجة وهو الامر) ‪ = if-else‬إذا‬
‫ىدث ‪-‬وما دوي ذلك( ‪ ،‬يستخدم ذلك الامر‬
‫‪else:‬‬ ‫لعمل مأارنات وجعل الراسبيري باي ترعل (طيش‬
‫")‪print "'Input is False (zero volt‬‬

‫)‪time.sleep(1‬‬

‫ما) إذا ىدث (طيش آخر) محدد وفي هذا المثال‬

‫استخدمنا الامر ‪ if‬كالتالي‪:‬‬

‫‪ ‬ستأيخ الراسبيري ايمه الجاد علط المدخل الثالث والعشرين عن طريق الأمر )‪GPIO.input(23‬‬

‫إذا كانت ايمة الجاد تساوى ‪True‬والتي تعنط ‪ 3.3‬ولت ستأوم الراسبيري بطباعة جملة ‪Input is‬‬ ‫‪‬‬
‫)‪True (3.3 volt‬‬ ‫‪‬‬

‫وفي أي ىالة أخرى (ايمة الجاد تسةاوى‪ )False‬سةتأوم الراسةبيري بطباعة جملة ‪Input is False‬‬

‫)‪.(zero volt‬‬

‫يكتب الأمر ‪ if‬في لغة البايثوي علط الصورة التالية‬

‫‪ ):‬اذا ىدث طرط ما( ‪if‬‬

‫نرذ الأمر ‪1‬‬
‫‪else:‬‬

‫نرذ الأمر ‪2‬‬

‫الأوامر التي يمكن استخداماا في الشروط‬
‫)‪ :(something1 == something2‬علامة مأارنة التساوي وتعني اذا ساوى الشيش‪ 1‬الأول الشيش‪2‬‬

‫)‪ :(something1 != something2‬لا يساوي وتعني اذا كاي الشيش‪( 1‬لا يساوي) الشيش‪2‬‬

‫(‪ :(something1 > something2‬وتعني اذا كاي طيش‪ 1‬أكبر من الشيش ‪2‬‬
‫(‪ :(something1 < something2‬وتعني اذا كاي طيش‪ 1‬أال من الشيش ‪2‬‬
‫(‪ :(something1 >= something2‬وتعني اذا كاي طيش‪ 1‬أكبر من الشيش ‪ 2‬أو يساويه في الأيمة‬
‫(‪ :(something1 <= something2‬وتعني اذا كاي طيش‪ 1‬أال من الشيش ‪ 2‬أو يساويه في الأيمة‬

‫تطوير المثال الثاني‬

‫ام بتعديل كلمة ‪ True‬الموجودة في الجملة الشرطية ‪ if‬و ىولها إلى ‪ False‬ثم أىرظ البرنامج وام بتشغيله‬
‫ولاىظ ما سيحدث عندما تضغط علط الزر‬

‫(ستجد اي العبارات التي يتم كتابتاا علط الشاطة اد عُكست)‪.‬‬

‫الرصل السادس‪ :‬برمجة منا ذ التحكم الإلكتروني بالبايثوي‬ ‫‪106‬‬

‫سلكي والتحكم عن بعد‬

‫المثال الثالث‪ :‬تشغيل الدايود الضوئي مع ىساس الضوش‬

‫مأاومة ‪311‬‬
‫اوم‬

‫مأاومة ‪11‬‬
‫كيلو اوم‬

‫المكونات المطلوبة‪:‬‬ ‫الهدف من المثال‪:‬‬

‫لوىة التجارب ‪Bread Board‬‬ ‫تشغيل الدايود الضوئي علط ىسب وجود ضوش‬

‫لوىة راسبيري باي‬ ‫في الغر ة وذلك باستخدام ىساس‬

‫مأاومة ‪ 11‬كيلوم أوم‬ ‫الضوش(المأاومة الضوئية )‪.‬‬

‫مرتاح ضغط (سويتش)‬ ‫ملحوظة‪Light Detremnid Resistor (LDR):‬‬

‫أسلاك توصيل‬ ‫هي مأاومة تتغير ايمتاا علط ىسب الضوش السااط‬

‫دايود ضوئي‬ ‫علياا‪.‬‬

‫مأاومة ‪ 311‬اوم (علط الأال)‬

‫تجايز أجزاش المشروع‪:‬‬

‫ام بتوصيل المأاومة الة‪ 11‬كيلو اوم مع اىد اطراف المأاومة الضوئية ثم وصل الطرف الأخر بالأرضي‬

‫‪ GND‬و الطرف الحر للمأاومة الضوئية بمصدر الجاد ‪ 3.3‬ولت‪ ،‬ومن نأطعة التأاطع بين المأاومتين وصل‬

‫سلك بالمدخل رام ‪ 23‬علط لوىة الراسبيري‪ ،‬بعد الأنتااش من التوصيلات ام بعمل ملف جديد‬
‫‪nano lightSensor.py‬‬

‫‪107‬‬ ‫راسبيري باي ببساطة‬

‫الكود البرمجي‪:‬‬

‫‪import time‬‬
‫‪import RPi.GPIO as GPIO‬‬

‫)‪GPIO.setmode(GPIO.BOARD‬‬
‫)‪GPIO.setup(23, GPIO.IN‬‬
‫)‪GPIO.setup(11, GPIO.OUT‬‬

‫‪while True:‬‬
‫‪if (GPIO.input(23) == True):‬‬
‫)‪GPIO.output(11,0‬‬
‫‪else:‬‬
‫)‪GPIO.output(11,1‬‬

‫طكل البرنامج بعد الانتااش من كتابته داخل محرر النصوص‬

‫أىرظ الملف وام بتشغيلة عن طريق الأمر‪:‬‬

‫‪sudo python lightSensor.py‬‬

‫والآي أغلق نور الغر ة (أو ضع يدك علط المأاومة الضوئية) وطاهد ماذا سيحدث للدايود الضوئي‪ ،‬ستجد‬

‫اي الدايود يضيئ و ينطرئ بناش علط الضوش الذي تتعرن له المأاومة الضوئية‪.‬‬

‫طرح الكود‬

‫‪if (GPIO.input(23)==True):‬‬ ‫يعتمد هذا المثال علط نرخ كرة المثال‬
‫")‪print "'Input is True (3.3 volt‬‬ ‫السابق ىيث تم استخدام الأمر ‪ if‬لتشغيل و‬
‫اغلاع الدايود الضوئي المتصل بالنرذ رام ‪،11‬‬
‫‪else:‬‬ ‫بحيث يكوي رع الجاد علط المنرذ ‪ = 11‬صرر‬
‫")‪print "'Input is False (zero volt‬‬

‫)‪time.sleep(1‬‬

‫اذا كاي هناك دخل علط المنرذ رام ‪ 23‬و يكوي الجاد علط المنرذ ‪ 3.3 = 11‬ولت اذا لم يكن هناك‬

‫دخل علط المنرذ ‪ ( 23‬رع الجاد = صرر)‪.‬‬

‫ برمجة منا ذ التحكم الإلكتروني بالبايثوي‬:‫الرصل السادس‬ 108

‫سلكي والتحكم عن بعد‬ ‫ للمثال الثالث‬1 ‫تطوير‬

‫ ثم أىرظ البرنامج وام‬False ‫ و ىولها إلى‬if ‫ الموجودة في الجملة الشرطية‬True ‫ام بتعديل كلمة‬

.)‫بتشغيل ولاىظ ما سيحدث (ستجد أي الدايود الضوئي أصبح يعمل عكخ المثال الثالث‬

import time
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BOARD)
GPIO.setup(23, GPIO.IN)
GPIO.setup(11, GPIO.OUT)

while True:
if (GPIO.input(23) == False):
GPIO.output(11,0)
else:
GPIO.output(11,1)

‫ المثال الثالث‬2 ‫تطوير‬

‫ بحيث تعرن الراسبيري باي ىالة الدايود‬GPIO.output ‫ عند تنريذ كلا الأمرين‬print ‫أضف الأمر‬

.‫الضوئي علط الشاطة سواش كاي يعمل او منطرئ‬

import time
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BOARD)
GPIO.setup(23, GPIO.IN)
GPIO.setup(11, GPIO.OUT)

while True:
if (GPIO.input(23) == False):
GPIO.output(11,0)
print " Led on pin 11 is now OFF "
else:
GPIO.output(11,1)
print " Led on pin 11 is now ON "

time.sleep(1)

‫‪109‬‬ ‫راسبيري باي ببساطة‬

‫المثال الرابع‪ :‬راصد الحركة ‪PIR Motion Detector‬‬

‫مأدمة عن راصد الحركة ‪PIR Motion Detector‬‬

‫تعتبر راصدات الحركة من أهم الحساسات المستخدمة في الحياة العملية لعدة أغران أطارها الحماية‬
‫والأبواب الذكية‪ ،‬ستراها دائما في المحلات التجارية والمولات الكبيرة وتستخدم أيضا علط أبواب‬

‫الشركات‪ ،‬هل تساشلت يوما كيف ترتح الأبواب الزجاجية للمحلات التجارية بمجرد أي تأترب مناا؟؟‬

‫السر يكمن في استخدام راصدات الحركة والتي‬
‫تستطيع أي تستشعر بأدوم طخص ما ورصد تحركاته في‬
‫نطاع محدد يصل إلى عدة مترات وفي بعض‬
‫الراصدات المتطورة يمكن استشعار الحركة من علط‬

‫بعد مئات المترات‪.‬‬

‫تعمل ىساسات الحركة بعدة تأنيات مختلرة مناا ما يستخدم الموجات وع‬
‫الصوتية ‪ Ultrasonic‬و مناا ما يستخدم الموجات الكارومغناطيسية (مثل‬
‫الرادار‪ ،)Radar‬و مناا ما يستخدم الأطعة تحت الحمراش ‪IR: Infra-red‬في هذا‬
‫الدرس سنتعلم كيرية استخدام ىساس الحركة ‪ PIR motion detector‬المعتمد‬
‫علط الرصد بالأطعة تحت الحمراش والذي يتميز بالسعر الرخيص (ىوالي ‪ 9‬دولار أمريكي) ويستطيع‬
‫استشعار الحركة من علط بعد يتراوح بين ‪ 9‬إلى ‪ 11‬متر وبزاوية مأدارها يتراوح بين ‪ 71‬إلى ‪ 111‬درجة‪،‬‬
‫هذه المساىة تكري تأريبا لتغطية غر ة صغيرة أو متوسطة والصورة التالية توضح زوايا وأبعاد المنطأة‬

‫(الأ أية والرأسية) التي يستطيع هذا الحساس أي يرصد باا أي تحركات‪.‬‬

‫الرصل السادس‪ :‬برمجة منا ذ التحكم الإلكتروني بالبايثوي‬ ‫‪110‬‬

‫سلكي والتحكم عن بعد‬ ‫تجايز أجزاش المشروع‪:‬‬

‫يمتلك ىسةاس الحركة ‪ 3‬نأاط توصيل وهي دخل الجاد من ‪3‬‬
‫الى ‪ 5‬ولةت (السةةةةلك الأ ر) والخرج ‪(Digital Out‬السةةةةلك‬
‫الأصةةرر) والأرضةةي ‪(Ground‬السةةلك الأسةةود) كما هو موضةةح‬

‫بالصور التالية‪:‬‬

‫سنأوم بتوصل السلك الأ ر بالمنرذ رام ‪ 1‬علط الراسبيري (مخرج الة‪ 5‬ولت)‪ ،‬بعد ذلك نوصل السلك‬

‫الأصرر علط المنرذ رام ‪ 23‬ثم نوصل السلك الأسود علط المنرذ رام ‪ 2‬علط لوىة الراسبيري (الأرضي)‪،‬‬

‫ثم ام بعمل ملف جديد عن طريق الأمر‪:‬‬

‫‪nano motion.py‬‬

‫راسبيري باي ببساطة ‪111‬‬ ‫الكود البرمجي‪:‬‬

‫‪import time‬‬
‫‪import RPi.GPIO as GPIO‬‬
‫)‪GPIO.setmode(GPIO.BOARD‬‬
‫)‪GPIO.setup(23, GPIO.IN‬‬

‫‪while True:‬‬
‫‪if (GPIO.input(23) == True):‬‬
‫" ‪pritn " Motion Detected‬‬
‫‪else:‬‬
‫" ‪pritn " There is No Motion‬‬
‫)‪time.sleep(1‬‬

‫طكل الكود بعد الانتااش من كتابته في محرر النصوص سيكوي كالتالي‪:‬‬

‫والآي طغل البرنامج وام بتحريك يدك أمام الحساس ولاىظ ما سيظار علط الشاطة‬

‫طرح الكود‬

‫يولد راصد الحركة إطارة بأيمة ‪ 3‬ولت إذا ما استشعر أي ىركة وهذا يعني أي المنرذ رام ‪ 23‬علط‬
‫الراسبيري باي سيكوي في وضع ‪ True‬عندما يلأط يرصد الحساس أي ىركة في نطاع التغطية لذلك‬

‫استخدما الأمر ‪ if‬لعرن جملة ‪ Motion Detected‬إذا تم استشعار أي ىركة‪.‬‬

‫الرصل السادس‪ :‬برمجة منا ذ التحكم الإلكتروني بالبايثوي‬ ‫‪112‬‬

‫سلكي والتحكم عن بعد‬ ‫تطوير المثال الرابع‬

‫لتطوير المثال الرابع سنأوم بإضا ة دايود ضوئي مع مأاومة ‪ 311‬اوم (مثل ما علنا في المثال الثالث)‬

‫وسنأوم بتعديل الكود البرمجي لتشغيل الدايود الضوئي لمدة ‪ 3‬ثواني عند لأط أي ىركة‪.‬‬

‫الكود بعد التطوير‬

‫‪import time‬‬
‫‪import RPi.GPIO as GPIO‬‬

‫)‪GPIO.setmode(GPIO.BOARD‬‬
‫)‪GPIO.setup(23, GPIO.IN‬‬
‫)‪GPIO.setup(11, GPIO.OUT‬‬

‫‪while True:‬‬
‫‪if (GPIO.input(23) == True):‬‬
‫)‪GPIO.output(11,1‬‬
‫" ‪print " Motion Detected, Now Turning On Led‬‬
‫)‪time.sleep(3‬‬

‫‪else:‬‬
‫)‪GPIO.output(11,0‬‬
‫" ‪print " There is No motion‬‬

‫)‪time.sleep(1‬‬

‫راسبيري باي ببساطة ‪113‬‬

‫ترايم ‪ BCM‬بدلا من ترايم المنا ذ بالترتيب‬

‫كما ذكرنا في بداية الرصل هناك نوعاي من ترايم المنا ذ في لوىة راسبيري باي وهما ترايم المنا ذ تبعا‬
‫لمكاناا علط اللوىة ويسمط (ترايم ‪ )BOARD‬وترايم اللوىات تبعا لشريحة ‪( BCM‬الشرىية الإلكتروني‬
‫التي تصنعاا ‪ Broadcom‬وتحتوي علط أغلب مكونات الراسبيري)‪ ،‬اد يرضل البعض استخدام ترايم‬
‫‪ BCM‬عن ترايم ‪ BOARD‬وذلك لاي الكابلات مثل ‪Adafruit Breakout cable‬تستخدم هذا الترايم‬
‫مثل الصورة التالية (لاىظ اي ترايم ‪ BCM‬هو المكتوب داخل المربعات الجانبية بينما يكتب ترايم‬

‫‪ BOARD‬داخل الدوائر الملونة المرتبة ىسب موضعاا)‪.‬‬

‫أين الاختلاف؟‬

‫الاختلاف الوىيد بين الترايمين سيكوي في طريأة استدعاش مكتبة ‪ GPIO‬في لغة بايثوي‪ ،‬مثلا اذا اردنا‬
‫تشغيل منا ذ التحكم للراسبيري بترتيب ‪ GPIO‬نأوم باستيراد المكتبة علط هيئة الأمر التالي‪:‬‬

‫)‪GPIO.setmode(GPIO.BOARD‬‬
‫وإذا أردنا تشغيل المنا ذ بترايم ‪ BCM‬نأوم باستيراد المكتبة علط هيئة الأمر التالي‪:‬‬

‫)‪GPIO.setmode(GPIO.BCM‬‬
‫وجب ذكر هذه الملاىظة لأنه هناك العديد من الأكواد البرمجية الخاصة بمشاريع التحكم للراسبيري والكثير‬
‫مناا يستخدم ترايم ‪ ،BCM‬لذلك عليك اي تحترس عن نأل أو استخدام الأكواد التي تجدها في الموااع‬

‫ومراعاة توصيل المكونات الإلكترونية بالطريأة الصحيحة‪.‬‬

‫الرصل السادس‪ :‬برمجة منا ذ التحكم الإلكتروني بالبايثوي‬ ‫‪114‬‬

‫سلكي والتحكم عن بعد‬

‫علبة الحماية وكابل التوصيل ‪Adafruit‬‬

‫تعتبر طركة ‪Adafruit‬من أكبر طركات الإلكترونيات مرتوىة المصدر ‪ Open Source Electronics‬ولها‬
‫العديد من المنتجات المتعلأة بآردوينو ولوىة راسبيري باي وبيجال بوي وبااي الأطع الإلكترونية الأخرى‬

‫المشاورة في مجتمعات الهواة والمحتر ين‪.‬‬

‫عند اصدار لوىة الراسبيري باي بصورة تجارية للعالم ادمت هذه الشركة غطاش الحماية (علبة الحماية)‬
‫البلاستيكة وكابل التوصيل ‪ ،Adafruit Breakout Cable‬من المريد جدا استخدام كلا الأطعتين مع‬
‫الراسبيري باي ىيث تأدم العلبة الحماية اللازمة للوىة الراسبيري ويأدم الكابل طريأة توصيل ساله‬

‫ومرنة لجميع منا ذ ‪.GPIO‬‬

‫ملحوظة هامة‪ :‬الترايم المكتوب لمنا ذ ‪ GPIO‬علط ‪ Adafruit breakout cable‬هو ترايم ‪ BCM‬لذلك‬
‫يرضل أي تستورد مكتبة ‪ GPIO‬في لغة بايثوي بترايم ‪ BCM‬عند استخدام هذا الكابل‬

‫تركيب علبة الحماية‬

115 ‫راسبيري باي ببساطة‬

Adafruit GPIO breakout cable ‫تركيب‬

‫الرصل السابع‪ :‬التحكم علط الطريأة المتأدمة‬ ‫‪116‬‬

‫سلكي والتحكم عن بعد‬

‫الفصل السابع‪ :‬التحكم على‬

‫الطريقة المتقدمة‬

‫بروتوكول ‪i2C‬‬ ‫يستكمل هذا الرصل استخدام الراسبيري كةداة‬
‫بروتوكول ‪SPI‬‬ ‫للتحكم في المكونات والأجازة الإلكترونية لكن‬
‫تشغيل أكثر من برنامج تحكم بالتوازي‬ ‫بمزيد من التعمق مع طرح بروتوكولات التحكم‬
‫تشغيل برامج التحكم تلأائيا عند بدأ‬
‫المتطورة‬
‫نظام لينكخ‬
‫دمج آردوينو مع الراسبيري‬

‫راسبيري باي ببساطة ‪117‬‬

‫التعديل الرامي علط عرن النبضة ‪PWM‬‬

‫في جميع التجارب السابأة تم استخدام لوىة راسبيري باي للتحكم في المكونات الإلكترونية عبر ارسال‬
‫نبضبات رامية ‪ Digital‬ايمتاا اما ‪ 3.3( HIGH‬ولت) أو ‪( LOW‬صرر ولت)‪ ،‬لكن بعض المكونات‬

‫الإلكترونية تحتاج لنوع آخر من الكارباش لكي يتم التحكم باا وهو الكارباش التماثلية‪.‬‬

‫الإتخلاف الأساسي بين الإطارات الرامية والتماثلية هو ايمة رع الجاد الناتج‪ ،‬الإطارات الرامية اما‬
‫تكوي ‪ HIGH‬وإما ‪ LOW‬مثل ‪ 3.3‬أو صرر لكن الإطارات التماثلية تحتوي علط ايم وسطية مثلا اد يكوي‬
‫رع الجاد نصف ولت أو ‪ 1‬ولت أو ‪ 2‬ولت أو ‪ 3‬ولت أو أي أراام في ىدود الجااز المستخدم (لاىظ‬

‫أي الراسبيري تستطيع توليد رع جاد بين صرر الى ‪ 3.3‬ولت)‪.‬‬

‫اطاره تماثليه‬ ‫اطاره راميه‬

‫معظم أجازة التحكم الإلكترونية مثل المتحكمات الصغرية أو المعالجات الرامية لا تستطع توليد إطارة‬
‫تماثلية اي مصممة لتتعامل أط مع الإطارات الرامية‪ ،‬لذلك تم تطوير تأنية ‪Pulse Width‬‬

‫‪ Modulation‬أو ما يعرف باسم التعديل الرامي علط عرن النبضة‪.‬‬

‫تعمل هذه التأنية بمبدأ بسيط وهو توليد إطارات رامية ‪ HIGH‬و ‪ LOW‬بتردد معين وبتحديد خاص لزمن‬
‫كل نبضة ‪ HIGH‬وكل نبضة ‪ ،LOW‬عندها تحدث ظاهرة كاربية مميزة وهي أي العنصر الإلكتروني الذي‬
‫يتعرن لهذه النبضات لا يتةثر باا وإنما بمتوسط ايمة التغير في هذه النبضات تبعا للزمن يصبح رع الجاد‬
‫الناتج هو تكامل تغير (زمن) هذه النبضات والذي يتغير ايمته وبالتالي يتغير رع الجاد الناتج‪ ،‬الصورة‬
‫التالية توضح طكل النبضات مع اختلاف زمن كل نبضة ‪ HIGH‬و ‪ LOW‬و الذي يعرف باسم ‪.Duty Cycle‬‬

‫الرصل السابع‪ :‬التحكم علط الطريأة المتأدمة‬ ‫‪118‬‬
‫سلكي والتحكم عن بعد‬

‫تطبيأات الة‪ PWM‬متعددة وغالبا نجدها في التحكم بالأطياش المتغيرة مثل‪ :‬التحكم في طدة إضاشة دايود‬
‫ضوئي‪ ،‬التحكم في سرعة محرك كاربي‪ ،‬التحكم في طدة صوت خارج من ةاعة‪ ،‬التحكم في اوة ليزر‬
‫مثل المستخدم في اطع المعادي و الأخشاب ‪ ..‬الخ‪ ،‬الصورة التالية توضح كيف اي سرعة النبضات (اللوي‬
‫الأزرع) تجعل المكوي الإلكتروني المتصل بالمنرذ يستشعر النبضات علط أناا رع جاد تماثلي (اللوي‬

‫الأسود)‪.‬‬

‫تدعم لوىة راسبيري باي نوعين من الة‪ PWM‬وهما ‪ Hardware PWM‬و ‪ Software PWM‬النوع‬
‫الأول هو استخدام المنرذ رام ‪ )pin12( 12‬والمعد خصيصا لتوليد نبضات سريعة‪ ،‬و الطريأة الثانية هي عبر‬
‫برمجة أي مخرج ‪ GPIO‬عن طريق لغة بايثوي ومكتبة التحكم في المنا ذ‪ ،‬ىيث تستطيع أي تحول المنرذ‬

‫من مخرج تأليدي الى مخرج ‪ PWM‬كما سنرى في الأمثلة الأادمة‪.‬‬
‫سيرتكز الشرح علط الة‪ Software PWM‬باعتبارها الأسال والمدمجة بالرعل في مكتبة ‪ GPIO‬للغة البايثوي‬

‫ومع ذلك إذا اردت تعلم بااي تأنيات الة‪ PWM‬عليك بالرجوع إلى المراجع الإضا ية أخر الرصل‬

‫راسبيري باي ببساطة ‪119‬‬

‫مثال الخامخ‪ :‬التحكم في اضاشة ليد ‪Software PWM‬‬

‫المكونات المطلوبة‪:‬‬ ‫الهدف من المثال‬

‫لوىة التجارب ‪Bread Board‬‬ ‫تشغيل الدايود الضوئي مع التحكم في‬

‫لوىة راسبيري باي‬ ‫مستوى الإضاشة عبر الة ‪Software PWM‬‬

‫دايود ضوئي ‪Led‬‬

‫مأاومة ‪ 311‬أوم‬

‫أسلاك توصيل‬

‫تجايز أجزاش المشروع‬

‫ام بتوصيل المكونات كما هو موضح بالصورة الموجودة بالأعلط‪ ،‬ثم استخدام محرر النصوص ‪nano‬‬

‫لتكتب البرنامج في ملف باسم ‪ pwm.py‬وكذلك باستخدام الأمر التالي‪:‬‬

‫‪nano pwm.py‬‬

‫الرصل السابع‪ :‬التحكم علط الطريأة المتأدمة‬ ‫‪120‬‬
‫سلكي والتحكم عن بعد‬
‫الكود البرمجي‪:‬‬
‫‪import RPi.GPIO as GPIO‬‬
‫‪import time‬‬
‫)‪GPIO.setmode(GPIO.BOARD‬‬
‫)‪GPIO.setup(11, GPIO.OUT‬‬

‫)‪p = GPIO.PWM(11, 50‬‬
‫)‪p.start(5‬‬

‫)‪p.ChangeDutyCycle(10‬‬
‫)‪time.sleep(3‬‬
‫)‪p.ChangeDutyCycle(40‬‬
‫)‪time.sleep(3‬‬
‫)‪p.ChangeDutyCycle(80‬‬
‫)‪time.sleep(3‬‬
‫)‪p.ChangeDutyCycle(100‬‬
‫)‪time.sleep(3‬‬

‫)(‪p.stop‬‬
‫)(‪GPIO.cleanup‬‬
‫والآي ام بتشغيل البرنامج عبر الأمر ‪ sudo python pwm.py‬لتشاهد الدايود الضوئي يضئ وتزداد طدة‬

‫الإضاشة كل ‪ 3‬ثواني ثم ينطرئ في النااية‪.‬‬

‫طرح الكود‬

‫في الأسطر الأربعة الأولى استخدمنا نرخ الأوامر كما في الأمثلة السابأة لاستدعاش مكتبة التحكم في‬

‫الة‪ GPIO‬ومكتبة اياس الزمن‪ ، time‬ثم استخدمنا مجموعة من الأوامر للتحكم في الة‪ PWM‬كالتالي‪:‬‬
‫)‪p = GPIO.PWM(11, 50‬‬

‫في هذا الأمر نخبر لوىة الراسبيري بةي نأوم بترعيل المنرذ رام ‪ 11‬في وضع الة‪ PWM‬وبتردد ‪ 51‬هرتز‬

‫كما سنسمي هذا المنرذ بالاسم ‪ p‬في ذات الوات‪ ،‬وهذا يعطينا الأدرة علط التحكم في هذا المخرج‬

‫وخصائصه بكتابة ‪ p‬بدلا من رام المخرج نرسة‪.‬‬

‫)‪p.start(5‬‬

‫هذا الأمر يعطي إطارة للراسبيري بةي تبدأ تشغيل المخرج وبأدرة ‪%5 = Duty Cycle‬‬

‫)‪p.ChangeDutyCycle(10‬‬
‫)‪time.sleep(3‬‬

‫يستخدم الأمر )‪ p.ChangeDutyCycle(10‬في تغيير الة‪ Duty Cycle‬لنبضات الة‪ PWM‬و الذي يعني‬

‫تحديد ايمة رع الجاد الخارجة من المنرذ وفي ىالتنا ‪ 11‬تعني ‪ ،%11‬ثم يةتي الأمر )‪ time.sleep(3‬و‬

‫الذي يعني أي الراسبيري ستظل تولد نبضات ‪ PWM‬ب ‪ Duty cycle 10%‬لمدة ‪ 3‬ثواني‪.‬‬

‫‪121‬‬ ‫راسبيري باي ببساطة‬

‫)‪p.ChangeDutyCycle(40‬‬
‫)‪time.sleep(3‬‬
‫)‪p.ChangeDutyCycle(80‬‬
‫)‪time.sleep(3‬‬
‫)‪p.ChangeDutyCycle(100‬‬
‫)‪time.sleep(3‬‬

‫هذه الأوامر مثل السابأة بالضبط والاختلاف هنا هو زيادة الة‪ Duty Cycle‬بالتدريج من ‪ %11‬الى ‪ %01‬إلى‬

‫‪ %01‬ثم إلى ‪ %111‬والجدول التالي يوضح اختلاف إضاشة الدايو الضوئي في كل من هذه الحالات‪.‬‬

‫)‪DutyCycle(80‬‬ ‫)‪DutyCycle(40‬‬ ‫)‪DutyCycle(10‬‬

‫)(‪p.stop‬‬
‫)(‪GPIO.cleanup‬‬

‫يستخدم الأمر)(‪ p.stop‬في إيأاف تشغيل الة‪ PWM‬و الأمر )(‪ GPIO.cleanup‬في اغلاع المنا ذ كلاا‪.‬‬
‫بالتةكيد يمكنك استخدام أكثر من مخرج (أو ىتط كل المخارج) لتعمل بتأنية الة‪ PWM‬بحيث تستطيع‬
‫التحكم في أكثر من مكوي أو جااز الكتروني وكمثال علط التحكم المتعدد باذه التأنية راجع المأال‬

‫التالي من مدونة ‪ Raspi.tv‬والذي سترى يه تجرب التحكم في محرك كاربي و ‪ 2‬دايود ضوئي‪.‬‬
‫‪http://raspi.tv/2013/how-to-use-soft-pwm-in-rpi-gpio-pt-2-led-dimming-and-‬‬
‫‪motor-speed-control‬‬

‫في هذا المثال سيتم التحكم في‬
‫المحرك الكاربي عبر استخدام‬
‫الشريحة الإلكترونية ‪ULN2003‬‬
‫والتي تعمل كمكبر للطااة‪ ،‬ىيث لا‬
‫تستطيع الراسبيري تو ير كل الطااة‬
‫لتشغيل محرك كاربي ولاىظ أنه‬
‫يجب توصيل بطارية لهذه الشريحة‬

‫لتشغيل المحرك‪.‬‬

‫الرصل السابع‪ :‬التحكم علط الطريأة المتأدمة‬ ‫‪122‬‬

‫سلكي والتحكم عن بعد‬

‫هل هناك طريأة لزيادة منا ذ‪ PWM‬وداتاا؟‬

‫نعم‪ ،‬يمكنك الحصول علط منا ذ‪ PWM‬أكثر من الة‪ GPIO‬الموجودة في الراسبيري عبر إضا ات خاصة‬

‫مثل استخدام لوىة اردوينو (أو طرائح ‪ ATmega‬نرساا دوي اللوىة) أو عبر استخدام الة ‪PWM‬‬

‫‪ Expanders‬والتي ستجدها في المراجع التالية‪.‬‬

‫مراجع إضا ية عن الة‪PWM‬‬

‫التحكم في ‪ PWM‬عالي الداة المدمج في نظام ‪Adafruit Occidentalis‬‬
‫‪http://learn.adafruit.com/adafruit-raspberry-pi-lesson-9-controlling-a-dc-motor?view=all‬‬

‫تشغيل ‪ PWM‬باستخدام لغة السي عبر مكتبة ‪Wiring Pi‬‬
‫‪https://sites.google.com/site/semilleroadt/raspberry-pi-tutorials/gpio‬‬

‫كيف تتحكم في ‪ 12‬محرك ‪ Servo‬عبر تأنية الة ‪i2C‬و ‪ PWM‬و غطاش ‪ Adafruit‬الخاص لمنا ذ ‪PWM‬‬
‫‪http://learn.adafruit.com/adafruit-16-channel-servo-driver-with-raspberry-pi/overview‬‬

‫إضا ة ‪ 32‬منرذ تحكم ‪ PWM‬للراسبيري عبر لوىة ‪Pridopia‬‬
‫‪http://www.pridopia.co.uk/pi-9685-2-lp.html‬‬

‫‪123‬‬ ‫راسبيري باي ببساطة‬

‫تشغيل أكثر من برنامج تحكم في نرخ الوات‬

‫بسبب السرعة التي يتيحاا معالج الراسبيري ةنك تستطيع أي تشغل أكتر من برنامج تحكم في ذات الوات‬
‫طرط أي يستخدم كل برنامج منرذ تحكم مختلف عن الأخر‪ ،‬علط سبيل المثال يمكنك تشغيل دايود‬
‫ضوئي علط المنرذ رام ‪ 11‬بحيث يضيش وينطرئ كل ثانيتين ثم نأوم بعمل برنامج أخر يشغل دايود‬
‫ضوئي مختلف علط المنرذ رام ‪ 13‬بحيث يضيش و ينطرئ كل ُعشر ثانية (جزش من عشرة أجزاش من الثانية)‪.‬‬

‫المثال السادس‪ :‬تشغيل برنامجين مختلرين في نرخ الوات‬

‫المكونات المطلوبة‪:‬‬ ‫الهدف من المثال‪:‬‬

‫لوىة التجارب ‪Bread Board‬‬ ‫تشغيل أكثر من برنامج تحكم في نرخ الوات‬

‫لوىة راسبيري باي‬ ‫علط منا ذ مختلرة‪.‬‬

‫عدد ‪ 2‬مأاومة ‪ 311‬أوم‬

‫عدد ‪ 2‬دايود ضوئي‬

‫الرصل السابع‪ :‬التحكم علط الطريأة المتأدمة‬ ‫‪124‬‬

‫عن بعد‬ ‫باسسلمك‪py‬ي‪.‬و‪1‬ا‪1‬لت‪nk‬ح‪li‬ك‪b‬م‬ ‫ملف‬ ‫في‬ ‫الأول‬ ‫البرنامج‬ ‫كود‬ ‫سنكتب‬
‫كالتالي‪:‬‬

‫‪import time‬‬
‫‪import RPi.GPIO as GPIO‬‬
‫)‪GPIO.setwarnings(False‬‬
‫)‪GPIO.setmode(GPIO.BOARD‬‬
‫)‪GPIO.setup(11, GPIO.OUT‬‬
‫‪while True:‬‬

‫)‪GPIO.output(11,True‬‬
‫)‪time.sleep(2‬‬
‫)‪GPIO.output(11,Flase‬‬
‫)‪time.sleep(2‬‬

‫سنكتب كود البرنامج الثاني في ملف باسم ‪ blink13.py‬كالتالي‪:‬‬

‫‪import time‬‬
‫‪import RPi.GPIO as GPIO‬‬
‫)‪GPIO.setwarnings(False‬‬
‫)‪GPIO.setmode(GPIO.BOARD‬‬
‫)‪GPIO.setup(13, GPIO.OUT‬‬
‫‪while True:‬‬

‫)‪GPIO.output(13, True‬‬
‫)‪time.sleep(.1‬‬
‫)‪GPIO.output(13, True‬‬
‫)‪time.sleep(.1‬‬

‫تشغيل كلا البرنامجين سنأوم بكتابة أمر التشغيل التأليدي مع إضا ة علامة ‪ ) & ( and‬في نااية كل سطر‬

‫والتي تعني في نظام لينكخ (ام بتشغيل هذا البرنامج في الخلرية ثم استعد لتشغيل برنامج آخر)‪ ،‬وسنضيف‬

‫العلامة & لأمري التشغيل كما في الصورة التالية‪:‬‬

‫كما نلاىظ بعد تنريذ كل أمر يظار رام أسرل أمر التشغيل مثل ‪ 2577‬عند تنريذ البرنامج الأول والرام ‪2579‬‬

‫عند البرنامج الثاني‪ ،‬تستخدم هذه الأراام في تحديد البرامج عند ىرظاا في الذاكرة ومناا تستطيع اغلاع‬
‫هذه البرامج وذلك عبر كتابة الأمر ‪ sudo kill‬وهو الأمر المسؤول عن اغلاع أي برنامج يعمل من خلال سطر‬

‫الأوامر‪ ،‬علط سبيل المثال إذا أردنا إيأاف كلا البرنامجين سنكتب‪:‬‬

‫‪sudo kill 2577‬‬
‫‪sudo kill 2579‬‬

‫راسبيري باي ببساطة ‪125‬‬

‫هناك طريأة أخرى يمكنك اغلاع البرنامج الذي تريده دوي معر ة رام تشغيل البرنامج وذلك عبر البرنامج‬
‫‪ killall‬ىيث تكتب بعده الأمر الذي تريد إيأا ه مباطرة‪ ،‬علط سبيل المثال‪:‬‬

‫‪sudo killall sudo python blink11.py‬‬
‫سيأوم برنامج ‪ killall‬بإغلاع جميع برامج البايثوي مثل الصورة التالية‪:‬‬

‫ملاىظات ىول تعددية البرامج‬

‫بالرغم اي الراسبيري ونظام تشغيل لينكخ يجعلك اادر علط تشغيل أكثر من برنامج تحكم في ذات‬
‫الوات بساولة إلا اي لهذا الأمر بعض الملاىظات والتنبياات الواجب الإطارة لها‪.‬‬

‫في البداية السر وراش تشغيل أكثر من برنامج هو سرعة المعالج التي تتيح تنريذ عدد كبير من السطور‬
‫البرمجية في مدة زمنية اصير وهذا يعطينا ميزة تشغيل أكثر من أمر وأكثر من برنامج في ذات الوات إلا‬

‫اي الموضوع يحتوي علط مخاطر وهي‪:‬‬
‫‪ .1‬في ىالية تشغيل برنامج معأد (مثل لعبة أو عملية ىسابية معأدة) إي سرعة المعالج ُتستالك‬
‫تماما مما يجعل جميع البرامج الأخرى تتواف مؤاتا ىتط ينتاي المعالج من معالجة بيانات‬

‫هذا البرنامج المُعأد‪.‬‬
‫‪ .2‬إذا ازداد عدد البرامج بصورة كبيرة اد تمتلئ الذاكرة ويحدث إيأاف مراجئ (أو كما يطلق‬

‫علياا بالعامية – الجااز يانج)‪.‬‬

‫لذلك لا تستخدم خاصية تعدد البرامج الموجود في نظام لينكخ بكثرة ىتط تضمن استأرار النظام‬

‫يمكنك التغلب علط مشكلة السرعة بعمل زيادة اصرية لسرعة المعالج (كسر ىدود السرعة)‪ ،‬ستجد‬
‫التراصيل في صل الإعدادات المتأدمة للراسبيري‬

‫الرصل السابع‪ :‬التحكم علط الطريأة المتأدمة‬ ‫‪126‬‬

‫سلكي والتحكم عن بعد‬

‫تنريذ أي برنامج عند بدش التشغيل‬

‫يمكنك ضةبط الراسبيري باي لتأوم بالدخول التلأائي للنظام عند توصيل الطااة وتنريذ برامج معين أو ىتط‬
‫مجموعة برامج بةي لغة برمجة تستخدماا وذلك عن طريق الخطوات التالية‪:‬‬

‫أولا‪ :‬ضبط الدخول التلأائي ‪auto login‬‬

‫لكي نضةبط لوىة الراسبيري باي لتأوم بالدخول التلأائي إلى ىساب أي مستخدم وليكن مثلا المستخدم ‪pi‬‬

‫(أسم المستخدم الا تراضي للراسبيري) يتم ذلك عن طريق تعديل الملف ‪ /etc/inittab‬بواسطة تنريذ الأمر‬

‫التالي‪:‬‬

‫‪sudo nano /etc/inittab‬‬

‫ابحث عن هذا السطر باستخدام ‪ Ctrl + w‬ثم اكتب‬
‫‪1:2345:respawn:/sbin/getty --noclear 38400 tty1‬‬

‫ضع علامة الشباك ( ‪ ) #‬ابل هذا السطر ليصبح‬
‫‪#1:2345:respawn:/sbin/getty --noclear 38400 tty1‬‬

‫ثم ام بكتابة السطر التالي أسرل منه‬
‫‪1:2345:respawn:/bin/login -f pi tty1 </dev/tty1 >/dev/tty1 2>&1‬‬

‫ثم أىرظ الملف عن طريق ‪ Ctrl+X‬ثم اضغط ‪ y‬ثم ‪Enter‬‬

‫ثانيا‪ :‬إضا ة برنامج أو عدة برامج للعمل بعد تشغيل الراسبيري مباطرة‬

‫لإضا ة أي سكربت تريد تشغيله بعد الةة ‪ boot‬والة ‪ auto login‬عليك اي تأوم بتعديل الملف ‪/etc/profile‬‬

‫وذلك عن طريق الأمر التالي‪:‬‬

‫‪sudo nano /etc/profile‬‬

‫ثم أضف عنواي البرنامج الذي تريد تشغيله في أخر الملف متبوعا بالرمز (&( مع ملاىظة أنه إذا كاي البرنامج‬

‫يحتاج أمر إضةافي لتشةغيله مثل برامج البايثوي عند اذ سةتحتاج لكتابة ‪ sudo python‬ابل عنواي البرنامج‬

‫مثل السطور التالية‪:‬‬

‫& ‪sudo python /home/pi/python_programe_1.py‬‬
‫& ‪sudo python /home/pi/python_programe_2.py‬‬
‫& ‪/home/pi/your_programe_1.sh‬‬
‫& ‪/home/pi/your_programe_2.sh‬‬

‫راسبيري باي ببساطة ‪127‬‬

‫مراابة اداش المعالج و الذاكرة‬

‫في بعض الأىياي يكوي من المريد جدا معر ة البرامج التي تستالك الذاكرة و اوة المعالج وكذلك مراابة‬

‫أداش الراسبيري بشكل عام‪ ،‬تتو ر علط بيئة لينكخ عدة أدوات خاصة لمراابة أداش النظام مناا برنامج‬

‫‪ Htop‬الذي يتميز بواجاة بسيطة وسالة ويعمل مباطرة من سطر الأوامر‪ ،‬هذا البرنامج مشاباة تماما لبرنامج‬
‫الة ‪ Task Manager‬علط بنظام ويندوز وبتشغيله يمكنك معر ة جميع البرامج التي تعمل الآي علط لوىة‬

‫الراسبيري ومأدار استالاك الذاكرة و اوة المعالج ‪ ..‬الخ‪.‬‬

‫لتنصيب البرنامج اكتب في سطر الأوامر‪:‬‬

‫‪sudo apt-get install htop –y‬‬

‫بعد الانتااش من تنصيب البرنامج يمكنك تشغيله مباطرة من سطر الأوامر عن طريق الأمر‬
‫‪sudo htop‬‬

‫لتظار لك الواجاة الخاصة بالبرنامج والتي تحتوي علط جدول بجميع البرامج التي تعمل علط الراسبيري‬

‫مع توضيح استالاك كل مناا للذاكرة العشوائية وتةثيرها علط المعالج كما في الصورة التالية‪:‬‬

‫كما نلاىظ في الصورة هناك العديد من البرامج الرعالة (عددها ‪ )21‬وأي المعالج يعمل بنحو ‪ %25‬من اوته‪،‬‬
‫عند الضغط علط زر السام إلى أسرل يمكنك تصرح الأائمة الكاملة‪ ،‬كما يحتوي البرنامج علط طريط سرلي‬
‫يوضح أهم الأوامر التي يمكنك عملاا من خلاله مثل الامر ‪ Kill‬لإغلاع أي برنامج عن طريق الضغط علط زر‬

‫‪ F9‬أو الخروج من البرنامج بالضغط علط زر ‪F10‬‬

‫الرصل السابع‪ :‬التحكم علط الطريأة المتأدمة‬ ‫‪128‬‬

‫سلكي والتحكم عن بعد‬

‫دمج آردوينو مع الراسبيري‬

‫يمكنك بساولة دمج آردوينو مع الراسبيري بحيث تستخدم لوىة آردوينو كمداخل ومخارج إضا ية للراسبيري‬
‫مباطرة والتحكم بكل هذه المخارج عبر لغة بايثوي‪ ،‬يتم الدمج عبر استخدام الأداة الرائعة ‪ Nanpy‬وهي أداة‬

‫مخصصة لدمج آردوينو مباطرة مع الراسبيري والتحكم بكلاهما عبر بايثوي في نرخ الوات‪ ،‬لتحميل الأداة‬

‫سنأوم بتنزل الملف المضغوط الذي يحتوي علط جميع الملرات والمكتبات البرمجية المطلوبة كالتالي‪:‬‬

‫‪wget https://pypi.python.org/packages/source/n/nanpy/nanpy-v0.8.tar.gz‬‬
‫‪tar xvf nanpy-v0.8.tar.gz‬‬

‫بعد تحميل ‪ Nanpy‬سندخل إلى المجلد الذي تم كه وسنأوم بتنصيب البرنامج عبر الأوامر التالية‬
‫‪cd nanpy-0.8‬‬
‫‪sudo python setup.py install‬‬

‫وبذلك نكوي اد انتاينا من تنصيب ‪ Nanpy‬علط الراسبيري ويتبأط تنصيباا علط لوىة آردوينو وذلك عبر‬

‫ر ع الة ‪ Firmware‬الخاصة بة ‪ ،Nanpy‬تتم تلك العملية عن طريق الأوامر التالية‪ ،‬أولا الدخول الى مجلد‬

‫‪ firmware‬وذلك عبر الأمر ‪:‬‬

‫‪cd firmware‬‬

‫ثم اكتب الأمر ‪ make boards‬لتظار اائمة كاملة بكل لوىات آردوينو التي تدعماا بيئة ‪ nanpy‬كما في‬
‫الصورة التالية‪:‬‬

‫الخطوة التالية هي تحديد نوع لوىة آردوينو التي تريد استخداماا ثم ر ع ‪ nanpy firmware‬علياا وذلك‬

‫عبر الأمر التالي (استبدل كلمة ‪ mega2560‬بنوع الآردوينو المتو ر لديك مثل ‪ uno‬او ‪)mini‬‬
‫‪export BOARD=mega2560‬‬
‫‪make‬‬
‫‪make upload‬‬

129 ‫راسبيري باي ببساطة‬

،‫والآي أصبح بإمكانك استغلال جميع مخارج اردوينو داخل برامج البايثوي من خلال الراسبيري باي‬

from nanpy import Arduino ‫لنةخذ المثال التالي‬
from nappy import serial manager ‫استيراد المكتبات وتحديد‬
from time import sleep ttyACM0 ‫لوىة آردوينو علط‬
LED =13
Arduino.pinMode(LED, Arduino.OUTPUT) ‫ كخرج‬13 ‫تحديد المنرذ‬
print ("Start Arduino Blink 5 time")

for i in range(0,5): 13 ‫تشغيل واطراش المخرج‬
Arduino.digitalWrite(LED, Arduino.HIGH) ‫لمدة نصف ثانية ويتم تكرار‬
sleep(0.5)
Arduino.digitalWrite(LED, Arduino.LOW) ‫ مرات‬5 ‫هذا الأمر‬
sleep(0.5)

‫مزيد من المراجع‬

.)‫كتاب آردوينو ببساطة (يشرح أساسيات لغة آردوينو باللغة العربية‬
 http://simplyarduino.com/?page_id=5

 https://pypi.python.org/pypi/nanpy
 https://github.com/nanpy/nanpy
 http://www.raspberrypi.org/phpBB3/viewtopic.php?f=44&t=46881&p=368522&hi

lit=Arduino#p368522

‫الرصل السابع‪ :‬التحكم علط الطريأة المتأدمة‬ ‫‪130‬‬

‫سلكي والتحكم عن بعد‬

‫برمجة آردوينو بصورة مستأله عن الراسبيري‬

‫يمكنك استخدام وبرمجة آردوينو بصورة مستألة عن الراسبيري باي بساولة وذلك عبر تنزيل بيئة برمجة‬

‫آردوينو علط الراسبيري باي من خلال الأوامر التالية‪:‬‬

‫‪sudo apt-get install -y arduino‬‬
‫‪sudo apt-get install -y python-serial‬‬

‫بعد الانتااش يمكنك توصيل أي لوىة آردوينو عبر منرذ الة ‪ USB‬لتجد أي آردوينو اد تم اضا تاا وتعريراا‬

‫تلأائيا في مجلد ‪ /dev/‬وغالبا ستةخذ اللوىة أسم‪ ttACM0‬أو ‪ ttyACM1‬ويمكنك معر ة الأسم عن طريق‬

‫استعران الملرات الموجودة في المجلد كالتالي‪:‬‬

‫*‪ls /dev/tty‬‬

‫والآي يمكنك تح بيئة آردوينو إما من الواجاة الرسومية (من اائمة ‪ LXDE‬ثم اختيار ‪ )Electronics‬أو عبر‬
‫سطر الأوامر بكتابة كلمة ‪ Arduino‬أط لتظار واجاة برمجة آردوينو الشايرة‪،‬‬

‫هذه الطريأة مريدة لمن يريد أي يبرمج آردوينو والراسبيري كل علط ىدى دوي دمجاما‪ ،‬ومع ذلك‬

‫يمكننا عمل تبادل بسيط للبيانات بيناما عبر بروتوكول ‪ UART‬عبر مكتبة ‪ ،python-serial‬يمكنك معر ة‬

‫المزيد من المعلومات ىول هذه الطريأة عبر الروابط التالية‪:‬‬
‫‪ http://www.andremiller.net/content/raspberry-pi-and-arduino-via-gpio-uart‬‬

131 ‫راسبيري باي ببساطة‬

 http://www.fritz-hut.com/2012/08/27/connecting-an-arduino-and-raspberry-pi/
 http://codeandlife.com/2012/07/29/arduino-and-raspberry-pi-serial-

communication/
 http://www.instructables.com/id/The-Raspberry-Pi-Arduino-Connection/
 http://robot-kingdom.com/ways-link-raspberry-pi-with-arduino-using-gpio-serial-

usb-i2c/

‫الرصل السابع‪ :‬التحكم علط الطريأة المتأدمة‬ ‫‪132‬‬

‫سلكي والتحكم عن بعد‬

‫بروتوكول ‪i2C‬‬

‫‪ I2C‬هو اختصار لعبارة ‪ Inter Integrated Circuit Communications‬أو ما يعرف باسم بروتوكول‬
‫الإتصالات الداخلية بين الدوائر المتكاملة (‪ ،)IC‬تم تطوير البروتوكول بواسطة طركة يليبخ للإلكترونيات‬
‫وتستخدم هذه التأنية لعمل طبكة من الأجازة(المكونات) الإلكترونية تتبادل البيانات بين بعضاا البعض‪،‬‬
‫يمكن تشبيه هذا البروتوكول بشبكة الحاسب الآلي ىيث تتصل عدة اجزة ىاسب للتبادل البيانات يما‬

‫بيناا‪.‬‬

‫تتمثل روعة هذه التأنية في إمكانية توصيل عدد كبير من المكونات الإلكترونية الذكية (يصل إلى ‪)129‬‬
‫ببعضاا البعض باستخدام سلكين ومأاومتين أط مثلا يمكنك توصيل ىساس ىرارة الكتروني‪ ،‬ىساس‬
‫ضوئي‪ ،‬طريحة محول من دخل تماثلي الى رامي إلى الراسبيري باي وذلك عبر سلكين أط مما يو ر‬
‫عدد منا ذ التحكم المستخدمة وفي نرخ الوات يسمح لنا باستخدام عشرات المكونات في نرخ الوات‪.‬‬

‫كذلك يمكنك أي توصل لوىة الراسبيري بمتحكمات صغرى أخرى مثل لوىات آردوينو أو متحكات ‪PIC‬‬
‫أو أي متحكم يدعم تأنية ‪ ،i2C‬وتسمط هذه الأجازة ٌعأد‪ Nodes‬وتتصل يما بيناا عبر منرذي تحكم‬
‫الأول يسمط طرف البيانات (‪ SDA )Serial data line‬و الثاني نبضات التوايت(‪SCL )Serial clock line‬‬

‫‪133‬‬ ‫راسبيري باي ببساطة‬

‫هنا سنجد سؤال هام‪ ،‬إذا تم توصيل عشرات المكونات الإلكترونية علط نرخ السلكين كيف ستتواصل يما‬
‫بيناا وكيف سنجعل الراسبيري تتواصل مع مكوي معين من وسط عشرات المكونات المتصلة علط نرخ‬

‫الخطوط؟‬
‫الحل بسيط وهو مماثل لشبكات الحاسب الآلي ىيث يوجد عنواي معين لكل مكوي إلكتروني يسمط ‪i2C‬‬
‫‪ address‬غالبا ما يكتب في الملف الوصري ‪ Datasheet‬للمكوي الإلكتروني وىتط إذا لم تجد هذا العنواي‬
‫يمكنك بساولة التعرف عليه تلأائيا من داخل الراسبيري كما سنرى في الخطوات التالية‪ ،‬باذا العنواي تستطيع‬

‫اي تحدد المكوي الإلكتروني الذي تريد للراسبيري اي تتواصل معه‪.‬‬

‫مبدأ عمل البروتوكول‬

‫لتشغيل البروتوكول نحتاج إلى طيئين الأول هو السيد ( ماستر ‪ )Master‬وفي ىالتنا ستكوي لوىة‬
‫الراسبيري باي‪ ،‬و الثاني سيكوي مكوي إلكتروني يعمل كخادم (سليف ‪ )Slave‬مثل التي سنراها في‬

‫الأمثلة التالية‪.‬‬
‫يرسل السيد ‪ 7‬أجزاش من البيانات الرامية ‪ Bits‬كتالي‪:‬‬

‫‪( START .1‬أول بت يتم إرساله)‪ :‬ترعيل البروتوكول (هذا يجعل جميع الخدم تنتبه أنه هناك امر‬
‫ما سيصدر إلى اىداها في اللحظات التالية)‬

‫‪ 9( Slave Address .2‬بت)‪ :‬عنواي الخادم الذي تريد لوىة الراسبيري التحدث معه‬
‫‪( Read/Write .3‬البت التاسع)‪ :‬اما صرر والتي تعني أي الراسبيري ستطلب بيانات من الجااز (مثل‬
‫اي تأرأ درجة ىرارة) واما واىد والتي تعني أي الراسبيري سترسل بيانات مثل (أمر تشغيل محرك‬

‫أو إطراش محرك)‪.‬‬
‫‪( ACK .0‬البت العاطر)‪ :‬والتي تعني انتااش تعريف الخادم و العنواي و البدش في ارسال الأمر المراد‬

‫تنريذه (سواش ‪read‬او ‪ )Write‬من الخادم‪.‬‬
‫‪ :Data (1) .5‬الأمر المراد تنريذه أو الأيمة المراد اراشتاا‪.‬‬

‫‪ : ACK .2‬هذا يعني انتااش الأمر‪.‬‬
‫‪ : Data (2) .9‬تنريذ أمر ثاني‪.‬‬

‫‪ : ACK .0‬الانتااش من ارسال الأمر الثاني‪.‬‬
‫‪ : STOP .7‬اطع الاتصال‬

‫تدعم الراسبيري الاتصال من نوع ‪ i2C‬بسرعة تصل إلى ‪ 51.111‬بت في الثانية الواىدة (‪ 51‬كيلو بايت)‬

‫ التحكم علط الطريأة المتأدمة‬:‫الرصل السابع‬ 134

‫سلكي والتحكم عن بعد‬

i2C ‫أنواع المكونات التي تدعم‬

 Digital-to-analogue converters (DACs)
 Analogue-to-digital converters (ADCs)
 LCD displays
 OLED Screens
 Keyboards
 Motor drivers
 LED drivers
 Memory chips and cards (EEPROM, RAM, FERAM, Flash)
 Bus expanders/extenders (chips with 8 or 16 I/O pins controllable via I2C)
 Other microcontrollers (Arduino based, genral AVR families, PIC).

‫الصورة التالية توضيح الراسبيري وهي متصلة بمجموعة من اللوىات الإلكترونيات المختلرة عبر‬
:‫ وهي لوىات إلكترونية تم تطويرها خصيصا لتتصل ببعضاا علط التوازي‬i2C ‫بروتوكول الة‬

‫‪135‬‬ ‫راسبيري باي ببساطة‬

‫تجايز بروتوكول ‪i2c‬‬

‫لتشةةغيل بروتوكول الةةةةةة‪ i2C‬علينا أي نأوم بإلغاش اسةةتخدام منا ذ ‪ GPIO‬المخصةةصةةة لهذه البروتوكول‬
‫ك‪ Inputs/output‬ىيث نأوم بتحويلاا لمخارج اتصال ‪ i2C‬أط وهذا الأمر يكوي عبر الخطوات التالية‪:‬‬

‫ا تح سطر الأوامر واستخدم محرر النصوص ‪ nano‬لتعديل الملف التالي‪:‬‬
‫‪sudo nano /etc/modules‬‬

‫ام بإضا ة كلا السطرين في نااية الملف كالتالي‪:‬‬

‫‪i2c-bcm2708‬‬
‫‪i2c-dev‬‬

‫في بعض إصدارات لينكخ اد يكوي هناك ملف أخير نحتاج لأي نأوم بتعديله كالتالي‪:‬‬
‫‪sudo nano /etc/modprobe.d/raspi-blacklist.conf‬‬

‫ثم نضيف علامة الشباك (‪ )#‬ابل هذه السطور (مثل الصورة التالية)‬

‫‪blacklist spi-bcm2708‬‬

‫‪blacklist i2c-bcm2708‬‬

‫والآي ام بإعادة تشغيل الراسبيري باي عبر الأمر ‪ sudo reboot‬وبذلك نأوم اد انتاينا من تجايز المنا ذ‬
‫لتعمل علط بروتوكول ‪ ،i2C‬الخطوة التالية هي تنصيب أدوات ‪ i2C‬كالتالي‪:‬‬

‫‪sudo apt-get install -y python-smbus‬‬
‫‪sudo apt-get install -y i2c-tools‬‬

‫الآي يمكنك البدش في استخدام وبرمجة الأطع الإلكترونية التي تستخدم هذا البروتوكول‬

‫ملحوظة‪ :‬يستحسن استخدام كابل ‪ Adafruit‬عند استخدام بروتوكولات الاتصالات مثل ‪ i2c‬او ‪ SPI‬أو‬

‫‪ UART‬ىيث يتم كتابة أةاش منا ذ علط ىسب نوع البروتوكول الذي يمكن استخدامه علياا‪.‬‬

‫الرصل السابع‪ :‬التحكم علط الطريأة المتأدمة‬ ‫‪136‬‬

‫سلكي والتحكم عن بعد‬

‫المثال السابع‪ :‬استخدام الحساس الرامي ‪BMP085‬‬

‫يستخدم الحساس الرامي ‪ BMP085‬في اياس درجة الحرارة‪ ،‬الضغط الجوي ويمكنه تحديد الارتراع عن‬
‫سطح البحر (معتمدا علط معدلات الضغط الجوي) ويعمل هذا الحساس الرامي ببروتوكول الاتصال ‪i2C‬‬

‫طريأة التوصيل‬

‫في البداية نحتاج لأي نعرف عنواي الحساس الرامي (‪ )i2C Address‬والذي يمكننا استخراجه عن طريق‬
‫سطر الأوامر مع ملاىظة أنه في ىالة أنك تستخدم الاصدارة رام ‪ 2‬من الراسبيري (رام ‪ 512‬ميجا) اكتب‬

‫رام ‪ 1‬في أخر الأمر وفي ىالة أنك تستخدم الاصدارة رام ‪(1‬رام ‪ 252‬ميجا) اكتب رام صرر‪.‬‬
‫‪sudo i2cdetect -y 1 #if you use raspberry pi V.2‬‬
‫‪sudo i2cdetect -y 0 #if you use raspberry pi V.1‬‬

‫سيظار امامك جميع الخانات المتاىة للأجازة التي يمكن توصيلاا عبر ‪ i2C‬مثل الصورة التالية‬

‫من الصورة بالأعلط يتضح أي عنواي الحساس هو ‪0x77‬‬

‫‪137‬‬ ‫راسبيري باي ببساطة‬

‫سنحتاج أي نأوم بتنزيل مكتبة ‪Adafruit‬والتي تسال برمجة هذا الحساس مع لغة بايثوي (والعديد من‬

‫المكونات الأخرى) ويتم ذلك عبر تحميل المكتبة من مستودعات ‪ Github‬عن طريق الأمر التالي‪:‬‬
‫‪git clone https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git‬‬

‫بعد الانتااش من تحميل المكتبة‪ ،‬ادخل إلى المجلد الخاص بمكتبة ‪ i2C‬عبر الأوامر‪:‬‬
‫‪cd Adafruit-Raspberry-Pi-Python-Code‬‬
‫‪cd Adafruit_I2C‬‬

‫الخطوة التالية اختيارية وهي في ىالة أنك تستخدم الاصدارة رام ‪ 2‬من الراسبيري باي موديل ‪ B‬عليك‬
‫تعديل ملف مكتبة ‪ Adafruit_I2C‬وذلك عبر الأمر ‪ nano Adafruit_I2C‬ثم البحث عن السطر‬

‫‪def __init__(self, address, bus=smbus.SMBus(0), debug=False):‬‬
‫ثم ام بتحويل هذ السطر إلى (عبر استبدال الرام صرر الى واىد)‬

‫)‪def __init__(self, address, bus=smbus.SMBus(1), debug=False‬‬

‫الآي يمكنك تشغيل المثال البرمجي لهذا الحساس الموجود في المجلد ‪ Adafruit_BMP085‬والذي‬

‫يمكنك تشغيله عبر الأمر‬

‫‪sudo python Adafruit_BMP085_example.py‬‬

‫الكود البرمجي لهذا المثال‪:‬‬

‫‪from Adafruit_BMP085 import BMP085‬‬
‫)‪bmp = BMP085(0x77‬‬

‫)(‪temp = bmp.readTemperature‬‬
‫)(‪pressure = bmp.readPressure‬‬
‫)(‪altitude = bmp.readAltitude‬‬

‫‪print "Temperature: %.2f C" % temp‬‬
‫)‪print "Pressure: %.2f hPa" % (pressure / 100.0‬‬
‫‪print "Altitude: %.2f" % altitude‬‬

‫لاىظ أي هذا المثال يجب أي يتم تشغيله داخل المجلد ‪ Adafruit_BMP085‬ليتم استدعاش المكتبات‬


Click to View FlipBook Version