فهرست مطالب:

گزارش آب و هوا با استفاده از برنامه های کاربردی ThingSpeak MQTT و IFTTT: 8 مرحله
گزارش آب و هوا با استفاده از برنامه های کاربردی ThingSpeak MQTT و IFTTT: 8 مرحله

تصویری: گزارش آب و هوا با استفاده از برنامه های کاربردی ThingSpeak MQTT و IFTTT: 8 مرحله

تصویری: گزارش آب و هوا با استفاده از برنامه های کاربردی ThingSpeak MQTT و IFTTT: 8 مرحله
تصویری: هوا شناسی | بهترین برنامه هواشناسی موبایل | اپ هواشناسی اندروید 2024, نوامبر
Anonim
گزارش آب و هوا با استفاده از برنامه های کاربردی ThingSpeak MQTT و IFTTT
گزارش آب و هوا با استفاده از برنامه های کاربردی ThingSpeak MQTT و IFTTT

معرفی

یک برنامه آب و هوایی مبتنی بر ابر که گزارشات آب و هوایی روزانه را به عنوان اطلاع رسانی ایمیل ارائه می دهد. این برنامه کاربردی وب دما و رطوبت را با استفاده از SHT25 و Adafruit Huzzah ESP8266 اندازه گیری می کند. داده های دما و رطوبت در زمان واقعی و تجزیه و تحلیل ساعتی را در اختیار ما قرار می دهد. داده ها با استفاده از ThingSpeak MQTT API ارسال می شوند و بعداً در صورت رسیدن دما به آستانه تعیین شده با استفاده از پروتکل IFTTT ، یک اعلان ایمیل به کاربر ارائه می دهیم. SHT25 یک سنسور دما و رطوبت است که توسط Sensirion ساخته شده است. SHT25 دقت بالایی در حدود ± 2 R RH ارائه می دهد. محدوده رطوبت آن بین 0 تا 100 range و محدوده دما بین -40 تا 125 درجه سانتی گراد است. بسیار مطمئن و سریع با 8 ثانیه زمان پاسخگویی سنسور.

امکانات

  • با استفاده از API Thing Speak MQTT ، تجزیه و تحلیل و آمار بلادرنگ را در اختیار شما قرار می دهد
  • یک اعلان ایمیل در زمان تعیین شده با استفاده از IFTTT به کاربر ارائه می شود
  • Task Scheduler برای برنامه ریزی کار مانند واکشی داده ها از حسگرها ، انتشار خواندن سنسورها ، اشتراک در موضوع MQTT استفاده می شود
  • از پروتکل I2C برای برداشتن سنسور استفاده می کند که دقیق تر ، قابل توسعه و مقیاس پذیر است
  • حالت خواب هنگامی که دستگاه بیکار است یا بدون تماس با کار تماس گرفته نمی شود.
  • برنامه ریزی وظایف موثر استفاده بدون دردسر را ارائه می دهد
  • یک صفحه وب جداگانه میزبانی می شود که کاربر باید اطلاعات کاربری خود را برای جلوگیری از چشمک زدن دستگاه شما در هر زمان در دسترس بودن سایر شبکه های wifi ارائه دهد.
  • SPIFFS برای ذخیره صفحه وب ما استفاده می شود تا کد ما خوانا و دست و پاگیر باشد

مرحله 1: مشخصات سخت افزار و نرم افزار

مشخصات سخت افزار و نرم افزار
مشخصات سخت افزار و نرم افزار
مشخصات سخت افزار و نرم افزار
مشخصات سخت افزار و نرم افزار

مشخصات سخت افزار

  • تخته Adafruit esp8266 Huzzah
  • سپر هیئت هیوزا
  • ماژول سنسور SHT25
  • کابل I2C

مشخصات نرم افزار

  • آردوینو IDE
  • IFTTT Thing Speak
  • MQTT API

مرحله 2: ذخیره اطلاعات کاربری

ذخیره اطلاعات کاربری
ذخیره اطلاعات کاربری
ذخیره اطلاعات کاربری
ذخیره اطلاعات کاربری

در اینجا ما از سنسور SHT25 I2C برای خواندن مقدار زمان واقعی دما و رطوبت نسبی و ارسال این مقدار به ابر استفاده می کنیم. برای بدست آوردن ارزش سنسور به روز شده و ارسال همزمان این به روزرسانی ها ، از کتابخانه زمانبندی وظایف آردوینو استفاده می کنیم. برای عملیات ابری ، ما از ThingSpeak MQTT API استفاده می کنیم. بعداً ما با استفاده از اپلت های IFTTT گزارش آب و هوا را در زمان واقعی به کاربر ارائه می دهیم. برای ایجاد ایستگاه هواشناسی خود می توانید این مراحل را دنبال کنید. بنابراین ، DIY

قبل از ادامه کار. ما باید اعتبار کاربر را ذخیره کنیم. برای این منظور ، ما میزبان یک وب سرور با شماره 192.169.1.4 هستیم. ما فرم وب خود را در SPIFFS ذخیره کرده ایم. هنگامی که دستگاه راه اندازی می شود ، یک وب سرور را به مدت 60 ثانیه میزبانی می کند. کاربر باید این مراحل را دنبال کند.

  • به AP ESPuser متصل شوید ، این در لیست شبکه wifi موجود شما ذکر شده است. به این AP متصل شوید و رمز عبور "*******" را وارد کنید
  • پس از اتصال ، به مرورگر خود بروید و IP 192.168.1.4 را وارد کنید.
  • SSID و رمز عبور WiFi محلی خود را در فیلدهای ورودی وارد کرده و SUBMIT را وارد کنید
  • این اعتبار در EEPROM ذخیره می شود
  • پس از 60 ثانیه دستگاه به طور خودکار از AP قطع می شود
  • دفعه بعد که دستگاه را روشن می کنید ، کاربر مجبور نیست این روش را دنبال کند ، دستگاه به طور خودکار اعتبارنامه کاربر را از EEPROM می گیرد و خواندن سنسور را از رابط I2C و ارسال آن به ابر ادامه می دهد.

// --------- پیکربندی AP ------------ // IPAddress ap_local_IP (192 ، 168 ، 1 ، 4) ؛ IPAddress ap_gateway (192 ، 168 ، 1 ، 254) ؛ IPAddress ap_subnet (255 ، 255 ، 255 ، 0) ؛

Serial.print ("پیکربندی نقطه دسترسی …") ؛

WiFi.softAPConfig (ap_local_IP ، ap_gateway ، ap_subnet) ؛

Serial.print ("تنظیم اعتبارنامه کاربر") ؛

WiFi.softAP (ssidAP ، passAP) ؛

server.on ("/" ، handleRoot) ؛

server.onNotFound (onHandleNotFound) ؛

server.begin ()؛

APTimer = millis ()؛

while (millis ()-APTimer <APInterval) {

server.handleClient ()؛

}

// ************************************************************************************************ ********* // void handleRoot () {

if (server.hasArg ("ssid") && server.hasArg ("رمز عبور"))

{

// اگر همه فیلدهای فرم حاوی تماس داده هستند

handelSubmit ()

handleSubmit ()؛ }

دیگری {

// نمایش مجدد فرم

// فایل موجود در spiffs را بخوانید

فایل فایل = SPIFFS.open ("/webform.html" ، "r") ؛

server.streamFile (فایل ، "text/html") ؛

// بستن فایل را فراموش نکنید

file.close ()؛

}}

// وضعیت آرگومان های ssid و password را بررسی کنید

// سپس اطلاعات کاربری را به ROM بنویسید

ROMwrite (String (server.arg ("ssid")) ، String (server.arg ("گذرواژه")))

مرحله 3: تنظیم فرم وب خود در SPIFFS

SPIFFS

سیستم فایل فلش رابط محیطی سریال ، یا به طور خلاصه SPIFFS. این یک سیستم فایل سبک برای میکروکنترلرها با تراشه فلش SPI است. تراشه فلش داخلی ESP8266 فضای زیادی برای صفحات وب شما دارد ، به ویژه اگر نسخه 1 مگابایت ، 2 مگابایت یا 4 مگابایت دارید. ما همچنین صفحه وب خود را در Flash System ذخیره کرده ایم. برای بارگذاری داده ها در spiff ها چند مرحله را باید دنبال کنیم

  1. ابزار را بارگیری کنید:
  2. در فهرست راهنمای طرح آردوینو خود ، اگر هنوز فهرست راهنما وجود ندارد ، ایجاد کنید
  3. ابزار را در فهرست ابزارها باز کنید (مسیر شبیه /Arduino/tools/ESP8266FS/tool/esp8266fs.jar خواهد بود)
  4. راه اندازی مجدد Arduino IDE
  5. باز کردن یک طرح (یا ایجاد یک طرح جدید و ذخیره آن)
  6. به فهرست اسکچ بروید (Sketch> Show Sketch Folder را انتخاب کنید)
  7. یک دایرکتوری به نام data و هر پرونده ای که می خواهید در سیستم فایل در آنجا ایجاد کنید. ما صفحه HTML خود را با نام webform.html بارگذاری کرده ایم
  8. مطمئن شوید که یک برد ، پورت و Serial Monitor بسته انتخاب کرده اید
  9. ابزارها> ESP8266 Sketch Data Upload را انتخاب کنید. با این کار بارگذاری پرونده ها در سیستم فایل فلش ESP8266 شروع می شود. پس از اتمام ، نوار وضعیت IDE پیام SPIFFS Image Uploaded را نمایش می دهد.

فایل فایل = SPIFFS.open ("/webform.html" ، "r") ؛

server.streamFile (فایل ، "text/html") ؛

// بستن فایل را فراموش نکنید

file.close ()؛

مرحله 4: برنامه ریزی وظایف

در این آموزش ، ما دو عملیات را انجام می دهیم:

  • داده های SHT25 را با استفاده از پروتکل I2C بخوانید
  • داده های به روز شده را با استفاده از API ThingSpeak MQTT به ابر ارسال کنید

برای دستیابی به این هدف از کتابخانه TaskScheduler استفاده می کنیم. ما دو کار متفاوت را با اشاره به دو عملیات مختلف کنترل برنامه ریزی کرده ایم. این به صورت زیر انجام می شود

  • وظیفه 1 برای خواندن مقدار سنسور است که این کار 1 ثانیه اجرا می شود تا زمانی که به 10 ثانیه برسد.
  • هنگامی که Task1 به مهلت خود می رسد ما به Wifi محلی و کارگزار MQTT متصل می شویم.
  • در حال حاضر وظیفه 2 فعال است و ما وظیفه 1 را غیرفعال می کنیم وظیفه 2 برای انتشار داده های حسگر در کارگزار Thing Speak MQTT است که این کار 20 ثانیه اجرا می شود تا زمانی که به 20 ثانیه برسد
  • هنگامی که Task2 به مهلت خود می رسد Task 1 دوباره فعال می شود و Task2 غیرفعال می شود. دوباره در اینجا ، ما مقدار به روز شده را دریافت می کنیم و روند ادامه می یابد
  • هنگامی که هیچ تماس تلفنی فراخوانی نمی شود یا دستگاه بیکار است به Light Sleep می رود و در نتیجه در مصرف برق صرفه جویی می شود.

// --------- نمونه اولیه برای تماس با کار ------------ //

void taskI2CCallback ()؛

void taskI2CDisable ()؛

void taskWiFiCallback ()؛

void taskWiFiDisable ()؛

// --------- وظایف ------------ //

Task tI2C (2 * TASK_SECOND ، TASK_FOREVER ، & taskI2CCallback ، & ts ، false ، NULL ، و taskI2CD غیر فعال) ؛

Task tWiFi (20* TASK_SECOND ، TASK_FOREVER ، & taskWiFiCallback ، & ts، false ، NULL ، و taskWiFiDisable) ؛

// فعال کردن tI2C tI2C.enable ()؛

مرحله 5: خواندن مقادیر دما و رطوبت از SHT25

خواندن مقادیر دما و رطوبت از SHT25
خواندن مقادیر دما و رطوبت از SHT25

I2C یک رابط دو سیم است که فقط از دو سیم برای ارتباط با دستگاه اصلی استفاده می کند. یکی SCL (Serial Clock) و دیگری SDA (Serial Data). هر دستگاه برده آدرس منحصر به فردی دارد. SHT 25 همچنین دارای آدرس 8 بیتی است و با آدرس 0x44 قابل دسترسی است. دارای 8 بیت آدرس است که 7 بیت آدرس واقعی آن است و در سمت راست بیت LSB 0 برای سیگنال خواندن یا نوشتن به دستگاه استفاده می شود. اگر بیت 0 روی 1 تنظیم شود ، دستگاه اصلی از دستگاه برده I2C می خواند. I2C بسیار قابل اعتمادتر ، مقیاس پذیرتر و سریعتر است و حتی دارای حالت های عملکرد زیادی است که باعث می شود از نظر انرژی بسیار کارآمدتر باشد

ما از کتابخانه Wire.h برای خواندن مقادیر دما و رطوبت استفاده می کنیم. این کتابخانه ارتباط i2c بین سنسور و دستگاه اصلی را تسهیل می کند. 0x44 آدرس I2C برای SHT25 است. SHT25 در حالت های مختلف عمل می کند. برای این منظور می توانید به برگه داده مراجعه کنید. ما از 0x2C و 0x06 به ترتیب به عنوان MSB و LSB برای عملیات تک شات استفاده می کنیم

مرحله 6: انتشار مقادیر ThingSpeak با استفاده از ThingSpeak MQTT API

انتشار مقادیر ThingSpeak با استفاده از ThingSpeak MQTT API
انتشار مقادیر ThingSpeak با استفاده از ThingSpeak MQTT API

برای ارسال مقادیر دما و رطوبت به ابر ، از ThingSpeak MQTT API استفاده می کنیم. ThingSpeak یک بستر اینترنت اشیا است. ThingSpeak یک سرویس وب رایگان است که به شما امکان می دهد داده های حسگر را در ابر جمع آوری و ذخیره کنید. MQTT یک پروتکل رایج است که در سیستم های اینترنت اشیا برای اتصال دستگاه ها و حسگرهای سطح پایین استفاده می شود. MQTT برای ارسال پیام کوتاه به و از یک کارگزار استفاده می شود. ThingSpeak اخیراً یک کارگزار MQTT اضافه کرده است تا دستگاه ها بتوانند به ThingSpeak پیام ارسال کنند. می توانید روش راه اندازی ThingSpeak Channel را از این پست دنبال کنید

MQTT ThingSpeak

MQTT یک معماری انتشار/اشتراک است که عمدتا برای اتصال پهنای باند و دستگاه های محدود کننده قدرت بر روی شبکه های بی سیم توسعه یافته است. این یک پروتکل ساده و سبک است که روی سوکت های TCP/IP یا WebSockets اجرا می شود. MQTT روی WebSockets را می توان با SSL ایمن کرد. معماری انتشار/اشتراک باعث می شود پیام ها به دستگاه های سرویس گیرنده منتقل شوند بدون اینکه دستگاه نیاز به سرور مداوم داشته باشد. مشتری هر دستگاهی است که به کارگزار متصل می شود و می تواند موضوعاتی را برای دسترسی به اطلاعات منتشر یا مشترک کند. یک موضوع شامل اطلاعات مسیریابی برای کارگزار است. هر مشتری که می خواهد پیام ارسال کند آنها را در یک موضوع خاص منتشر می کند و هر مشتری که می خواهد پیام دریافت کند در یک موضوع خاص مشترک می شود

انتشار و مشترک شدن با استفاده از ThingSpeak MQTT

  • انتشار در کانال های فید کانال /انتشار /
  • انتشار در کانال های حوزه خاص/انتشار/زمینه ها/زمینه/
  • مشترک شدن در کانال های فیلد کانال/مشترک شدن //
  • مشترک شدن در کانالهای تغذیه کانال خصوصی // اشتراک/فیلدها/فیلد/
  • در همه زمینه های یک کانال مشترک شوید. کانال ها // مشترک شدن/فیلدها/feild/

void taskWiFiCallback ()

{

Serial.println ("taskWiFiCallbackStarted") ؛

Serial.print ("مهلت زمانی برای این کار: / t")؛

Serial.println (tWiFi.getTimeout ()) ؛

اگر (! mqttCli.connected ())

{

Serial.println ("مشتری متصل نیست") ؛

reconnectMQTT ()؛

}

string stringString = "channel/"+String (channelID)+"/published/"+String (writeAPIKey) ؛

int topicLength = topicString.length ()+1؛

char topicBuffer [topicLength]؛

topicString.toCharArray (topicBuffer ، topicLength+1) ؛

Serial.println (topicBuffer) ؛

String dataString = String ("field1 =" + String (tempC، 1) + "& field2 =" + String (tempF، 1) + "& field3 =" + رشته (مرطوب ، 1)) ؛

int dataLength = dataString.length ()+1؛

بایت dataBuffer [dataLength] ؛

dataString.getBytes (dataBuffer ، dataLength) ؛

mqttCli.beginPublish (topicBuffer ، dataLength ، false) ؛

Serial.println (mqttCli.write (dataBuffer ، dataLength)؟ "published": "منتشر نشد")؛

mqttCli.endPublish ()؛

//mqttCli.loop ()؛

}

مرحله 7: اعلان ایمیل گزارش آب و هوا

اعلان ایمیل گزارش آب و هوا
اعلان ایمیل گزارش آب و هوا
اعلان ایمیل گزارش آب و هوا
اعلان ایمیل گزارش آب و هوا

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

channelID = ******؛

iftttURL = 'https://maker.ifttt.com/**************'؛

humidityData = thingSpeakRead (channelID، 'Fields'، 3، 'NumDays'، 5)؛ tempData = thingSpeakRead (channelID، 'Fields'، 1، 'NumDays'، 5)؛

perHumid = max (humidityData) -min (humidityData) ؛

humidValue = 0.1*perHumid+دقیقه (humidityData) ؛

perTemp = max (tempData) -min (tempData) ؛

tempValue = 0.1*perTemp+دقیقه (tempData) ؛

urlTemp = strcat ('https://api.thingspeak.com/channels/' ، رشته (channelID) ، '/fields/1/last.txt') ؛

urlHumid = strcat ('https://api.thingspeak.com/channels/' ، رشته (channelID) ، '/fields/3/last.txt') ؛ lastTempValue = str2num (وب خوان (urlTemp)) ؛ lastHumidValue = str2num (وب خوان (urlHumid)) ؛

if (lastTempValue

if (lastTempValue> tempValue || lastHumidValue> humidValue)

plantMessage = 'روز گرم است.'؛ نوشتن وب (iftttURL ، 'value1' ، plantMessage ، 'value2' ، lastTempValue ، 'value3' ، lastHumidValue) ؛ پایان

مرحله 8: کد کلی

کد کلی
کد کلی
کد کلی
کد کلی
کد کلی
کد کلی

کد کلی

کد کلی در این مخزن GitHub موجود است

محدودیت ها

  • برخی از مسائل مربوط به انتشار داده ها با استفاده از روش انتشار برای حجم زیادی از داده ها وجود دارد. برای حل این مشکل ما از تابع write () استفاده می کنیم
  • SPIFFS باید قبل از بارگذاری داده های جدید در SPIFFS قالب بندی شود.
  • شما نباید از تابع delay () استفاده کنید. تأخیر () مانع عملکرد پس زمینه می شود. در عوض ، تنها در صورت لزوم با استفاده از millis () تأخیر ایجاد کنید

وام

  • ESP826WebServer
  • وظیفه زمانبندی
  • SHT 25
  • API ThingSpeak MQTT
  • IFTTT
  • PubSubClient

توصیه شده: