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

אפליקציית טמפרטורה ולחות THINGSPEAK באמצעות ESP8266: 9 שלבים
אפליקציית טמפרטורה ולחות THINGSPEAK באמצעות ESP8266: 9 שלבים

וִידֵאוֹ: אפליקציית טמפרטורה ולחות THINGSPEAK באמצעות ESP8266: 9 שלבים

וִידֵאוֹ: אפליקציית טמפרטורה ולחות THINGSPEAK באמצעות ESP8266: 9 שלבים
וִידֵאוֹ: תיכנות בקר טמפרטורה דיגיטלי חום / קור 2024, נוֹבֶמבֶּר
Anonim
אפליקציית טמפרטורה ולחות THINGSPEAK באמצעות ESP8266
אפליקציית טמפרטורה ולחות THINGSPEAK באמצעות ESP8266

תוך כדי ההתעסקות בדברים האלקטרוניים שלי, קיבלתי את הרעיון הזה להכין אפליקציית מזג אוויר מבוססת אינטרנט. אפליקציית אינטרנט זו משתמשת בחיישן SHT31 לצורך קבלת נתוני הטמפרטורה והלחות בזמן אמת. פרסנו את הפרויקט שלנו במודול WiFi ESP8266. מקוון או לא מקוון! אין צורך לדאוג, בין אם אתה מחובר או לא מקוון תקבל את עדכוני מזג האוויר מכל מקום ובכל זמן. אפליקציית אינטרנט זו מפרסמת נתונים לשרת האינטרנט המקומי וגם לענן. עבור פעולות ענן, אנו משתמשים ב- ThingSpeak API. SHT31 משתמש ב- I2C כדי לקבל את הנתונים מהחיישן.

SHT 31 הוא חיישני טמפרטורה ולחות מתוצרת Sensirion. SHT31 מספק רמת דיוק גבוהה סביב ± 2% לחות יחסית. טווח הלחות שלו נע בין 0 ל -100% וטווח הטמפרטורות הוא בין -40 ל -125 מעלות צלזיוס. זה הרבה יותר אמין ומהיר עם 8 שניות זמן תגובה של חיישן. הפונקציונליות שלה כוללת עיבוד אותות משופר ותאימות I2C. יש לו אופני פעולה שונים שהופכים אותו לחסכוני בחשמל.

במדריך זה יש לנו ממשק SHT 31 עם לוח Adafruit Huzzah. לקריאת ערכי טמפרטורה ולחות השתמשנו במגן ESP8266 I2C. מתאם זה הופך את כל הפינים לנגישים למשתמש ומציע סביבת I2C ידידותית למשתמש.

שלב 1: נדרשת חומרה

חומרה נדרשת
חומרה נדרשת
חומרה נדרשת
חומרה נדרשת
חומרה נדרשת
חומרה נדרשת

חומרה המשמשת לביצוע משימה זו:

  1. SHT 31
  2. Adafruit Huzzah ESP8266
  3. מתאם I2C ESP8266
  4. כבל I2C

שלב 2: חיבורי חומרה

חיבורי חומרה
חיבורי חומרה

שלב זה כולל את מדריך החיבור לחומרה. סעיף זה בעצם מסביר את חיבורי החיווט הנדרשים בין החיישן לבין ה- ESP8266. החיבורים הם כדלקמן.

  1. SHT31 עובד על I2C. התמונה למעלה מדגימה את הקשר בין מודול ESP8266 ו- SHT31. אנו משתמשים בכבל I2C בשביל זה או שנוכל להשתמש ב -4 חוטי מגשר F עד F.
  2. חוט אחד משמש ל- Vcc, החוט השני ל- GND ושניים אחרים ל- SDA ו- SCL בהתאמה
  3. על פי מתאם I2C pin2 וסיכה 14 של לוח ESP8266 משמשים כ- SDA ו- SCL בהתאמה

שלב 3: קוד לתזמון משימות

קוד לתזמון משימות
קוד לתזמון משימות

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

  • קרא את הנתונים מ- SHT11 באמצעות פרוטוקול I2C
  • לארח את שרת האינטרנט ולפרסם את קריאת החיישן לדף האינטרנט
  • פרסם את קריאות החיישן ב- ThingSpeak API

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

  • משימה 1 מיועדת לקריאת ערך החיישן משימה זו פועלת למשך שנייה אחת עד שהיא מגיעה לפסק זמן של 10 שניות.
  • כאשר משימה 1 מגיעה לפסק הזמן פעלה משימה 2 ומשימה 1 מושבתת.
  • אנו מתחברים ל- AP בשיחה זו, שני משתנים בוליאנים נלקחים כדי לטפל במעבר בין STA ל- AP

  • במשימה 2 אנו מארחים שרת אינטרנט בכתובת 192.168.1.4. משימה זו נמשכת כל 5 שניות עד שהיא מגיעה לפסק הזמן שלה שהוא 50 שניות
  • כאשר משימה 2 מגיעה לפסק זמן משימה 3 מופעלת ומשימה 2 מושבתת.
  • אנו מתחברים ל- STA (IP מקומי) ב Calback זה במשימה 3 אנו מפרסמים את קריאת החיישן לענן ה- ThingSpeak API של ענן
  • משימה 3 פועלת כל חמש שניות עד שהגיעה לפסק הזמן שלה כלומר 50 שניות
  • כאשר משימה 3 מגיעה לפסק הזמן, משימה 1 מופעלת שוב ומשימה 3 מושבתת.
  • כשאין התקשרות חוזרת או שהמכשיר אינו פעיל הוא עובר לשינה קלה ובכך חוסך חשמל.

void taskI2CCallback ();

void taskI2CDisable (); void taskAPCallback (); void taskAPDisable (); void taskWiFiCallback (); void taskWiFiDisable (); // משימות עבור i2c, אירוח שרת אינטרנט ופוסט ב- Task2 TI2C (1 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CDisable); משימה tI2C (1 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CDisable); TAP Task (5*TASK_SECOND, TASK_FOREVER, & taskAPCallback, & ts, false, NULL, & taskAPDisable); משימה tWiFi (5* TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable); // פסק זמן למשימות tI2C.setTimeout (10 * TASK_SECOND); tAP.setTimeout (50 * TASK_SECOND); tWiFi.setTimeout (50 * TASK_SECOND); // אפשר את משימת I2C tI2C.enable ();

שלב 4: קוד לקריאת ערכי טמפרטורה ולחות

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

אנו משתמשים בספריית Wire.h כדי לקרוא את ערכי הטמפרטורה והלחות. ספרייה זו מאפשרת תקשורת i2c בין החיישן להתקן הראשי. 0x44 היא כתובת I2C עבור SHT31.

SHT31 פועל בצורה שונה של פעולות. תוכל להתייחס לגליון הנתונים לשם כך. אנו משתמשים ב 0x2C ו- 0x06 כ- MSB ו- LSB בהתאמה לפעולת זריקה בודדת.

// I2C callback void taskI2CCallback () {Serial.println ("taskI2CStarted"); שורש int ללא חתום [6]; // התחל את השידור מ- 0x44; Wire.beginTransmission (Addr); // עבור שידור זריקה אחת עם הדירות גבוהה אנו משתמשים ב- 0x2C (MSB) וב- 0x06 (LSB) Wire.write (0x2C); Wire.write (0x06); // סיום שידור Wire.endTransmission (); // לבקש בתים מ- 0x44 Wire.beginTransmission (Addr); Wire.endTransmission (); Wire.requestFrom (Addr, 6); אם (Wire.available () == 6) {// data [0] ונתונים [1] מכילים טמפרטורת 16 ביט. root [0] = Wire.read (); root [1] = Wire.read (); // נתונים [2] מכיל 8 סיביות של שורש CRC [2] = Wire.read (); // נתונים [3] ונתונים [4] מכילים 16 סיביות של שורש לחות [3] = Wire.read (); root [4] = Wire.read (); // data [5] מורכב משורש CRC של 8 סיביות [5] = Wire.read (); } int temp = (root [0] * 256) + root [1]; // העברת MSB ב -8 סיביות הוספת LSB float cTemp = -45.0 + (175.0 * temp /65535.0); צף fTemp = (cTemp * 1.8) + 32.0; // העבר את ה- MSB ב -8 סיביות והוסף אותו LSB לחלק ברזולוציה מלאה ו * 100 לאחוזי לחות צפים = (100.0 * ((root [3] * 256.0) + root [4])) /65535.0; tempC = cTemp; tempF = fTemp; לח = לחות; Serial.print ("טמפרטורה ב- C: / t"); Serial.println (מחרוזת (cTemp, 1)); Serial.print ("טמפרטורה ב- F: / t"); Serial.println (מחרוזת (fTemp, 1)); Serial.print ("לחות: / t"); Serial.println (מחרוזת (לחות, 1)); }

שלב 5: קוד לאירוח שרת אינטרנט

קוד לאירוח שרת אינטרנט
קוד לאירוח שרת אינטרנט
קוד לאירוח שרת אינטרנט
קוד לאירוח שרת אינטרנט

אירחנו שרת אינטרנט מהמכשיר שלנו ב- IP סטטי.

ספריית ESP8266 WebServer משמשת לאירוח שרת האינטרנט

  • ראשית עלינו להצהיר על כתובת IP, שער ומסכת רשת כדי ליצור את ה- IP הסטטי שלנו
  • כעת הצהיר על ssid וסיסמה עבור נקודת הגישה שלך. התחבר לנקודת הגישה מכל מכשיר STA
  • לארח את השרת ביציאה 80 שהיא יציאת ברירת מחדל לפרוטוקול תקשורת אינטרנט, פרוטוקול העברת הטקסט (Hypertext Transfer Protocol (HTTP) הזן 192.168.1.4 בדפדפן האינטרנט שלך עבור דף אינטרנט מבוא ו- 192.168.1.4/ערך לקריאת חיישני דף אינטרנט

// סטטי IP עבור APIPAddress ap_local_IP (192, 168, 1, 4); IPAddress ap_gateway (192, 168, 1, 254); IPAddress ap_subnet (255, 255, 255, 0); // ssid ו- AP עבור WiFi מקומי במצב STA const char WiFissid = "*********"; const char WiFipass = "*********"; // ssid ו- pass עבור AP const char APssid = "********"; const char APpass = "********"; שרת ESP8266 WebServer (80); הגדרת void {server.on ("/", onHandleDataRoot); server.on ("/Value", onHandleDataFeed); server.onNotFound (onHandleNotFound);} void taskAPCallback () {Serial.println ("taskAP התחיל"); server.handleClient (); } void onHandleDataRoot () {server.send (200, "text/html", PAGE1); } void onHandleDataFeed () {server.send (200, "text/html", PAGE2); } void onHandleNotFound () {String message = "קובץ לא נמצא / n / n"; message += "URI:"; הודעה += server.uri (); message += "\ n שיטה:"; הודעה += (server.method () == HTTP_GET)? "GET": "POST"; הודעה += "\ n ארגומנטים:"; הודעה += server.args (); הודעה += "\ n"; server.send (404, "טקסט/רגיל", הודעה); } חיבור מחדש ריק של APWiFi () {WiFi.mode (WIFI_AP_STA); עיכוב (100); WiFi.disconnect (); סטטוס בוליאני = WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet); if (status == true) {Serial.print ("הגדרת AP-soft…"); בוליאני ap = WiFi.softAP (APssid, APpass); if (ap == true) {Serial.print ("מחובר ל: / t"); // IPAddress myIP = WiFi.softAPIP (); Serial.println (WiFi.softAPIP ()); } server.begin ();

}

שלב 6: הגדרת Thingspeak

הגדרת Thingspeak
הגדרת Thingspeak
הגדרת Thingspeak
הגדרת Thingspeak
הגדרת Thingspeak
הגדרת Thingspeak

ThingSpeak היא פלטפורמת IoT. ThingSpeak הוא שירות אינטרנט בחינם המאפשר לך לאסוף ולאחסן נתוני חיישנים בענן.

בשלב זה, אני אתן לך הליך קצר להגדרת חשבון Thing Speak שלך

  • הירשם לחשבון משתמש חדש ב- ThingSpeak
  • צור ערוץ חדש על ידי בחירת ערוצים, הערוצים שלי ולאחר מכן ערוץ חדש
  • ערוך את השדות שלך
  • שדות אלה מכילים את נתוני החיישנים שלך
  • שים לב למפתח ה- API ולמזהה הערוץ של Write API
  • בשרטוט Arduino שלך, אתה יכול להשתמש בספריית ThingSpeak עבור Arduino או שאתה יכול להעביר את הנתונים ישירות ל- ThingSpeak API
  • השלב הבא מפרט לגבי פרסום התוכן ל- Thing Speak API

שלב 7: קוד לפרסום נתונים לדבר דבר

קוד לפרסום נתונים לדבר דבר
קוד לפרסום נתונים לדבר דבר
קוד לפרסום נתונים לדבר דבר
קוד לפרסום נתונים לדבר דבר
קוד לפרסום נתונים לדבר דבר
קוד לפרסום נתונים לדבר דבר
קוד לפרסום נתונים לדבר דבר
קוד לפרסום נתונים לדבר דבר

כאן אנו מפרסמים את קריאות החיישן ל- Thing Speak. יש צורך בשלבים הבאים להשלמת משימה זו-

  • צור את חשבונך בדבר מדבר צור ערוצים ושדות לאחסון נתוני החיישנים שלך
  • אנו יכולים לקבל ולפרסם את הנתונים מ- ESP ל- thingSpeak ולהיפך באמצעות בקשות GET ו- POST ל- api.
  • אנו יכולים לפרסם את הנתונים שלנו ל- ThingSpeak כדלקמן

id taskWiFiCallback () {WiFiClient wifiClient; if (wifiClient.connect (hostId, 80)) {String postStr = apiKey; postStr += "& field1 ="; postStr += מחרוזת (לחה); postStr += "& field2 ="; postStr += מחרוזת (tempC); postStr += "& field3 ="; postStr += מחרוזת (tempF); postStr += "\ r / n / r / n"; wifiClient.print ("POST /עדכון HTTP /1.1 / n"); wifiClient.print ("מארח: api.thingspeak.com / n"); wifiClient.print ("חיבור: סגור / n"); wifiClient.print ("X-THINGSPEAKAPIKEY:"+apiKey+"\ n"); wifiClient.print ("סוג תוכן: application/x-www-form-urlencoded / n"); wifiClient.print ("אורך התוכן:"); wifiClient.print (postStr.length ()); wifiClient.print ("\ n / n"); wifiClient.print (postStr); } wifiClient.stop (); }

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

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

שלב 9: נקודות זכות

  • Arduino JSON
  • ESP826 WebServer
  • מתזמן משימות
  • SHT 31
  • סריקת I2C
  • מדריך הוראות HIH6130
  • חוּט
  • NCD.io

מוּמלָץ: