فهرست مطالب:

پیگیری کیفیت هوا با استفاده از Grafana و Raspberry Pi: 7 مرحله
پیگیری کیفیت هوا با استفاده از Grafana و Raspberry Pi: 7 مرحله

تصویری: پیگیری کیفیت هوا با استفاده از Grafana و Raspberry Pi: 7 مرحله

تصویری: پیگیری کیفیت هوا با استفاده از Grafana و Raspberry Pi: 7 مرحله
تصویری: X Band Ft Wink - "Acid" OFFICIAL VIDEO | اکس بند فیت وینک - اسید 2024, جولای
Anonim
با استفاده از Grafana و Raspberry Pi کیفیت هوا را ردیابی کنید
با استفاده از Grafana و Raspberry Pi کیفیت هوا را ردیابی کنید

من به دنبال یک پروژه کوچک IOT بودم و یکی از دوستان توصیه کرد که این آموزش را بررسی کنید:

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

توصیه می کنم برای پیگیری راه اندازی رزبری پای برای نظارت ، آموزش را دنبال کنید. این آموزش مراحل بیشتری را در طراحی یک دستگاه IoT ساده که اجازه تحمل خطا بالا را می دهد و همچنین اینکه یک Raspberry Pi در هنگام جفت شدن با آردوینو چقدر می تواند مفید باشد تکمیل می کند.

من همچنین به کارآیی و محدودیت مدلهای MQ* سنسورهای هوا می پردازم. سنسورهای MQ* ارزان و نسبتاً م effectiveثر هستند و راه اندازی آنها بسیار آسان است.

به طور کلی ، این امر به شما کمک می کند تا بتوانید اتصال Arduino به اینترنت را به ساده ترین شکل ممکن آغاز کرده و راه را برای استفاده از ماژول های رد پای سبک تر (دوباره: ESP8266) تعیین کنید.

خوش بگذره!

مرحله 1: تجهیزات + راه اندازی

تجهیزات

  • رزبری پای با Raspbian نصب شده است
  • منبع تغذیه رزبری پای
  • آردوینو Uno/معادل
  • USB از نر به مرد USB نوع B تا نوع A (باید همراه آردوینو شما باشد)
  • هر یک از سنسورهای MQ* (من از MQ-2 ، 4 ، 5 و 135 استفاده کردم)
  • انواع سیم های بلوز
  • مینی برد برد

برپایی

این آموزش به عنوان مقدمه ای ملایم برای استفاده از آردوینو و رزبری پای به کار می رود - به شما کمک می کند تا نحوه استفاده از ترمینال لینوکس را بدانید. با این حال ، من تجربه زیادی در زمینه کار بر روی Arduino یا Raspberry Pi ندارم - تنها چیزی که واقعاً نیاز دارید تجهیزات ارائه شده و نگرش کنجکاو است.

  • شما باید مراحل این آموزش را تکمیل کنید.
  • توصیه می کنم از رابط کاربری امن (SSH) برای ارتباط با رزبری پای استفاده کنید ، زیرا این امر به شما امکان می دهد دستورات را به راحتی وارد کنید. اتصال از طریق SSH با استفاده از Windows ، Linux یا Mac متفاوت است. لینوکس و مک نسبت به ssh بسیار آسان هستند (دستور باز کردن SSH به معنای واقعی کلمه ssh است). Putty for Windows را بررسی کنید. توصیه می کنم صفحه نمایش را به عنوان راهی برای حفظ جلسه خود در طول پروژه بررسی کنید.
  • همچنین باید Python را روی Raspbian نصب کنید. وقتی این مراحل را به پایان رساندم ، یک کپی از یک کارت SD قدیمی که قبلاً در آن قرار داشتم ، از پروژه قبلی ، که پایتون قبلاً نصب شده بود ، تهیه کردم. اگر توزیع NOOBS/Raspbian شما پایتون 3.7 یا بالاتر ندارد ، این مراحل را برای کامپایل پایتون از منبع بررسی کنید.
  • با git آشنا شوید و آن را نصب کنید در صورتی که قبلاً در توزیع Raspbian شما نصب نشده است.

مرحله 2: راه اندازی مدار

راه اندازی مدار
راه اندازی مدار

یک مدار وجود دارد که باید در آردوینو راه اندازی کنید.

من یک طرح کلی ارائه کرده ام که می توانید از آن به عنوان مرجع استفاده کنید.

زیبایی همه سنسورهای گاز MQ-* این است که پس از اتصال 5 ولت و زمین ، مقاومت ورودی پین های آنالوگ آردوینو به سنسور اجازه می دهد تا درست کار کند.

مراقب باشید که اتصال Analog از برد شکست در سنسور به آردوینو وصل شده باشد نه اتصال دیجیتال. اگر هنگام آزمایش با محدوده بسیار محدودی از مقادیر روبرو هستید ، توصیه می کنم ابتدا اتصال خود را در اینجا بررسی کنید.

مرحله 3: کد Arduino و فلش کردن

در مرحله بعد ، ما برد Arduino را به Raspberry Pi متصل می کنیم. قبل از انجام این کار ، باید Arduino را با کد برای خواندن سنسور و همچنین انتقال داده های سنسور به رزبری پای فلش کنیم. این را می توان به هر روشی که معمولاً کد را به آردوینو فشار می دهید انجام دهید. من از ابزار شخص ثالث جدا از Arduino IDE استفاده کردم - بنابراین ، من کتابخانه Arduino را در بالا قرار می دهم. این برای پروژه های دیگر ضروری نیست.

کد را برای کپی/جایگذاری در انتهای این قسمت بررسی کنید.

کد چه کاری انجام می دهد

این کد برای به دست آوردن داده ها از چهار سنسور مختلف تنظیم شده است - اگر از انواع مختلف سنسور استفاده می کنید ، تغییر نام بر روی سیگنال خروجی ارسال شده از پورت سریال منطقی خواهد بود.

در حلقه ما بررسی می کنیم که آیا Raspberry Pi اطلاعاتی از ما درخواست می کند یا خیر. بنابراین ، ما از یک پیکربندی بسیار ساده Master/Slave استفاده می کنیم که در آن Raspberry Pi به طور مداوم درخواست داده برای Arduino می کند. این بسیار ساده تر از داشتن شمارنده در کد آردوینو است زیرا به جای فشردن مقادیر جدید به آردوینو ، آزمایش مقدارهایی که از رزبری پای کار می کنند ، آسان تر است.

آردوینو ، هنگامی که درخواست داده دریافت کرد ، خروجی را به عنوان یک پارامتر GET فرمت می کند - این مربوط به روش های HTTP است و صرفاً یک انتخاب طراحی است. اگر بخواهید یک طرح ارتباطی از طریق آردوینو از طریق Serial Port طراحی کنید ، به راحتی می توانید به دنبال هر چیز دیگری باشید ، مادامی که آن را طوری طراحی کنید که داده ها به طور منطقی از هم جدا شوند. من GET را انتخاب کردم زیرا آشنا و قوی است.

آزمایش ساده…

پس از اینکه فلش آردوینو چشمک زد و کد اجرا شد ، Serial Monitor Arduino IDE را باز کنید. اگر شما کاراکتر واحد "H" را ارسال کنید (از سرمایه آن اطمینان حاصل کنید!) بار بار داده ها را دریافت خواهید کرد. تبریک می گویم ، کار می کند!

نمونه ای ، گردآورنده ناهمزمان از داده های MQ-*

#عبارتند از
int mq2 = A2؛
int mq4 = A3 ؛
int mq5 = A4 ؛
int mq135 = A5؛
int incomingByte؛
voidsetup () {
pinMode (mq2 ، INPUT) ؛
pinMode (mq4 ، INPUT) ؛
pinMode (mq5 ، INPUT) ؛
pinMode (mq135 ، INPUT) ؛
Serial.begin (9600)؛
}
/* valuePrint مقدار این برچسب را چاپ می کند.
* فقط عوارض جانبی ایجاد می کند.
*/
voidvaluePrint (برچسب رشته ، int خواندن) {
Serial.print (برچسب) ؛
Serial.print ("=")؛
Serial.print (خواندن) ؛
}
voidloop () {
// ببینید آیا داده های سریال ورودی وجود دارد:
if (Serial.available ()> 0) {
// قدیمی ترین بایت را در بافر سریال بخوانید:
// "هنگام تماس با Serial.read یک بایت از بافر دریافت حذف شده و به کد شما بازگردانده می شود"
incomingByte = Serial.read ()؛
// اگر H بزرگ است (ASCII 72) ، مقادیر را بخوانید و برای میزبان تمشک ارسال کنید.
// TODO: اطمینان حاصل کنید که پیام همیشه یکسان است
if (incomingByte == 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" ، mq135 خواندن) ؛
Serial.print ("\ n")؛
}
}
// سریال را فقط در هر ثانیه بخوانید
تاخیر (1000) ؛
}

مشاهده rawmain.cpp با ❤ توسط GitHub میزبانی شده است

مرحله 4: کد Raspberry Pi

اکنون که Raspberry Pi را طبق https://dzone.com/articles/raspberry-pi-iot-sensor… پیکربندی کرده اید ، اکنون می توانید کد Raspberry Client را اجرا کنید که داده ها را از طریق MQTT به پایگاه داده ما ارسال می کند ، که همچنین به گرافانا متصل می شود

  1. مطمئن شوید تمشک شما به اینترنت متصل است و سپس دستور git clone را برای کپی کردن کل کد در Raspberry Pi انجام دهید. دستور شما کمی شبیه به این خواهد بود:

    git clone

  2. در ترمینال رزبری پای ، دستور تغییر دایرکتوری (cd) را به "raspberry_client" انجام دهید:

    cd raspberry_client.

  3. شما باید از یک محیط مجازی استفاده کنید*. ساده. اجرا کن

    python3 -m venv envبه این یک محیط مجازی به نام "env" ایجاد می کند که ما از آن برای نصب وابستگی ها استفاده می کنیم.

  4. اکنون ، ما باید وارد محیط مجازی خود شویم. اجرا کن:

    منبع env/bin/activبه اکنون آماده نصب وابستگی های پروژه هستید.

  5. در بسته ای که به تازگی کلون کرده اید ، فایلی به نام Requires.txt وجود دارد. این فایل را باز کنید ؛ خواهید دید که ما به بسته های paho-mqtt و pyserial و همچنین نسخه های مربوطه آنها نیاز داریم. با اجرا می توانید محتویات فایل را مشاهده کنید

    گربه مورد نیاز. txtبه به منظور نصب این بسته ها ، ru

    pip install -r Requires.txt.

  6. این پیکربندی را کامل می کند.

به معنای واقعی کلمه ، هر آموزشی که از پایتون استفاده می کند اشاره ای به Virtual env می کند ، و حتی برای این پروژه کوچک ، من اشاره ای می کنم. محیط های مجازی به شما اجازه می دهند تا انواع وابستگی ها را جدا کرده و همچنین گردش کار پایتون خود را جدا کنید - این یک راه خوب برای مرتب سازی فضاهای کاری پایتون است. اگر برای اولین بار است که از محیط های مجازی استفاده می کنید ، در اینجا مختصری درباره آنها بخوانید.

کد چه کار می کند…

فایل client.py مجموعه ای ساده از کتابخانه ها از جمله arduinosensor خود را وارد می کند. در تابع اصلی ، مقادیر را از آردوینو دریافت می کنیم ، داده ها را به واسطه MQTT منتشر می کنیم و سپس 10 ثانیه می خوابیم.

فایل arduinosensor.py مجموعه ای از روش های کمکی است که در اطراف کتابخانه paho.mqtt پیچیده می شود و همچنین برخی از طرح های ارتباطی مفید برای برقراری ارتباط با بار آردوینو را ارائه می دهد (نگاه کنید به: parse_payload). البته کد در انتهای این قسمت ضمیمه شده است.

یک مشتری ساده که با یک آردوینو از طریق Serial Monitor ارتباط برقرار می کند. وقتی عمومی شد کد را در اینجا پیدا کنید:

fromimportlibimportimport_module
واردات
زمان واردات
importarduinosensor
defmain ():
# مشتری تعریف شده باز کنید
start_time = time.time ()
whileTrue:
خواندن = arduinosensor.get_values (os.environ.get ('PORT'، "/dev/ttyUSB0"))
arduinosensor.pub ("python_client" ، payload = خواندن)
time.sleep (10.0- ((time.time () -start_time)٪ 10.0))
if_name _ == "_ main_":
اصلی ()

مشاهده rawclient.py با ❤ توسط GitHub میزبانی شده است

مرحله 5: همه چیز را با هم ترکیب کنید

ما کد Raspberry Python را راه اندازی کرده ایم و کد مشتری Arduino را تنظیم کرده ایم. بیایید به اتصال هر دو موجودیت به یکدیگر ادامه دهیم.

ابتدا بیایید Arduino را متصل کرده و پیکربندی صحیح را تنظیم کنیم:

  1. در پایانه رزبری پای خود اجرا کنید

    python -m serial.tools.list_portsبه با این کار همه پورت های USB که از ارتباط سریال پشتیبانی می کنند لیست می شود.

  2. اکنون ، آردوینو خود را وصل کرده و حدود 2 ثانیه منتظر بمانید تا تمشک آن را تشخیص دهد. تایپ کردن

    python -m serial.tools.list_ports بار دیگر پورت ها را دوباره به شما نشان می دهد. ممکن است یک لیست اضافی را مشاهده کنید - اگر واقعاً چنین است ، این ورودی جدید ورودی است که Arduino شما به آن متصل است. این احتمالاً "/dev/ttyUSB0" خواهد بود.

  3. سعی کنید کد python را در محیط مجازی خود با اجرای python3.7 client.py اجرا کنید. چند ثانیه صبر کنید (حداکثر ده) - اگر با یک استثنا روبرو شدید ، این بدان معناست که ما باید مقدار را برای com port خود در تمشک pi تغییر دهیم. اگر می بینید که کد خطی را با "ارسال شده زیر بار:" ارسال می کند چاپ می کند ، سپس ، خوب است که با گرافانا به مرحله نهایی بروید. نکته: حتماً اجرا کنید

    صفحه نمایش -S پایتون قبل از اینکه کلاینت پایتون را راه اندازی کنید ، در غیر این صورت ، هنگامی که اتصال خود را به تمشک pi خاتمه می دهید ، برنامه پایتون در حال اجرا خود را از دست می دهید. از نظر فنی ، نیازی به استفاده دقیق از "پایتون" به عنوان آخرین پارامتر نیست ، اما من دوست دارم نام جلسات صفحه خود را بر این اساس نامگذاری کنم.

    1. برای تغییر مقدار درگاه COM ، قبل از اجرای کد ، باید یک متغیر محیطی تنظیم کنید. شما باید این را برای هر مقدار خروجی ممکن هنگام استفاده از python -m serial.tools.list_ports دریافت کنید. به عنوان مثال ، اگر مقدار ورودی هایی که به دست آوردم دو مورد باشد ، و موارد زیر باشد:

      • /dev/ttyUSB6
      • /dev/acm0

سپس دستوراتی که اجرا می کنم عبارتند از:

PORT = "/dev/ttyUSB6" python3.7 client.py، و اگر این کار نمی کرد ، من بعد از آن ru

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

پس از اتمام این مراحل ، کد داده ها را به نمونه پایگاه داده influxdb ما متصل می کند که وقتی به Grafana متصل شد ، به ما امکان می دهد داشبورد خود را مشاهده کنیم.

مرحله 6: پیکربندی Grafana و مشاهده داشبورد

پیکربندی Grafana و مشاهده داشبورد
پیکربندی Grafana و مشاهده داشبورد

خوب ، ما در آخرین مرحله هستیم! اکنون از Grafana برای ایجاد یک داشبورد ساده استفاده می کنیم.

  1. به نمونه Grafana خود متصل شوید. از آنجا که مراحل مقاله اصلی dzone را دنبال کرده اید ، باید بتوانید با کاربر سرپرست خود وارد سیستم شوید. جلو بروید و وارد شوید.
  2. در پنجره سمت چپ ، روی نماد "داشبورد" - چهار مربع قرار دهید. روی "مدیریت" کلیک کنید.
  3. در صفحه جدید ، روی "داشبورد جدید" کلیک کنید. علاوه بر این ، روی "افزودن پانل جدید" کلیک کنید.
  4. با این کار ویرایشگر Grafana باز می شود. ما یک نمای ساده ایجاد می کنیم که یک متریک واحد را نشان می دهد.

    1. در پنجره سمت راست ، عنوان پانل را به چیزی معنی دار تغییر دهید ، مانند "خواندن آشپزخانه". همچنین می توانید یک توضیح اختیاری وارد کنید.
    2. در پایین سمت چپ ، "Query" ، یک سری زمانی واحد اضافه می کنیم. Grafana واقعاً در اینجا می درخشد زیرا ما به راحتی می توانیم دستورات SQL را با رابط کاربری مبتنی بر کلیک ایجاد کنیم. در بخش "پیش فرض" ، InfluxDB را انتخاب کنید.
    3. اکنون ، برای خواندن "A" - در بند FROM ، اندازه گیری "airtestt" را انتخاب کنید. اگر به کد اصلی پایتون در تابع get_values در arduinosensor.py نگاه کنید ، می بینید که ما این جدول airtestt را درون کد تعریف می کنیم.
    4. برای نمونه ، به بخش "SELECT" بروید و فیلد (mq4) را انتخاب کنید. در ابتدا داشبورد ما گزینه "mean ()" را به ما می دهد - روی این گزینه کلیک کرده و "Remove" را انتخاب کنید. سپس ، روی علامت بعلاوه کلیک کرده و در بخش "Aggregations" ، "متمایز ()" را انتخاب کنید. این زمان های مشخصی را نشان می دهد. ما می توانیم معیارهای دیگری را انتخاب کنیم اما در حال حاضر ، صفحه ما خواندن متمایز mq4 را نشان می دهد.
    5. روی ذخیره در بالا سمت راست کلیک کنید ، کار تمام است!

در صورت بروز مشکل ، می توانید تنظیمات خود را با تنظیمات موجود در تصویر ضمیمه تأیید کنید.

مرحله 7: جمع بندی

بسته شدن
بسته شدن

در این آموزش شما توانستید یک شبکه قوی MQTT متشکل از یک گره و کارگزار واحد راه اندازی کنید. همچنین می توانید داده های IOT خود را با استفاده از Grafana تجسم کنید. در نهایت ، شما توانستید این معماری ساده سیستم را از (به امید خدا) راحت مرورگر و رایانه خود با استفاده از اتصال SSH ایجاد کنید.

برخی موارد وجود دارد که ما ممکن است بخواهیم آنها را بهبود بخشیم.

  • قرائت سنسور در نمودار ما در واقع قرائت دقیق سنسور نیست - آنها ولتاژ خروجی سنسور ما هستند. آنها باید کالیبره شوند ، برای اطلاعات بیشتر به این پست وبلاگ مراجعه کنید.
  • با استفاده از برد ESP8266 متصل به آردوینو و حذف کامل pi ، می توان پیکربندی تمشک pi را بسیار سبک تر کرد. ابتدا به ماژول ESP8266 مراجعه کنید.
  • ممکن است بخواهیم هشدارهایی را برای رویدادهای خاص اضافه کنیم. خوشبختانه گرافانا راهی برای انجام این کار ارائه می دهد.

برای خواندن تصورات شما با دنیای IOT ، مقداری مطالعه بیشتر خواهم گذاشت. بی صبرانه منتظر دیدار شما در آموزش بعدی هستم!

قرائت های بیشتر:

توصیه شده: