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

אפליקציית Weather Weather באמצעות Esp8266: 7 שלבים
אפליקציית Weather Weather באמצעות Esp8266: 7 שלבים

וִידֵאוֹ: אפליקציית Weather Weather באמצעות Esp8266: 7 שלבים

וִידֵאוֹ: אפליקציית Weather Weather באמצעות Esp8266: 7 שלבים
וִידֵאוֹ: DIY Умный котел отопления своими руками простой WiFi ZigBee терморегулятор TUYA 2024, מאי
Anonim
אפליקציית מזג אוויר אינטרנט באמצעות Esp8266
אפליקציית מזג אוויר אינטרנט באמצעות Esp8266

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

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

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

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

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

1. SHT31

2. חזרת Adafruit 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 מקומי) בשיחת החזרה הזו
  • במשימה 3 אנו מפרסמים את קריאת החיישן לענן ה- ThingSpeak API
  • משימה 3 פועלת כל חמש שניות עד שהגיעה לפסק הזמן שלה כלומר 50 שניות
  • כאשר משימה 3 מגיעה לפסק הזמן שלה משימה 1 מופעלת שוב ומשימה 3 מושבתת.
  • כשאין התקשרות חוזרת או שהמכשיר אינו פעיל הוא עובר לשינה קלה ובכך חוסך חשמל.

מתזמן ts;

// משימות עבור i2c, אחסון שרת אינטרנט ופרסום ב- Thingspeak

משימה 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 משימה I2CCallback ()

{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 שהיא יציאת ברירת מחדל לפרוטוקול תקשורת אינטרנט, פרוטוקול העברת הטקסט (HTTP)
  • הזן 192.168.1.4 בדפדפן האינטרנט שלך עבור דף אינטרנט מבוא ו- 192.168.1.4/ערך לקריאת חיישני דף אינטרנט

// סטטי Ip עבור AP

IPAddress 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 והעבר ל- AP

const char APssid = "********";

const char APpass = "********";

שרת ESP8266 WebServer (80);

הגדרת בטל {

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);

אם (סטטוס == נכון) {

Serial.print ("הגדרת soft-AP …");

בוליאני ap = WiFi.softAP (APssid, APpass);

אם (ap == true) {

Serial.print ("מחובר ל: / t");

// IPAddress myIP = WiFi.softAPIP ();

Serial.println (WiFi.softAPIP ());

}

server.begin ();

}

}

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

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

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

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

void 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 (); }

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

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

נקודות זכות:

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

מוּמלָץ: