جدول المحتويات:
- الخطوة 1: ما تحتاجه
- الخطوة 2: إنشاء مستودع للاحتفاظ بالبرامج الثابتة الثنائية
- الخطوة 3: إنشاء الثنائيات
- الخطوة 4: إنشاء تدفق الخادم
- الخطوة 5: أضف Server Logic
- الخطوة 6: أضف رمزًا إلى الرسم التخطيطي لطلب تحديث
- الخطوة 7: أخيرًا ، ابدأ التحديث
فيديو: قم بإعداد خادم التحديث التلقائي ESP8266: 7 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:41
يستخدم العديد من الأشخاص الآن ESP8266 بأشكاله المتعددة (ESP-01S ، Wemos D1 ، NodeMCU ، Sonoff إلخ) لأنظمة التشغيل الآلي للمنزل. إذا قمت بكتابة الكود الخاص بك (كما أفعل) ، فإن تحديث كل منها على حدة حتى عبر OTA (عبر الهواء) يصبح مملاً بعض الشيء.
على سبيل المثال ، يحتوي نظامي الخاص على 8x ESP-01S و 6 x Wemos D1 و 4x Sonoff Basic 12x Sonoff S20 و 2x Sonoff SV و NodeMCU التي تشترك في قاعدة رمز مشتركة ، لذلك هناك 33 جهازًا للتحديث عندما أقوم بإنشاء رمز بسيط يتغيرون.
ولكن هناك طريقة أسهل: "خادم تحديث". يحتوي نواة Arduino IDE + ESP8266 الممتازة على مكتبة للقيام بمعظم العمل (ESP8266httpUpdate) ، ولكنك تحتاج إلى معرفة كيفية إعداد الخادم الخاص بك لجعله يعمل.
يوضح لك هذا Instructable كيفية استخدام خادم NODE-RED ، ولكن نفس المنطق ينطبق على أي تقنية خادم من اختيارك ، على سبيل المثال Apache + PHP إلخ
الخطوة 1: ما تحتاجه
- اردوينو IDE
- ESP8266 الأساسية
- أي لوحة تطوير ESP8266 مع 1M أو أكثر من ذاكرة الوصول العشوائي
- خادم الويب (حتى لو كان Raspberry Pi المتواضع سيفعل - إنه ما أستخدمه)
- (اختياري) أداة mkspiffs إذا كنت تريد التحديث التلقائي لصورة نظام ملفات SPIFFS
الخطوة 2: إنشاء مستودع للاحتفاظ بالبرامج الثابتة الثنائية
على الخادم الخاص بي ، لدي مجلد يسمى / home / pi / trucFirmware والذي يحتوي على العديد من البرامج الثابتة للجهاز وصور SPIFFS
أحتفظ بثنائي منفصل لكل نوع من الأجهزة (من ملف مصدر واحد مع عدد قليل من التعريفات) وعندما يكون الإصدار الجديد جاهزًا ، أستخدم أمر القائمة Arduino IDE "رسم / تصدير ثنائي مترجم" لكل جهاز مستهدف. على الرغم من وجود 5 أنواع مختلفة من الأجهزة ، إلا أنه لا يوجد سوى اثنين من ثنائيات SPIFFS: إصدار 1M و 4 M - تم إنشاؤه باستخدام أداة mkspiffs - نظرًا لأن جميع الأجهزة بها إما 1M أو 4M فلاش.
الخطوة 3: إنشاء الثنائيات
باستخدام خيار قائمة Arduino IDE ، رسم / تصدير Compiled Binary ، أنشئ البرنامج الثابت الذي سيتم تحميله على الجهاز عندما يطلبه من خادم التحديث.
إذا كنت بحاجة إلى نظام SPIFFS الثنائي ، فستحتاج إلى تثبيت أداة mkspiffs.
بمجرد الحصول عليها ، يصبح إنشاء ملف SPIFFS الثنائي أمرًا بسيطًا. لدي ملف دفعي من سطر واحد للإصدار 1M والذي يأخذ رقم الإصدار كمعامل (٪ 1)
mkspiffs -c بيانات / spiffs_٪ 1_1M.bin
وآخر لنسخة 4M:
mkspiffs -p 256 -b 8192 -s 0x0FB000 -c بيانات / spiffs_٪ 1_4M.bin
ثم أنسخ جميع الثنائيات المترجمة وملفات SPIFFS. الثنائية إلى المستودع
الخطوة 4: إنشاء تدفق الخادم
أنا أستخدم NODE-RED ، لكن المنطق البسيط سيكون هو نفسه في أي تقنية / لغة خادم.
أ) حدد عنوان url الذي سيستمع إلى طلب 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: أضف Server Logic
العقدة الأولى في التدفق "تستمع" لطلب http إلى عنوان url https://192.168.1.4:1880/update مع نوع الجهاز الملحق. يمرر هذا إلى عقدة وظيفة "إنشاء مسار البحث" التي تحتوي على شفرة جافا سكريبت التالية:
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 == "sketch") {msg.payload = "/ home / pi / trucFirmware / *. ino." + msg.type + ". bin"؛ } else {var sz = h ['x-esp8266-chip-size'] ؛ msg.payload = "/ home / pi / trucFirmware / spiffs _ * _" + (sz / 1048576) + "M.bin" ؛ } عودة msg؛
يقوم هذا فقط بإعداد المسار المناسب باستخدام حرف بدل لوظيفة sys التالية ، والتي تعمل ببساطة
ls - r
يتم بعد ذلك إدخال الإخراج إلى عقدة وظيفة "مقارنة الإصدارات":
var f = msg.payload.split ("\ n") [0]؛ msg.filename = f؛
إذا (msg.mode == "رسم") {
f = f.replace ("/ home / pi / trucFirmware / truc_"، "") ؛ f = f.replace (". ino." + msg.type + ". bin"، "") ؛ } else {f = f.replace ("/ home / pi / trucFirmware / spiffs_"، "")؛ f = f.replace (/ _ / dM \.bin / "") ؛ }
إذا (msg.version <f) {
node.warn ("الترقية مطلوبة") ؛
node.warn ("سيعود" + msg.filename) ؛ عودة الرسالة ؛ } node.warn ("بلا ترقية")؛ msg.statusCode = 304 ؛ msg.payload = ؛
عودة الرسالة ؛
ثم تضمن عقدة التبديل إما إرسال الرسالة 304 "لا حاجة إلى تحديث" أو إرجاع الثنائي الجديد الفعلي وإرساله مرة أخرى إلى الجهاز.
الخطوة 6: أضف رمزًا إلى الرسم التخطيطي لطلب تحديث
يحتاج الرسم إلى تضمين الكود التالي فيه حتى يتم تحديثه تلقائيًا في المرة التالية التي تقوم فيها بزيادة رقم الإصدار:
#يشمل
#define TRUC_VERSION "0_4_99"
#define 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؛ // هذا هو خادم raspberry Pi الخاص بي ، 1880 هو منفذ NODE-RED الافتراضي // / التحديث هو عنوان url الذي اخترته للخادم للاستماع إليه ، متبوعًا بنوع الجهاز … bool realUpdate (bool sketch = false) {سلسلة الرسائل ؛ t_httpUpdate_return تراجع ؛ ESPhttpUpdate.rebootOnUpdate (خطأ) ، إذا (رسم) {ret = ESPhttpUpdate.update (updateUrl، TRUC_VERSION) ؛ // **************** هذا هو السطر الذي "يقوم بالأعمال"} else {ret = ESPhttpUpdate.updateSpiffs (updateUrl ، SPIFFS_VERSION) ؛ } إذا (ret! = HTTP_UPDATE_NO_UPDATES) {if (ret == HTTP_UPDATE_OK) {
Serial.printf ("نجح التحديث") ؛
العودة صحيح } else {if (ret == HTTP_UPDATE_FAILED) {
Serial.printf ("فشلت الترقية") ؛
} } } عودة كاذبة؛ }
الخطوة 7: أخيرًا ، ابدأ التحديث
في وقت التمهيد ، أو ربما استجابةً لرسالة MQTT (كما أفعل) ، قم بتشغيل الكود التالي:
إذا (_actualUpdate (صحيح)) ESP.restart () ؛
// أو لنظام SPIFFS …
إذا (_actualUpdate (false)) ESP.restart () ؛
سيقوم الجهاز بتحديث نفسه وإعادة التشغيل باستخدام أحدث رمز من الخادم. إنه أبسط بكثير بالنسبة لي من تحديث 33 جهازًا يدويًا!
يمكن العثور على الكثير من المعلومات المفيدة حول أتمتة المنزل وإنترنت الأشياء وبرمجة ESP8266 على مدونتي
موصى به:
Orange Pi Plus 2 - Armbian (على SDcard أو Onboard Memory 16GB!) - التحديث: 6 خطوات
Orange Pi Plus 2 - Armbian (على SDcard أو Onboard Memory 16GB!) - تحديث: مرحبًا بالجميع ، هذه أول لغة Instructable لي ، واللغة الإنجليزية ليست لغتي الأم ، لذا من فضلك لا تقسو عليّ. Pi Plus 2 هو جهاز صغير رائع تمامًا مثل Raspberry Pi ولكنه أسرع! بالنسبة لـ Raspberry Pi ، هناك مجتمع كبير
قم بإعداد خادم تتبع GPS الخاص بك على Raspberry Pi: 8 خطوات
قم بإعداد خادم تتبع GPS الخاص بك على Raspberry Pi: في هذا المشروع سأوضح لك كيفية إعداد خادم تتبع GPS الخاص بك على Raspberry Pi. ليس من الضروري أن يكون Raspberry pi ، لأن البرنامج الذي سنستخدمه لخادم التتبع متاح لنظامي التشغيل Windows و Linux أيضًا
O-R-A RGB LED Matrix Wall Clock والمزيد ** تم التحديث في يوليو 2019 **: 6 خطوات (بالصور)
O-R-A RGB LED Matrix Wall Clock والمزيد ** تم التحديث في يوليو 2019 **: مرحبًا. أنا هنا مع مشروع جديد يسمى O-R-AIt عبارة عن ساعة حائط RGB LED Matrix تعرض: الساعة: دقيقة درجة الحرارة الرطوبة رمز حالة الطقس الحالية أحداث تقويم Google وإشعارات تذكير لمدة ساعة في وقت محدد يظهر:
قم بإعداد خادم الويب الخاص بك!: 12 خطوة
قم بإعداد خادم الويب الخاص بك! لنفترض أنك تريد إتاحة مكتبة الموسيقى الخاصة بك في حالة رغبتك في تقديم أغنية إلى أحد أصدقائك ، أو ربما أردت
مصباح قبة LED DIY (تم التحديث 9-15-09): 10 خطوات
مصباح قبة LED DIY (تم التحديث 9-15-09): كان بلدي الصغير هوندا ديل سول في حاجة إلى ضوء قبة أكثر إشراقًا. لقد انتقلت من المصباح العادي إلى استبدال LED المصنَّع إلى مصباح واحد عالي السطوع أخيرًا يمكنني حتى قراءته