جدول المحتويات:
- الخطوة 1: مواصفات الأجهزة والبرامج
- الخطوة 2: تخزين بيانات اعتماد المستخدم
- الخطوة 3: إعداد نموذج الويب الخاص بك في SPIFFS
- الخطوة 4: جدولة المهام
- الخطوة 5: قراءة قيم درجة الحرارة والرطوبة من SHT25
- الخطوة 6: نشر القيم على ThingSpeak باستخدام ThingSpeak MQTT API
- الخطوة 7: إخطار البريد الإلكتروني الخاص بتقرير الطقس
- الخطوة 8: الكود العام
فيديو: تقرير الطقس باستخدام ThingSpeak MQTT و IFTTT Applets: 8 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:39
مقدمة
تطبيق طقس قائم على السحابة يوفر تقارير يومية عن الطقس كإخطار عبر البريد الإلكتروني. يقيس تطبيق الويب هذا درجة الحرارة والرطوبة باستخدام SHT25 و Adafruit Huzzah ESP8266. يوفر لنا بيانات درجة الحرارة والرطوبة في الوقت الفعلي وتحليلات كل ساعة. يتم إرسال البيانات باستخدام ThingSpeak MQTT API وبعد ذلك نقدم إشعارًا بالبريد الإلكتروني للمستخدم عندما تصل درجة الحرارة إلى الحد المعين باستخدام بروتوكول IFTTT. SHT25 عبارة عن مستشعرات درجة الحرارة والرطوبة من إنتاج شركة Sensirion. يوفر SHT25 مستوى عالٍ من الدقة حول ± 2٪ RH. تتراوح رطوبتها ما بين 0 إلى 100٪ ومدى درجة الحرارة بين -40 إلى 125 درجة مئوية. إنه أكثر موثوقية وسرعة مع 8 ثوانٍ من وقت استجابة المستشعر.
سمات
- يوفر لك تحليلات وإحصائيات في الوقت الفعلي باستخدام Thing Speak MQTT API
- يتم تقديم إشعار بالبريد الإلكتروني للمستخدم في وقت محدد باستخدام IFTTT
- يستخدم برنامج جدولة المهام لجدولة المهمة مثل جلب البيانات من أجهزة الاستشعار ونشر قراءات المستشعر والاشتراك في موضوع MQTT
- يستخدم بروتوكول I2C لجلب قراءة المستشعر الأكثر دقة وقابلة للتوسيع والقابلية للتوسع
- وضع السكون عندما يكون الجهاز في وضع الخمول أو عندما لا يتم استدعاء رد مهمة.
- توفر جدولة المهام الفعالة استخدامًا خاليًا من المتاعب
- تتم استضافة صفحة ويب منفصلة حيث يتعين على المستخدم تقديم بيانات اعتماد المستخدم الخاصة به لتجنب وميض جهازك في كل مرة عندما يكون في متناول شبكات wifi الأخرى
- يتم استخدام SPIFFS لتخزين صفحة الويب الخاصة بنا لجعل الكود الخاص بنا قابلاً للقراءة وأقل إزعاجًا
الخطوة 1: مواصفات الأجهزة والبرامج
مواصفات الأجهزة
- لوح الحوزة Adafruit esp8266
- درع الحوزة
- وحدة الاستشعار SHT25
- كابل I2C
مواصفات البرنامج
- اردوينو IDE
- الكلام IFTTT
- واجهة برمجة تطبيقات MQTT
الخطوة 2: تخزين بيانات اعتماد المستخدم
نحن هنا نستخدم مستشعر SHT25 I2C لقراءة القيمة في الوقت الفعلي لدرجة الحرارة والرطوبة النسبية ونشر هذه القيمة على السحابة. للحصول على قيمة المستشعر المحدثة من وقت لآخر ونشر هذه التحديثات في وقت واحد ، فإننا نستخدم مكتبة جدولة المهام في Arduino. بالنسبة للعمليات السحابية ، فإننا نستخدم ThingSpeak MQTT API. نقدم لاحقًا تقرير الطقس في الوقت الفعلي للمستخدم باستخدام تطبيقات IFTTT الصغيرة. يمكنك اتباع هذه الخطوات لإنشاء محطة الطقس الخاصة بك. لذلك ، DIY.
قبل المضي قدما. نحن بحاجة إلى حفظ بيانات اعتماد المستخدم. لهذا الغرض ، نستضيف خادم ويب على 192.169.1.4. قمنا بتخزين نموذج الويب الخاص بنا في SPIFFS. بمجرد بدء تشغيل الجهاز ، فإنه يستضيف خادم ويب لمدة 60 ثانية. يجب على المستخدم اتباع هذه الخطوات.
- اتصل بـ AP ESPuser ، هذا مدرج في قائمة شبكة wifi المتاحة لديك. اتصل بنقطة الوصول هذه وأدخل كلمة المرور "*******"
- بمجرد الاتصال ، انتقل إلى المستعرض الخاص بك وأدخل عنوان IP 192.168.1.4.
- أدخل SSID وكلمة المرور لشبكة WiFi المحلية في حقول الإدخال وأدخل SUBMIT
- سيتم حفظ بيانات الاعتماد هذه في EEPROM
- بعد 60 ثانية ، سيتم قطع اتصال الجهاز تلقائيًا بنقطة الوصول
- في المرة القادمة عند تشغيل الجهاز ، لا يتعين على المستخدم اتباع هذا الإجراء ، فسيقوم الجهاز تلقائيًا بجلب بيانات اعتماد المستخدم من EEPROM والاستمرار في الحصول على قراءات المستشعر من واجهة I2C ونشرها على السحابة
// --------- AP config ------------ // 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 = مللي () ،
while (مللي () - APTimer <AP Interval) {
server.handleClient () ،
}
// **************************** مقبض الجذر ******************** ********* // void handleRoot () {
if (server.hasArg ("ssid") && server.hasArg ("password"))
{
// إذا كانت جميع حقول النموذج تحتوي على مكالمة بيانات
هاندل
مقبض تقديم () ، }
آخر {
// إعادة عرض النموذج
// اقرأ الملف الموجود في spiffs
ملف الملف = SPIFFS.open ("/ webform.html"، "r")؛
server.streamFile (ملف ، "text / html") ؛
// لا تنسى إغلاق الملف
file.close () ؛
}}
// تحقق من الحالة التي تحتوي على الوسيطتين ssid وكلمة المرور
// ثم اكتب بيانات الاعتماد إلى ROM
ROMwrite (سلسلة (server.arg ("ssid")) ، سلسلة (server.arg ("كلمة المرور")))
الخطوة 3: إعداد نموذج الويب الخاص بك في SPIFFS
نظام SPIFFS
نظام ملفات فلاش للواجهة الطرفية التسلسلية ، أو SPIFFS للاختصار. إنه نظام ملفات خفيف الوزن لوحدات التحكم الدقيقة مع شريحة فلاش SPI. تحتوي شريحة فلاش ESP8266 المدمجة على مساحة كبيرة لصفحات الويب الخاصة بك ، خاصة إذا كان لديك إصدار 1 ميجابايت أو 2 ميجابايت أو 4 ميجابايت. لقد قمنا أيضًا بتخزين صفحة الويب الخاصة بنا في نظام الفلاش. هناك بعض الخطوات التي نحتاج إلى اتباعها لتحميل البيانات إلى spiffs
- قم بتنزيل الأداة: https://github.com/esp8266/arduino-esp8266fs-plug …
- في دليل كراسة الرسم من Arduino ، أنشئ دليل الأدوات إذا لم يكن موجودًا بعد
- قم بفك ضغط الأداة في دليل الأدوات (سيبدو المسار مثل /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
- أعد تشغيل Arduino IDE
- افتح رسمًا تخطيطيًا (أو أنشئ رسمًا جديدًا واحفظه)
- انتقل إلى دليل الرسم (اختر Sketch> Show Sketch Folder)
- قم بإنشاء دليل باسم البيانات وأي ملفات تريدها في نظام الملفات هناك. لقد قمنا بتحميل صفحة HTML الخاصة بنا بالاسم webform.html
- تأكد من أنك حددت لوحة ومنفذًا وإغلاق Serial Monitor
- حدد Tools> ESP8266 Sketch Data Upload. يجب أن يبدأ هذا بتحميل الملفات في نظام ملفات فلاش ESP8266. عند الانتهاء ، سيعرض شريط حالة IDE رسالة SPIFFS Image Uploaded.
ملف الملف = SPIFFS.open ("/ webform.html"، "r")؛
server.streamFile (ملف ، "text / html") ؛
// لا تنسى إغلاق الملف
file.close () ؛
الخطوة 4: جدولة المهام
في هذا البرنامج التعليمي ، نقوم بإجراء عمليتين:
- اقرأ البيانات من SHT25 باستخدام بروتوكول I2C
- انشر البيانات المحدثة على السحابة باستخدام ThingSpeak MQTT API
لتحقيق ذلك نحن نستخدم مكتبة TaskScheduler. لقد حددنا جدولة مهمتين مختلفتين تشيران إلى عمليتي تحكم مختلفتين. هكذا يتم فعل هذا
- المهمة 1 لقراءة قيمة المستشعر تعمل هذه المهمة لمدة ثانية واحدة حتى تصل إلى 10 ثوانٍ.
- عندما تصل Task1 إلى مهلتها ، فإننا نتواصل مع وسيط Wifi و MQTT المحلي.
- الآن تم تمكين المهمة 2 ونقوم بتعطيل المهمة 1Task 2 لنشر بيانات المستشعر إلى وسيط Thing Speak MQTT ، تعمل هذه المهمة لمدة 20 ثانية حتى تصل إلى مهلة 20 ثانية
- عندما تصل Task2 إلى مهلتها ، يتم تمكين المهمة 1 مرة أخرى ويتم تعطيل Task2. هنا مرة أخرى ، نحصل على القيمة المحدثة وتستمر العملية
- عندما لا يتم استدعاء رد أو أن الجهاز في وضع الخمول ينتقل إلى Light Sleep وبالتالي توفير الطاقة.
// --------- النموذج الأولي لرد المهمة ------------ //
TaskI2CCallback () باطلة ؛
TaskI2CDisable () باطلة ؛
TaskWiFiCallback () باطلة ،
TaskWiFiDisable () باطلة ،
//---------مهام------------//
مهمة tI2C (2 * TASK_SECOND ، TASK_FOREVER ، & taskI2CCallback ، & ts ، false ، NULL ، & taskI2CDisable) ؛
مهمة tWiFi (20 * TASK_SECOND ، TASK_FOREVER ، & TaskWiFiCallback ، & ts ، false ، NULL ، & TaskWiFiDisable) ؛
// تمكين tI2C tI2C.enable () ؛
الخطوة 5: قراءة قيم درجة الحرارة والرطوبة من SHT25
I2C عبارة عن واجهة ثنائية الأسلاك تستخدم فقط سلكين للتواصل مع الجهاز الرئيسي. الأول هو SCL (الساعة التسلسلية) والآخر هو SDA (البيانات التسلسلية). كل جهاز تابع له عنوان فريد. يحتوي 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 من هذا المنشور
ThingSpeak MQTT
MQTT هي بنية نشر / اشتراك تم تطويرها بشكل أساسي لتوصيل النطاق الترددي والأجهزة المقيدة بالطاقة عبر الشبكات اللاسلكية. إنه بروتوكول بسيط وخفيف الوزن يتم تشغيله عبر مآخذ TCP / IP أو WebSockets. يمكن تأمين MQTT عبر WebSockets باستخدام SSL. تتيح بنية النشر / الاشتراك إمكانية دفع الرسائل إلى أجهزة العميل دون الحاجة إلى قيام الجهاز باستقصاء الخادم باستمرار. والعميل هو أي جهاز يتصل بالوسيط ويمكنه نشر الموضوعات أو الاشتراك فيها للوصول إلى المعلومات. يحتوي الموضوع على معلومات التوجيه الخاصة بالوسيط. كل عميل يريد إرسال رسائل ينشرها لموضوع معين ، وكل عميل يريد استقبال الرسائل يشترك في موضوع معين
انشر واشترك باستخدام ThingSpeak MQTT
- النشر على قنوات تغذية القناة / نشر /
- النشر إلى قنوات حقل معين / نشر / حقول / حقل /
- اشترك في مجال القنوات القنوات / الاشتراك //
- اشترك في قنوات تغذية القناة الخاصة // اشتراك / حقول / حقل /
- اشترك في جميع مجالات القناة. قنوات // اشتراك / حقول / حقل /
مهمة باطلة
{
Serial.println ("taskWiFiCallbackStarted") ؛
Serial.print ("مهلة لهذه المهمة: / t")؛
Serial.println (tWiFi.getTimeout ()) ،
إذا (! mqttCli.connected ())
{
Serial.println ("العميل غير متصل") ؛
إعادة الاتصال MQTT () ،
}
String topicString = "channels /" + String (channelID) + "/ publish /" + 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 =" + String (humid، 1))؛
int dataLength = dataString.length () + 1 ؛
بايت dataBuffer [dataLength] ؛
dataString.getBytes (dataBuffer، dataLength) ،
mqttCli.beginPublish (topicBuffer، dataLength، false) ؛
Serial.println (mqttCli.write (dataBuffer، dataLength)؟ "منشور": "فشل النشر") ؛
mqttCli.endPublish () ،
//mqttCli.loop () ،
}
الخطوة 7: إخطار البريد الإلكتروني الخاص بتقرير الطقس
نحن نستخدم تطبيقات IFTTT لإعطاء تقرير عن الطقس في الوقت الحقيقي إشعارًا بالبريد الإلكتروني للمستخدم. لذلك ، قمنا بتنفيذها من خلال ThingSpeak. نحن نحسب متوسط قيم 5-fay لدرجة الحرارة والرطوبة. عندما تكون قيمة الإدخال الأخير أكبر من متوسط القيمة. سيؤدي ذلك إلى إرسال إشعار بالبريد الإلكتروني "إنه يوم حار". وعندما تكون أقل من متوسط القيمة. سيؤدي ذلك إلى إرسال إشعار بالبريد الإلكتروني "يا له من يوم جميل". كل يوم في حوالي الساعة 10:00 صباحًا (IST) ، سنتلقى إشعارًا بالبريد الإلكتروني
channelID = ****** ؛
iftttURL = 'https://maker.ifttt.com/**************' ؛
MoistureData = thingSpeakRead (channelID، 'Fields'، 3، 'NumDays'، 5) ؛ tempData = thingSpeakRead (channelID، 'Fields'، 1، 'NumDays'، 5) ؛
نسبة الرطوبة = الحد الأقصى (بيانات الرطوبة) - دقيقة (بيانات الرطوبة) ؛
humidValue = 0.1 * perHumid + min (moistData) ؛
perTemp = max (tempData) -min (tempData) ؛
tempValue = 0.1 * perTemp + min (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 (webread (urlTemp)) ؛ lastHumidValue = str2num (webread (urlHumid)) ؛
إذا (lastTempValue
إذا (lastTempValue> tempValue || lastHumidValue> humidValue)
plantMessage = 'إنه يوم حار.'؛ webwrite (iftttURL، 'value1'، plantMessage، 'value2'، lastTempValue، 'value3'، lastHumidValue) ؛ نهاية
الخطوة 8: الكود العام
الكود العام
الرمز العام متاح في مستودع GitHub هذا
محددات
- توجد بعض المشكلات في نشر البيانات باستخدام طريقة نشر للجزء الأكبر من البيانات. لحل هذه المشكلة ، نستخدم وظيفة write ()
- يجب تنسيق نظام SPIFFS قبل تحميل البيانات الجديدة إلى SPIFFS.
- يجب ألا تستخدم وظيفة delay (). تأخير () يعيق عملية الخلفية. بدلاً من ذلك ، قم بإنشاء تأخيرات باستخدام millis () فقط إذا كان ذلك ضروريًا
الاعتمادات
- ESP826WebServer
- جدول المهام
- SHT 25
- واجهة برمجة تطبيقات ThingSpeak MQTT
- IFTTT
- PubSubClient
موصى به:
تقرير اكسل الدوري: 6 خطوات
تقرير Excel الدوري: فيما يلي تلميحاتي لتقارير الاستهلاك الدورية في Excel 2010. في الفيديو التعليمي أدناه ، يخبرنا هذا التقرير عن الاستهلاك المحدد للكهرباء والماء والأكسجين والنيتروجين لكل طن من المنتجات النهائية ، وفقًا للأسبوعية والشهرية والربع
Loactor مع ما إذا كان تقرير مباشر باستخدام Chat Bot: 4 خطوات
Loactor مع ما إذا كان Live Report يستخدم Chat Bot: من خلال WhatsApp ، احصل على المتغيرات (الموقع والارتفاع والضغط …) من NodeMCU كما هو مطلوب أو أرسل أوامر إلى NodeMCU عبر Twilio's API. لبضعة أسابيع ، كنت أعمل مع Twilio's API ، خاصة بالنسبة لمراسلة WhatsApp ، وحتى إنشاء تطبيق
تقرير Covid Live باستخدام Raspberry Pi: 6 خطوات
تقرير Covid Live باستخدام Raspberry Pi: كما نعلم ، يتأثر العالم بأسره بجائحة COVID-19 ويعمل الجميع تقريبًا من المنزل. يجب علينا جميعًا الاستفادة من هذه المدة في أحسن الأحوال لتحسين مهاراتنا الفنية أو كتابة بعض النصوص البيثونية الجيدة ، فلنرى لغة بايثون بسيطة
فحص تقرير حركة المرور (NL) مع ممسحة: 6 خطوات
فحص تقرير حركة المرور (NL) باستخدام ممسحة: في هذا الدليل ، سأصف كيفية إنشاء ممسحة تتحقق من تقارير حركة المرور على الطرق السريعة الهولندية. بمجرد خروجك من ممسحة الأرجل الخاصة بك وكان هناك ازدحام مروري على طريقك ، ستتحول السجادة إلى اللون الأحمر. عندما لا تكون هناك حركة مرور
شمعة الطقس - لمحة سريعة عن الطقس ودرجة الحرارة: 8 خطوات
شمعة الطقس - لمحة سريعة عن الطقس ودرجة الحرارة: باستخدام هذه الشمعة السحرية ، يمكنك معرفة درجة الحرارة والظروف الحالية بالخارج على الفور