תוכן עניינים:

דו"ח מזג אוויר באמצעות ThingSpeak MQTT ו- IFTTT Applets: 8 שלבים
דו"ח מזג אוויר באמצעות ThingSpeak MQTT ו- IFTTT Applets: 8 שלבים

וִידֵאוֹ: דו"ח מזג אוויר באמצעות ThingSpeak MQTT ו- IFTTT Applets: 8 שלבים

וִידֵאוֹ: דו
וִידֵאוֹ: 🪐מערכת השמש: כוכב הלכת צדק וההיסטוריה של מאדים 2024, נוֹבֶמבֶּר
Anonim
דיווח מזג אוויר באמצעות יישומוני ThingSpeak MQTT ו- IFTTT
דיווח מזג אוויר באמצעות יישומוני ThingSpeak MQTT ו- IFTTT

מבוא

יישום מזג אוויר מבוסס ענן המספק דיווחי מזג אוויר יומיים כהודעת דוא"ל. יישום אינטרנט זה מודד טמפרטורה ולחות באמצעות SHT25 ו- Adafruit Huzzah ESP8266. הוא מספק לנו נתוני טמפרטורה ולחות בזמן אמת וניתוח שעות. הנתונים נשלחים באמצעות ThingSpeak MQTT API ובהמשך אנו מספקים הודעת דוא"ל למשתמש בכל פעם שהטמפרטורה מגיעה לסף שהוקצה באמצעות פרוטוקול IFTTT. SHT25 הוא חיישני טמפרטורה ולחות מתוצרת Sensirion. SHT25 מספק רמת דיוק גבוהה סביב ± 2% לחות יחסית. טווח הלחות שלו נע בין 0 ל -100% וטווח הטמפרטורות הוא בין -40 ל -125 מעלות צלזיוס. זה הרבה יותר אמין ומהיר עם 8 שניות זמן תגובה של חיישן.

מאפיינים

  • מספק לך ניתוח נתונים סטטיסטיים בזמן אמת באמצעות Thing Speak MQTT API
  • הודעת דוא"ל ניתנת למשתמש בזמן שהוקצה באמצעות IFTTT
  • מתזמן המשימות משמש לתזמון המשימה כמו אחזור נתונים מחיישנים, פרסום קריאות החיישנים, הרשמה לנושא MQTT
  • הוא משתמש בפרוטוקול I2C כדי להביא את קריאת החיישן שהיא מדויקת יותר, ניתנת להרחבה וניתנת להרחבה
  • מצב שינה כשהמכשיר אינו פעיל או שלא מתקשרים לחזרה למשימות.
  • תזמון משימות יעיל מספק שימוש ללא בעיות
  • מתארח דף אינטרנט נפרד שבו המשתמש צריך לספק את אישורי המשתמש שלו כדי להימנע מהבהב המכשיר שלך בכל פעם כשהוא נגיש לרשתות Wi -Fi אחרות.
  • SPIFFS משמש לאחסון דף האינטרנט שלנו כדי להפוך את הקוד שלנו לקריא ופחות מגושם

שלב 1: מפרט חומרה ותוכנה

מפרט חומרה ותוכנה
מפרט חומרה ותוכנה
מפרט חומרה ותוכנה
מפרט חומרה ותוכנה

מפרט חומרה

  • Adafruit esp8266 לוח חוזה
  • מגן לוח חוזה
  • מודול חיישן SHT25
  • כבל I2C

מפרט תוכנה

  • Arduino IDE
  • דבר IFTTT דבר
  • ממשק API MQTT

שלב 2: אחסון אישורי משתמשים

אחסון אישורי משתמשים
אחסון אישורי משתמשים
אחסון אישורי משתמשים
אחסון אישורי משתמשים

כאן אנו משתמשים בחיישן SHT25 I2C כדי לקרוא את הערך בזמן אמת של טמפרטורה ולחות יחסית ולפרסם ערך זה לענן. כדי לקבל את ערך החיישן המעודכן מדי פעם ולפרסם עדכונים אלה בו זמנית אנו משתמשים בספריית מתזמני המשימות של Arduino. עבור פעולות ענן, אנו משתמשים ב- ThingSpeak MQTT API. מאוחר יותר אנו מספקים דיווח מזג אוויר בזמן אמת למשתמש באמצעות יישומוני IFTTT. תוכל לבצע את השלבים הבאים כדי ליצור תחנת מזג אוויר משלך. אז, עשה זאת בעצמך.

לפני שנמשיך הלאה. עלינו לשמור את אישורי המשתמש. לשם כך, אנו מארחים שרת אינטרנט בכתובת 192.169.1.4. שמרנו את טופס האינטרנט שלנו ב- SPIFFS. ברגע שההתקן מופעל הוא מארח שרת אינטרנט למשך 60 שניות. על המשתמש לבצע את השלבים הבאים.

  • התחבר למשתמש ESP APP, זה מופיע ברשימת רשתות ה- 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 = מיליס ();

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 והסיסמה

// לאחר מכן כתוב את האישורים ל- ROM

ROMwrite (String (server.arg ("ssid")), String (server.arg ("סיסמה")))

שלב 3: הגדרת טופס האינטרנט שלך ב- SPIFFS

SPIFFS

ממשק היקפי סדרתי Flash File File, או בקיצור SPIFFS. זוהי מערכת קבצים קלה עבור בקרי מיקרו עם שבב פלאש SPI. לשבב הפלאש המשולב של ESP8266 יש הרבה מקום לדפי האינטרנט שלך, במיוחד אם יש לך את גרסת 1MB, 2MB או 4MB. שמרנו גם את דף האינטרנט שלנו במערכת Flash. ישנם מספר שלבים שעלינו לבצע כדי להעלות נתונים ל- spiffs

  1. הורד את הכלי:
  2. בספריית הסקיצות של Arduino, צור ספריית כלים אם היא עדיין לא קיימת
  3. פרק את הכלי לספריית הכלים (הנתיב ייראה /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
  4. הפעל מחדש את Arduino IDE
  5. פתח סקיצה (או צור רישום חדש ושמור אותה)
  6. עבור לספריית הסקיצות (בחר סקיצה> הצג תיקיית סקיצות)
  7. צור שם ספרייה בשם נתונים וכל הקבצים שאתה רוצה במערכת הקבצים שם. העלנו את דף ה- HTML שלנו בשם webform.html
  8. וודא שבחרת לוח, יציאה וצג סידורי סגור
  9. בחר כלים> העלאת נתוני סקיצה ESP8266. זה אמור להתחיל להעלות את הקבצים למערכת קבצי הבזק ESP8266. בסיום, שורת המצב של IDE תציג הודעה שהועלתה תמונה SPIFFS.

קובץ קובץ = SPIFFS.open ("/webform.html", "r");

server.streamFile (קובץ, "text/html");

// אל תשכח לסגור את הקובץ

file.close ();

שלב 4: תזמון משימות

במדריך זה אנו מבצעים שתי פעולות:

  • קרא את הנתונים מ- SHT25 באמצעות פרוטוקול I2C
  • פרסם את הנתונים המעודכנים בענן באמצעות ThingSpeak MQTT API

כדי להשיג זאת אנו משתמשים בספריית TaskScheduler. קבענו שתי משימות שונות המתייחסות לשתי פעולות בקרה שונות. זה נעשה כדלקמן

  • משימה 1 מיועדת לקריאת ערך החיישן משימה זו פועלת למשך שנייה אחת עד שהיא מגיעה לפסק זמן של 10 שניות.
  • כאשר משימה 1 מגיעה לפסק הזמן שלה אנו מתחברים ל- Wifi מקומי ולמתווך MQTT.
  • כעת משימה 2 מופעלת ואנו משביתים משימה 1 משימה 2 מיועדת לפרסום נתוני החיישנים לברוקר Thing Speak MQTT משימה זו פועלת במשך 20 שניות עד שהיא מגיעה לפסק זמן של 20 שניות
  • כאשר משימה 2 מגיעה לפסק הזמן שלה משימה 1 מופעלת שוב ומשימה 2 מושבתת. שוב כאן, אנו מקבלים את הערך המעודכן והתהליך נמשך
  • כשאין התקשרות חוזרת או שהמכשיר אינו פעיל הוא עובר לשינה קלה ובכך חוסך חשמל.

// --------- אב טיפוס להחזרה למשימות ------------ //

void taskI2CCallback ();

void taskI2CDisable ();

void taskWiFiCallback ();

void 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

קריאת ערכי טמפרטורה ולחות מ- SHT25
קריאת ערכי טמפרטורה ולחות מ- SHT25

I2C הוא ממשק דו-חוטי שמשתמש רק בשני חוטים כדי לתקשר עם התקן הראשי. האחד הוא SCL (שעון סידורי) והשני הוא SDA (נתונים סידוריים). לכל מכשיר עבדים יש כתובת ייחודית. ל- SHT 25 יש גם כתובת של 8 סיביות וניתן לגשת אליה באמצעות כתובת 0x44. יש לו 8 סיביות של הכתובת שבה 7 סיביות הן כתובת בפועל ובעוד סיבית LSB הימנית ביותר משמשת לאותת קריאה מהמכשיר או כתיבה אליו. אם סיבית 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 היא פלטפורמת IoT. ThingSpeak הוא שירות אינטרנט בחינם המאפשר לך לאסוף ולאחסן נתוני חיישנים בענן. MQTT הוא פרוטוקול נפוץ המשמש במערכות IoT לחיבור התקנים וחיישנים ברמה נמוכה. MQTT משמש להעברת הודעות קצרות אל ומתווך. ThingSpeak הוסיפה לאחרונה מתווך MQTT כך שמכשירים יוכלו לשלוח הודעות ל- ThingSpeak. תוכל לבצע את ההליך להגדרת ערוץ ThingSpeak מהפוסט הזה

ThingSpeak MQTT

MQTT היא ארכיטקטורת פרסום/הרשמה אשר מפותחת בעיקר לחיבור רוחב פס והתקנים מוגבלים בחשמל ברשתות אלחוטיות. זהו פרוטוקול פשוט וקל שפועל על שקעי TCP/IP או WebSockets. ניתן לאבטח את MQTT באמצעות WebSockets באמצעות SSL. ארכיטקטורת הפרסום/הרשמה מאפשרת לדחוף הודעות למכשירי הלקוח מבלי שהמכשיר יצטרך לבצע סקר רציף של השרת. לקוח הוא כל מכשיר המתחבר לברוקר ויכול לפרסם או להירשם לנושאים לגישה למידע. נושא מכיל את נתוני הניתוב עבור הברוקר. כל לקוח שרוצה לשלוח הודעות מפרסם אותם לנושא מסוים, וכל לקוח שרוצה לקבל הודעות נרשם לנושא מסוים.

פרסם והירשם באמצעות ThingSpeak MQTT

  • פרסום לערוצי עדכון ערוץ /פרסום /
  • פרסום לשדה מסוים ערוצים/פרסום/שדות/שדה/
  • הירשם לערוץ שדה הערוצים/הירשם //
  • הירשם לערוצי הפיד של הערוץ הפרטי // הירשם/שדות/שדה/
  • הירשם לכל תחומי הערוץ. ערוצים // subscribe/fields/feild/

task voidWiFiCallback ()

{

Serial.println ("taskWiFiCallbackStarted");

Serial.print ("פסק זמן למשימה זו: / t");

Serial.println (tWiFi.getTimeout ());

אם (! mqttCli.connected ())

{

Serial.println ("הלקוח לא מחובר");

חבר מחדש MQTT ();

}

String topicString = "ערוצים/"+מחרוזת (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 (לח, 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. אנו ממוצעים את ערכי החמישה-fay של טמפרטורה ולחות. בכל פעם שהערך של הערך האחרון גדול מהערך הממוצע. היא תפעיל הודעת דוא"ל "זה יום חם". וכאשר הוא נמוך מהערך הממוצע. זה יפעיל הודעת דוא"ל "איזה יום יפה". כל יום בסביבות 10:00 בבוקר (IST) נקבל הודעת דוא"ל

channelID = ******;

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

moistData = thingSpeakRead (channelID, 'Fields', 3, 'NumDays', 5); tempData = thingSpeakRead (channelID, 'Fields', 1, 'NumDays', 5);

perHumid = max (moistData) -min (moistData);

humidValue = 0.1*perHumid+min (moistData);

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

tempValue = 0.1*perTemp+min (tempData);

urlTemp = strcat ('https://api.thingspeak.com/channels/', string (channelID), '/fields/1/last.txt');

urlHumid = strcat ('https://api.thingspeak.com/channels/', string (channelID), '/fields/3/last.txt'); lastTempValue = str2num (webread (urlTemp)); lastHumidValue = str2num (webread (urlHumid));

אם (lastTempValue

if (lastTempValue> tempValue || lastHumidValue> humidValue)

plantMessage = 'זה יום חם.'; webwrite (iftttURL, 'value1', plantMessage, 'value2', lastTempValue, 'value3', lastHumidValue); סוֹף

שלב 8: קוד כולל

קוד כולל
קוד כולל
קוד כולל
קוד כולל
קוד כולל
קוד כולל

קוד כולל

הקוד הכולל זמין במאגר GitHub זה

מגבלות

  • יש כמה בעיות בפרסום הנתונים באמצעות שיטת פרסום עבור חלק גדול מהנתונים. כדי לפתור בעיה זו אנו משתמשים בפונקציית write ()
  • יש לעצב את SPIFFS לפני העלאת הנתונים החדשים ל- SPIFFS.
  • אין להשתמש בפונקציית השהיית (). עיכוב () מעכב את פעולת הרקע. במקום זאת, צור עיכובים באמצעות מילי () רק במקרה הצורך

נקודות זכות

  • ESP826 WebServer
  • מתזמן משימות
  • SHT 25
  • ממשק API של ThingSpeak MQTT
  • IFTTT
  • PubSubClient

מוּמלָץ: