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

עוד תחנת מזג אוויר חכמה, אבל : 6 שלבים (עם תמונות)
עוד תחנת מזג אוויר חכמה, אבל : 6 שלבים (עם תמונות)

וִידֵאוֹ: עוד תחנת מזג אוויר חכמה, אבל : 6 שלבים (עם תמונות)

וִידֵאוֹ: עוד תחנת מזג אוויר חכמה, אבל : 6 שלבים (עם תמונות)
וִידֵאוֹ: ככה זה כשיש לך חברה רוסיה 2024, יוני
Anonim
Image
Image
עוד תחנת מזג אוויר חכמה, אבל …
עוד תחנת מזג אוויר חכמה, אבל …
עוד תחנת מזג אוויר חכמה, אבל …
עוד תחנת מזג אוויר חכמה, אבל …
עוד תחנת מזג אוויר חכמה, אבל …
עוד תחנת מזג אוויר חכמה, אבל …

בסדר, אני יודע שיש כל כך הרבה תחנות מזג אוויר כאלה זמינות בכל מקום, אבל קח כמה דקות לראות את ההבדל …

  • צריכת חשמל נמוכה
  • 2 תצוגות נייר אלקטרוני…
  • אבל 10 מסכים שונים!
  • מבוסס ESP32
  • מד תאוצה וחיישני טמפרטורה / לחות
  • עדכון WiFi
  • מארז מודפס בתלת מימד

ועוד המון טריקים שימושיים …

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

אספקה

כפי שאתה יכול לראות, המערכת מורכבת משני מסכי נייר אלקטרוני וקופסה מודפסת תלת-ממדית. אבל יש בו הרבה דברים:

  • ESP32
  • מד תאוצה MPU6050 אחד
  • חיישן DHT22
  • סוללת LiPo
  • PCB לחיבור כל העניין
  • חוטים duPont תוצרת בית

וחיבור Wi-Fi. למעשה 3 רשתות מוכרזות, המערכת בודקת אותן אחת אחת עד שהיא מצליחה להתחבר.

שלב 1: מדוע עוד תחנת מזג אוויר?

למה עוד תחנת מזג אוויר?
למה עוד תחנת מזג אוויר?
למה עוד תחנת מזג אוויר?
למה עוד תחנת מזג אוויר?
למה עוד תחנת מזג אוויר?
למה עוד תחנת מזג אוויר?
למה עוד תחנת מזג אוויר?
למה עוד תחנת מזג אוויר?

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

מד התאוצה מזהה תנועה והתמצאות ומפעיל תצוגות.

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

המסכים מחוברים באמצעות SPI, חיפשתי לא מעט לפני שמצאתי את הפינים הנכונים לחיבורם ל- ESP32, בידיעה שאני צריך גם I2C למד התאוצה, סיכה לקריאת ה- DHT22 ועוד 2 למדידת מתח הסוללה. ה- ESP32 נטען כמעט במלואו! בידיעה שחלק מהסיכות הן לקריאה בלבד (השתמשתי באלה עבור חיישן DHT), לא ניתן להשתמש באחרים יחד עם Wifi, זה היה קצת מסובך למצוא את התצורה הנכונה.

ניתן לכוון את הקופסה ל -4 כיוונים, פלוס שטוח. בסך הכל זה הופך 4*2+2 = 10 סוגי מידע אפשריים להצגה עם 2 מסכים בלבד. אז זה מאפשר לך להציג הרבה דברים:

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

שלב 2: מה אתה צריך?

מה אתה צריך ?
מה אתה צריך ?
מה אתה צריך ?
מה אתה צריך ?
מה אתה צריך ?
מה אתה צריך ?
  • ESP32: מודול Lolin32 (הספק נמוך מאוד, מצויד במחבר סוללה, יכול לטעון את הסוללה באמצעות USB פלוס)
  • 2 תצוגות נייר: 4.2 אינץ 'ו -2.9 אינץ'. בחרתי את הדגמים מחנות Good Display.
  • חיישן DHT22
  • מד תאוצה MCU6050 - חיישן I2C gyrometer
  • סוללת LiPo
  • למדידת מתח הסוללה: 2 נגדים 10k, נגד 100k, קבל 100nF, טרנזיסטור MOSFET 1
  • הלחמה ומלחם, מעגל מודפס
  • גישה למדפסת תלת מימד למארז

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

על מנת לקבל את נתוני מזג האוויר, עליך גם להירשם בממשקי ה- API של מזג האוויר ולשים את המפתחות שלך במקומות הנכונים בקובץ 'Variables.h' (ראה להלן).

אתרי מזג אוויר:

  • אפיקסו
  • accuweather

שלב 3: הפרויקט הזה גרם לי לחשוב וללמוד הרבה …

הפרויקט הזה גרם לי לחשוב וללמוד הרבה …
הפרויקט הזה גרם לי לחשוב וללמוד הרבה …
הפרויקט הזה גרם לי לחשוב וללמוד הרבה …
הפרויקט הזה גרם לי לחשוב וללמוד הרבה …
הפרויקט הזה גרם לי לחשוב וללמוד הרבה…
הפרויקט הזה גרם לי לחשוב וללמוד הרבה…

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

ניתן לכוון את הקופסה ל -4 כיוונים, שטוח יותר. בסך הכל זה הופך 4*2+2 = 10 סוגי מידע אפשריים להצגה. אז זה מאפשר לך לעשות הרבה דברים: התאריך, והקדוש היום, השעה, תחזית מזג האוויר של היום, תחזיות מזג האוויר לשעות או לימים הקרובים, רמת הטעינה של הסוללה והצעת מחיר אקראית מאתר מיוחד.

יש הרבה מה לחפש באינטרנט, וכידוע: WiFi הוא האויב של חיסכון באנרגיה …

לכן עלינו לנהל את החיבור, על מנת להציג מידע עדכני אך מבלי להשקיע יותר מדי זמן בחיבור. עוד בעיה די מורכבת: שמירה על זמן מדויק למדי. אני לא צריך RTC מכיוון שאני יכול למצוא את הזמן באינטרנט, אבל השעון הפנימי של ה- ESP32 נסחף לא מעט, במיוחד בתקופות שינה. הייתי צריך למצוא דרך להישאר מספיק מדויק, בזמן שחיכיתי לאפס את השעון באמצעות האינטרנט. אני מסנכרן אותו מחדש באינטרנט כל שעה.

אז יש פשרה בין אוטונומיה (תדירות חיבורי האינטרנט) לבין דיוק המידע המוצג.

בעיה נוספת שיש לפתור היא הזיכרון. כאשר ה- ESP32 נמצא בשינה עמוקה, הזיכרון אבד, למעט מה שנקרא RTC RAM. רוחב הזיכרון הזה הוא 4MB, מתוכו ניתן להשתמש בתוכו רק 2. בזיכרון זה, עלי לאחסן את משתני התוכנית השונים אותם יש לשמור מביצוע אחד למשנהו, לאחר שלב שינה: תחזיות מזג אוויר, שעה ותאריך, שמות קבצי אייקונים, ציטוטים וכו '. הייתי צריך ללמוד להתמודד עם זה..

אם כבר מדברים על סמלים, הם מאוחסנים ב- SPIFFS, מערכת הקבצים ESP32. לאחר סגירת ה- API החינמי של Wunderground, נאלצתי לחפש ספקי נתוני מזג אוויר בחינם. בחרתי שניים: אחד למזג האוויר של היום הנוכחי, עם תחזיות ל -12 שעות, ואחר לתחזיות מרובות הימים. הסמלים אינם זהים, ולכן זה גרם לי לשתי בעיות חדשות:

  • בחר סט אייקונים
  • התאם סמלים אלה לקודי התחזית של 2 האתרים

התכתבות זו נשמרה גם ב- RTC RAM כך שלא יהיה צורך לטעון אותה בכל פעם מחדש.

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

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

הנתונים הנקראים באינטרנט הם לעתים קרובות בפורמט json: נתוני מזג אוויר, קדוש היום. אני משתמש בספריית arduinoJson (הנהדרת) לשם כך. אבל ציטוטים אינם כאלה. אני לוקח אותם מאתר ייעודי, ולכן אני חייב לקרוא אותם על ידי התבוננות ישירות בתוכן של דף האינטרנט. הייתי צריך לכתוב קוד ספציפי בשביל זה. כל יום, בסביבות חצות, התוכנית נכנסת לאתר זה וקוראת כעשר ציטוטים אקראיים, ומאחסנת אותם ב- RTC RAM. אחד מוצג באקראי ביניהם כאשר הדיור מכוון מסך גדול כלפי מעלה.

אני מעביר לך את הבעיה של הצגת תווים עם הדגשה (מצטער, אבל הציטוטים הם בצרפתית) …

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

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

ראה מפת השתלה: "האזור האסור" הוא אזור השמור לחיבור כבל ה- USB. מודול Lolin32 מאפשר לך לטעון את הסוללה באמצעות USB: הסוללה נטענת אם כבל ה- USB מחובר, והמודול פועל במקביל.

נקודה אחרונה: הגופנים. בגדלים שונים, מודגשים או לא, היה עליהם ליצור ולשמור אותם. ספריית ה- GFX של Adafruit מטפלת בזה היטב, לאחר שהתקנת את קבצי הגופנים בספרייה הנכונה. ליצירת הקבצים השתמשתי באתר Font Converter, נוח מאוד!

הקפד לבחור:

  • תצוגה מקדימה: TFT 2.4 אינץ '
  • גרסת הספרייה: גופן Adafruit GFX

אז לסיכום: פרויקט גדול, שאפשר לי ללמוד הרבה דברים

שלב 4: שימוש בתצוגות נייר אלקטרוני

שימוש בתצוגות נייר אלקטרוני
שימוש בתצוגות נייר אלקטרוני

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

אז הייתי צריך לחפש דרך אחרת לעדכן את התצוגה. מסכים אלה (חלקם) תומכים בעדכון חלקי (מיושם על אזור המסך או על המסך כולו …) אבל זה לא היה טוב בשבילי כי המסך הגדול שלי (המציג את הזמן) שומר רוחות של פיקסלים שמוחלפים. לדוגמה, כאשר עוברים מ -10: 12 ל -10: 13, ה- '2' נראה מעט בתוך ה'3 ', והוא הופך להיות גלוי עוד יותר לאחר ה'4', ה -5 'וכו'. הייתי רוצה לציין שזה המקרה של המסך שלי: דיברתי על זה עם מחבר ספריית התצוגה של נייר אלקטרוני GxEPD2 שאמר לי שהוא לא צפה בתופעה זו עם מסכים משלו. ניסינו לשנות את הפרמטרים מבלי שהצלחנו לצוד רוחות רפאים.

אז היינו צריכים למצוא פתרון אחר: הצעתי לעשות כיבוד כפול חלקי, מה שפתר את הבעיה (לפחות זה מספק בשבילי). השעות חולפות מבלי שהמסך מהבהב ואין רוחות רפאים. עם זאת, המעבר אינו מיידי: לוקח קצת יותר משנייה אחת לשנות את הזמן.

שלב 5: ביצוע

עושה את זה
עושה את זה
עושה את זה
עושה את זה
עושה את זה
עושה את זה
עושה את זה
עושה את זה

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

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

אולי גם אהיה מעוניין לעדכן על ידי OTA כדי לשכלל את כל זה …

שלב 6: הקוד והקבצים

Image
Image

מסופקים שלושה קבצי ארכיון:

  • Weather station.zip: קוד ה- Arduino להעלאה באמצעות Arduino IDE
  • Boite ecran.zip: קובצי CAD ומדפסות תלת מימד למארז
  • data.zip: הקבצים שיש להעלות ב- SPIFFS של ESP32.

אם אינך יודע כיצד להעלות קבצים ל- SPIFFS של ESP32, קרא את מדריך זה המציג תוסף שימושי מאוד וכיצד להשתמש בו ב- Arduino IDE.

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

כל שלב אתחול חייב להיות מופעל פעם אחת בלבד בביצוע הראשון (כגון קבלת הזמן, נתוני מזג האוויר, ציטוטים וכו '), כך ש- ESP32 צריך לדעת אם ההתעוררות הנוכחית היא הראשונה או לא: לשם כך, הפתרון הוא לאחסן משתנה ב- RTC RAM (שנשאר פעיל גם בשלבי שינה עמוקה) אשר גדל בכל התעוררות. אם זה שווה ל -1 אז זה הביצוע הראשון ו- ESP32 מריץ את שלב האתחול, אחרת דילוג על שלב זה.

להעיר את ESP32, ישנן מספר אפשרויות:

  • השכמה עם טיימר: הקוד מחשב את משך השינה העמוקה לפני השינה. זה משמש לעדכון השעה (כל 1, 2, 3 או 5 דקות) או נתוני מזג האוויר (כל 3 או 4 שעות) של הציטוטים והקדוש של היום (כל 24 שעות)
  • הפסקת השכמה: מד התאוצה שולח אות המשמש להעיר את ESP32. זה משמש לאיתור שינוי כיוון ולעדכון התצוגות
  • השכמה של חיישן מגע: ה- ESP32 מצויד במספר סיכות המתפקדות כחיישני מגע, אך לא ניתן להשתמש בהן עם השכמה בטיימר, כך שלא השתמשתי בזה.

ישנם טריקי תכנות אחרים במקומות אחרים בקוד, כדי לשמור על הזמן המדויק תוך חיסכון באנרגיה (כלומר לא לחבר את שרת ה- NTP בכל דקה), להסיר את המבטאים שאינם נתמכים על ידי ספריית ה- GFX של Adafruit, כדי להימנע מעדכון תצוגה אם אין צורך להגדיר את הפרמטרים של מד התאוצה במיוחד להפרעות השכמה, לחשב במדויק את זמן השינה במקרה של התעוררות טיימר, הימנע משימוש במסוף הטורי אם אינו מחובר ל- IDE (כדי לחסוך באנרגיה שוב), נתק ה- wifi כשאין צורך וכו '… והקוד מלא הערות שעוזרות להבין את הפונקציות.

תודה שקראתם את המדריך הזה (הראשון שלי). אני מקווה שתאהבו את זה ותיהנו ליצור תחנת מזג אוויר זו

תחרות חיישנים
תחרות חיישנים

סגנית בתחרות החיישנים

מוּמלָץ: