সুচিপত্র:
- ধাপ 1: আপনার যা প্রয়োজন
- ধাপ 2: বাইনারি ফার্মওয়্যার রাখার জন্য একটি সংগ্রহস্থল তৈরি করুন
- ধাপ 3: বাইনারি তৈরি করুন
- ধাপ 4: সার্ভার ফ্লো তৈরি করুন
- ধাপ 5: সার্ভার লজিক যুক্ত করুন
- ধাপ 6: একটি আপডেটের অনুরোধ করার জন্য স্কেচে কোড যোগ করুন
- ধাপ 7: অবশেষে, আপডেট শুরু করুন
ভিডিও: একটি ESP8266 স্বয়ংক্রিয় আপডেট সার্ভার সেট আপ করুন: 7 টি ধাপ
2024 লেখক: John Day | [email protected]. সর্বশেষ পরিবর্তিত: 2024-01-30 08:03
অনেক মানুষ এখন ESP8266 এর অনেক ছদ্মবেশে (ESP-01S, Wemos D1, NodeMCU, Sonoff ইত্যাদি) হোম অটোমেশন সিস্টেমের জন্য ব্যবহার করছে। যদি আপনি আপনার নিজের কোড লিখেন (যেমন আমি করি) এইগুলির প্রত্যেকটি আলাদাভাবে আপডেট করে এমনকি ওটিএ (বায়ুতে) এর মাধ্যমে কিছুটা ক্লান্তিকর হয়ে ওঠে।
আমার নিজের সিস্টেমে, উদাহরণস্বরূপ 8x ESP-01S, 6x Wemos D1, 4x Sonoff বেসিক 12x Sonoff S20, 2x Sonoff SV এবং একটি NodeMCU যা একটি সাধারণ কোড বেস শেয়ার করে, তাই 33 টি ডিভাইস আপডেট করার জন্য যখন আমি একটি সাধারণ কোড তৈরি করি পরিবর্তন.
কিন্তু একটি সহজ উপায় আছে: একটি "আপডেট সার্ভার"। চমৎকার Arduino IDE + ESP8266 কোরটিতে বেশিরভাগ কাজ করার জন্য একটি লাইব্রেরি রয়েছে (ESP8266httpUpdate), কিন্তু আপনার কাজটি করার জন্য আপনার নিজের সার্ভার কিভাবে সেট আপ করবেন তা জানতে হবে।
এই নির্দেশযোগ্য আপনাকে দেখায় কিভাবে একটি NODE-RED সার্ভার ব্যবহার করে, কিন্তু একই যুক্তি আপনার পছন্দের যে কোন সার্ভার প্রযুক্তির ক্ষেত্রে প্রযোজ্য। Apache + PHP ইত্যাদি
ধাপ 1: আপনার যা প্রয়োজন
- Arduino IDE
- ESP8266 কোর
- 1M বা তার বেশি ফ্ল্যাশ র্যাম সহ যেকোন ESP8266 dev বোর্ড
- একটি ওয়েব সার্ভার (এমনকি একটি নম্র রাস্পবেরি পাই করবে - এটি আমি ব্যবহার করি)
- (alচ্ছিক) mkspiffs টুল যদি আপনি একটি SPIFFS ফাইল সিস্টেম ইমেজ স্বয়ংক্রিয়ভাবে আপডেট করতে চান
ধাপ 2: বাইনারি ফার্মওয়্যার রাখার জন্য একটি সংগ্রহস্থল তৈরি করুন
আমার সার্ভারে, আমার/home/pi/trucFirmware নামে একটি ফোল্ডার আছে যা বিভিন্ন ডিভাইস ফার্মওয়্যার এবং SPIFFS ইমেজ ধারণ করে
আমি প্রতিটি হার্ডওয়্যার প্রকারের জন্য একটি পৃথক বাইনারি বজায় রাখি (কয়েকটি #সংজ্ঞা সহ একটি একক উৎস ফাইল থেকে) এবং যখন একটি নতুন রিলিজ প্রস্তুত হয় তখন আমি প্রতিটি টার্গেট ডিভাইসের জন্য Arduino IDE "স্কেচ/এক্সপোর্ট কম্পাইল্ড বাইনারি" মেনু কমান্ড ব্যবহার করি। যদিও 5 টি ভিন্ন ধরনের হার্ডওয়্যার আছে, সেখানে শুধুমাত্র দুটি SPIFFS বাইনারি আছে: 1M এবং 4M সংস্করণ - mkspiffs টুল দিয়ে নির্মিত - যেহেতু সব ডিভাইসে 1M বা 4M ফ্ল্যাশ আছে।
ধাপ 3: বাইনারি তৈরি করুন
Arduino IDE মেনু বিকল্প স্কেচ/রপ্তানি সংকলিত বাইনারি ব্যবহার করে, ফার্মওয়্যার তৈরি করুন যা ডিভাইসটিতে আপলোড করা হবে যখন এটি আপডেট সার্ভার থেকে অনুরোধ করবে।
যদি আপনার একটি 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
আমি তারপর সমস্ত সংকলিত বাইনারি এবং SPIFFS। বাইনারি ফাইলগুলিকে রিপোজিটরিতে অনুলিপি করি
ধাপ 4: সার্ভার ফ্লো তৈরি করুন
আমি NODE-RED ব্যবহার করছি, কিন্তু সহজ লজিক যে কোন সার্ভার প্রযুক্তি / ভাষাতে একই হবে।
একটি) একটি url সংজ্ঞায়িত করুন যা ESP8266httpUpdate অনুরোধের জন্য শুনবে। আমার রাস্পবেরি পিআই সেরিভার 192.168.1.4 এ রয়েছে এবং হার্ডওয়্যারের প্রকারের সাথে /আপডেটের জন্য 1880 পোর্টে শোনে। তাই যদি আমি একটি Wemos D1 মিনি জন্য একটি বাইনারি অনুরোধ করতে যাচ্ছি, url শেষ হয়:
192.168.1.4:1880/update/d1_mini
খ) নিম্নলিখিত যুক্তিটি পরিচালনা করার জন্য কোড তৈরি করুন:
ESP8266: "হাই, আমি ফার্মওয়্যার ভার্সন a.b.c চালাচ্ছি, আপনার কি নতুন সংস্করণ আছে?" সার্ভার: "আমাকে দেখতে দাও … আহ হ্যাঁ আমার কাছে a.b.d আছে - এখানে এসেছে …"
যদি একটি নতুন সংস্করণ বিদ্যমান থাকে তবে সার্ভারটি এটি http উত্তরে বাইনারি ডেটা লোড হিসাবে পাঠায়। ESP8266httpUpdate ক্লাসটি বাইনারি মেমরিতে অনুলিপি করার কঠিন অংশ, নতুন কোড চালানোর জন্য ডিভাইস রিবুট করার পরিবর্তে (যদি অনুরোধ করা হয়) নতুন কোডে ফার্মওয়্যার বুট ঠিকানা পরিবর্তন করে।
অন্যদিকে যদি কোন উচ্চতর সংস্করণ না থাকে, এটি একটি http 304 ত্রুটির সাথে উত্তর দেয় যা কার্যকরভাবে বলে: "আমার কাছে আপনার জন্য কিছুই নেই" এবং আপনার কোড স্বাভাবিক হিসাবে চলতে থাকে।
ধাপ 5: সার্ভার লজিক যুক্ত করুন
প্রবাহের প্রথম নোডটি https://192.168.1.4:1880/ আপডেট করার জন্য একটি 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 ফাংশনের জন্য ওয়াইল্ডকার্ড সহ যথাযথ পথ সেট করে যা অনুসরণ করে, যা কেবল চালায়
ls - আর
আউটপুট তারপর "তুলনা সংস্করণ" ফাংশন নোড খাওয়ানো হয়:
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/, ""); }
যদি (msg.version <f) {
node.warn ("আপগ্রেড প্রয়োজন");
node.warn ("ফিরে আসবে"+msg.filename); ফেরত বার্তা; } node.warn ("কোন আপগ্রেড নেই"); msg.statusCode = 304; msg.payload = ;
ফেরত বার্তা;
সুইচ নোড তখন নিশ্চিত করে যে 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; // এটি আমার রাস্পবেরি পাই সার্ভার, 1880 হল ডিফল্ট NODE-RED পোর্ট // /আপডেট হল ইউআরএল যা আমি সার্ভারের জন্য "শোনার" জন্য বেছে নিয়েছি, এর পরে ডিভাইসের ধরন … bool actualUpdate {স্ট্রিং বার্তা; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate (মিথ্যা); যদি (স্কেচ) {ret = ESPhttpUpdate.update (updateUrl, TRUC_VERSION); // **************** এই লাইনটি "ব্যবসা করে"} অন্য {ret = ESPhttpUpdate.updateSpiffs (updateUrl, SPIFFS_VERSION); } যদি (ret! = HTTP_UPDATE_NO_UPDATES) {যদি (ret == HTTP_UPDATE_OK) {
Serial.printf ("আপডেট সফল");
সত্য ফিরে; } অন্য {যদি (ret == HTTP_UPDATE_FAILED) {
Serial.printf ("আপগ্রেড ব্যর্থ");
}}} মিথ্যা প্রত্যাবর্তন; }
ধাপ 7: অবশেষে, আপডেট শুরু করুন
বুট করার সময়, অথবা সম্ভবত একটি MQTT বার্তার জবাবে (যেমন আমি করি) নিম্নলিখিত কোডটি চালান:
যদি (_actualUpdate (সত্য)) ESP.restart ();
// অথবা SPIFFS এর জন্য…
যদি (_actualUpdate (মিথ্যা)) ESP.restart ();
ডিভাইসটি নিজেই আপডেট হবে এবং সার্ভার থেকে লেটেস্ট কোড চালু করে রিবুট করবে। ম্যানুয়ালি 33 ডিভাইস আপডেট করার চেয়ে এটি আমার জন্য অনেক সহজ!
হোম অটোমেশন, IOT এবং ESP8266 প্রোগ্রামিং সম্পর্কে অনেক বেশি দরকারী তথ্য আমার ব্লগে পাওয়া যাবে
প্রস্তাবিত:
একটি ওয়াইফাই অ্যাক্সেস পয়েন্ট তৈরি করুন এবং NodeMCU V3: 4 ধাপে একটি ওয়েব সার্ভার প্রদান করুন
একটি ওয়াইফাই অ্যাক্সেস পয়েন্ট তৈরি করুন এবং নোডএমসিইউ ভি 3 তে একটি ওয়েব সার্ভার সরবরাহ করুন: পূর্ববর্তী নিবন্ধে আমি ইতিমধ্যে নোডএমসিইউ ইএসপি 8266 ব্যবহার করার বিষয়ে আলোচনা করেছি। আর্ডুইনি আইডিইতে নোডএমসিইউ ইএসপি 8266 কীভাবে যোগ করা যায় সে সম্পর্কে আমি নিবন্ধে ব্যাখ্যা করেছি নোডএমসিইউ ইএসপি 8266 ব্যবহার করে ইন্টারনেটের মাধ্যমে যোগাযোগ করার বিভিন্ন উপায় রয়েছে। একটি হিসাবে NodeMCU তৈরি করা হচ্ছে
কিভাবে সঠিকভাবে একটি মিনি হাইফাই শেলফ সিস্টেম (সাউন্ড সিস্টেম) সংযুক্ত করুন এবং সেট আপ করুন: 8 টি ধাপ (ছবি সহ)
কিভাবে সঠিকভাবে সংযুক্ত এবং একটি মিনি হাইফাই শেলফ সিস্টেম (সাউন্ড সিস্টেম) সেট আপ: আমি একজন ব্যক্তি যে বৈদ্যুতিক প্রকৌশল সম্পর্কে শেখার উপভোগ করি। আমি তরুণ মহিলা নেতাদের জন্য অ্যান রিচার্ডস স্কুলে একটি উচ্চ বিদ্যালয়। আমি একটি মিনি এলজি হাইফাই শেলফ সিস্টেম থেকে যে কেউ তাদের সঙ্গীত উপভোগ করতে চায় তাকে সাহায্য করার জন্য আমি এই নির্দেশনা তৈরি করছি
ফাইলজিলা ব্যবহার করে একটি এফটিপি সার্ভার সেট আপ করা !: 7 ধাপ
ফাইলজিলা ব্যবহার করে একটি এফটিপি সার্ভার সেট আপ করা !: 1. একটি এফটিপি সার্ভার কী? 2. কেন আমি একটি বানাতে চাই? 1. ফাইল ট্রান্সফার প্রোটোকল (এফটিপি) হল একটি নেটওয়ার্ক প্রোটোকল যা একটি কম্পিউটার থেকে অন্য কম্পিউটারে ডেটা স্থানান্তর করতে ব্যবহৃত হয়, যেমন ইন্টারনেট। FTP প্রাক্তন জন্য একটি ফাইল স্থানান্তর প্রোটোকল
আপনার নিজস্ব ওয়েব সার্ভার সেট আপ করুন !: 12 টি ধাপ
আপনার নিজের ওয়েব সার্ভার সেট আপ করুন! বলুন আপনি আপনার সঙ্গীত লাইব্রেরি পেতে চেয়েছিলেন যদি আপনি আপনার বন্ধুদের একটি গান দিতে চান, অথবা হয়তো আপনি চান
একটি নিকন এসসি -28 টিটিএল ক্যাবলে একটি পিসি সিঙ্ক জ্যাক যুক্ত করুন (ক্যামেরা ফ্ল্যাশের জন্য অটো সেটিংস ব্যবহার করুন এবং ক্যামেরা ফ্ল্যাশ বন্ধ করুন !!): 4 টি ধাপ
একটি নিকন এসসি -28 টিটিএল ক্যাবলে একটি পিসি সিঙ্ক জ্যাক যুক্ত করুন (ক্যামেরা ফ্ল্যাশ অন করার জন্য অটো সেটিংস ব্যবহার করুন এবং ক্যামেরা ফ্ল্যাশ বন্ধ করুন !!): এই নির্দেশে আমি আপনাকে দেখাবো কিভাবে সেই বিরক্তিকর মালিকানা 3 পিন টিটিএল সংযোগকারীগুলিকে সরিয়ে ফেলতে হয় একটি নিকন SC-28 অফ ক্যামেরা টিটিএল তারের পাশে এবং এটি একটি আদর্শ পিসি সিঙ্ক সংযোগকারী দিয়ে প্রতিস্থাপন করুন। এটি আপনাকে একটি ডেডিকেটেড ফ্ল্যাশ ব্যবহার করতে দেবে