تحدثنا سابقا عن الجهاز Raspberry Pi وعن قدرات هذا الجهاز وتحدثنا عن إستخدامات الجهاز وسبب كونه مهم في هذه الأيام. هذا الجهاز بشكل مختصر عبارة عن كمبيوتر مصغر مصمم ليقوم ببعض العمليات التي لا تحتاج الى موارد عالية لتقوم بها. الفكرة منه هي أنه يمكنك تصميم جهاز ونظام متكامل يقوم بعمل العديد من الأمور بدون الحاجة لتشغيل كمبيوتر من نوع x86 الذي يحتاج أضعاف كمية الطاقة ليقوم بنفي الأمر الذي يمكن لجهاز Pi القيام به.
في حقيقة الأمر، الجهاز موجه للمطورين ولكل من لديه القدرة على البناء في هذا المجال وليس لعامة الناس ولكن في سنوات تواجد هذا الجهاز تم استخدامه في عدد من الأمور مثل كمبيوتر للاطفال والدول الفقيرة وتم استخدامه لجمع المعلومات وتشغيل محطات تقوية إشارة وغيرها من الامور بكل بساطة وسهولة.
منذ مدة طويلة قررت تنفيذ أحد المشاريع المبنية على هذا الجهاز ولكن تعقدت الأمور بسبب قدم المشروع وتقدم التقنيات بشكل كبير وخصوصا لغة Python حيث أن المشروع مبني على Python 2.7 وتعريفات حساس الحرارة انتقلت الى Python 3. في هذه اللحظة فقدت القدرة على تشغيل حساس الحرارة بدون طرق التفافية.
عندما توصلت لطريقة لحل المشكلة -لا أعلم كيف توصلت لهذا الحل وفشلت في اعادة تنفيذه- وجدت أن مزود الطقس توقف عن إصدار مفاتيح API جديدة للعمل بها. بالتالي يعتبر المشروع بدون فائدة لكل من لا يملك مفتاح مسبقا.
بعد مدة من المحاولة توصلت على عدد من الحلول المقترحة من متابعي المشروع وتم استخدام أكثر من حل ولكن في النهاية تعرضت لمشكلة وهي عمل كل شيء ما عدا الخريطة! وبالتالي توقف المشروع مجددا بسبب ضيق الوقت ومعرفتي الطفيفة جدا باللغة المستخدمة وعجزي عن إيجاد حل.
اليوم توصلت الى حل جديد و مزود مفاتيح API جديد وخرائط ممتازة. وبالتالي اليوم تمكنت من إعادة بدء المشروع من جديد والإنتهاء منه بشكل شبه كامل.
صفحة المشروع
جميع الحقوق محفوظة لصاحب المشروع الأصلي “n0ble”. المشروع مفتوح المصدر تحت ترخيص “MIT”. يمكنك زيارة الرابط الرسمي للمشروع من خلال الرابط التالي:
https://github.com/n0bel/PiClock
متطلبات المشروع
متطلبات المشروع بسيطة ولكنها قد تكون كثيرة. المشروع موجه لمن يرغب في بناء شيء بنفسه ويفتخر به. المتطلبات الحقيقية فيها أمور مختلفة وفيها أمرين إضافيين ولكني قررت عدم استخدام هذه الإضافات. المشروع الأصلي يتطلب شريط LED لعمل اضافة خلفية خلّابة وهي جميلة جدا بالفعل ويتطلب مستقبل IR لتفعيل تغيير الشاشة من خلال جهاز تحكم.
قررت عدم ﻹستخدام هذه الإضافات لكونها غير مهمة بالنسبة لي.
1- جهاز Raspberry PI
قررت استخدام جهاز Zero. على الرغم من أنهم لا ينصحون بذلك لكونه جهاز صعيف، الا اني قررت استخدامه لأني لا احتاج الى واجهة وبالتالي الأمر الوحيد الذي يعمل ويستهلك الذاكرة والمعالج بشكل حقيقي هو المشروع نفسه بدون أي إضافات من النظام.
2- كيبل HDMI
لهذا الجهاز بالذات قررت إستخدام كيبل مسطح “Flat” بطول 15سم. كان أفضل لو استخدمت كيبل بطول 5 سم ولكني أسأت تقدير الطول. إنتبه أن الكيبل من طرف هو HDMI عادي، ومن الطرف الإخر هو Mini HDMI. الكيبل من نوع Flat بسبب الشاشة التي قررت استخدامها.
3- شاشة
لا يوجد ما نتحدث عنه هنا. يمكنك استخدام شاشة كمبيوتر، تلفاز، أو حتى استخدام شاشة كالتالي قمت أنا باستخدامها. قمت بشراء شاشة بحجم 7 إنش من نوع IPS. للأسف كنت قد إخترت شاشة تعمل باللمس عن طريق الخطأ وهذا غير ملائم لي لأنه يسبب بهتان في الشاشة كونها غير عالية الجودة ولو أمكنني إزالة طبقة اللمس بدون تخريب الشاشة سأقوم بذلك.
بسبب دقة الشاشة قمت بعمل تعديلات يدوية في ملفات الإعدادات لتشغيل الدقة الحقيقية الصحيحة للشاشة حيث أن هذه الدقة غير مدعومة بشكل إفتراضي.
4- منفذ Micro USB
قررت استخدام هذا المنفذ لا لشيء سوى توحيد مدخل الطاقة لتوزيعة لاحقا على الشاشة وجهاز Raspberry Pi. بما أن الشاشة والجهاز نفسه يعملون بجهد مقداره 5 فولت، رأيت أ من الأفضل توحيدهم.
5- رأس كيبل HDMI
قمت بإستخدام هذه الأداة لتوصيل الطاقة للشاشة والجهاز حيث فضلت عدم استخدام اللحام في حال احتجت لفك المشروع أو تغييره أو عمل أي تعديل مستقبلي.
6- جهاز لِحام
هذا الجهاز رخيص جدا وبسيط جدا وقد يكون غير ملائم لافتقاره لحساس حرارة ومعايير الأمان والضبط التلقائي ولكنه يقوم بالعمل!
7- لحام قصدير
اخترت أقل كمية ممكنة. لا يوجد استخدام فعلي هنا سوى بضع قطرات من المعدن وبعدها لا حاجة للقصدير.
8- معجون مساعد لحام “Flux”
هذا كان مهم لتسهيل اللحام. من المفضل جدا استخدامه في جميع الأحوال حيث انه يساعد في عمل لحام سهل، سريع ونظيف.
9- حساس حرارة
هذا الحساس من نوع DS18B20. يمكنك استخدام أكثر من حساس لجمع معلومات أدق ولكن أنا فضلت استخدام واحد فقط.
10- أسلاك
يفضل استخدام أسلاك نحاسية عالية الجودة لتقليل فقدان الطاقة وتوزيع أفضل للحرارة وتسهيل عملية اللحام.
11- مقاومة بقدرة 4.7K
هذه المقاومة مهمة لحساس الحرارة حتى يعمل بشكل صحيح.
12- كيبل USB -> MicroUSB
هذا الكيبل يستخدم في توصيل لوحة مفاتيح عند بدء الإعداد الأولي للنظام. في حال قمت بإعداد شبكة لاسلكية مسبقة قبل تشغيل الجهاز، يمكنك التواصل مع الجهاز من خلال ssh بدون الحاجة الى هذا الكيبل. هذا الكيبل مهم في حال انه لديك جهاز من نوع Zero فقط حيث أن باقي الأجهزة تحتوي على منفذ USB عادي.
13- قارئ ذاكرة
من خلال هذا الجهاز سنقوم بحرق نسخة نظام التشغيل على بطاقة الذاكرة الخاصة بالجهاز.
14- بطاقة ذاكرة
يفضل إستخدام ما لا يقل عن 8GB. من المفضل استخدام 16GB وأن تكون الذاكرة من نوع النوع عالي السرعة. في حال كان لديك جهاز غير Zero يمكنك عمل الإقلاع من قرص صلب SSD وسيكون هناك فرق لا يصدق في استجابة النظام وسرعة الإقلاع.
15- مزود طاقة
يجب أن يكون على الأقل 5 فولت بقدرة 2 أمبير لجهاز من نوع Zero و 3 أمبير لجهاز عادي. أنا قررت إستخدام 3 أمبير لأن جهاز Zero يستهلك تقريبا 1 أمبير في حالة الضغط و الشاشة تستهلك 1 أمبير. بالتالي قررت استخدام 3 أمبير حيث وجدت أنها مناسبة وفعلا لم يحصل أي مشكلة في الطاقة في ساعات التجربة الطويلة جدا والمتواصلة.
16- جهاز قياس كهربائي
هذا غير مهم وغير إجباري ولكن لطالما أردت الحصول على واحد! أيضا يساعدني في معرفة بعض التفاصيل مثل إستهلاك الطاقة، حرارة الجهاز، والفولتية الصحيحة. أيضا يساعد في تشغيل بعض المشاكل الكهربائية.
خطوات العمل
الخطوات قد تكون مترابطة ومتشابكة إلا أني قررت القيام بها بالترتيب التالي:
1- نظام التشغيل
قررت إستخدام نظام Raspberry Pi OS نسخة Lite. هذه النسخة تكون بحجم أقل من 500 ميجا ولا تحتوي على بيئة سطح مكتب. النسخة تعمل من خلال سطر الأوامر فقط وهذا ممتاز جدا لما سنقوم بعمله. ما يعيب هذه النسخة هو أنها تعمل بمعمارية 32 بت وليس 64 بت وبالتالي لا تستغل كامل قدرات المعالج ولكن هذا غير مهم في هذا المشروع وهذا الجهاز.
يمكن تنزيل النظام من الموقع الرسمي للجهاز من خلال الرابط التالي:
https://www.raspberrypi.org/software/operating-systems/#raspberry-pi-os-32-bit
بعد ذلك يمكن حرق النظام على بطاقة الذاكرة من خلال الامر dd في لينيكس أو من خلال برنامج win32 disk imager في ويندوز. يمكنك الضغط هنا للإنتقال الى شرح حرق النظام من خلال أداة dd في لبنيكس. تذكر: يجب عليك استخراج الملف الحقيقي بلاحقة img من الملف المضغوط zip الذي ستقوم بتنزيله.
عند الانتهاء من حرق النظام، قم بتشغيل الجهاز للتأكد من عمل النظام والشاشة. من المفترض أن تصل لشاشة الدخول:
2- ضبط إعدادات النظام
من المفضل جدا هنا وقبل الكتابة التأكد من النظام. يجب البدء في توصيل النظام بالإنترنت وعمل تحديث لكل شيء وضبط الاعدادات بشكل عام. يمكنك تنفيذ الأمر التالي لدخول الإعدادات بدون الحاجة للواجهة الرسومية وعمل التعديلات المناسبة لك.
sudo raspi-config
أهم الإعدادات:
1- التوصيل بالإنترنت من خلال System Option ومن ثم Wireless LAN
2- تغيير كلمة المرور من خلال System Options ومن ثم Password
3- الدخول التلقائي من خلال System Option ومن ثم Boot / Auto Login واختيار B2 Console Autologin
4- ضبط دقة الشاشة من خلال Display Options ومن ثم D1 Resolution
5- إيقاف الإيقاف التلقائي للشاشة من خلال Display Options ومن ثم D5 Screen Blanking
6- تفعيل خادم ssh من خلال Interface Options ومن ثم SSH
7- الضغط على Finish والموافقة على إعادة تشغيل النظام.
تحديث النظام
بعد إعادة التشغيل يمكنك عمل تحديث للنظام من خلال الأمر التالي:
sudo apt update && sudo apt upgrade -y
إعدادات المشروع و إعدادات الشاشة المتقدمة
هذه الإعدادات تعتمد على تعديل ملف config.txt وهو ملف يقوم بالتحكم في أمور متعددة في الجهاز.
ضبط الشاشة:
دقة الشاشة عندي ليست قياسية بشكل عام وتشغيلها بشكل صحيح قد لا يكون مباشر. بالتالي احتجت الى تعديل ملف config.txt من خلال الأمر التالي:
sudo nano /boot/config.txt
قمت بالتغييرات التالية:
hdmi_group=2hdmi_mode=87hdmi_cvt=1024 600 60 3 0 0 0
تفعيل دعم حساس الحرارة
يجب إضافة التالي الى ملف config.txt:
dtoverlay=lirc-rpi,gpio_in_pin=3,gpio_out_pin=2dtoverlay=w1-gpio,gpiopin=4
أيضا يجب تحرير ملف modules:
sudo nano /etc/modules
وإضافة التالي:
lirc_rpi gpio_in_pin=3 gpio_out_pin=2
w1-gpio
إيقاف التشغيل
قم بإيقاف تشغيل الجهاز تحضيرا لتوصيل للعمل الخارجي من خلال الأمر التالي:
sudo shutdown now
العمل على العتاد
نبدأ أولا بتوصيل حساس الحرارة مع الجهاز حسب المخطط التالي. إنتبه أن حرارة الجهاز قد تتعدى 400 درجة مئوية خلال دقائق معدودة. هذه الحرارة كافية لتسبب حريق أو إتلاف العتاد والأثاث أو التسبب بحروق من الدرجة الثالثة في جسدك أنت أو جسد من قد يعبث بالجهاز خلال عمله سواء أكان طفلا أو حيوان أليف.يجب إستخدام الجهاز في مكان جيد التهوية حيث أن الأبخرة الصادرة منه تحتوى على معدن الرصاص شديد السمية.
من ناحيتي قمت بعمل أداة بسيطة لتوزيع الطاقة للشاشة والجهاز معا كما في الصور التالية:
الشكل الخارجي:
العمل على البرمجيات
تثبيت البرامج اللازمة:
المشروع يحتاج الى بعض البرمجيات التي تقوم بتشغيل الأجزاء المختلفة منه وسنقوم بتثبيتها في أقل عدد ممكن من الأوامر:
sudo apt install python3 python-dev python3-dev python-pip python3-dev python-qt4
unclutter git nanopip install w1thermsensorsudo pip install w1thermsensorpip install python-dateutil --upgrade pip install tzlocal --upgrade pip install python-metar --upgradegit clone --branch owm https://github.com/n0bel/PiClock.gitchmod +x PiClock/startup.sh
لاحظ: قمنا بتثبيت تعريف حساس الحرارة “w1thermsensor” مرتين. مره مع sudo ومره بدون. هذا يقوم بتوفير التعريف للمستخدم pi والمستخدم root. بدون هذه الخطوة لن يعمل الحساس عند بدء التشغيل التلقائي.
الحصول على مفاتيح API
للخرائط، سوف نستخدم خدمات mapbox. يمكنك تسجيل حساب والحصول على مفتاح API من خلال الرابط التالي:
https://account.mapbox.com/auth/signup/
وللطقس، سوف نستخدم خدمات OpenWeather. يمكنك تسجيل حساب والحصول على مفتاح API من خلال الرابط التالي:
https://home.openweathermap.org/users/sign_up
ضبط إعدادات البرنامج
في هذه الخطوة سنقوم بضبط الموقع الجغرافي الخاص بنا، وسنقوم بضبط ملفات الإعدادات لتعرض المعلومات الصحيحة بالطريقة الصحيحة. هنا يجب تشغيل الجهاز وتسجيل الدخول اما من خلال الجهاز نفسه أو عبر ssh.
أولا نقوم بتكوين ملفات الإعدادات التي سيتم إستخدامها من خلال النظام:
cp /home/pi/PiClock/Clock/Config-Example.py /home/pi/PiClock/Clock/Config.pycp /home/pi/PiClock/Clock/ApiKeys-example.py
/home/pi/PiClock/Clock/ApiKeys.py
ثم نقوم بإدخال مفاتيح API في المكان المخصص لهم من خلال الأمر التالي:
nano /home/pi/PiClock/Clock/ApiKeys.py
بعد ذلك نقوم بتعديل ملف الإعدادات لضبط اللازم. سأقوم بإرفاق التعديلات الي قمت بها أنا ليكون الشكل مطابق لما عم عرضه هنا.
nano /home/pi/PiClock/Clock/Config.py
نقوم بتعديل التالي:
primary_coordinates = 00.0000000, 00.0000000useslideshow = 1slide_time = 900digital = 1digitalformat = "{0:%H:%M}"digitalsize = 180digitalformat2 = "{0:%H:%M}"usemapbox = 1metric = 1
السطر الأول هو الخاص بموقعك. يمكنك الحصول على إحداثيات GPS من خلال أي تطبيق قادر على ذلك في هاتفك أو من خلال خرائط جوجل.
السطر الثاني هو لتفعيل عرض الشرائح. أنا استخدم هذا الخيار لمنع تلف البكسلات في الشاشة بسبب العرض المتواصل لنفس الصورة.
السطر الثالث يقوم بتغيير الخلفية كل 900 ثانية.
السطر الرابع لتغيير طريقة العرض من ساعة عادية الى ساعة رقمية.
السطر الخامس هو تخصيص طريقة عرض الساعة لا أكثر.
السطر السادس لتصغير حجم الخط قليلا.
السطر السابع تغيير طريقة عرض الساعة في الشاشة الثانية.
السطر الثامن لتحويل المقياس من إمبريالي الى متري.
بعد الإنتهاء من الإعدادات وفي حال كنت تعمل على جهاز رازبري عادي يحتوي على بيئة سطح مكتب، يمكنك تشغيل البرنامج بدون مشاكل. أما في حال كنت مثلي لا تستخدم واجهة، يجب عليك عمل بعض التعديلات أولا. نقوم بفتح ملف تشغيل البرنامج من خلال الأمر التالي:
nano /home/pi/PiClock/startup.sh
ونقوم بتغيير التالي:
cd $HOME/PiClock
الى:
cd /home/pi/PiClock
ثم نقوم بتغيير:
cd Temperature
الى:
cd /home/pi/PiClock/Temperature
حتى الآن، لا يمكنك تشغيل البرنامج بدون واجهة رسومية. يجب علينا تعديل ملف أخر في النظام حتى نتمكن من ذلك. قم بتنفيذ الامر التالي:
sudo nano /etc/X11/Xwrapper.config
وقم بتغيير قيمة allowed_users الى anybody:
نقوم الآن بتجربة العمل من خلال الأمر التالي:
startx /home/pi/PiClock/startup.sh -n
هذا ما ستشاهده في شاشة ssh:
ومن المفترض أن ترى شيء مشابه لهذا على شاشة الجهاز نفسه:
في حال كنت متصل بالجهاز مباشرة، يمكنك الضغط على F4 لإيقاف البرنامج، وفي حال كنت متصل من خلال ssh يمكنك الضغط على Ctrl+C لإيقاف البرنامج.
بدء تشغيل البرنامج مع بدء تشغيل الجهاز
لا شك بأنك لا ترغب في تشغيل البرنامج بشكل يدوي في كل مرة! وبالتالي قمت بتوفير أفضل طريقة للتشغيل بدون الواجهة الرسومية.
قم بتنفيذ الأمر التالي:
sudo nano /etc/rc.local
ومن ثم قم بوضع الامر التالي في أي مكان قبل exit 0:
startx /home/pi/PiClock/startup.sh -n &
بعد ذلك قم بإعادة التشغيل من خلال الأمر التالي:
sudo sync && sudo reboot
هنا، يجب أن يكون كل شيء جاهز للعمل بشكل ممتاز.
ملاحظات
المشروع كما لاحظت غير موجه للجديد في عالم لينيكس وهو بالفعل لمن لديهم القدرة على القيام ببعض الأمور التقنية ومن أهمها تشخيص المشاكل. تشخيص وحل مشاكل هذا المشروع استغرق ساعات طويلة.
هناك العديد من الأمور التي لم أتطرق لها في الشرح منها تغيير شكل الساعة بما يلائمك. يمكنك العثور على القوالب الأصلية في مجلد gimp الموجود في الساعة.
هناك العديد من الإعدادات التي لم نتطرق لها أيضا ويمكن العثور عليها في ملف Config.py.
في حال كانت معرفتك في لغة بايثون جيدة، يمكنك عمل الكثير في هذا المشروع.