در یک پروژه 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 کار میکند.
۳. کارت حافظهی میکرو SD. کارتهای 4GB یا بزرگتر توصیه میشود (راهنمای انتخاب کارت حافظهی Micro SD مناسب برای رزبریپای).
۴. سیم وایر جامپر مادگی به مادگی. از این جامپرها برای ارتباط سنسور دما با بخش GPIO رزبریپای استفاده میکنیم (جستجوی گوگل)
۴. موس و کیبورد و مانیتور و کابل HDMI برای راهاندازی اولیه. این تجهیزات را برای پیکربندی اولیه رزبریپای استفاده میکنیم. پس از آن به صورت Headless و با SSH به برد متصل میشویم و دیگر به آنها نیاز نخواهیم داشت.
دانلود و ریختن Raspbian Image
به وبسایت رزبریپای بخش دانلود و سپس قسمت Raspbian میرویم. Raspbian Stretch Lite را دانلود میکنیم. در زمان نوشتن این راهنما آخرین نسخه 2018-04-18 با سایز 348MB است. تفاوت نسخهی Lite و نسخهی Desktop در این است که نسخهی Lite لینوکس بدون رابط کاربری گرافیکی است. این لینوکس سبکتر و سریعتر است و برای کاربرد سادهی IoT ما مناسبتر است. نسخهی Desktop برای کابردهای آموزشی و دانش آموزان و هنگامی که میخواهیم از رزبریپای به عنوان یک کامپیوتر مستقل استفاده کنیم مناسب است.
مطابق پروژههای قبلی با استفاده از Etcher فایل دانلود شده را روی حافظهی MicroSD میریزیم. با استفاده از Etcher نیازی به Unzip کردن فایل دانلودی نیست و Etcher هم کار را خودش انجام میدهد.
راهاندازی اولیه و پیکربندی رزبریپای
با استفاده از میکرواسدی آماده شده و اتصال کیبورد (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 گرفته است.
تنظیمات 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 را که در مرحلهی قبل بدست آوردیم وارد میکنیم.
با نام کاربر 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 است متصل میکنیم.
تصویر فوق توسط نرمافزار رایگان fritzing ترسیم شده است.
حال به مسیر مثالها رفته و برنامه AdafruitDHT.py را به صورت زیر اجرا میکنیم:
cd examples sudo ./AdafruitDHT.py 2302 4
اگر همه چیز به درستی انجام شده باشد، سنسور باید دما را مانند تصاویر زیر قرائت کرده و نمایش دهد:
اگر سنسور را در دست بگیرید، علاوه بر گرم شدن و بالا رفتن دمایی که نشان میدهد رطوبتی که نشان میدهد نیز افزایش مییابد. به این روش میتوانید سنسور را تست کنید.
عضویت در ThingSpeak و دریافت API و ذخیره دادهها در فضای ابری
برای تکمیل پروژه IoT با رزبری پای حال که دما به درستی قرائت شد آن را در فضای ابری ThingSpeak ذخیره میکنیم. همانطور که گفتیم ThingSpeak یک پلتفرم IoT تحت امتیاز شرکت MathWork است. این پلتفرم امکان آنالیز دادهها توسط نرمافزار MATLAB در فضای ابری را فراهم میکند. برای آشنایی با امکانات و خدمات ThnigSpeak مطالعهی راهنماهای آن بهترین نقطه برای شروع است.
دقت کنید از آنجایی که خدمات شرکت آمریکایی MathWork برای آیپی ایران محدودیتهایی دارد شاید لازم باشد برای عضویت از ابرازهای پراکسی استفاده کنید. برای ارسال داده و نمایش آن اما مشکلی وجود ندارد.
برای عضویت در ThingSpeak به این آدرس رفته مراحل عضویت را انجام دهید. پس از عضویت به بخش New Channel رفته کانال جدید میسازیم. مطابق شکل زیر برای آن Name انتخاب کرده و دو فیلد برای رطوبت و دما میسازیم. پس از آن در مرحلهی بعد API Key را کپی میکنیم. از این کلید برای ارتباط با کانالی که ساختیم و ارسال دادهها استفاه خواهیم کرد.
از برنامهی زیر برای خواندن مقادیر و ارسال به 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 آماده شده است استفاده کنید.
برای این کار در صفحهی نمایش داده، روی MATLAB Visualizations کلیک کنید و از بخش Examples: Sample code to visualize data به عنوان نمونه گزینهی Visualize correlation between temperature and humidity را انتخاب کرده و سپس Create را میزنیم. پس از آن به صفحهای میرویم که کدهای MATLAB مورد نیاز رانمایش میدهد. در این کدها باید API Read و شماره کانال به درستی تنظیم شده باشد. این اطلاعات در سمت راست صفحه نوشته شده است. نتیجه را در شکل زیر مشاهده میکنید. سه نمودار برای نمایش رطوبت، دما و همبستگی بین رطوبت و دما داریم:
با مراجعه به قسمت Apps میتوانید حتی کارهای جالبتری با دادهها انجام دهید. مثلا یک App بسازید که با رسیدن دما به یک مقدار خاص، توئیت بکند! یا در یک کانال دیگر مقداری را بنویسد و …
ایدههایی برای ادامهی پروژه IoT با رزبری پای
برای تکمیل کار چند پروژهی موجود در اینترنت بااستفاده از سنسورهای سری DHT را به شما پیشنهاد میکنم:
این پروژه از سنسور دما برای ساخت یک سیستم Anti-Icing استفاده کرده است.
این پروژه از سنسور دما برای کنترل یک فن USB استفاده میکند.
یا میتوانید مطابق این راهنما مقادیر خوانده شده را در Google Doc ذخیره کنید.
… و کلی پروژهی دیگر که با جستجوی گوگل میتوانید پیدا کنید.
سلام وقتتون بخیر من اگه خواسته باشم یک سایت خودم ایجاد کنم و سنسور قابل استفاده ام dht 11 باشد چگونه باید این مراحل را طی کنم ممنون.
سلام و وقت شما هم بخیر 🙂
شما دو تا راه داری، راه سادهتر اینه که تمام این مراحل رو بری و بعد از خروجیهای سایت thingspeak مثل نمودارها و غیره در وبسایت خودت استفاده کنی:
https://www.mathworks.com/help/thingspeak/channels-and-charts-api.html
راه سختتر اینه که دادهها رو به وبسایت خودت ارسال کنی و بعد هرجور خواستی ازش استفاده کنی. این راه مستلزم اینه که شما طراحی back-end برای دریافت اطلاعات و ذخیره سازی در پایگاه داده رو بدونی و همچنین نوعی front-end برای نمایش داده ها پیادهسازی کنی.
سلام مهندس خسته نباشید میشه لطفا همین پروژه رو با جاوا و با استفاده از اکلیپس کورا انجام بدید لطفا
سلام
من میخوام دستگاه خودم رو که esp8266 داره، به اینترنت وصل کنم و کنترلش کنم و به مرور تعداد دستگاه های متصل به اینترنت رو افزایش بدم. پلتفرم های مختلفی دیدم ولی نتونستم بینشون انتخاب کنم. شما کدوم پلتفرم رو پیشنهاد می کنید که علاوه بر رایگان بودن، امنیت داشته باشه و راه اندازی و استفاده ازش ساده باشه؟ و البته در ایران درگیر فیلتر شکن و غیره نباشه.
ممنون
سلام
اگر میخواهید به مرور به تجهیزات اضافه کنید پیشنهاد میکنم روی استفاده از یک بروکر لوکال مثلا روی یک رزبریپای فکر کنید و بدنبال ارسال تک تک تجهیزات مستقلا روی اینترنت نباشید. سپس اطلاعات (حتی کمی پیش پردازش شده) را توسط بروکر به فضای ابری بفرستید.
برای پلتفرم ها هم من با همین thingspeak مدت زیادی است کار کرده ام. dataplicity هم مخصوصا برای رزبریپای خیلی خوب است و freeboard.io هم خدمات خوبی ارائه میدهد.
سلام. وققتون بخیر. تشکر از پروژه ی عالی که گذاشتید. برای بنده بسیار مفید بود.
یه سوال دارم ازتون اگر بخواهیم همزمان هم داده جمع اوری کنیم و هم طبق اون یک فرمان به اکچویتور بدهیم که مثلا یک فن را روشن کند، نیاز به نوشتن اپلیکیشن مناسب هستیم. خواستم ببینم برای نوشتن اپلیکیشن آیا MIT app inventor مناسب هست؟ یا خیر؟
سلام پروژه ام انجام میدید .
یه پروژه دارم میخوام با برد رزبری پردازش تصاویر انجام بدم لگوهای رنگی رو در محیط پیدا کنه و توانایی تشخیص صورت انسان رو انجام بده . مثلا بتونه در محیط،یه دایره زرد یا یه مثلث ابی یا هر لگو به هر رنگی در حد سع رنگ و لگو رو تشخیص بده . و برای چهره ی انسان هم بتونه دور صورت انسان ی مربع ابی بزنه عین دوربین های موبایل