جدول المحتويات:

تتبع جودة الهواء باستخدام Grafana و Raspberry Pi: 7 خطوات
تتبع جودة الهواء باستخدام Grafana و Raspberry Pi: 7 خطوات

فيديو: تتبع جودة الهواء باستخدام Grafana و Raspberry Pi: 7 خطوات

فيديو: تتبع جودة الهواء باستخدام Grafana و Raspberry Pi: 7 خطوات
فيديو: Re-Invent How you Track your IoT Devices: Introducing Kaa IoT Dashboards! 2024, يوليو
Anonim
تتبع جودة الهواء باستخدام Grafana و Raspberry Pi
تتبع جودة الهواء باستخدام Grafana و Raspberry Pi

كنت أبحث عن مشروع IOT صغير صغير وأوصى أحد الأصدقاء بمراجعة هذا البرنامج التعليمي:

dzone.com/articles/raspberry-pi-iot-sensor…

أوصي بشدة باتباع البرنامج التعليمي للمتابعة في إعداد Raspberry Pi للمراقبة. سيكمل هذا البرنامج التعليمي خطوات إضافية في تصميم جهاز إنترنت الأشياء البسيط الذي يسمح بتسامح عالي مع الأخطاء ، بالإضافة إلى مدى فائدة Raspberry Pi عند إقرانه مع Arduino.

أخوض أيضًا في فعالية نماذج MQ * الخاصة بأجهزة استشعار الهواء والحد منها إلى حد ما. مستشعرات MQ * رخيصة وفعالة إلى حد ما وسهلة الإعداد.

بشكل عام ، سيساعدك هذا على البدء في توصيل Arduino بالإنترنت بأبسط طريقة ممكنة ، ويمهد الطريق لاستخدام وحدات بصمة أخف (إعادة: ESP8266).

استمتع!

الخطوة 1: المعدات + الإعداد

ادوات

  • Raspberry Pi مثبت عليه Raspbian
  • مصدر طاقة Raspberry Pi
  • Arduino Uno / ما يعادله
  • ذكر لذكر USB من النوع B إلى النوع A (يجب أن يأتي مع Arduino)
  • أي من مستشعرات MQ * (استخدمت MQ-2 و 4 و 5 و 135)
  • أسلاك توصيل متنوعة
  • لوح صغير

اقامة

يُقصد بهذا البرنامج التعليمي كمقدمة لطيفة لاستخدام Arduino و Raspberry Pi - سيساعد ذلك في معرفة كيفية استخدام محطة linux. ومع ذلك ، لا أفترض خبرة كبيرة في العمل على Arduino أو Raspberry Pi - كل ما تحتاجه حقًا هو المعدات المتوفرة والموقف الفضولي.

  • سوف تحتاج إلى إكمال الخطوات في هذا البرنامج التعليمي.
  • أوصيك باستخدام Secure Shell (SSH) للتفاعل مع Raspberry Pi ، حيث يتيح لك ذلك إدخال الأوامر بسهولة. يختلف الاتصال عبر SSH سواء كنت تستخدم Windows أو Linux أو Mac. من السهل جدًا استخدام Linux و Mac فيما يتعلق بـ ssh (الأمر لفتح SSH هو حرفياً ssh). تحقق من المعجون لنظام التشغيل Windows. أنصحك بإلقاء نظرة على الشاشة كطريقة للحفاظ على جلستك أثناء المشروع.
  • ستحتاج أيضًا إلى تثبيت Python على Raspbian. عندما أكملت هذه الخطوات ، قمت بعمل نسخة من بطاقة SD قديمة كنت قد استلقيت عليها من مشروع سابق ، تم تثبيت Python عليه بالفعل. إذا لم يكن توزيعك لـ NOOBS / Raspbian يحتوي على Python 3.7 أو أعلى ، فراجع هذه الخطوات لتجميع Python من المصدر.
  • تعرف على git وقم بتثبيته في حالة عدم تثبيته بالفعل في توزيع Raspbian الخاص بك.

الخطوة 2: إعداد الدائرة

انشاء الدائرة
انشاء الدائرة

هناك دائرة واحدة ستحتاج إلى إعدادها في Arduino.

لقد قدمت مخططًا يمكنك استخدامه كمرجع.

يكمن جمال جميع مستشعرات الغاز MQ- * في أنه بمجرد إجراء اتصال 5 Volt و Ground ، تسمح مقاومة الإدخال لمنافذ Arduino التناظرية للمستشعر بالعمل بشكل صحيح.

كن حذرًا للتأكد من أن الاتصال التناظري من لوحة الاختراق في المستشعر متصل بـ Arduino وليس الاتصال الرقمي. إذا كنت تواجه نطاقًا ضيقًا جدًا من القيم عند الاختبار ، فإنني أوصيك بالتحقق من اتصالك هنا أولاً.

الخطوة 3: كود اردوينو والوميض

في الخطوة التالية لهذه الخطوة ، سنقوم بتوصيل لوحة Arduino بـ Raspberry Pi. قبل القيام بذلك ، نحتاج إلى وميض Arduino برمز لقراءة المستشعر وكذلك نقل بيانات المستشعر إلى Raspberry Pi. يمكن القيام بذلك بأي طريقة تقوم بها عادةً بدفع الكود إلى Arduino. لقد استخدمت أداة طرف ثالث بصرف النظر عن Arduino IDE - وبالتالي ، قمت بتضمين مكتبة Arduino في الأعلى. هذا ليس ضروريا لمشاريع أخرى.

تحقق من الكود لنسخ / لصق في نهاية هذا القسم.

ماذا يفعل الكود

تم إعداد الكود للحصول على البيانات من أربعة أجهزة استشعار مختلفة - إذا كنت تستخدم أنواعًا مختلفة من أجهزة الاستشعار ، فسيكون من المعقول تغيير الأسماء على إشارة الإخراج المرسلة من المنفذ التسلسلي.

في الحلقة نتحقق مما إذا كان Raspberry Pi يطلب بيانات منا. ومن ثم ، فإننا نستخدم تكوينًا رئيسيًا / تابعًا بسيطًا للغاية حيث يقوم Raspberry Pi باستمرار بتقديم طلبات إلى Arduino للحصول على البيانات. هذا أبسط بكثير من وجود عداد في كود Arduino لأنه من الأسهل اختبار القيم التي تعمل من Raspberry Pi ، بدلاً من الاضطرار إلى تحديث قيم جديدة إلى Arduino.

بمجرد استلام اردوينو لطلب البيانات ، سيقوم بتنسيق الإخراج كمعامل GET - وهذا مرتبط بطرق HTTP وهو ببساطة اختيار تصميم. إذا كنت ستصمم مخطط اتصال من Arduino عبر المنفذ التسلسلي ، فيمكنك بسهولة البحث عن أي شيء آخر ، طالما قمت بتصميمه بحيث يتم فصل البيانات بشكل معقول. اخترت GET لأنها مألوفة وقوية.

اختبار بسيط …

بمجرد تشغيل Arduino وتشغيل الكود ، افتح Serial Monitor الخاص بـ Arduino IDE. إذا أرسلت الحرف المفرد "H" (تأكد من رأس المال!) ، فستحصل على حمولة البيانات. تهانينا ، إنه يعمل!

عينة جامع غير متزامن لبيانات MQ- *

#يشمل
int mq2 = A2 ؛
int mq4 = A3 ؛
int mq5 = A4 ؛
int mq135 = A5 ؛
وارد بايت ؛
الإعداد باطل() {
pinMode (mq2 ، الإدخال) ؛
pinMode (mq4 ، الإدخال) ؛
pinMode (mq5 ، الإدخال) ؛
pinMode (mq135 ، الإدخال) ؛
Serial.begin (9600) ؛
}
/ * valuePrint تطبع قيمة هذا الملصق.
* يسبب آثار جانبية فقط.
*/
voidvaluePrint (عنوان السلسلة ، قراءة int) {
Serial.print (التسمية) ؛
Serial.print ("=") ؛
Serial.print (قراءة) ؛
}
حلقة فارغة() {
// معرفة ما إذا كانت هناك بيانات تسلسلية واردة:
إذا (Serial.available ()> 0) {
// اقرأ أقدم بايت في المخزن المؤقت التسلسلي:
// "عند استدعاء Serial.read تتم إزالة بايت من مخزن الاستلام المؤقت وإعادته إلى الكود الخاص بك"
InomingByte = Serial.read () ،
// إذا كان حرف H كبير (ASCII 72) ، اقرأ القيم وأرسلها إلى مضيف التوت.
// TODO: تأكد من أن الرسالة دائمًا بنفس الطول ، في كل مرة
إذا (بايت وارد == 72) {
int mq2Reading = analogRead (mq2) ؛
int mq4Reading = analogRead (mq4) ؛
int mq5Reading = analogRead (mq5) ؛
int mq135Reading = analogRead (mq135) ؛
Serial.print ("؟") ؛
valuePrint ("mq2" ، mq2Reading) ؛
Serial.print ("&") ؛
valuePrint ("mq4" ، mq4Reading) ؛
Serial.print ("&") ؛
valuePrint ("mq5" ، mq5Reading) ؛
Serial.print ("&") ؛
valuePrint ("mq135" ، mq135Reading) ؛
Serial.print ("\ n") ؛
}
}
// اقرأ المسلسل كل ثانية فقط
تأخير (1000) ؛
}

عرض Rawmain.cpp المستضاف مع ❤ بواسطة GitHub

الخطوة 4: Raspberry Pi Code

الآن بعد أن قمت بتكوين Raspberry Pi وفقًا لـ https://dzone.com/articles/raspberry-pi-iot-sensor… ، يمكنك الآن تشغيل رمز عميل Raspberry الذي سيرسل البيانات عبر MQTT إلى قاعدة البيانات الخاصة بنا ، والتي أيضًا يتصل بجرافانا.

  1. تأكد من اتصال التوت الخاص بك بالإنترنت ثم قم بتنفيذ أمر git clone لنسخ الكود بالكامل إلى Raspberry Pi. سيبدو الأمر الخاص بك قليلاً مثل:

    استنساخ بوابة

  2. داخل محطة raspberry Pi ، نفذ أمر تغيير الدليل (cd) إلى "raspberry_client":

    القرص المضغوط raspberry_client.

  3. سوف تحتاج إلى استخدام بيئة افتراضية *. بسيط. يركض

    python3 -m venv env. سيؤدي هذا إلى إنشاء بيئة افتراضية تسمى "env" والتي سنستخدمها لتثبيت التبعيات.

  4. الآن ، نحن بحاجة لدخول بيئتنا الافتراضية. يركض:

    مصدر البيئة / بن / التنشيط. أنت الآن جاهز لتثبيت تبعيات المشروع.

  5. في الحزمة التي نسختها للتو ، يوجد ملف يسمى requirements.txt. افتح هذا الملف ؛ سترى أننا نطلب حزم paho-mqtt و pyserial ، بالإضافة إلى إصدارات كل منهما. يمكنك عرض محتويات الملف عن طريق التشغيل

    متطلبات القط. xt. من أجل تثبيت هذه الحزم ، موقع ru

    Pip install- متطلبات rtxt.

  6. هذا يختتم التكوين.

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

ماذا يفعل الرمز …

سيقوم ملف client.py باستيراد مجموعة بسيطة من المكتبات بما في ذلك جهاز استشعار arduinosor الخاص بنا. في الوظيفة الرئيسية ، سنحصل على القيم من Arduino ، وننشر البيانات إلى وسيط MQTT ، ثم ننام لمدة 10 ثوانٍ.

ملف arduinosensor.py عبارة عن مجموعة من الطرق المساعدة التي تلتف حول مكتبة paho.mqtt ، بالإضافة إلى توفير بعض مخططات الاتصال المفيدة للتواصل مع حمولة Arduino (انظر: parse_payload). بالطبع ، الكود مرفق في نهاية هذا القسم.

عميل بسيط يتواصل مع عنصر اردوينو عبر الشاشة التسلسلية. توقع العثور على الرمز هنا عندما يصبح عامًا:

منportlibimportimport_module
استيراد
وقت الاستيراد
جهاز استشعار الاستيراد
defmain ():
# فتح عميل محدد
start_time = time.time ()
احيانا صحيح:
Reading = arduinosensor.get_values (os.environ.get ('PORT'، "/ dev / ttyUSB0"))
arduinosensor.pub ("python_client" ، الحمولة = القراءة)
time.sleep (10.0- ((time.time () -start_time)٪ 10.0))
if_name _ == "_ main_":
الأساسية()

عرض rawclient.py مستضاف مع ❤ بواسطة GitHub

الخطوة 5: وضع كل ذلك معًا

لدينا كود Raspberry Python الذي تم إعداده ، ولدينا كود عميل Arduino الذي تم إعداده. دعنا ننتقل إلى ربط كلا الكيانين معًا.

أولاً ، دعنا نربط Arduino ونقوم بإعداد التكوين الصحيح:

  1. على محطة Raspberry Pi الخاصة بك ، قم بتشغيل

    python -m serial.tools.list_ports. سيؤدي ذلك إلى سرد جميع منافذ USB التي تدعم الاتصال التسلسلي.

  2. الآن ، قم بتوصيل Arduino الخاص بك وانتظر حوالي ثانيتين حتى يتعرف Raspberry عليه. الكتابة

    python -m serial.tools.list_ports مرة أخرى سوف تظهر لك المنافذ مرة أخرى. قد ترى قائمة إضافية تظهر - إذا كان هذا هو الحال بالفعل ، فإن هذا الإدخال الجديد هو الإدخال الذي يتصل به Arduino الخاص بك. من المحتمل أن يكون هذا "/ dev / ttyUSB0".

  3. حاول تشغيل كود python داخل بيئتك الافتراضية عن طريق تشغيل python3.7 client.py. انتظر بضع ثوانٍ (عشر ثوانٍ على الأكثر) - إذا واجهت استثناءً ، فهذا يعني أنه سيتعين علينا تغيير قيمة منفذ com الخاص بنا على raspberry pi. إذا رأيت أن الرمز يطبع سطرًا يبدأ بـ "إرسال التالي الحمولة: …" بعد ذلك ، سيكون من الجيد الانتقال إلى الخطوة الأخيرة مع Grafana. نصيحة: تأكد من الجري

    شاشة -S الثعبان قبل أن تبدأ عميل python ، وإلا ، عندما تنهي اتصالك بـ raspberry pi ، ستفقد برنامج python قيد التشغيل. من الناحية الفنية ، لا تحتاج إلى استخدام "python" بشكل صارم كمعامل أخير ، لكني أحب تسمية جلسات الشاشة وفقًا لذلك.

    1. لتغيير قيمة منفذ COM ، سيتعين عليك تعيين متغير بيئة قبل تشغيل الكود. سيتعين عليك تجربة هذا مع كل قيمة ممكنة للإخراج حصلت عليها عند تشغيل python -m serial.tools.list_ports. على سبيل المثال ، إذا كان عدد الإدخالات التي حصلت عليها اثنين ، وكان كالتالي:

      • / dev / ttyUSB6
      • / ديف / acm0

ثم الأوامر التي كنت سأديرها ستكون:

PORT = "/ dev / ttyUSB6" python3.7 client.py، وإذا لم ينجح ذلك ، سأفعل ذلك لاحقًا

PORT = "/ dev / acm0" python3.7 client.py

بمجرد الانتهاء من هذه الخطوات ، سوف يلتزم الكود بالبيانات بمثيل قاعدة بيانات influxdb الخاصة بنا ، والتي ، عند الاتصال بـ Grafana ، ستسمح لنا بعرض لوحة القيادة الخاصة بنا.

الخطوة 6: تكوين Grafana وعرض لوحة المعلومات

تكوين Grafana وعرض لوحة القيادة
تكوين Grafana وعرض لوحة القيادة

حسنًا ، نحن الآن في المرحلة النهائية! سنستخدم الآن Grafana لإنشاء لوحة تحكم بسيطة.

  1. الاتصال بمثيل Grafana الخاص بك. نظرًا لأنك اتبعت الخطوات الواردة في مقالة dzone الأصلية ، يجب أن تكون قادرًا على تسجيل الدخول باستخدام المستخدم المسؤول. المضي قدما وتسجيل الدخول.
  2. في الجزء الأيمن ، مرر الماوس فوق رمز "لوحات المعلومات" - المربعات الأربعة. انقر فوق "إدارة".
  3. في الصفحة الجديدة ، انقر فوق "لوحة تحكم جديدة". علاوة على ذلك ، انقر فوق "إضافة لوحة جديدة".
  4. هذا يفتح محرر Grafana. سننشئ عرضًا بسيطًا يظهر مقياسًا واحدًا.

    1. في الجزء الأيسر ، قم بتغيير عنوان اللوحة إلى شيء ذي معنى ، مثل "قراءات المطبخ". يمكنك أيضًا إدخال وصف اختياري.
    2. في الجزء السفلي الأيمن ، "استعلام" ، سنضيف سلسلة زمنية واحدة. تتألق Grafana حقًا هنا حيث يمكننا بسهولة إنشاء عبارات SQL بواجهة تعتمد على النقر. ضمن "افتراضي" ، اختر InfluxDB.
    3. الآن ، لقراءة "A" - في جملة FROM ، حدد القياس "airtestt". إذا نظرت إلى كود python الأصلي في دالة get_values الخاصة بـ arduinosensor.py ، فسترى أننا نحدد جدول airtestt هذا داخل الكود.
    4. لعينة ، دعنا نذهب إلى جملة "SELECT" واختر الحقل (mq4). في الأصل ، ستمنحنا لوحة التحكم الخاصة بنا خيار "mean ()" - انقر فوق هذا الخيار وحدد "إزالة". ثم ، انقر فوق علامة الجمع ، وضمن "التجميعات" اختر "مميز ()". سيظهر هذا نقاط زمنية محددة. يمكننا اختيار مقاييس أخرى ولكن في الوقت الحالي ، ستعرض اللوحة الخاصة بنا قراءات مميزة من mq4.
    5. انقر فوق حفظ في الجزء العلوي الأيمن ، وبذلك تكون قد انتهيت!

في حال واجهتك مشكلة ، يمكنك التحقق من إعداداتك بتلك الموجودة في لقطة الشاشة المرفقة.

الخطوة 7: الختام

يتم إحتوائه
يتم إحتوائه

في هذا البرنامج التعليمي ، تمكنت من إعداد شبكة MQTT قوية تتكون من عقدة واحدة ووسيط. لقد تمكنت أيضًا من تصور بيانات IOT الخاصة بك باستخدام Grafana. أخيرًا ، كنت قادرًا على تكوين بنية النظام البسيطة هذه من (نأمل) راحة المتصفح والكمبيوتر الشخصي عبر استخدام اتصال SSH.

هناك بعض الأشياء التي قد نرغب في تحسينها.

  • قراءات المستشعر في الرسم البياني ليست في الواقع قراءات دقيقة للمستشعر - إنها جهد الخرج من جهاز الاستشعار لدينا. يجب معايرتها ، راجع منشور المدونة هذا لمزيد من التفاصيل.
  • يمكن جعل تكوين raspberry pi أكثر خفة باستخدام لوحة ESP8266 المتصلة بـ arduino ، وإزالة pi تمامًا. تحقق من مقدمة عن وحدة ESP8266.
  • قد نرغب في إضافة تنبيهات لأحداث معينة. لحسن الحظ ، تقدم Grafana طريقة للقيام بذلك.

سأترك المزيد من القراءة لإغراء خيالك بعالم إنترنت الأشياء. أتطلع إلى رؤيتك في التعليمات التالية!

قراءات أخرى:

موصى به: