آموزش اینترنت اشیاآموزش رزبری پایپروژه رزبری پایپروژه های اینترنت اشیا

ارسال داده های سنسور به اینترنت با رزبری پای

ما شاهد طلوع عصر جدیدی در محاسبات و نحوه ارتباط در اینترنت هستیم. اشیاء اکنون اشیا و وسایل می توانند به طور منحصر به فرد شناسایی شوند و اطلاعات را دریافت یا به اینترنت ارسال کنند.

در این مقاله، نحوه ارسال مقادیر سنسور رطوبت و دما DHT22 را با استفاده از Raspberry Pi به اینترنت خواهیم آموخت. ما یک پروژه می سازیم و دو روش مختلف برای ارسال داده های حسگر به اینترنت یا ابر (Cloud) با Raspberry Pi با استفاده از پلتفرم ابری ThingSpeak نشان می دهیم.

THINGSPEAK چیست؟

ThingSpeak یک پلت فرم اینترنت اشیا در فضای ابری است که با استفاده از کلیدهای API خدمات جمع آوری داده های حسگر، انتقال، پردازش، تجسم و تجزیه و تحلیل را در فضای ابری ارائه می دهد.این پلتفرم این خدمات را در زمان واقعی ارائه می دهد، به این معنی که کاربران می توانند پروژه های خود را برای نظارت و کنترل برنامه ها در زمان واقعی (در لحظه) اجرا کنند. زمینه های کاربردی بالقوه برای نظارت و کنترل حسگر ها با ThingSpeak عبارتند از:

  • پایش کیفیت هوا
  • پایش انرژی
  • کشاورزی هوشمند
  • نظارت بر ترافیک
  • ایستگاه هواشناسی

به دلیل ویژگی صرفه جویی در هزینه و قابلیت اطمینان چنین پلتفرم هایی، تعدادی از شرکت های بزرگ اینترنت اشیا ترجیح می دهند خدمات ارائه شده توسط ارائه دهندگان پلتفرم اینترنت اشیا مانند ThingSpeak را خریداری کنند. یعنی در حقیقت برخی شرکت ها هم همانند شما (یعنی مهندسین و علاقمندان اینترنت اشیا) از پلتفرم های آماده استفاده میکنند. زیرا ساخت سرور و پلتفرم شخصی هزینه و وقت بالایی میخواهد.

THINGSPEAK و داده های سنسور

دو روش برای ذخیره خوانش حسگرها در ThingSpeak وجود دارد: در یک کانال عمومی یا یک کانال خصوصی. یک کانال از هشت فیلد برای ذخیره سازی داده ها، سه فیلد برای ثبت موقعیت ژئوفیزیکی و یک فیلد وضعیت تشکیل شده است. برای دسترسی به این خدمات، کاربر باید وارد سیستم شود. ادغام با MATLAB دسترسی کاربران را به ابزارهای تجزیه و تحلیل داده های تجسم و حسگر غنی تضمین می کند. این پلتفرم داده‌های حسگر خام را می‌پذیرد و کاربران از معادلات و الگوریتم‌ها برای تبدیل آن داده‌ها به شکل قابل استفاده، استفاده می‌کنند. انجام هر گونه پردازش داده در فضای ابری به دلایل مختلفی سودمند است:

  1. اکثر پروژه های اینترنت اشیا با باتری کار می کنند، بنابراین پردازش داده ها برای مصرف کمتر انرژی باید در فضای ابری انجام شود
  2. پردازش داده ها ممکن است میکروکنترلرها را کُند کند.
  3. این کار زمان خواب میکروکنترلر را افزایش میدهد.

اتصال رزبری پای به THINGSPEAK

Raspberry Pi برای اتصال به ThingSpeak به اتصال اینترنتی نیاز دارد. در اینجا چند روش برای انجام این کار وجود دارد:

  1. اتصال اترنت سیمی
  2. آداپتور USB WiFi
  3. ماژول وای فای ESP266

در این آموزش، ما دو روش برای اتصال Raspberry Pi به ThingSpeak را نشان خواهیم داد. ابتدا یک اتصال اترنت سیمی و سپس روش ESP8266 را نشان خواهیم داد. ما استفاده از ماژول WiFi ESP8266 را در خیلی پروژه ها ترجیح میدهیم زیرا میتوانیم آن را به اینترنت موبایل خود وصل کنیم. اما اتصال سیمی نیاز به دسترسی به سخت افزار شبکه دارد.

اتصال به THINGSPEAK از طریق اترنت

روش اول از اتصال اترنت سیمی استفاده می کند. در این حالت، ما از یک کابل LAN برای اتصال Raspberry Pi به اینترنت استفاده می کنیم. سپس، یک اسکریپت پایتون می نویسیم که درخواست های HTTP را برای دسترسی و بازیابی داده ها از اینترنت می دهد. چندین کتابخانه وجود دارد که می توانیم از آنها برای باز کردن URL ها استفاده کنیم. در این آموزش قصد داریم از کتابخانه urllib2 برای ارسال داده ها به ThingSpeak استفاده کنیم. در اینجا نمونه ای از ارسال مقادیر حسگر به ThingSpeak آورده شده است.

import sys
import Adafruit_DHT as dht
import urllib2

myAPI = 'IUKV2ZRBQW9MV407Q' 
ThingsURL = 'https://api.thingspeak.com/update?api_key=%s' % myAPI 

def DHT22_data():
	humidity, temperature = dht.read_retry(dht.DHT22, 23) 
	return humi, temp

humidity, temp = DHT22_data()
if isinstance(humidity, float) and isinstance(temp, float):
	humi = '%.2f' % humidity 					   
	temp = '%.2f' % temp
			
	coms = urllib2.urlopen(ThingsURL + '&field1=%s&field2=%s' % (temp, humi))
	print coms.read()
	coms.close()
else:
	print 'Error'

توضیح کد ها:

  • import sys, import Adafruit_DHT as dht, import urllib2 وارد کردن ماژول های پایتون برای کار کردن صحیح پروژه ها
  • 'https://api.thingspeak.com/update?api_key=%s' % myAPI این اولین قسمت از URL است که باید با آن داده ها را پست کنیم. قالب URL در بخش ارسال داده های حسگر به ThingSpeak به طور کامل مورد بحث قرار خواهد گرفت.
  • def DHT22_data() تابع ما برای خواندن داده های حسگر و محاسبه مقادیر دما و رطوبت است.
  • coms = urllib2.urlopen(ThingsURL + '&field1=%s&field2=%s' % (temp, humi)) بخش دوم URL که شامل نام فیلد و مقادیر حسگر مربوطه است.

اتصال به THINGSPEAK از طریق وای فای

روش دومی که نشان خواهیم داد از ماژول WiFi ESP8622 استفاده می کند. اما قبل از اینکه شروع به نوشتن کد برای اتصال Raspberry Pi خود به ThingSpeak از طریق ماژول ESP8622 کنیم، همیشه بهترین روش آزمایش سیستم در سطح واحد است. برای Raspberry Pi، باید مطمئن شویم که پورت UART قادر به ارسال و دریافت اطلاعات است. سپس برای ESP8266 ما باید مطمئن شویم که ماژول به دستورات AT ما به درستی پاسخ می دهد. سرانجام، ما باید آزمایش کنیم که آیا سنسور DHT22 پارامترها را به درستی اندازه گیری می کند یا خیر. وقتی این آزمون را پشت سر گذاشتیم، می‌دانیم که همه چیز به درستی عمل میکند و میتوانیم ارسال اطلاعات به اینترنت را آغاز کنیم.

پایه های ارتباط UART در رزبری پای

شکل زیر نموداری از پین های GPIO رزبری پای است. از طریق ارتباط UART دستگاه های دیگر را با رزبری پای ارتباط میدهیم.

پین های رزبری پای GPIO

در تصویر مشاهده میکنیم که پایه ارسال داده ها GPIO 14 یا همان 8 است. همچنین پایه دریافت اطلاعات پین GPIO 15 یا همان 10 است. برای اتصال به ماژول ESP8622 سیم ها را به این دو پایه وصل می کنیم. ‘TXD’ رزبری پای به ‘RDX’ ماژول WiFi و بالعکس. یکی از اتصالات مهم در اینجا، پیوند بین زمین رزبری پای به زمین ماژول ESP است. این کار برای اطمینان داشتن از عملکرد صحیح ارتباط بین دو طرف است.

فعال کردن پورت سریال Raspberry PI

به طور پیش فرض، کنسول لینوکس Raspberry Pi از پورت UART اولیه استفاده می کند. برای اینکه بتوانیم از آن برای اتصال دستگاه های سریال دیگر استفاده کنیم، باید سیستم عامل رزبری پای را دوباره پیکربندی کنیم. در اینجا مراحل انجام آن وجود دارد:

  • در پنجره ترمینال، ابزار پیکربندی Raspberry Pi را با تایپ دستور مقابل راه اندازی کنید: sudo raspi-config. این دستور شما را به یک منو با گزینه های مختلف می برد.
  • گزینه 5 را برای interfacing options انتخاب کنید.
  • برای تنظیمات سریال گزینه 6 را انتخاب کنید.
  • هنگامی که از شما پرسیده می شود: Would you like a login shell to be accessible over serial گزینه NO را انتخاب کنید.
  • دوباره، وقتی از شما پرسیده می شود: Would you like the serial port hardware to be enabled? گزینه YES را انتخاب کنید.
  • finish را انتخاب کرده و Raspberry Pi را ریستارت کنید.

استفاده از پایتون برای کنترل GPIO

بعد از پیکربندی سخت افزار UART، قدم بعدی استفاده از یک زبان برنامه نویسی برای ارتباط سریال است. سیستم عامل Raspberry Pi از زبان های برنامه نویسی مختلف پشتیبانی می کند، اما برای سهولت استفاده، ما از Python برای ارتباط سریال استفاده خواهیم کرد. شما باید بسته های مورد نیاز را دانلود و نصب کنید. برای راهنمایی در مورد نصب پایتون می توانید به دوره رزبری پای مراجعه کنید. کد زیر دستورات “AT” را به ماژول ESP WiFi ارسال می کند. اگر ماژول به درستی پیکربندی شده باشد، ماژول با “OK” پاسخ می دهد.

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید
import serial
import time
port = serial.Serial("/dev/ttyAMA0", baudrate=115200, timeout=3.0)
def ReadLine(port): 
	read_string = "" 
	read_string = port.read(1000) 
	return read_string

ModuleConnected=True;
while ModuleConnected: 
	port.write("AT\r\n")
	inData=ReadLine(port)
	print(inData)
	if "OK" not in inData :
		print("Module not found.")
		time.sleep(20)
	else :
		print("Device connected.")
		isConnected=False

توضیح کد ها:

  • import serial و import time دو ماژول اصلی پایتون که در این برنامه به ترتیب برای ارتباط سریال و توابع مرتبط با زمان نیاز داریم.
  • port = serial.Serial("/dev/ttyAMA0", baudrate=115200, timeout=3.0) برای مقداردهی اولیه پورت سریال (ttyAMA0) با نرخ باود 115200 استفاده میشود.
  • ModuleConnected=True; برای بررسی پاسخ معتبر از ماژول است. این امر ضروری است زیرا در مواقعی، ماژول با پیام “ERROR” پاسخ می دهد، بنابراین مهم است که وضعیت ماژول WiFi را بررسی کنید.
  • port.write("AT\r\n") این دستوری است که پایتون برای ارسال دستورات به ماژول استفاده می کند. توجه داشته باشید که کاراکتر مهمی که باید گنجانده شود \r است. این معادل فشار دادن enter است.
  • inData=ReadLine(port) و print(inData) دو تابع هستند که از آنها برای خواندن داده ها از پورت سریال و نمایش آن داده ها در ترمینال خود استفاده می کنیم.
  • در نهایت، if "OK" not in inData تابعی است که برای کنترل خطا استفاده می کنیم. اساساً، این خط کد بررسی می کند که آیا ESP WiFi با “OK” پاسخ داده است یا خیر. اگر خطایی رخ داده باشد، دستور AT را مجددا ارسال می کنیم تا زمانی که پاسخ صحیح را دریافت کنیم.

اگر همه چیز طبق برنامه پیش رفته باشد، باید یک خروجی مانند آنچه در نمودار زیر نشان داده شده است به دست آوریم. در اینجا، ما از برنامه ترمینال Putty روی لپ‌تاپ استفاده می‌کنیم تا از طریق کابل اترنت به رزبری پای خود متصل شویم. ما کد خود را در فایلی به نام esp_rasp_test.py ذخیره می کنیم و سپس آن برنامه را با استفاده از دستور sudo python esp_rasp_test.py اجرا می کنیم.

تست اتصال سریال بین Raspberry Pi و ماژول WiFi

تست اندازه گیری دما و رطوبت DHT22

تست مهم دیگری که باید انجام دهیم، بررسی عملکرد سنسور دما و رطوبت DHT22 است. ما از پایتون برای خواندن داده‌ها از حسگر استفاده می‌کنیم و مقادیر مربوطه را در ترمینال چاپ می‌کنیم. برای این کار از کد زیر استفاده می کنیم:

import Adafruit_DHT
DHT_SENSOR = Adafruit_DHT.DHT22
DHT_PIN = 4

while True:
	humidity, temperature = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN)

	if humidity is not None and temperature is not None:
		print("Temp={0:0.1f}*C Humidity={1:0.1f}%".format(temperature, humidity))
	else:
		print("Failed to read from sensor")

توضیح کد ها:

  • import Adafruit_DHT در اینجا، کتابخانه سنسور DHT22 را از Adafruit وارد می کنیم و پایه 4 را به آن اختصاص می دهیم تا خروجی سنسور را بخواند.
  • humidity, temperature = Adafruit_DHT.read_retry(DHT_SENSOR,DHT_PIN) تابعی که برای تجزیه رطوبت و دما از سنسور استفاده می کنیم.
  • print("Temp={0:0.1f}*C Humidity={1:0.1f}%".format(temperature, humidity)) در نهایت، مقادیر حسگر حاصل را در ترمینال خود نمایش می دهیم.

اگر اتصال موفقیت آمیز بود، باید بتوانیم خروجی زیر را در ترمینال خود دریافت کنیم.

اتصال dht22 به رزبری پای

ارسال داده‌های حسگر به THINGSPEAK

برای ارسال داده‌های حسگر به کانال ThingSpeak، ابتدا باید کلید API کانال را بدست آوریم. سپس برای نوشتن به مقادیر سنسور نیاز خواهیم داشت. برای این آموزش، ما دو متغیر سنسور داریم: دما و رطوبت. بنابراین باید دو فیلد داشته باشیم: field1 و field2. این اطلاعات را در یک URL با فرمت زیر ارسال میکنیم: https://api.thingspeak.com/update?api_key=drminls2dn88g1ez&field1=4&field2=4. توضیحات URL در نمودار زیر نشان داده شده است:

پیکربندی URL ارسال داده ها به thingspeak

دو روش برای ترسیم نمودار داده های حسگر در ThingSpeak وجود دارد. روش اول شامل نوشتن کد سفارشی خودمان است که داده‌های ما را در نمودارهای متلب نمایش می‌دهد. برای روش دوم، نموداری را که می‌خواهیم استفاده کنیم از میان مجموعه‌ای از قالب‌های پیشفرض انتخاب می‌کنیم. برخی از نمودار ها در زیر ذکر شدند:

  • طرح خطی دو بعدی
  • نمودار داده های همبسته
  • نمودار خط دوبعدی با دو محور y
  • نمودار داده توالی گسسته
  • هیستوگرام
  • طرح قطب نما
  • قطعه مساحت

با این حال، مهم نیست که از کدام روش برای ترسیم نمودار داده های حسگر خود استفاده می کنیم. این دو روش حداقل به سه پارامتر مهم نیاز دارند: شناسه کانال، شناسه فیلد و کلید Read API. ما تابعی می نویسیم که داده ها را از کانال ما با استفاده از کلید Read API ما می خواند. در نهایت اطلاعات را از شناسه فیلد انتخابی نمایش می دهیم. سپس نشان خواهیم داد که چگونه از یک الگوی داخلی برای ترسیم نمودار داده های حسگر خود استفاده کنیم.

برای دسترسی به نمودارهای داخلی ThingSpeak، ابتدا بر روی دکمه MATLAB Visualization کلیک می کنیم. این ما را به پنجره دیگری می برد که در آنجا نوع نمودار مورد نظر خود را انتخاب می کنیم. بنابراین، ما یک طرح خط دو بعدی با محورهای y در هر دو سمت چپ و راست ایجاد می کنیم. این یک روش معمول است که این پارامترها را در یک نمودار تجسم کنیم به طوری که بتوانیم تغییرات آنها را به عنوان تابعی از زمان یادداشت کنیم. بر روی دکمه Create کلیک کنید و سپس کد متلب را با جزئیات کانال خود ویرایش کنید.

کد متلب برای رسم خط دو بعدی

در زیر کد MATLAB را میتوانید مشاهده کنید.

readChannelID = [];
fieldID1 = [];
fieldID2 = [];

readAPIKey = '';

[data1, time1] = thingSpeakRead(readChannelID, 'Field', fieldID1, 'NumPoints', 30, 'ReadKey', readAPIKey);
[data2, time2] = thingSpeakRead(readChannelID, 'Field', fieldID2, 'NumPoints', 30, 'ReadKey', readAPIKey);

yyaxis left;
plot(time1, data1)

yyaxis right;
plot(time2, data2);

اکنون تنها کاری که باید انجام دهید این است که اطلاعات را با اطلاعات کانال خود جایگزین کنید.

 readChannelID = []; fieldID1 = []; fieldID2 = []; readAPIKey = '';

برای کانال من، کد کامل به شکل زیر خواهد بود:

readChannelID = 1100284;
fieldID1 = 1;
fieldID2 = 2;

readAPIKey = 'BYW21LCLBF2UAF5SA';

[data1, time1] = thingSpeakRead(readChannelID, 'Field', fieldID1, 'NumPoints', 30, 'ReadKey', readAPIKey);
[data2, time2] = thingSpeakRead(readChannelID, 'Field', fieldID2, 'NumPoints', 30, 'ReadKey', readAPIKey);

yyaxis left;
plot(time1, data1)

yyaxis right;
plot(time2, data2);

تنظیم محدودیت های آستانه

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

  1. از داشبورد ThingSpeak خود، روی «my account» کلیک کنید و سپس صفحه را به پایین اسکرول کنید و کلید Alerts API را کپی کنید.
  2. سپس به داشبورد کانال خود بازگردید و «matlab analysis» را انتخاب کنید. آنالیز متلب در اینترنت اشیا
  3. گزینه Custom (بدون کد شروع) را انتخاب کنید و روی create کلیک کنید. در صفحه بعد خطوط کد زیر را قرار دهید. در نهایت از Alert API Key که در بالا به دست آورده اید استفاده کنید.
    alert_body = 'Humidity too high, regulate the temperature...';alert_subject = 'Room humidity';alert_api_key = 'TAK5NZV7NM4NU27B1FXG';alert_url= "https://api.thingspeak.com/alerts/send";jsonmessage = sprintf(['{"subject": "%s", "body": "%s"}'], alert_subject,alert_body);options = weboptions("HeaderFields", {'Thingspeak-Alerts-API-Key', alert_api_key; 'Content-Type','application/json'});result = webwrite(alert_url, jsonmessage, options);
  4. در نهایت یک React ایجاد می کنیم که به تحلیل ایجاد شده در بالا متصل می شود. برای انجام این کار، روی Apps کلیک کنید، سپس React را انتخاب کنید.

ری اکت ها در آنالیز اینترنت اشیا رزبری پای

اگر همه چیز به درستی تنظیم شده باشد، زمانی که رطوبت از یک آستانه خاص فراتر رفت، باید ایمیلی دریافت کنیم.

تنظیم هشدار ها در اینترنت اشیا

نمونه پروژه ارسال داده های رزبری پای به اینترنت

برای پروژه نمونه، ما سنسور DHT22 را به Raspberry Pi متصل می کنیم و مقادیر دما و رطوبت را هر 15 دقیقه در ThingSpeak بارگذاری می کنیم. ما یک نمودار دو بعدی برای مقادیر سنسور (رطوبت و دما در مقابل زمان) ایجاد میکنیم. زمانی که دما از حدی بالا تر برود یک ایمیل هشدار دریافت میکنیم.

اتصالات پروژه اینترنت اشیا ارسال داده های سنسور

قطعات مورد نیاز

  • رزبری پای
  • کابل اترنت
  • سنسور دما و رطوبت DHT22
  • ماژول وای فای ESP8266
  • ماژول تغذیه برد بورد
  • سیم های جامپر
  • برد بورد
  • مقاومت 10k
قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

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

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

وقتی ماژول ESP8266 خود را به Raspberry Pi متصل می کنیم، نیازی به تبدیل سطوح منطقی نیست زیرا تمام پورت های سریال دستگاه ها (رزبری پای و ماژول وای فای) در سطح منطقی 3.3v کار می کنند. سنسور DHT به 5 ولت و سپس پین رزبری پای Tx به پایه Rx ماژول وای فای و بالعکس متصل می شود. سپس پین سیگنال سنسور DHT22 را به پین 4 برد رزبری پای وصل می کنیم.

کد زیر از ماژول WiFi ESP8266 برای اتصال Raspberry Pi به ThingSpeak استفاده می کند.

import serial
from time import *
import datetime, string
import Adafruit_DHT

Host = "api.thingspeak.com"
Port = "80"
API="IUKIV2ZREByERH7V47Q"
field1 = "field1"
field2 = "field2"

DHT_SENSOR = Adafruit_DHT.DHT22
DHT_PIN = 4

port = serial.Serial("/dev/ttyAMA0", baudrate=115200, timeout=3.0)
def readlineCR(port): 
	rv = "" 
	rv = port.read(1000) 
	return rv
	
# ----------------------------------------
def wifiCommand( sCmd, waitTm=1, sTerm='OK' ):
	lp = 0
	ret = ""

	print	
	print "Cmd: %s" % sCmd
	port.flushInput()
	port.write( sCmd + "\r\n" )
	ret = port.readline()	
	sleep( 0.2 )
	while( lp < waitTm ): while( port.inWaiting() ): ret = port.readline().strip( "\r\n" ) print ret lp = 0 if( ret == sTerm ): break if( ret == 'ERROR' ): break sleep( 1 ) lp += 1 return ret # ------------------------------------------ isConnected=True; while isConnected: port.write("AT\r\n") returnedData=readlineCR(port) print(returnedData) if "OK" not in returnedData : time.sleep(20) else : isConnected=False port.write("AT+CWMODE=1\r\n") returnedData=readlineCR(port) print(returnedData) port.write("AT+CWJAP=\"AndroidAP_7822\",\"485088c2825f\"\r\n") returnedData=readlineCR(port) print(returnedData) humidity, temperature = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN) if humidity is not None and temperature is not None: print("Temp={0:0.1f}*C Humidity={1:0.1f}%".format(temperature, humidity)) else : print("Failed to retrieve data from humidity sensor") port.write("AT+CIPMUX=1\r\n") returnedData=readlineCR(port) print(returnedData) wifiCommand("AT+CIPSTART=0,\"TCP\",\""+ Host+"\","+Port,15,"OK") returnedData=readlineCR(port) print(returnedData) cmd="Get /update?api_key="+API+"&"+field1+"="+str(20)+"&"+field2+"="+str(79) cmdLn=str(len(cmd)+4) wifiCommand("AT+CIPSEND=0,"+cmdLn,4,">")
	returnedData=readlineCR(port)
	print(returnedData)
	
	port.write(cmd)
	port.write('\r')		
	returnedData=readlineCR(port)
	print(returnedData)
	break

توضیح کد ها:

  • port = serial.Serial("/dev/ttyAMA0", baudrate=115200, timeout=3.0) برای مقداردهی اولیه پورت سریال است.
  • def wifiCommand(sCmd, waitTm=1, sTerm='OK') تابعی که به ما امکان می دهد دستورات AT را به ماژول ESP ارسال کنیم.
  • isConnected=True; while isConnected این بررسی حیاتی است. گاهی اوقات، ماژول ESP ممکن است به دلایل مختلفی پاسخ ندهد. ما باید مطمئن شویم که ماژول در دسترس است و آماده پذیرش دستورات جدید است.
  • port.write ("AT+CWMODE=1\r\n") برای تنظیم ماژول ما در حالت STA
  • port.write("AT+CWJAP=\"AndroidAP_7822\",\"485056854yhc2825f\"\r\n") ما از این دستور برای اتصال به نقطه دسترسی خود استفاده می کنیم. در اینجا، نام و رمز عبور وای فای تلفن همراه خود را درج می کنیم.
  • humidity, temperature = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN) این تابعی است که برای خواندن و محاسبه مقادیر رطوبت و دما استفاده می کنیم.
  • port.write("AT+CIPMUX=1\r\n") در اینجا، ماژول WiFi خود را برای اتصال خودکار به شبکه Wi-Fi پیکربندی می کنیم.
  • wifiCommand("AT+CIPSTART=0,\"TCP\",\""+ Host+"\""+Port,15"OK") ما از تابع wifiCommand برای راه اندازی یک اتصال TCP در پورت 80 به ThingSpeak.com استفاده می کنیم
  • cmd="Get /update?api_key="+API+"&"+field1+"="+str(20)+"&"+field2+"="+str(79) این نشانی اینترنتی است که برای پست کردن داده های حسگر خود به ThingSpeak استفاده می کنیم. این شامل تمام فیلدهای مورد نیاز و اطلاعات مربوط به کانال ما است.
  • در نهایت از break برای خروج از حلقه استفاده می کنیم زیرا می خواهیم این داده ها را فقط یک بار ارسال کنیم.

ترمینال رزبری پای

برنامه ریزی وظایف با CRON

برای ارسال اطلاعات از Raspberry Pi به ThingSpeak هر 15 دقیقه، باید یک اسکریپت روی Raspberry Pi ایجاد کنیم که هر 15 دقیقه اجرا شود. برای این کار، ما باید یک cronjob را در برد رزبری پای خود راه اندازی کنیم. cron یک ابزار قدرتمند در لینوکس است که برای برنامه ریزی اسکریپت ها برای اجرای دوره ای و در فواصل زمانی ثابت استفاده می شود. برای راه اندازی یک کرون، sudo crontab -e را در ترمینال Raspberry Pi خود تایپ کنید. خط کد زیر را برای برنامه ریزی کاری که هر 15 دقیقه یکبار اجرا می شود اضافه کنید:

*15/ * * * * sudo python /home/pi/rasp_dht22_thingspeak.py

در این مورد، برنامه پایتون هر 15 دقیقه اجرا میشود و فایل آن rasp_dht22_thingspeak.py نامیده می شود و در دایرکتوری /home/pi قرار دارد.

نتیجه نهایی پروژه:

داشبورد اینترنت اشیا thingspeak

ما ارسال اطلاعات به اینترنت را با استفاده از اتصال مستقیم به اینترنت و با یک ماژول WiFi ESP8266 نشان دادیم. ما همچنین یک React ایجاد کردیم که وقتی رطوبت از 80% بالاتر رفت ایمیلی ارسال می‌کند. در نهایت، ما یک cron ایجاد کردیم که هر 15 دقیقه به طور خودکار اسکریپت پایتون را اجرا می کند.

از خواندن مقاله متشکریم و اگر در مورد هر چیزی سوالی دارید حتماً نظر خود را در زیر بنویسید!

5 (2 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

1 دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *