Funputer
پروژه IoT با رزبری پای

پروژه IoT با رزبری پای ذخیره و تحلیل دما و رطوبت در فضای ابری ThingSpeak

در یک پروژه IoT با رزبری پای با استفاده از سنسور دمای AM2301 دما و رطوبت محیط را اندازه می‌گیریم. سپس مقادیر را به فضای ابری ThinkSpeak‌ می‌فرستیم. ThingSpeak توسط شرکت MathWorks خریداری شده‌است که همه آنرا با نرم‌افزار همه‌کاره‌ی MATLAB می‌شناسیم. فضای ابری ThingSpeak به ما امکان می‌دهد دمای اندازه‌گیری شده را توسط نموداری‌های جذابی به صورت Real Time ببینیم. همچنین می‌توانیم از انواع آنالیز داده‌ای که MATLAB در اختیار ما قرار می‌دهد استفاده کرده و پروژه IoT با رزبری پای خود را تکمیل کنیم. ضمنا آماده باشید که در این پروژه کمی دست‌ها را به کدنویسی آلوده خواهیم کرد!

روش خیلی خیلی خلاصه

مثل همیشه با OS Image روی MicroSD شروع کرده، سپس رزبری‌پای را پیکربندی می‌کنیم. کتابخانه و برنامه‌های مورد نیاز پایتون را دانلود می‌کنیم. در سایت ThingSpeak ثبت نام کرده، برنامه‌ی پایتون را ویرایش کرده و اجرا می‌کنیم.

توضیح مفصل پروژه IoT با رزبری پای

ابتدا مروری داشته باشیم بر وسایل مورد نیاز:

۱. رزبری پای. برای این پروژه از هرکدام از بردهای‌ خانواده‌ی رزبری‌پای می توانید استفاه کنید. ما از یک رزبری‌پای ۳ مدل B که دم دست بود استفاده کردیم.

2. سنسور دمای AM2301. این سنسور دما را DHT21 نیز می‌نامند. با جستجوی گوگل فروش‌گاه‌های ایرانی زیادی برای این قطعه پیدا خواهید کرد. این سنسور دما را در بازه ۴۰- تا ۸۰+ درجه سانتی‌گراد با دقت ۰.۵ -/+ درجه اندازه‌گیری می‌کند. واسط ارتباطی آن نیز دیجیتال 1Wire است. در زیر تصویر سنسور AM2301 بهمراه ترتیب پین‌ها مشاهده می‌کنید. راهنمایی:‌ رنگ قرم و مشکی به ترتیب تغذیه و زمین هستند و رنگ زرد سیگنال است. AM2301‌ با تغذیه‌ی 3.3V تا 5.2V کار می‌کند.

پروژه IoT با رزبری پای سنسو دما AM2301

۳. کارت حافظه‌ی میکرو SD. کارتهای 4GB یا بزرگتر توصیه می‌شود (راهنمای انتخاب کارت حافظه‌ی Micro SD‌ مناسب برای رزبری‌پای).

۴. سیم وایر جامپر مادگی به مادگی. از این جامپرها برای ارتباط سنسور دما با بخش GPIO رزبری‌‌پای استفاده می‌کنیم (جستجوی گوگل)

جامپر وایر مادگی برای پروژه IoT با رزبری پای

 

۴. موس و کیبورد و مانیتور و کابل HDMI برای راه‌اندازی اولیه. این تجهیزات را برای پیکربندی اولیه رزبری‌پای استفاده می‌کنیم. پس از آن به صورت Headless و با SSH به برد متصل می‌شویم و دیگر به آن‌ها نیاز نخواهیم داشت.

دانلود و ریختن Raspbian Image

به وبسایت رزبری‌‌پای بخش دانلود و سپس قسمت Raspbian می‌رویم. Raspbian Stretch Lite را دانلود می‌کنیم. در زمان نوشتن این راهنما آخرین نسخه 2018-04-18 با سایز 348MB است. تفاوت نسخه‌ی Lite و نسخه‌ی Desktop در این است که نسخه‌ی Lite لینوکس بدون رابط کاربری گرافیکی است. این لینوکس سبکتر و سریع‌تر است و برای کاربرد ساده‌ی IoT‌ ما مناسبتر است. نسخه‌ی Desktop برای کابردهای آموزشی و دانش آموزان و هنگامی که می‌خواهیم از رزبری‌پای به عنوان یک کامپیوتر مستقل استفاده کنیم مناسب است.

مطابق پروژه‌های قبلی با استفاده از Etcher فایل دانلود شده را روی حافظه‌ی MicroSD‌ می‌ریزیم. با استفاده از Etcher نیازی به Unzip کردن فایل دانلودی نیست و Etcher هم کار را خودش انجام می‌دهد.

پروژه IoT با رزبری پای

راه‌اندازی اولیه و پیکربندی رزبری‌پای

با استفاده از میکرو‌اس‌دی آماده شده و اتصال کیبورد (USB) و مانیتور و تغذیه، رزبری‌پای را راه‌اندازی می‌کنیم. نام کاربری pi و رمز عبور raspberry است. در اولین کار پس از لاگین کردن رمز عبورد پیش‌فرض را عوض می‌کنیم. برای اینکار دستور زیر را زده و ابتدا رمز فعلی و سپس دو بار رمز جدید را می‌زنیم. از آنجایی که تجهیز ما به اینترنت متصل خواهد شد حتما ضروری است که نکات Cyber Security را از گام اول رعایت کنیم.

passwd

سپس با اجرا کردن دستور زیر بخش تنظیمات رزبری‌پای می‌رویم.

sudo raspi-config

در بخش تنظیمات ابتدا اطلاعات ارتباط وایرلس Wifi را وارد می‌کنیم. برای این کار به مسیر زیر می‌رویم و ابتدا SSID و سپس Passkey را وارد می‌کنیم.

2 Network Options -> N2 Wi-Fi

سپس مطابق مسیر زیر SSH را نیز فعال می‌کنیم.

5 Interfacing Options -> P2 SSH

پس از اجرای دستورات فوق از بخش تنظیمات خارج شده به ترمینال باز می‌گردیم. با زدن دستور ifconfig تنظیمات شبکه را چک می‌کنیم تا مطمئن شویم مطابق شکل زیر ارتباط WiFi برقرار شده و رزبری‌پای IP ‌گرفته است.

IP Wifi رزبری پاس

تنظیمات Wi-Fi‌ را که وارد کرده‌ایم با اجرای دستور زیر می‌توانیم مشاهده کنیم.

cat /etc/wpa_supplicant/wpa_supplicant.conf  

اگر اطلاعات درست نیست با اجرای دستور زیر وارد ویرایشگر nano شده و اطلاعات درست را وارد کنید. برای خروج ctrl + x را می‌زنیم. برای ذخیره شدن اطلاعات y و در غیر این صورت n را می‌زنیم.

 sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

حال دیگر نیازی به موس و کیبورد و مانیتور نداشته و می‌توانیم به صورت Headless از طریق SSH با رزبری‌پای در ارتباط باشیم.

برای ارتباط SSH از نرم‌افزار putty در محیط ویندوز استفاده می‌کنیم. این نرم‌افزار سبک را از اینجا دانلود کنید. پس از نصب و اجرا SSH را انتخاب کرده و IP را که در مرحله‌ی قبل بدست آوردیم وارد می‌کنیم.

پروژه IoT با رزبری پای ارتباط SSH با Putty

با نام کاربر pi و رمز عبوری که قبلا تنظیم کرده‌ایم وارد می‌شویم. حال که تنظیمات اولیه انجام شده است به سراغ راه‌اندازی کتابخانه پایتون برای ارتباط با سنسور AM2301(DHT21) می‌رویم.

راه‌اندازی کتابخانه پایتون و ارتباط با سنسور AM2301

برای ارتباط با سنسور دما از کتابخانه‌ی پایتون Adafruit_Python_DHT استفاده می‌کنیم. برای استفاده از این کتابخانه لازم است که git و برخی کتابخانه‌های Python را نصب کنیم:

sudo apt-get update
sudo apt-get install git-core build-essential python-dev

سپس کتابخانه را توسط git گرفته و نصب می‌کنیم:

git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
sudo python setup.py install

اگر خطایی دریافت نکنیم آماده‌ایم که سنسور را متصل کرده و دما و رطوبت را قرائت کنیم. سنسور را مطابق شکل زیر به پین‌های GPIO متصل می‌کنیم. پین سیگنال را به پایه‌ی 7 از کانکتور که برابر با GPIO04 است متصل می‌کنیم.

پروژه IoT با رزبری پای

تصویر فوق توسط نرم‌افزار رایگان fritzing ترسیم شده است.

حال به مسیر مثال‌ها رفته و برنامه AdafruitDHT.py را به صورت زیر اجرا می‌کنیم:

cd examples
sudo ./AdafruitDHT.py 2302 4

اگر همه چیز به درستی انجام شده باشد، سنسور باید دما را مانند تصاویر زیر قرائت کرده و نمایش دهد:

نتیجه خواندن دما سنسور AM2301 با استفاده از پایتون

اگر سنسور را در دست بگیرید، علاوه بر گرم شدن و بالا رفتن دمایی که نشان می‌دهد رطوبتی که نشان می‌دهد نیز افزایش می‌یابد. به این روش می‌توانید سنسور را تست کنید.

عضویت در ThingSpeak و دریافت API و ذخیره داده‌ها در فضای ابری

برای تکمیل پروژه IoT با رزبری پای حال که دما به درستی قرائت شد آن را در فضای ابری ThingSpeak ذخیره می‌کنیم. همانطور که گفتیم ThingSPeak یک پلتفرم IoT تحت امتیاز شرکت MathWork است. این پلتفرم امکان آنالیز داده‌ها توسط نرم‌افزار MATLAB در فضای ابری را فراهم می‌کند. برای آشنایی با امکانات و خدمات ThnigSpeak مطالعه‌ی راهنماهای آن بهترین نقطه برای شروع است.

دقت کنید از آنجایی که خدمات شرکت آمریکایی MathWork برای آی‌پی ایران محدودیت‌هایی دارد شاید لازم باشد برای عضویت از ابرازهای پراکسی استفاده کنید. برای ارسال داده و نمایش آن اما مشکلی وجود ندارد.

دیاگرام ThingSpeak

برای عضویت در ThinkSpeag به این آدرس رفته مراحل عضویت را انجام دهید. پس از عضویت به بخش New Channel رفته کانال جدید می‌سازیم. مطابق شکل زیر برای آن Name انتخاب کرده و دو فیلد برای رطوبت و دما می‌سازیم. پس از آن در مرحله‌ی بعد API Key را کپی می‌کنیم. از این کلید برای ارتباط با کانالی که ساختیم و ارسال داده‌ها استفاه خواهیم کرد.

درست کردن کانال جدید و تنظیمات در ThingSpeak

از برنامه‌ی زیر برای خواندن مقادیر و ارسال به ThingSpeak استفاده می‌کنیم. در این برنامه YOUR_API_CODE در خط  13 را با کد API خود جایگزین کنید. همچنین زمان نمونه برداری به ثانیه در خط 27 تنظیم می‌شود. حداقل این زمان  قابل قبول برای ارسال داده در ThingSpeak برای هر کانال 20 ثانیه است.

"""
AM2301.py
Temperature/Humidity monitor using Raspberry Pi and AM2301(DHT21).
Data is displayed at thingspeak.com
Original author: Mahesh Venkitachalam at electronut.in
Modified by Funputer on April 19, 2018
"""
import sys
import RPi.GPIO as GPIO
from time import sleep
import Adafruit_DHT
import urllib2
myAPI = "YOUR_API_CODE"
def getSensorData():
   RH, T = Adafruit_DHT.read_retry(Adafruit_DHT.AM2302, 4)
   return (str(RH), str(T))
def main():
   print 'starting...'
   baseURL = 'https://api.thingspeak.com/update?api_key=%s' % myAPI
   while True:
       try:
           RH, T = getSensorData()
           f = urllib2.urlopen(baseURL +
                               "&field1=%s&field2=%s" % (RH, T))
           print RH, T, f.read()
           f.close()
           sleep(60) #uploads AM2301 sensor values every 60 seconds.
       except:
           print 'exiting.'
           break
# call main
if __name__ == '__main__':
   main()

برنامه را در فایلی به نام AM2103_ThingSpeak.py کپی کرده و اجرا می‌کنیم. برای Paste کردن برنامه در محیط ترمینال SSH از کلیک راست موس استفاده کنید. این فایل را در گیت‌هاب این پروه در مخزن Funputer نیز می‌توانید پیدا کنید. نتیجه‌ی اجرای برنامه را در شکل زیر مشاهده می‌کنید. مقادیری که پرینت می‌شود به ترتیب رطوبت، دما و شماره رکورد ذخیره شده است که ThingSpeak به ما باز می‌گرداند.

نتیجه ارسال دما و رطوبت به ThingSpeak

برای استفاده از قابلیت‌های تحلیل و نمایش اطلاعات، می‌توانیداز قالب‌های آماده‌ای که توسط ThingSpeak آماده شده است استفاده کنید.

برای این کار در صفحه‌ی نمایش داده، روی MATLAB Visualizations کلیک کنید و از بخش  Examples: Sample code to visualize data به عنوان نمونه گزینه‌ی Visualize correlation between temperature and humidity را انتخاب کرده و سپس Create را می‌زنیم. پس از آن به صفحه‌ای می‌رویم که کدهای MATLAB مورد نیاز رانمایش می‌دهد. در این کدها باید API Read و شماره کانال به درستی تنظیم شده باشد. این اطلاعات در سمت راست صفحه نوشته شده است. نتیجه را در شکل زیر مشاهده می‌کنید. سه نمودار برای نمایش رطوبت، دما و همبستگی بین رطوبت و دما داریم:

پروژه IoT با رزبری پای نمودار نتایج

با مراجعه به قسمت Apps می‌توانید حتی کارهای جالبتری با داده‌ها انجام دهید. مثلا یک App بسازید که با رسیدن دما به یک مقدار خاص، توئیت بکند! یا در یک کانال دیگر مقداری را بنویسد و …

ایده‌هایی برای ادامه‌ی پروژه IoT با رزبری پای

برای تکمیل کار چند پروژه‌ی موجود در اینترنت بااستفاده از سنسورهای سری DHT را به شما پیشنهاد می‌کنم:

این پروژه از سنسور دما برای ساخت یک سیستم Anti-Icing استفاده کرده است.

این پروژه از سنسور دما برای کنترل یک فن USB استفاده می‌کند.

یا می‌توانید مطابق این راهنما مقادیر خوانده شده را در Google Doc ذخیره کنید.

… و کلی پروژه‌ی دیگر که با جستجوی گوگل می‌توانید پیدا کنید.

 

آیا این مطلب مفید بود؟

admin

حامد، مدیر فانپیوتر، مهندس برق و حدودا 10 سال فعال در زمینه‌ی سیستم‌های نهفته و بردهای کامپیوتری تک برد هستم. در این وبسایت پروژه‌ها و مطالب مرتبط با کامپیوترهای تک برد را با شما به اشتراک می‌گذارم. اگر سوال، راهنمایی یا هرتوصیه و اندرزی دارید از طریق بخش تماس یا کامنت‌ها دریغ نکنید :)

نظر دهید

دنبال کنید