فهرست مطالب:
- مرحله 1: آنچه شما نیاز دارید
- مرحله 2: یک مخزن برای نگهداری نرم افزارهای دودویی ایجاد کنید
- مرحله 3: باینری ها را ایجاد کنید
- مرحله 4: ایجاد جریان سرور
- مرحله 5: منطق سرور را اضافه کنید
- مرحله 6: برای درخواست بروزرسانی ، کد را به طرح اضافه کنید
- مرحله 7: در نهایت ، به روز رسانی را آغاز کنید
تصویری: راه اندازی سرور ESP8266 Automatic Update Automatic: 7 Step
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:58
بسیاری از مردم در حال حاضر از 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: آنچه شما نیاز دارید
- آردوینو IDE
- هسته ESP8266
- هر برد ESP8266 dev با 1M یا بیشتر فلش RAM
- یک وب سرور (حتی یک تمشک پای متواضع هم انجام می دهد - این چیزی است که من استفاده می کنم)
- اگر می خواهید یک تصویر سیستم فایل SPIFFS را به طور خودکار به روز کنید ، ابزار mkspiffs (اختیاری) است
مرحله 2: یک مخزن برای نگهداری نرم افزارهای دودویی ایجاد کنید
در سرورم ، من یک پوشه به نام/home/pi/trucFirmware دارم که دارای firmware های مختلف دستگاه و تصاویر SPIFFS است
من یک باینری جداگانه برای هر نوع سخت افزار (از یک فایل منبع واحد با چند #تعریف) نگه می دارم و وقتی نسخه جدیدی آماده شد از دستور منو Arduino IDE "sketch/Export compiled Binary" برای هر دستگاه موردنظر استفاده می کنم. توجه داشته باشید که حتی اگرچه 5 نوع سخت افزار مختلف وجود دارد ، فقط دو باینری SPIFFS وجود دارد: نسخه 1M و 4M - ساخته شده با ابزار mkspiffs - زیرا همه دستگاه ها دارای فلش 1M یا 4M هستند.
مرحله 3: باینری ها را ایجاد کنید
با استفاده از طرح منوی Arduino IDE/Export Compiled Binary ، سیستم عامل را ایجاد کنید که در صورت درخواست دستگاه از سرور به روز رسانی بارگذاری می شود.
اگر به دودویی SPIFFS نیاز دارید ، باید ابزار mkspiffs را نصب کنید.
هنگامی که آن را دارید ، ساختن باینری SPIFFS ساده است. من یک فایل دسته ای یک خطی برای نسخه 1M دارم که شماره نسخه را به عنوان پارامتر در نظر می گیرد (٪ 1)
mkspiffs -c data/ spiffs_٪ 1_1M.bin
و دیگری برای نسخه 4M:
mkspiffs -p 256 -b 8192 -s 0x0FB000 -c data/ spiffs_٪ 1_4M.bin
سپس تمام فایلهای باینری کامپایل شده و فایلهای.binary SPIFFS را به مخزن کپی می کنم
مرحله 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 پاسخ می دهد که به طور م saysثر می گوید: "من چیزی برای شما ندارم" و کد شما به حالت عادی ادامه می دهد.
مرحله 5: منطق سرور را اضافه کنید
اولین گره در جریان به درخواست 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؛
این فقط مسیر مناسب با wildcard را برای عملکرد 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"، "")؛ } else {f = f.replace ("/home/pi/trucFirmware/spiffs_"، "")؛ f = f.replace (/_ / dM \.bin/، "") ؛ }
if (msg.version <f) {
node.warn ("ارتقاء لازم است")؛
node.warn ("بازگشت"+msg.filename)؛ بازگشت msg؛ } node.warn ("بدون ارتقا")؛ msg.statusCode = 304؛ msg.payload = ؛
بازگشت msg؛
سپس گره سوئیچ اطمینان می دهد که پیام 304 "نیازی به به روز رسانی نیست" ارسال می شود یا باینری جدید واقعی بازگردانده و به دستگاه ارسال می شود.
مرحله 6: برای درخواست بروزرسانی ، کد را به طرح اضافه کنید
این طرح باید کد زیر را در خود داشته باشد تا دفعه بعد که شماره نسخه را افزایش دهید به طور خودکار به روز شود:
#عبارتند از
#تعریف TRUC_VERSION "0_4_99"
#تعریف SPIFFS_VERSION "0_5_0"
// THIS_DEVICE زودتر بسته به تعریف کامپایل زمان تعریف شده است // که در نهایت نوع hw را تعریف می کند ، به عنوان مثال #این THIS_DEVICE "d1_mini" const char * updateUrl = "https://192.168.1.4:1880/update/" THIS_DEVICE؛ // این سرور تمشک Pi من است ، 1880 پورت NODE-RED پیش فرض است // /بروزرسانی آدرس اینترنتی است که سرور برای "گوش دادن" انتخاب کرده است ، و به دنبال آن نوع دستگاه … bool actualUpdate (bool sketch = false) {String msg؛ t_httpUpdate_return ret؛ ESPhttpUpdate.rebootOnUpdate (false) ؛ if (طرح) {ret = ESPhttpUpdate.update (updateUrl، TRUC_VERSION) ؛ // **************** این خطی است که "کار را انجام می دهد"} سایر موارد {ret = ESPhttpUpdate.updateSpiffs (updateUrl، SPIFFS_VERSION) ؛ } if (ret! = HTTP_UPDATE_NO_UPDATES) {if (ret == HTTP_UPDATE_OK) {
Serial.printf ("UPDATE SUCCEEDED")؛
بازگشت واقعی ؛ } else {if (ret == HTTP_UPDATE_FAILED) {
Serial.printf ("ارتقا ناموفق بود") ؛
}}} false false؛ }
مرحله 7: در نهایت ، به روز رسانی را آغاز کنید
هنگام راه اندازی ، یا شاید در پاسخ به پیام MQTT (مانند من) کد زیر را اجرا کنید:
if (_actualUpdate (true)) ESP.restart ()؛
// یا برای SPIFFS…
if (_actualUpdate (false)) ESP.restart ()؛
دستگاه به روز می شود و آخرین کد را از سرور راه اندازی مجدد می کند. برای من بسیار ساده تر از به روزرسانی دستی 33 دستگاه است!
اطلاعات مفیدتر در مورد اتوماسیون خانگی ، IOT و برنامه نویسی ESP8266 را می توانید در وبلاگ من پیدا کنید
توصیه شده:
راه اندازی آسان کنترل از راه دور IR با استفاده از LIRC برای Raspberry PI (RPi) - جولای 2019 [قسمت 1]: 7 مرحله
راه اندازی آسان کنترل از راه دور IR با استفاده از LIRC برای Raspberry PI (RPi) - ژوئیه 2019 [قسمت 1]: پس از جستجوی زیاد ، من از اطلاعات متناقض در مورد نحوه تنظیم کنترل از راه دور IR برای پروژه RPi خود شگفت زده و مأیوس شدم. فکر می کردم کار آسانی باشد اما راه اندازی کنترل مادون قرمز لینوکس (LIRC) برای مدت طولانی مشکل ساز بوده است
سرور ردیابی GPS خود را روی Raspberry Pi راه اندازی کنید: 8 مرحله
سرور ردیابی GPS خود را روی Raspberry Pi راه اندازی کنید: در این پروژه به شما نشان خواهم داد که چگونه سرور ردیابی GPS خود را در Raspberry pi تنظیم کنید. لازم نیست رزبری پای باشد ، زیرا نرم افزاری که ما برای سرور ردیابی از آن استفاده می کنیم برای ویندوز و لینوکس در دسترس است
راه اندازی رزبری پای برای سرور پروکسی: 6 مرحله
راه اندازی Raspberry Pi برای سرور پروکسی: اگر می خواهید Raspberry Pi شما از طریق سرور پروکسی به اینترنت دسترسی داشته باشد ، قبل از دسترسی به اینترنت باید Pi خود را برای استفاده از سرور پیکربندی کنید. به دو روش می توانید سرور پروکسی را راه اندازی کنید. اما ، با این حال در اولین متر
راه اندازی سرور FTP با استفاده از Filezilla !: 7 مرحله
راه اندازی سرور FTP با استفاده از Filezilla !: 1. سرور FTP چیست؟ 2. چرا می خواهم یکی بسازم؟ 1. پروتکل انتقال فایل (FTP) یک پروتکل شبکه است که برای انتقال داده ها از یک کامپیوتر به کامپیوتر دیگر از طریق شبکه ای مانند اینترنت استفاده می شود. FTP یک پروتکل انتقال فایل برای مثال
نحوه راه اندازی وب سایت/سرور خانگی: 5 مرحله
نحوه راه اندازی وب سایت/سرور خانگی: من این کار را در آخر هفته انجام دادم ، زیرا حوصله ام سر رفته بود ، بنابراین لذت ببرید