الرصل السادس :برمجة منا ذ التحكم الإلكتروني بالبايثوي 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ليتم استدعاش المكتبات