विषयसूची:
- चरण 1: आपको क्या चाहिए
- चरण 2: बाइनरी फ़र्मवेयर को होल्ड करने के लिए एक रिपॉजिटरी बनाएँ
- चरण 3: बायनेरिज़ बनाएँ
- चरण 4: सर्वर फ़्लो बनाएँ
- चरण 5: सर्वर तर्क जोड़ें
- चरण 6: अपडेट का अनुरोध करने के लिए स्केच में कोड जोड़ें
- चरण 7: अंत में, अद्यतन आरंभ करें
वीडियो: ESP8266 स्वचालित अद्यतन सर्वर सेट करें: 7 चरण
2024 लेखक: John Day | [email protected]. अंतिम बार संशोधित: 2024-01-30 09:23
होम ऑटोमेशन सिस्टम के लिए कई लोग अब ESP8266 का उपयोग इसके कई रूपों (ESP-01S, Wemos D1, NodeMCU, Sonoff आदि) में कर रहे हैं। यदि आप अपना खुद का कोड लिखते हैं (जैसा कि मैं करता हूं) इनमें से प्रत्येक को ओटीए (ओवर द एयर) के माध्यम से भी अलग से अपडेट करना थोड़ा थकाऊ हो जाता है।
उदाहरण के लिए, मेरे अपने सिस्टम में 8x ESP-01S, 6x Wemos D1, 4x Sonoff Basic 12x Sonoff S20, 2x Sonoff SV और एक NodeMCU है जो एक सामान्य कोड आधार साझा करता है, इसलिए जब मैं एक साधारण कोड बनाता हूं तो सभी में 33 डिवाइस अपडेट होते हैं। परिवर्तन।
लेकिन एक आसान तरीका है: एक "अपडेट सर्वर"। उत्कृष्ट Arduino IDE + ESP8266 कोर में अधिकांश काम करने के लिए एक पुस्तकालय है (ESP8266httpUpdate), लेकिन आपको यह जानने की जरूरत है कि इसे काम करने के लिए अपना खुद का सर्वर कैसे सेट करें।
यह निर्देशयोग्य आपको दिखाता है कि NODE-RED सर्वर का उपयोग कैसे किया जाता है, लेकिन यही तर्क आपकी पसंद की किसी भी सर्वर तकनीक पर लागू होता है। अपाचे + पीएचपी आदि
चरण 1: आपको क्या चाहिए
- अरुडिनो आईडीई
- ईएसपी8266 कोर
- 1M या अधिक फ्लैश RAM वाला कोई भी ESP8266 देव बोर्ड
- एक वेब सर्वर (यहां तक कि एक विनम्र रास्पबेरी पाई भी करेगा - यह वही है जो मैं उपयोग करता हूं)
- (वैकल्पिक) mkspiffs उपकरण यदि आप SPIFFS फ़ाइल सिस्टम छवि को स्वतः अद्यतन करना चाहते हैं
चरण 2: बाइनरी फ़र्मवेयर को होल्ड करने के लिए एक रिपॉजिटरी बनाएँ
मेरे सर्वर पर, मेरे पास /home/pi/trucFirmware नामक एक फ़ोल्डर है जिसमें विभिन्न डिवाइस फ़र्मवेयर और SPIFFS चित्र हैं
मैं प्रत्येक हार्डवेयर प्रकार (कुछ #defines के साथ एक एकल स्रोत फ़ाइल से) के लिए एक अलग बाइनरी बनाए रखता हूं और जब एक नई रिलीज तैयार होती है तो मैं प्रत्येक लक्ष्य डिवाइस के लिए Arduino IDE "स्केच/निर्यात संकलित बाइनरी" मेनू कमांड का उपयोग करता हूं। ध्यान दें कि यहां तक कि हालांकि 5 अलग-अलग हार्डवेयर प्रकार हैं, केवल दो SPIFFS बायनेरिज़ हैं: एक 1M और एक 4M संस्करण - जिसे mkspiffs टूल के साथ बनाया गया है - क्योंकि सभी उपकरणों में या तो 1M या 4M फ्लैश होता है।
चरण 3: बायनेरिज़ बनाएँ
Arduino IDE मेनू विकल्प स्केच/निर्यात संकलित बाइनरी का उपयोग करके, फर्मवेयर बनाएं जो डिवाइस पर अपलोड किया जाएगा जब यह अपडेट सर्वर से अनुरोध करेगा।
यदि आपको 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.binary फ़ाइलों को रिपॉजिटरी में कॉपी करता हूँ
चरण 4: सर्वर फ़्लो बनाएँ
मैं नोड-रेड का उपयोग कर रहा हूं, लेकिन किसी भी सर्वर तकनीक/भाषा पर सरल तर्क समान होगा।
a) एक url परिभाषित करें जो ESP8266httpUpdate अनुरोध को सुनेगा। मेरा रास्पबेरीपी सेरेव 192.168.1.4 पर है और हार्डवेयर प्रकार के साथ/अपडेट के लिए पोर्ट 1880 पर सुनता है। तो अगर मैं Wemos D1 Mini के लिए बाइनरी का अनुरोध करने जा रहा हूं, तो यूआरएल इस प्रकार समाप्त होता है:
192.168.1.4:1880/update/d1_mini
बी) निम्नलिखित तर्क को संभालने के लिए कोड बनाएं:
ESP8266: "हाय, मैं फर्मवेयर संस्करण a.b.c चला रहा हूं, क्या आपके पास एक नया संस्करण है?" सर्वर: "मुझे देखने दो … आह हाँ मेरे पास a.b.d है - यहाँ यह आता है …"
यदि कोई नया संस्करण मौजूद है तो सर्वर इसे http उत्तर में बाइनरी डेटा के भार के रूप में भेजता है। ESP8266httpUpdate वर्ग नए कोड को चलाने के लिए डिवाइस को रिबूट करने की तुलना में (यदि अनुरोध किया गया है) फर्मवेयर बूट पते को नए कोड में बदलकर मेमोरी में बाइनरी को कॉपी करने का मुश्किल हिस्सा करता है।
यदि दूसरी ओर कोई उच्च संस्करण नहीं है, तो यह एक http 304 त्रुटि के साथ उत्तर देता है जो प्रभावी रूप से कहती है: "मेरे पास आपके लिए कुछ भी नहीं है" और आपका कोड सामान्य रूप से चलता रहता है।
चरण 5: सर्वर तर्क जोड़ें
प्रवाह में पहला नोड url https://192.168.1.4:1880/update के साथ संलग्न डिवाइस प्रकार के साथ http अनुरोध के लिए "सुनता है"। यह इसे "खोज पथ का निर्माण" फ़ंक्शन नोड में भेजता है जिसमें निम्नलिखित जावास्क्रिप्ट कोड है:
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"; } और {var sz=h['x-esp8266-chip-size']; msg.payload="/home/pi/trucFirmware/spiffs_*_"+(sz/1048576)+"M.bin"; } वापसी संदेश;
यह sys फ़ंक्शन के लिए वाइल्डकार्ड के साथ उपयुक्त पथ सेट करता है, जो कि बस चलता है
एलएस - आर
आउटपुट को तब "संस्करणों की तुलना करें" फ़ंक्शन नोड में फीड किया जाता है:
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", ""); } और {f=f.replace("/home/pi/trucFirmware/spiffs_", ""); f=f.replace(/_\dM\.bin/, ""); }
अगर (संदेश संस्करण <एफ) {
node.warn ("अपग्रेड आवश्यक");
node.warn ("वापस आएगा" + msg.filename); वापसी संदेश; } node.warn ("कोई अपग्रेड नहीं"); msg.statusCode=304; संदेश पेलोड = ;
वापसी संदेश;
स्विच नोड तब सुनिश्चित करता है कि या तो 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 डिफ़ॉल्ट नोड-रेड पोर्ट है // / अपडेट वह यूआरएल है जिसे मैंने सर्वर के लिए "सुनने" के लिए चुना है, इसके बाद डिवाइस प्रकार … बूल वास्तविक अपडेट (बूल स्केच = झूठा) {स्ट्रिंग संदेश; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate(false); अगर (स्केच) { ret=ESPhttpUpdate.update(updateUrl, TRUC_VERSION); // **************** यह वह पंक्ति है जो "व्यवसाय करता है" } अन्य { ret=ESPhttpUpdate.updateSpiffs(updateUrl, SPIFFS_VERSION); } अगर (रिट! = HTTP_UPDATE_NO_UPDATES) { अगर (रिट == HTTP_UPDATE_OK) {
Serial.printf ("अपडेट सफल हुआ");
सच लौटना; } और { अगर (रिट ==
Serial.printf ("अपग्रेड विफल");
} } } विवरण झूठा है; }
चरण 7: अंत में, अद्यतन आरंभ करें
बूट समय पर, या शायद एक एमक्यूटीटी संदेश के जवाब में (जैसा कि मैं करता हूं) निम्न कोड चलाएं:
if(_actualUpdate(true)) ESP.restart ();
// या SPIFFS के लिए…
if(_actualUpdate(false)) ESP.restart ();
डिवाइस अपने आप अपडेट हो जाएगा और सर्वर से नवीनतम कोड चलाकर रीबूट हो जाएगा। 33 उपकरणों को मैन्युअल रूप से अपडेट करने की तुलना में यह मेरे लिए बहुत आसान है!
होम ऑटोमेशन, IOT और ESP8266 प्रोग्रामिंग के बारे में बहुत अधिक उपयोगी जानकारी My Blog. पर मिल सकती है
सिफारिश की:
कैसे करें: एनिमल जैम में एक बेहतरीन कृति बनाएं! (नोट: अद्यतन २०२०): ३ चरण
कैसे करें: एनिमल जैम में एक बेहतरीन कृति बनाएं! (नोट: अपडेटेड २०२०): एनिमल जैम जानवरों के बारे में एक आभासी दुनिया है। आप जानवरों को रत्न या हीरे के साथ खरीद सकते हैं और उन्हें वर्चुअल स्टोर में खरीदे गए कपड़ों के साथ अनुकूलित कर सकते हैं! मैं वास्तव में कभी "खेल" एनिमल जैम, मुझे बस मास्टरपीस बनाना पसंद है! आज मैं आपको दिखाने जा रहा हूं
DS3231 RTC (रियल टाइम क्लॉक) को जावा (+ -1s) का उपयोग करके सटीक, तेज़ और स्वचालित सेट करना: 3 चरण
DS3231 RTC (रियल टाइम क्लॉक) को जावा (+ -1s) का उपयोग करके सटीक, तेज़ और स्वचालित सेट करना: यह निर्देश आपको एक Arduino और एक छोटे जावा एप्लिकेशन का उपयोग करके DS3231 रियल टाइम क्लॉक पर समय निर्धारित करने का तरीका दिखाने जा रहा है। Arduino का सीरियल कनेक्शन। इस कार्यक्रम का मूल तर्क: १। Arduino एक सीरियल अनुरोध भेजता है
NodeMCU, लोकल Blynk सर्वर और Blynk एपीके, एडजस्टेबल सेट पॉइंट के साथ इंडोर प्लांट्स को पानी देना: 3 कदम
NodeMCU, लोकल Blynk सर्वर और Blynk Apk, एडजस्टेबल सेट पॉइंट के साथ इंडोर प्लांट्स को पानी देना: मैंने इस प्रोजेक्ट का निर्माण किया है क्योंकि मेरे इनडोर प्लांट्स को तब भी स्वस्थ रहने की जरूरत है, जब मैं लंबे समय तक छुट्टी पर रहता हूं और मुझे यह विचार पसंद है इंटरनेट पर मेरे घर में होने वाली सभी संभावित चीजों पर नियंत्रण या कम से कम निगरानी करें
4 किमी या 2.5 मील दूर से वाईफाई कैसे प्राप्त करें !!! तेज गति के लिए अद्यतन!!!!: 5 कदम
4 किमी या 2.5 मील दूर से वाईफाई कैसे प्राप्त करें !!! तेज़ गति के लिए अद्यतन!!!!: मुझे इस पोस्ट को डाले हुए कई साल हो गए हैं और मैं वास्तव में इस परियोजना में आप सभी के इनपुट और रुचि की सराहना करता हूँ! अनुसंधान और विकास के बाद हमने इस काम को और भी बेहतर बनाने के तरीके खोजे हैं। आप जानते हैं कि हमें क्या चाहिए? अधिक शक्ति
अपना खुद का वेब सर्वर सेट करें!: 12 कदम
अपना खुद का वेब सर्वर सेट करें !: क्या आप कभी ऐसा स्थान चाहते हैं जहां आप अपनी फाइलें रख सकें और कहीं भी इंटरनेट कनेक्शन प्राप्त कर सकें? मान लें कि आप चाहते हैं कि आपकी संगीत लाइब्रेरी उपलब्ध हो, यदि आप अपने किसी मित्र को कोई गीत देना चाहते हैं, या हो सकता है कि आप इसे