תוכן עניינים:
- שלב 1: מה שאתה צריך
- שלב 2: צור מאגר כדי להחזיק תוכנות בינאריות
- שלב 3: צור את הקבצים הבינאריים
- שלב 4: צור את זרימת השרת
- שלב 5: הוסף את לוגיקת השרת
- שלב 6: הוסף קוד לסקיצה לבקשת עדכון
- שלב 7: לבסוף, התחל את העדכון
וִידֵאוֹ: הגדרת שרת עדכונים אוטומטי ESP8266: 7 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:17
אנשים רבים משתמשים כעת ב- ESP8266 במסגרותיו הרבות (ESP-01S, Wemos D1, NodeMCU, Sonoff וכו ') למערכות אוטומציה ביתיות. אם אתה כותב קוד משלך (כפי שאני עושה) עדכון כל אחד מהם בנפרד אפילו באמצעות OTA (באוויר) הופך להיות קצת מייגע.
למערכת שלי, למשל יש 8x ESP-01S, 6x Wemos D1, 4x Sonoff Basic 12x Sonoff S20, 2x Sonoff SV ו- NodeMCU שחולקים בסיס קוד משותף, כך שבסך הכל 33 מכשירים לעדכן כשאני יוצר קוד פשוט. שינוי.
אבל יש דרך קלה יותר: "שרת עדכונים". הליבה המעולה של Arduino IDE + ESP8266 כוללת ספרייה לביצוע רוב העבודה (ESP8266httpUpdate), אך עליך לדעת כיצד להגדיר שרת משלך בכדי לגרום לזה לעבוד.
הוראה זו מראה לך כיצד משתמשים בשרת NODE-RED, אך אותו היגיון חל על כל טכנולוגיית שרת שתבחר, למשל. Apache + PHP וכו '
שלב 1: מה שאתה צריך
- Arduino IDE
- ליבה ESP8266
- כל לוח ESP8266 עם זיכרון פלאש של 1M או יותר
- שרת אינטרנט (אפילו פי פטל צנוע יעשה - זה מה שאני משתמש בו)
- (אופציונלי) כלי mkspiffs אם ברצונך לעדכן אוטומטית תמונת מערכת קבצים של SPIFFS
שלב 2: צור מאגר כדי להחזיק תוכנות בינאריות
בשרת שלי, יש לי תיקייה בשם/home/pi/trucFirmware המכילה את תוכנות החומרה השונות של המכשיר ותמונות SPIFFS
אני שומר בינארי נפרד לכל סוג חומרה (מקובץ מקור אחד עם כמה #הגדרות) וכאשר מהדורה חדשה מוכנה אני משתמש בפקודת התפריט "sketch/Export compiled Binary" של Arduino IDE עבור כל מכשיר מטרה. שים לב שאפילו למרות שיש 5 סוגי חומרה שונים, ישנם רק שני קבצים בינאריים של SPIFFS: גרסה של 1M ו- 4M - שנבנתה עם הכלי mkspiffs - מכיוון שלכל המכשירים יש פלאש של 1M או 4M.
שלב 3: צור את הקבצים הבינאריים
השתמש באפשרות התפריט Arduino IDE sketch/Export Compiled Binary, צור את הקושחה שתעלה למכשיר כאשר היא מבקשת זאת משרת העדכונים.
אם אתה צריך בינארי SPIFFS יהיה עליך להתקין את הכלי mkspiffs.
ברגע שיש לך את זה, בניית בינארי SPIFFS היא פשוטה. יש לי קובץ אצווה של שורה אחת לגירסת 1M שלוקח את מספר הגרסה כפרמטר (%1)
mkspiffs -c data/ spiffs_%1_1M.bin
ועוד לגרסת 4M:
mkspiffs -p 256 -b 8192 -s 0x0FB000 -c נתונים/ spiffs_%1_4M.bin
לאחר מכן אני מעתיק את כל הקבצים הבינאריים המקובצים ואת קבצי ה- SPIFFS.binar אל המאגר
שלב 4: צור את זרימת השרת
אני משתמש ב- NODE-RED, אך ההיגיון הפשוט יהיה זהה בכל טכנולוגיית שפות / שפות.
א) הגדר כתובת אתר שתאזין לבקשת ESP8266httpUpdate. ה- raspberryPi serevr שלי נמצא ב- 192.168.1.4 ומאזין ביציאה 1880 עבור /עדכון עם סוג החומרה המצורף. אז אם אני הולך לבקש בינארי עבור Wemos D1 Mini, כתובת ה- URL מסתיימת כך:
192.168.1.4:1880/update/d1_mini
ב) צור קוד כדי להתמודד עם ההיגיון הבא:
ESP8266: "היי, אני מפעיל גירסת קושחה a.b.c, יש לך גרסה חדשה יותר?" שרת: "תן לי לראות … אה כן יש לי a.b.d - הנה זה בא …"
אם אכן קיימת גרסה חדשה יותר השרת פשוט שולח אותה כעומס של נתונים בינאריים בתגובת ה- http. מחלקת ESP8266httpUpdate עושה את החלק המסובך בהעתקת הבינארי לזיכרון, משנה את כתובת האתחול של הקושחה לקוד החדש מאשר (אם תתבקש) אתחול המכשיר להפעלת הקוד החדש.
אם מצד שני אין גרסה גבוהה יותר, היא משיבה בשגיאת http 304 שאומרת למעשה: "אין לי שום דבר בשבילך" והקוד שלך ממשיך לפעול כרגיל.
שלב 5: הוסף את לוגיקת השרת
הצומת הראשון בזרימה "מקשיב" לבקשת http לכתובת https://192.168.1.4:1880/update עם סוג ההתקן המצורף. זה מעביר את זה לצומת הפונקציה "בנה נתיב חיפוש", שיש לו את קוד ה- javascript הבא:
msg.type = msg.req.params.type; var h = msg.req.headers; msg.version = h ["x-esp8266-version"];
msg.mode = h ["x-esp8266-mode"];
if (msg.mode == "סקיצה") {msg.payload = "/home/pi/trucFirmware/*. ino."+msg.type+". bin"; } אחר {var sz = h ['x-esp8266-chip-size']; msg.payload = "/home/pi/trucFirmware/spiffs _*_"+(sz/1048576)+"M.bin"; } החזר הודעה;
זה רק מגדיר את הנתיב המתאים עם תו כללי לפונקציית sys הבאה, שפשוט פועלת
ls - r
הפלט מוזר אז לצומת הפונקציה "השווה גרסאות":
var f = msg.payload.split ("\ n") [0]; msg.filename = f;
if (msg.mode == "סקיצה") {
f = f.replace ("/home/pi/trucFirmware/truc_", ""); f = f.replace (". ino."+msg.type+". bin", ""); } אחר {f = f.replace ("/home/pi/trucFirmware/spiffs_", ""); f = f.replace (/_ / dM \.bin/, ""); }
if (msg.version <f) {
node.warn ("נדרש שדרוג");
node.warn ("יחזור"+שם קובץ); מסר החזרה; } node.warn ("ללא שדרוג"); msg.statusCode = 304; msg.payload = ;
מסר החזרה;
צומת המתג מבטיח שאז תישלח הודעת 304 "ללא צורך בעדכון" או שהבינארי החדש בפועל יוחזר ויוחזר למכשיר.
שלב 6: הוסף קוד לסקיצה לבקשת עדכון
על הסקיצה לכלול את הקוד הבא כך שהוא יתעדכן אוטומטית בפעם הבאה שתגדיל את מספר הגרסה:
#לִכלוֹל
#הגדר TRUC_VERSION "0_4_99"
#הגדר SPIFFS_VERSION "0_5_0"
// THIS_DEVICE מוגדר מוקדם יותר בהתאם להגדרות שונות של זמן הידור // אשר בסופו של דבר מגדירות את סוג hw, למשל #define THIS_DEVICE "d1_mini" const char * updateUrl = "https://192.168.1.4:1880/update/" THIS_DEVICE; // זהו שרת פטל הפטל שלי, 1880 הוא יציאת ברירת המחדל של NODE-RED // /עדכון הוא כתובת האתר שבחרתי לשרת "להקשיב", ואחריה סוג המכשיר … bool actualUpdate (bool sketch = false) {מחרוזת הודעה; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate (שקר); אם (סקיצה) {ret = ESPhttpUpdate.update (updateUrl, TRUC_VERSION); // **************** זהו השורה ש"עושה את העסק "} אחרת {ret = ESPhttpUpdate.updateSpiffs (updateUrl, SPIFFS_VERSION); } אם (ret! = HTTP_UPDATE_NO_UPDATES) {if (ret == HTTP_UPDATE_OK) {
Serial.printf ("עדכון הצליח");
להחזיר נכון; } אחר {if (ret == HTTP_UPDATE_FAILED) {
Serial.printf ("השדרוג נכשל");
}}} החזר שקר; }
שלב 7: לבסוף, התחל את העדכון
בזמן האתחול, או אולי כתגובה להודעת MQTT (כפי שאני עושה) הפעל את הקוד הבא:
if (_actualUpdate (true)) ESP.restart ();
// או ל- SPIFFS…
if (_actualUpdate (false)) ESP.restart ();
המכשיר יעדכן את עצמו ויפעיל מחדש את הקוד האחרון מהשרת. זה הרבה יותר פשוט בשבילי מאשר עדכון ידני של 33 מכשירים!
מידע רב יותר שימושי על אוטומציה ביתית, IOT ותכנות ה- ESP8266 ניתן למצוא בבלוג שלי
מוּמלָץ:
עיצוב ה- PCB שלך באמצעות פריסת ספרינט 2020 עם עדכונים חדשים: 3 שלבים
עיצוב ה- PCB שלך באמצעות פריסת ספרינט 2020 עם עדכונים חדשים: רוב המאהבים האלקטרוניים יוצרים מעגלים אלקטרוניים בשיטות שונות. לפעמים עלינו לייצר PCB בכדי לקבל פלט תקין ולהפחית רעשים וגימור קומפקטי. בימינו יש לנו הרבה תוכנות לעיצוב PCB משלו. אבל הבעיה היא הכי
נקודת גישה ESP8266 NodeMCU (שרת אינטרנט) עבור שרת אינטרנט עם חיישן טמפרטורה DT11 והדפסת טמפרטורה ולחות בדפדפן: 5 שלבים
נקודת גישה ESP8266 NodeMCU (AP) עבור שרת אינטרנט עם חיישן טמפרטורה DT11 וטמפרטורת הדפסה ולחות בדפדפן: שלום חברים ברוב הפרויקטים בהם אנו משתמשים ב- ESP8266 וברוב הפרויקטים אנו משתמשים ב- ESP8266 כשרת אינטרנט כך שניתן יהיה לגשת לנתונים ב כל מכשיר באמצעות wifi על ידי גישה לשרת האינטרנט המתארח על ידי ESP8266 אך הבעיה היחידה היא שאנחנו צריכים נתב עובד עבור
מזין צמחים אוטומטי WiFi עם מאגר - הגדרת גידול פנימי/חיצוני - צמחי מים באופן אוטומטי עם ניטור מרחוק: 21 שלבים
מזין צמחים אוטומטי WiFi עם מאגר - הגדרת גידול פנימי/חיצוני - צמחי מים באופן אוטומטי עם ניטור מרחוק: במדריך זה נדגים כיצד להתקין מערכת הזנת צמחים פנימית/חיצונית המותאמת באופן אוטומטי לצמחים וניתנת לניטור מרחוק באמצעות פלטפורמת Adosia
עקיפת שרת חומת אש/שרת proxy: 3 שלבים
עקיפת שרת חומת אש/שרת proxy: סטודנטים רבים אחרים הגיעו ושאלו אותי כיצד ניתן להגיע לחומות האש והפרוקסי. אנשי IT בבית הספר הופכים חכמים יותר בנוגע לתלמידים שמשתמשים בפרוקסיות. חשבתי על הנושא הזה זמן מה ויש לי פתרון. למה לא ליצור דפי אינטרנט משלך
הגדרת שרת FTP באמצעות Filezilla !: 7 שלבים
הגדרת שרת FTP באמצעות Filezilla !: 1. מהו שרת FTP? 2. למה שארצה להכין אחד? 1. פרוטוקול העברת קבצים (FTP) הוא פרוטוקול רשת המשמש להעברת נתונים ממחשב אחד למשנהו דרך רשת, כגון האינטרנט. FTP הוא פרוטוקול העברת קבצים לשעבר