فهرست مطالب:
- مرحله 1: مشخصات سخت افزار و نرم افزار
- مرحله 2: ذخیره اطلاعات کاربری
- مرحله 3: تنظیم فرم وب خود در SPIFFS
- مرحله 4: برنامه ریزی وظایف
- مرحله 5: خواندن مقادیر دما و رطوبت از SHT25
- مرحله 6: انتشار مقادیر ThingSpeak با استفاده از ThingSpeak MQTT API
- مرحله 7: اعلان ایمیل گزارش آب و هوا
- مرحله 8: کد کلی
تصویری: گزارش آب و هوا با استفاده از برنامه های کاربردی ThingSpeak MQTT و IFTTT: 8 مرحله
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:55
معرفی
یک برنامه آب و هوایی مبتنی بر ابر که گزارشات آب و هوایی روزانه را به عنوان اطلاع رسانی ایمیل ارائه می دهد. این برنامه کاربردی وب دما و رطوبت را با استفاده از 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 ها چند مرحله را باید دنبال کنیم
- ابزار را بارگیری کنید:
- در فهرست راهنمای طرح آردوینو خود ، اگر هنوز فهرست راهنما وجود ندارد ، ایجاد کنید
- ابزار را در فهرست ابزارها باز کنید (مسیر شبیه /Arduino/tools/ESP8266FS/tool/esp8266fs.jar خواهد بود)
- راه اندازی مجدد Arduino IDE
- باز کردن یک طرح (یا ایجاد یک طرح جدید و ذخیره آن)
- به فهرست اسکچ بروید (Sketch> Show Sketch Folder را انتخاب کنید)
- یک دایرکتوری به نام data و هر پرونده ای که می خواهید در سیستم فایل در آنجا ایجاد کنید. ما صفحه HTML خود را با نام webform.html بارگذاری کرده ایم
- مطمئن شوید که یک برد ، پورت و Serial Monitor بسته انتخاب کرده اید
- ابزارها> 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
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 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
توصیه شده:
سیستم نظارت بصری مبتنی بر LoRa برای کشاورزی Iot - طراحی یک برنامه کاربردی Fronted با استفاده از Firebase & Angular: 10 مرحله
سیستم نظارت بصری مبتنی بر LoRa برای کشاورزی Iot | طراحی یک برنامه کاربردی Fronted با استفاده از Firebase & Angular: در فصل قبل در مورد نحوه کار سنسورها با ماژول loRa برای پر کردن پایگاه داده Firebase Realtime صحبت کردیم و نمودار سطح بسیار بالا را مشاهده کردیم که نشان می دهد کل پروژه ما چگونه کار می کند. در این فصل در مورد اینکه چگونه می توانیم
استفاده از 1602 صفحه کلید صفحه کلید LCD W/ Arduino [+پروژه های کاربردی]: 7 مرحله
استفاده از 1602 LCD Keypad Shield W/ Arduino [+پروژه های کاربردی]: می توانید این و سایر آموزش های شگفت انگیز را در وب سایت رسمی ElectroPeak بخوانید. مرور کلی در این آموزش ، نحوه استفاده از سپر صفحه کلید Arduino LCD با 3 پروژه کاربردی را خواهید آموخت. آنچه خواهید آموخت: نحوه تنظیم سپر و شناسایی کلیدها
HC -SR04 VS VL53L0X - تست 1 - استفاده برای برنامه های کاربردی ماشین ربات: 7 مرحله
HC -SR04 VS VL53L0X - تست 1 - استفاده برای برنامه های کاربردی ماشین روبات: این دستورالعمل یک آزمایش آزمایشی ساده (هرچند تا حد امکان علمی) را برای مقایسه اثربخشی دو سنسور معمول فاصله ، که عملکرد فیزیکی کاملاً متفاوتی دارند ، پیشنهاد می کند. HC-SR04 از امواج فراصوت استفاده می کند
توسعه برنامه های کاربردی با استفاده از پین های GPIO در DragonBoard 410c با سیستم عامل های Android و Linux: 6 مرحله
توسعه برنامه های کاربردی با استفاده از پین های GPIO در DragonBoard 410c با سیستم عامل های Android و Linux: هدف از این آموزش نشان دادن اطلاعات مورد نیاز برای توسعه برنامه های کاربردی با استفاده از پین GPIO در DragonBoard 410c با سرعت کم است. این آموزش اطلاعاتی را برای توسعه برنامه های کاربردی با استفاده از پین های GPIO با SYS در Andr ارائه می دهد
اینترنت اشیا آسان: ضبط داده های آب و هوا از راه دور: UV و هوا دما و رطوبت: 7 مرحله
اینترنت اشیا آسان شده: ضبط داده های آب و هوایی از راه دور: اشعه ماوراء بنفش و دما و رطوبت هوا: در این آموزش ، ما داده های از راه دور را به عنوان اشعه ماوراء بنفش (اشعه ماوراء بنفش) ، دما و رطوبت هوا ضبط می کنیم. این داده ها بسیار مهم خواهند بود و در ایستگاه هواشناسی کامل آینده مورد استفاده قرار خواهند گرفت. نمودار بلوک نشان می دهد که در پایان چه چیزی را بدست خواهیم آورد