תחנת מזג אוויר ביתית של ESP-Now: 9 שלבים (עם תמונות)
תחנת מזג אוויר ביתית של ESP-Now: 9 שלבים (עם תמונות)
Anonim
תחנת מזג אוויר ביתית של ESP-Now
תחנת מזג אוויר ביתית של ESP-Now

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

שלב 1: פרטי עיצוב

פרטי עיצוב
פרטי עיצוב

רציתי שיהיו לי תחנות חיישנים שונות שאוכל למקם אותן במקומות שונים ולדווח עליהן לתחנה מרכזית אחת (או רכזת) שתשמור את המידע. לאחר שניסיתי רעיונות שונים, החלטתי להשתמש בפרוטוקול ESP-Now של אספרסיף, מכיוון שהוא מאפשר תקשורת מהירה ישירות בין מכשירים. אתה יכול לקרוא קצת על ESP-Now כאן והמאגר הזה של GitHub היה חלק גדול מההשראה שלי.

התמונה הראשונה מציגה את פריסת המערכת. כל חיישן מדווח על מדידותיו להתקן שער שמעביר את הנתונים לשרת הראשי באמצעות חיבור סידורי קווי. הסיבה לכך היא שפרוטוקול ESP-Now אינו יכול להיות פעיל במקביל לחיבור WIFI. כדי שמשתמש יכנס לדף האינטרנט, WIFI יהיה חייב להיות מופעל כל הזמן, ואז זה לא מאפשר את השימוש בתקשורת ESP-Now באותו מכשיר. בעוד שהתקן השער חייב להיות התקן מבוסס Espressif (המסוגל ESP-Now), השרת הראשי יכול להיות כל התקן המסוגל להריץ דף אינטרנט.

חלק מתחנות החיישנים היו פועלות על סוללות (או סוללות טעונות סולאריות) ולחלקן פשוט יש חשמל. עם זאת, רציתי שכולם ישתמשו בכמה שפחות כוח ושם תכונת ה"שינה העמוקה "הזמינה למכשירי ESP8266 ו- ESP32 עוזרת ביותר. תחנות החיישנים היו מתעוררות מדי פעם, לוקחות מדידות ושולחות אותן למכשיר השער וחוזרות לישון במשך פרק זמן מתוכנן מראש. תקופת ההתעוררות שלהם של כ- 300ms בלבד כל 5 דקות (במקרה שלי) מפחיתה את צריכת החשמל שלהם באופן משמעותי.

שלב 2: חיישנים

חיישנים
חיישנים
חיישנים
חיישנים

ישנם חיישנים שונים לבחירתם למדידת פרמטרים סביבתיים. החלטתי להישאר עם חיישנים בעלי יכולת תקשורת I2C בלבד, מכיוון שהוא מאפשר מדידות מהירות ויעבוד על כל המכשירים שיש לי. במקום לעבוד ישירות עם מחשבי IC, חיפשתי מודולים מוכנים לשימוש בעלי אותם סיכות סימון לפשט את העיצובים שלי. התחלתי רק מתוך רצון למדוד טמפרטורה ולחות ולכן בחרתי במודול מבוסס SI7021. מאוחר יותר רציתי גם חיישן שיכול למדוד לחץ והחלטתי לנסות את מודולי החיישנים מבוססי BME280. בחלק מהמיקומים אפילו רציתי לעקוב אחר רמות האור ומודול BH1750 היה אידיאלי לכך כמודול חיישן נפרד. קניתי את מודולי החיישנים שלי מאיביי ואלו המודולים שקיבלתי:

  • BME280 (GY-BMP/E280), מודד טמפרטורה, לחות ולחץ
  • SI7021 (GY-21), מודד טמפרטורה ולחות
  • BH1750 (GY-302), מודד אור

ישנם שני סגנונות של המודולים GY-BMP/E280 PCB. שניהם חולקים את אותו סיכה עבור סיכות 1 עד 4. במודול אחד יש שני סיכות נוספות, CSB ו- SDO. שני הפינים מחוברים מראש בגרסת 4 הפינים של המודול. רמת סיכת ה- SDO קובעת את כתובת I2C (קרקע = ברירת מחדל של 0x76, VCC = 0x77). יש לחבר את סיכת ה- CSB ל- VCC כדי לבחור בממשק I2C. אני מעדיף את המודול בן 4 הפינים, מכיוון שהוא מוכן לשימוש כפי שהוא למטרה שלי.

באופן כללי, המודולים האלה נוחים מאוד לשימוש מכיוון שהם כבר מותקנים נגדי משיכה לקווי התקשורת וכולם פועלים על 3.3V ולכן הם תואמים ללוחות מבוססי ESP8266. שים לב שהסיכות במעגלי ה- IC של חיישן אלה בדרך כלל אינם סובלניים 5V, כך שהממשק שלהם ישירות למשהו כמו Undu Arduino עלול לפגוע בהם לצמיתות.

שלב 3: תחנות חיישן

תחנות חיישן
תחנות חיישן

כאמור, כל תחנות החיישנים יהיו מכשירי Espressif המשתמשים בפרוטוקול התקשורת ESP-Now. מפרויקטים קודמים וניסויים, היו לי מספר מכשירים שונים לרשותי לביצוע הבדיקות הראשוניות שלי ושילובם בעיצוב הסופי. היו לי את המכשירים הבאים בהישג יד:

  • שני מודולים של ESP-01
  • שני לוחות פיתוח Wemos D1 מיני
  • לוחות פיתוח אחד של Lolin ESP8266
  • לוח ערכת WIFI טורי אחד ESP12E
  • לוח GOOUUU ESP32 אחד (לוח פיתוח 38 פינים)

היה לי גם לוח פיתוח של Wemos D1 R2, אך היו בו בעיות שלא אפשרו לו להתעורר משינה עמוקה וכמכשיר דרך דרך זה יתרסק ולא יופעל מחדש כראוי. תיקנתי אותו מאוחר יותר והוא הפך לחלק מפרויקט פתיחת דלת המוסך. על מנת ש"שינה עמוקה "תפעל, יש לחבר את סיכת ה- RST של ה- ESP8266 לסיכה GPIO16, כך שעוצב השינה יכול להעיר את המכשיר. באופן אידיאלי חיבור זה צריך להתבצע עם דיודת Schottky (קתודה ל- GPIO16) כך שהאיפוס הידני באמצעות חיבור USB-TLL במהלך התכנות עדיין פועל. עם זאת, נגד בעל ערך נמוך (300 אייש אוהם) או אפילו חיבור חוט ישיר עדיין יכול להיות מוצלח.

מודולי ESP-01 אינם מאפשרים גישה נוחה לסיכה GPIO16 וחייבים להלחם ישירות ל- IC. זוהי משימה לא פשוטה ואני לא ממליץ עליה לכולם. לוח ערכות WIFI הטורי של ESP12E היה פריט קצת חידוש ודרש לא מעט שינויים כדי שזה יהיה שימושי למטרה שלי. הלוחות הקלים ביותר לשימוש היו הלוחות מסוג Wemos D1 mini ולוח הלולין. התקני ESP32 אינם דורשים שום שינויים כדי ששינה עמוקה תפעל. לאנדראס ספייס יש מדריך נחמד בנושא.

שלב 4: תחנת חיישנים ESP-01

תחנת חיישנים ESP-01
תחנת חיישנים ESP-01
תחנת חיישנים ESP-01
תחנת חיישנים ESP-01
תחנת חיישנים ESP-01
תחנת חיישנים ESP-01

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

לוחות ESP-01 הם קומפקטיים מאוד ויש להם מעט סיכות IO דיגיטליות לעבודה, אך זה מספיק לממשק I2C. אולם הלוחות דורשים שינוי מסובך כדי לאפשר ל"שינה עמוקה "לעבוד. בתמונה המוצגת, חוט מולחם מהפינה הפינה (GPIO16) אל סיכת ה- RST בכותרת העליונה. החוט בו השתמשתי הוא חוט "תיקון" מבודד בקוטר 0.1 מ"מ. ציפוי הבידוד נמס בעת החימום, כך שניתן להלחים אותו לתיקון עקבות וכו 'במחשבי PCB ועדיין לא לדאוג ליצירת מכנסיים קצרים שבהם החוט יוצר קשר עם רכיבים אחרים. גודלו מקשה על העבודה איתו והלחמתי את החוט הזה במקומו תחת מיקרוסקופ (בסגנון חובבני/אספני בולים). זכור כי לכותרת בצד ימין יש מרווח פינים בגודל 0.1 אינץ '(2.54 מ"מ). התקנת דיודה שוטקי לא תהיה קלה כלל, אז החלטתי פשוט לנסות את החוט לבד ושתי היחידות כבר פועלות מעל חודש ללא בעיות.

המודולים הותקנו על שני לוחות אב טיפוס שיצרתי. אחד (מס '1) הוא לוח מתכנת המאפשר גם להתקין ולבדוק מודולי I2C, ואילו השני (מס' 2) הוא לוח פיתוח/בדיקה למכשירי I2C. עבור הלוח הראשון הלחמתי יחד מחבר זכר USB ישן ומחשב קטן כדי להפעיל את היחידה ישירות ממתאם קיר USB. ליחידה השנייה יש שקע DC רגיל ששונה כך שיתאים לכותרת מסוף הבורג והוא מופעל גם באמצעות מתאם קיר.

הסכימה מראה כיצד הם מחוברים וכיצד מתכנת עובד. אין לי שום מודולים אחרים של ESP-01, כך שלא היה לי צורך מיידי במתכנת. בעתיד סביר להניח שאכין עבורם PCB. לשני הלוחות הללו מותקן מודול החיישנים SI7021 מכיוון שלא התעניינתי למדידות לחץ במקומות אלה.

שלב 5: תחנת חיישן ערכת WIFI סידורי ESP 12E

תחנת חיישן ערכת WIFI סידורי ESP 12E
תחנת חיישן ערכת WIFI סידורי ESP 12E
תחנת חיישן ערכת WIFI סידורי ESP 12E
תחנת חיישן ערכת WIFI סידורי ESP 12E

לוח ערכת ה- WIFI הסידורי ESP12E לא נועד לפיתוח לא פחות מאשר להראות מה ניתן לעשות עם מכשיר זה. קניתי אותו מזמן כדי ללמוד קצת על תכנות ESP8266 ולבסוף החלטתי לתת לו שימוש חדש. הסרתי את כל הלדים שהותקנו להפגנות והוספתי כותרת תכנות USB וכן כותרת I2C המתאימה למודולים בהם אני משתמשת. היה לו נגד צילום CdS המחובר לפין הקלט האנלוגי שלו והחלטתי להשאיר אותו שם. היחידה הספציפית הזו תעקוב אחר סדנת המוסך שלי וחיישן הצילום שהספיק לה כדי ליידע אותי אם הנורות נשארו בטעות. לצורך מדידת האור נירמלתי את הקריאות כדי לתת לי אחוז תפוקה וכל דבר מעל "5" בלילה פירושו שהאורות נותרו דולקים או שדלת לבית לא הייתה סגורה כראוי. סיכות RST ו- GPIO16 מסומנות בבירור על הלוח והדיודה Schottky המחברת ביניהם הותקנה בחלק התחתון של הלוח הלוח. הוא מופעל באמצעות לוח USB טורי המחובר ישירות למטען קיר USB. יש לי תוספות של לוחות USB-סדרתיים אלה ואני לא צריך את זה כרגע.

לא ערכתי סכמטי ללוח זה ובאופן כללי לא ממליץ לקנות אחד לשימוש למטרה זו. לוחות Wemos D1 Mini הרבה יותר מתאימים ונדון בהמשך. למרות שאם יש לך אחד כזה וזקוק לעצות, אשמח לעזור.

שלב 6: תחנות חיישן מיני D1

תחנות חיישן מיני D1
תחנות חיישן מיני D1
תחנות חיישן מיני D1
תחנות חיישן מיני D1
תחנות חיישן מיני D1
תחנות חיישן מיני D1

לוחות הפיתוח של ESP8266 מסוג Wemos D1 Mini הם המועדפים עלי לשימוש ואם הייתי צריך לעשות את זה מחדש, פשוט הייתי משתמש באלה. יש להם מספר רב של סיכות IO נגישות, ניתנות לתכנות ישירות באמצעות ה- Arduino IDE ועדיין די קומפקטיות. סיכת D0 היא GPIO16 בלוחות אלה וחיבור דיודה שוטקי די קל לביצוע. הסכימה מראה כיצד יש לי חיבור לוחות אלה ושניהם משתמשים במודול החיישנים BME2808.

אחד משני הלוחות משמש לניטור מזג האוויר בחוץ ופועל מתוך סוללת חשמל סולארית. פאנל סולארי בגודל 165 מ"מ על 135 מ"מ (6 וולט, 3.5 וואט) מחובר למודול טעינת סוללת ליתיום TP4056 (ראה תרשים הגדרת תחנת חיישן הסוללה המופעלת באמצעות סולארית). מודול הטעינה הספציפי הזה (03962A) כולל מעגל הגנה מפני סוללות הדרוש אם הסוללה (חבילה) אינה מכילה כזו. סוללת הליתיום-יון ממוחזרת מארז סוללות ישן למחשב נייד והיא עדיין יכולה להחזיק מספיק טעינה להפעלת לוח D1 Mini, במיוחד כאשר השינה עמוקה מופעלת. הלוח הונח במארז פלסטיק כדי להגן עליו במקצת מפני האלמנטים. עם זאת, על מנת שהחלק הפנימי ייחשף לטמפרטורה ולחות בחוץ, נקדחו שני חורים בקוטר 25 מ"מ בצדדים מנוגדים וכיסו (מבפנים) בבד נוף שחור. הבד נועד לאפשר לחות לחדור ולכן ניתן למדוד את הלחות. בקצה אחד של המתחם היה מקדח חור קטן וחלון פלסטיק שקוף הותקן. כאן הוצב מודול חיישן האור BH1750. היחידה כולה ממוקמת בחוץ בצל (לא בשמש ישירה) כאשר חיישן האור פונה החוצה. הוא פועל מהסוללה המופעלת באמצעות סולארית במשך כמעט 4 שבועות במזג האוויר החורפי הגשום/המעונן שלנו כאן.

שלב 7: שער ושירות אינטרנט

שער ושירותי אינטרנט
שער ושירותי אינטרנט
שער ושרת אינטרנט
שער ושרת אינטרנט
שער ושירותי אינטרנט
שער ושירותי אינטרנט

לוח Lolin NodeMCU V3 (ESP8266) שימש למכשיר ESP-Now Gateway ולוח ESP32 (לוח GOOUUU) עבור שרת האינטרנט. כמעט כל לוח ESP8266 או אפילו ESP32 יכול היה לשמש כמכשיר השער, זה היה פשוט הלוח שנותר לי לאחר שהשתמשתי בכל שאר הלוחות שהיו לי.

השתמשתי בלוח ESP32 מכיוון שאני צריך לוח עם קצת יותר כוח מחשוב כדי לאסוף את הנתונים, למיין אותם, לשמור אותם לאחסון ולהפעיל את שרת האינטרנט. בעתיד עשוי להיות לו גם חיישן משלו ותצוגה מקומית (OLED). לאחסון נעשה שימוש בכרטיס SD עם מתאם מותאם אישית. השתמשתי במתאם microSD נפוץ לכרטיס SD והלחמתי כותרת זכר (פין) בגובה 7 פינים למגעים המצופים. עקבתי אחר העצה מ- GitHub זה לביצוע החיבורים.

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

שלב 8: תוכנה

תוֹכנָה
תוֹכנָה

התקנים ESP8266 (ESP-NOW)

התוכנה לכל המכשירים נכתבה באמצעות Arduino IDE (v1.87). כל תחנת חיישנים מפעילה למעשה את הקוד הזהה. הם נבדלים רק לפי פינים המשמשים לתקשורת I2C ולאיזה מודול חיישן הם מחוברים. והכי חשוב הם שולחים את חבילת נתוני המדידה זהים לתחנת ESP-Now Gateway, בלי קשר אם יש להם אותו חיישן. המשמעות היא שחלק מתחנות החיישנים ימלאו ערכי דמה למדידות לחץ ורמת אור אם אין להם חיישנים שיספקו ערכים אמיתיים. הקוד לכל תחנה והשער הותאם מדוגמאות של אנתוני אלדר ב- GitHub זה.

קוד התקן השער השתמש ב- SoftwareSerial כדי לתקשר עם שרת האינטרנט, מכיוון של- ESP8266 יש רק UART חומרה אחד המתפקד במלואו. כשהוא פועל בקצב שידור מקסימלי של 9600, הוא נראה די אמין ומספיק לשליחת מנות נתונים קטנות יחסית אלה. התקן השער מתוכנת גם עם כתובת MAC פרטית. הסיבה לכך היא שאם יש צורך בהחלפה, לא צריך לתכנת את כל תחנות החיישנים מחדש עם כתובת ה- MAC החדשה של הנמען.

ESP32 (שרת אינטרנט)

כל תחנת חיישנים שולחת את חבילת הנתונים שלה להתקן השער שמעביר אותה לשרת האינטרנט. יחד עם חבילת הנתונים כתובת ה- MAC של תחנת החיישן נשלחת גם כדי לזהות כל תחנה. לשרת האינטרנט יש טבלת "חיפוש" לקביעת המיקום של כל חיישן וממיין את הנתונים בהתאם. מרווח הזמן בין המדידות נקבע ל -5 דקות בתוספת גורם אקראי כדי להימנע מכך שחיישנים "יתנגשו" זה בזה בעת שליחה למכשיר דרך השער.

נתב WIFI הביתי הוגדר להקצות כתובת IP קבועה לשרת האינטרנט כאשר הוא מתחבר ל- WIFI. עבור שלי זה היה 192.168.1.111. הקלדת כתובת זו בכל דפדפן תתחבר לשרת האינטרנט של תחנת מזג האוויר כל עוד המשתמש נמצא בטווח WIFI של (והתחבר אליו) לרשת הביתית. כאשר המשתמש מתחבר לדף האינטרנט, שרת האינטרנט מגיב בטבלת המדידות וכולל את זמן המדידה האחרונה של כל חיישן. בדרך זו אם תחנת חיישנים הופכת ללא תגובה, ניתן לראות זאת מהטבלה אם קריאה בת יותר מ- 5-6 דקות.

הנתונים נשמרים בקובצי טקסט בודדים בכרטיס SD וניתן להוריד אותם גם מדף האינטרנט. ניתן לייבא אותו לאקסל או כל יישום אחר לתכנון נתונים

אפליקציית אנדרואיד

כדי להקל על הצפייה במידע מזג האוויר המקומי בסמארטפון, יצרתי אפליקציית אנדרואיד יחסית באמצעות Android Studio. הוא זמין בדף GitHub שלי כאן. הוא משתמש במחלקת webview כדי לטעון את דף האינטרנט מהשרת וככזה פונקציונליות מוגבלת. זה לא מסוגל להוריד את קבצי הנתונים וממילא לא היה לי צורך באלה בטלפון שלי.

שלב 9: תוצאות

תוצאות
תוצאות

לבסוף, הנה כמה תוצאות מתחנת מזג האוויר הביתית שלי. הנתונים הורדו על מחשב נייד ותואמו ב- Matlab. צירפתי את סקריפטים של Matlab ותוכל להריץ אותם גם באוקטבה של GNU. החיישן החיצוני פועל על הסוללה הטעונה הסולרית שלו במשך כמעט 4 שבועות ולעתים רחוקות יש לנו שמש בתקופה זו של השנה. עד כה הכל עובד טוב וכולם במשפחה יכולים לחפש את מזג האוויר בעצמם במקום לשאול אותי עכשיו!