תחנת מזג אויר, low power, מבוססת esp8266.

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

9

מי שיודע וזוכר, בניתי כבר דבר כזה (קישור לפורום מייקרס) שמבוסס ארדואינו ובנוסף גם esp8266 עם קושחת AT, שהיה מקבל פקודות AT מהארדואינו על מנת להעלות את הנתונים, למה לא להשאיר את זה ככה?
ככה! סתם, דבר ראשון גיליתי שesp8266 יכול לבד, הוא בקר בפני עצמו, עם נתונים מרשימים ויכולות wifi :D, סיבה נוספת היא שגם הארדואינו צורך לא מעט אנרגיה, והסיבה הכי גדולה היא שלא אהבתי את ממשק הAT של הesp8266, הוא עשה לי בעיות, היה קשה לדבר איתו, קשה לדבג, והוא בשום פנים באופן לא רצה להתחבר לשרת שלי ישירות, כדי להעלות נתונים לשרת שלי, נרשמתי לשירות אחסון חינמי שאיתו הesp8266 כן הסכים לדבר והוא כבר העביר את הנתונים לשרת שלי, מסובך הא?

עם המעבר לesp8266 השתדרגתי טיפה, הוספתי חיישן לחץ ברומטרי, אך היו גם דברים שהייתי צריך לוותר עליהים, כמו מד מתח לפאנל הסולארי, וכל דבר נוסף שנמדד באמצאות ADC, כי לesp8266 יש רק ערוץ אחד.
ובסופו של דבר נמאס לי שהכל תקוע בbreadboard עם מלא כבלים מגשרים שנגמרו לי כבר, וכל זה עלה על לוח הלחמות 5X7, ועכשיו זה ראוי להיקרא אבטיפוס.

אז מה יש לנו?

  • בקר esp8266 -01 משופצר, עם גישה ל ADC ועוד 3 פינים דיגיטאליים
  • מד אור דיגיטאלי BH1750 (מודד בlux)
  • מד לחץ ברומטרי BMP180 – מודד גם טמפרטורה בדיוק של 2 ספרות אחרי הנקודה
  • מד לחות וטמפרטורה DHT11 – מודד לחות בלבד, הוא גם תקול – הנתונים משתגעים, ישודרג ל DHT22
  • סוללה, ליטיום-יון 3.7V, רשום 1000mAh, אני לא מאמין לזה, יבדק (פרטים בהמשך)
  • מודול הגנה וטעינה לסוללה, יחובר לפאנל סולארי לטעינה בעתיד.

עוד פרטים

עוד נתון שהיחידה מספקת חוץ מהנתונים הברורים היא מתח הסוללה, נעשה שימוש בADC שבפין TOUT, יש לו רפרנס פנימי בטווח 0-1V, לפי מה שראיתי הדיוק שלו מזעזע, אני משתמש בחלק מתח כדי לחלק 4.2V לפחות מ1V, כשאני מנסה לחסוך באנרגיה ולשים ערכים גבוהים בנגדים הוא מאבד הכל לגמרי, בשינוי המתח משתנה גם השגיאה.. לא ברור בכלל.
שלושת החיישנים מחוברים דרך טרנזיסטור לפין דיגיטאלי בesp8266, והם נדלקים רק כאשר הבקר ער – חיסכון בסוללה.
תקשורות – מד האור ומד הלחץ מתקשרים בi2c, הDHT11, מדבר בשפה שלו..
i2c מומש בקלות בעזרת ספריית wire.

Low Power

מילים גדולות… בוt נראה מה קורה שם עם האנרגיה.
טוב אז יש לנו מקור מתח, סוללת ליטיום-יון 3.7V קטנה וחמודה, למי שלא יודע, מתח של סוללת ליטיום-יון 3.7V הוא לא בהכרח 3.7V, למען האמת המתח הוא 4.2V כשהיא מלאה ו3.0V כשהיא ריקה לחלותין, לחדים שבמגירה ששמו לב שאין לי שום מייצב מתח ביחידה – נכון אין מייצב מתח, מייצב מתח רגיל זולל 10mA ואפשר לשכוח מהמושג low power, אני החלטתי לשים דיודה, אחת, שתפיל את המתח, שמתי דיודה 1N4001 פשוטה והיא מפילה לי מ4.2V ל3.7V, בדף הנתונים של הesp8266 מצויין שהוא מסוגל לעבוד בטווח בריא של 3.0-3.6V בVCC, נכון 0.1V מעל המותר,ועל זה יש לי להגיד "נחייה ונראה",שלא תחשבו שאני לא רציני יש לזה פיתרון, אבל צריך למצוא אחד מתאים, יש מייצבי מתח עם, מה שנקרא "low quiescent current", שזה אומר שהזרם שצורך המייצב לעצמו נמוך מאוד, רק צריך למצוא מייצב מתח 3.3V שמסוגל להביא 300-500mA וגם הזרם שהוא עצמו צורך נמוך.
הלאה – שינה, כמו שכבר רשמתי בעבר, הesp8266 ישן, וישן טוב, 18.8 מיקרו אמפר בשינה עמוקה, אבל לא רק הבקר בתמונה, יש לי מחלק מתח שצורך, וחיישנים שצורכים, וגם צריכה פרזיטית לא מוסברת, על bread board עם ספק כוח, כל המעגל צרך 76 מיקרו אמפר בשינה, אחרי הרכבה, הלחמה ושימוש בסוללה הזרם בשינה עלה ל 99 מיקרו אמפר, הסבר הגיוני הוא שהמתח שהמעגל מקבל לא יתקבל בשום מקום כפיתרון רלוונתי! דיודה?! באמת?! = המתח יורד, הזרם יורד ולהיפך.

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

בזמן שהבקר ער הזרם קופץ בין 30-70-150mA, כדי לחשב זמן סוללה  הנחתי בממוצע 80mA
אז זה 80 כפול 8 שניות, 4 פעמים בשעה, שזה 32 שניות, שזה 0.00888889 שעה
ועוד 0.099 כפול 3568 שניות שהבקר ישן בשעה שזה 0.99111111 שעה
ונקבל זרם ממוצע 0.81mA בשעה

עכשיו הסוללה – סוללה מאיביי במסגרת זיוף הסוללות הגדול = אני לא באמת יודע מה הקיבולת שלה,
ואת זה אנחנו יכולים לבדוק, אני הנחתי שהקיבולת שלה היא 300mAh.
300mAh לחלק ב0.81mA יוצא 370.4 שעות, שזה 15 ימים ו6 שעות, כמובן שזו הערכה גסה.
והיום חיברתי את היחידה לסוללה טעונה במלואה, ונראה לכמה זמן היא תספיק.

את כל הנתונים אפשר לראות בכתובת weather2.alexshu.com

etailhe

To Do

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

תודה שקראתם.

מרחיבים gpio לesp-01 esp8266, ומתאימים לbreadboard. אע, יש גם באגים.

בזמן שאני מחכה לesp-201 שיגיע, שכולל breakout של כל הפינים שרק רציתם, רציתי אני להתקדם טיפה בהסבת תחנת מזג האויר שלי לesp8266 בלבד, הבעיה היא שיש לesp-01 רק 2 פינים דיגיטליים (לא כולל TX ו RX), וזה לא מספיק לי!

אני צריך אנאלוגי, ולפחות עוד דיגיטאלי אחד, נו, אז מה עושים?הפינים עדיין על השבב, אז לוקחים מלחם ומרחיבים!
אני לא אדבר הרבה, אני אתן לתמונות לדבר בעצמן (ויש הרבה):

1 2 3 4 5

 ועכשיו באמת.

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

esp8266ex-layout

אני צריך ADC, והוא קיים בשבב, בפין מספר 6 – TOUT, הADC עובד ברפרנס פנימי בטווח 0V-1V (שימו לב).
ועוד פינים דיגיטאליים, אני בחרתי את 9,10,12,13 שהם GPIO14,GPIO12,GPIO13,GPIO15 (בהתאמה, הסדר נכון, בדקתי, תבדקו גם אתם בקישור), השימוש בהם הוא פשוט כמו של ארדואינו,
pinMode(14, OUTPUT);z  וגם digitalWrite(14, HIGH);z
בחרתי אותם כי הם הכי קרובים להאדרים ויהיה קל יותר להלחים.

לא קל יותר להלחים!

באמת שלא, בחרתי לעבודה כבל IDE100 ישן, גידים דקיקים והוא solid core, שיהיה קל להלחים, מלחם שפיץ, בדיל 0.3מ"מ ועוד עזרים, אספר בסוד שהבדיל נטול עופרת שבו מולחם הלוח לא תורם לתהליך.
אחרי מאמץ לא קל, הצלחתי..   בדקתי שזה עובד והכי חשוב, הדבקתי הכל עם דבק חם, כדי שחס וחלילה לא יתפרק.

6 7 8

 

אפשר להמשיך

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

בינתיים ההסבה החלה.

9

האק לשינה בesp8266 esp-01

בעודי ממשיך במשחקים עם הesp8266 כבקר בפני עצמו ושימוש בArduino IDE לפיתוח אליו, הייתי צריך שהוא ישן, שינה עמוקה וטובה,כדי שיפסיק לזלול 80mA בIdle..
שינה בesp8266 זה לא דבר חדש..אבל, כדי לאפשר לו להתעורר הוא צריך גישה לפין Reset של עצמו מפין GPIO אחר.. כן גם אני לא הבנתי.. אבל זה מה יש, אם לדייק, צריך שGPIO16 יהיה מחובר לפין Reset, מה הבעיה?

GPIO16 לא נגיש בלוח esp-01

והבעיה היא לא רק בesp-01, למעשה הוא נגיש רק בלוחות 03,04,06,07,08,11,12,201.
אז 01,02,05,09,10 לא יכולים לישון בלי התערבות בחומרה.
מכיוון שאני מהחבר'ה שרק תתנו להם להתערב .. לקחתי מלחם, בדיל, חוט חשמל דק ויד יציבה וניגשתי לעבודה, כמה יציבה היד? יציבה מאוד!
למען האמת צריך קצת יותר ממלחם, בדיל וחוט חשמל.. שמתי למלחם ראש שפיץ מחט, בדיל 0.3מ"מ, חוט חשמל הכי דק שמצאתי, חשפתי אותו, הפרדתי סיב אחד ואת כל השאר חתכתי – העדפתי את שאר החוט להשאיר בתוך הבידוד כדי שלא יקצר עם שום דבר בדרך לפין הReset.
יד שלישית שתחזיק את הesp8266, פינצטה להחזיק איתה את החוט ויאללה…
עם ציוד מתאים זה לא קשה כמו שזה נראה 🙂
ניתן לתמונות קצת לדבר ..

ironandsolder
wire
esp8266 closeup

חיסכון מוחלט

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

איך ישנים?

השינה עובדת גם בסביבת עבודה NodeMCU, וגם Arduino IDE.
בגלל שאני עובד עם הAdruino IDE אפרט עליו, אבל החבר'ה של הNodeMCU לא ישארו מאחור.

פקודת השינה היא:

ESP.deepSleep(microseconds, mode);

שימו לב שזה מיקרו-שניות, ולא מילי-שניות כמו שאתם רגילים..
מצבי השינה הם:
WAKE_RF_DEFAULT – התעוררות ברירת מחדל (אפשר להרחיב על זה אבל זה ממש מתקדם)
WAKE_RFCAL – התעוררות וביצוע כיול לרדיו – צורך יותר זרם
WAKE_NO_RFCAL – התעוררות ללא ביצוע כיול לרדיו – צורך פחות זרם
WAKE_RF_DISABLED – התעוררות וכיבוי רדיו – בעצם כיבוי הWIFI – צריכת זרם נמוכה – כ13mA

מה זה נתן?

לאחר העבודה ובמהלכה עשיתי כמה מדידות והתוצאות להלן:
עבודה במצב Idle – זרם 70mA ומעלה – בשידור הזרם עולה
שינה עמוקה עם הלד – 353uA – מיקרו-אמפר!, כבר מרשים
שינה עמוקה ללא הלד – 18.8uA – כן, 18.8 מיקרו אמפר.

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

לא כמו המוכרים של Atmel שישנים ב9 מיקרו-אמפר ומטה, אבל 18.8 זה עדיין נתון מאוד משמח, יחסית לזללן שהוא כאשר הוא עובד רגיל, הוא ישן ממש טוב, מה שמאפשר לנו להשתמש בו למטרות Low Power IoT, וזה חדשות טובות לתחנת מזג האויר שלי שהולכת לעבור הסבה מלאה לesp8266 בלבד.

sleep

מקורות:
http://tim.jagenberg.info/2015/01/18/low-power-esp8266/
https://github.com/esp8266/Arduino
https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_en