Სარჩევი:
- ნაბიჯი 1: რაც გჭირდებათ
- ნაბიჯი 2: შექმენით საცავი ორობითი ფირმების შესანახად
- ნაბიჯი 3: შექმენით ორობითი
- ნაბიჯი 4: შექმენით სერვერის ნაკადი
- ნაბიჯი 5: დაამატეთ სერვერის ლოგიკა
- ნაბიჯი 6: დაამატეთ კოდი ესკიზს განახლების მოთხოვნის მიზნით
- ნაბიჯი 7: დაბოლოს, დაიწყეთ განახლება
ვიდეო: დააყენეთ ESP8266 ავტომატური განახლების სერვერი: 7 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:20
ბევრი ახლა იყენებს 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 dev დაფა 1 მ ან მეტი ფლეშ ოპერატიული მეხსიერებით
- ვებ სერვერი (თუნდაც თავმდაბალი ჟოლოს Pi გააკეთებს - ეს არის ის, რასაც მე ვიყენებ)
- (სურვილისამებრ) mkspiffs ინსტრუმენტი თუ გსურთ SPIFFS ფაილური სისტემის გამოსახულების ავტომატური განახლება
ნაბიჯი 2: შექმენით საცავი ორობითი ფირმების შესანახად
ჩემს სერვერზე მაქვს საქაღალდე სახელწოდებით/home/pi/trucFirmware, რომელიც ინახავს სხვადასხვა მოწყობილობის ფირმებს და SPIFFS სურათებს
მე ვინახავ ცალკეულ ბინარულს თითოეული ტექნიკის ტიპისთვის (ერთი წყაროს ფაილიდან რამდენიმე #განსაზღვრებით) და როდესაც ახალი გამოშვება მზად იქნება ვიყენებ Arduino IDE "ესკიზის/ექსპორტის შედგენილი ორობითი" მენიუს ბრძანებას თითოეული სამიზნე მოწყობილობისათვის. გაითვალისწინეთ, რომ თუნდაც მიუხედავად იმისა, რომ არსებობს 5 განსხვავებული ტექნიკის ტიპი, არსებობს მხოლოდ ორი ორობითი SPIFFS: 1M და 4M ვერსია - შექმნილია mkspiffs ინსტრუმენტთან ერთად - ვინაიდან ყველა მოწყობილობას აქვს 1M ან 4M flash.
ნაბიჯი 3: შექმენით ორობითი
Arduino IDE მენიუს ვარიანტის ესკიზის/ექსპორტის შედგენილი ორობითი სისტემის გამოყენებით, შექმენით firmware, რომელიც აიტვირთება მოწყობილობაზე, როდესაც ის ამას მოითხოვს განახლების სერვერიდან.
თუ გჭირდებათ 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: "გამარჯობა, მე ვუშვებ firmware ვერსიას a.b.c, გაქვთ თუ არა უფრო ახალი ვერსია?" სერვერი: "ნება მომეცით ვნახო … აჰ დიახ მე მაქვს a.b.d - აქ მოდის …"
თუ ახალი ვერსია არსებობს, სერვერი მას უბრალოდ აგზავნის როგორც ორობითი მონაცემების დატვირთვას http პასუხში. ESP8266httpUpdate კლასი ასრულებს ორობითი მეხსიერების კოპირების რთულ ნაწილს, იცვლის firmware ჩატვირთვის მისამართს ახალ კოდზე, ვიდრე (მოთხოვნის შემთხვევაში) მოწყობილობის გადატვირთვას ახალი კოდის გასაშვებად.
თუ მეორეს მხრივ არ არსებობს უფრო მაღალი ვერსია, ის პასუხობს http 304 შეცდომას, რომელიც ეფექტურად ამბობს: "მე არაფერი მაქვს შენთვის" და შენი კოდი განაგრძობს ჩვეულ რეჟიმში მუშაობას.
ნაბიჯი 5: დაამატეთ სერვერის ლოგიკა
ნაკადის პირველი კვანძი "უსმენს" http მოთხოვნას url- ზე https://192.168.1.4:1880/ განახლება მოწყობილობის ტიპთან ერთად. ის გადასცემს "კონსტრუქციის საძიებო გზის" ფუნქციის კვანძს, რომელსაც აქვს შემდეგი 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"; } else {var sz = h ['x-esp8266-chip-size']; msg.payload = "/home/pi/trucFirmware/spiffs _*_"+(sz/1048576)+"M.bin"; } მესიჯის დაბრუნება;
ეს უბრალოდ ადგენს შესაბამის გზას wildcard– ით sys ფუნქციისთვის, რომელიც შემდეგნაირად მუშაობს, რომელიც უბრალოდ მუშაობს
ls - r
შემდეგ გამომავალი იკვებება "შეადარეთ ვერსიები" ფუნქციის კვანძს:
var f = msg.payload.split ("\ n") [0]; msg.filename = f;
თუ (msg.mode == "ესკიზი") {
f = f. შეცვლა ("/home/pi/trucFirmware/truc_", ""); f = f. ჩანაცვლება (". ino."+msg.type+". bin", ""); } else {f = f.replace ("/home/pi/trucFirmware/spiffs_", ""); f = f. შეცვლა (/_ / dM \.bin/, ""); }
if (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 პორტი // /განახლება არის url, რომელიც ავირჩიე სერვერისთვის "მოსასმენად", რასაც მოყვება მოწყობილობის ტიპი … bool actualUpdate (bool sketch = false) {სიმებიანი შეტყობინება; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate (ყალბი); 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 ("განახლება წარმატებულია");
ჭეშმარიტი დაბრუნება; } სხვა {if (ret == HTTP_UPDATE_FAILED) {
Serial.printf ("განახლება ვერ მოხერხდა");
}}} დაბრუნება false; }
ნაბიჯი 7: დაბოლოს, დაიწყეთ განახლება
ჩატვირთვის დროს, ან შესაძლოა MQTT შეტყობინების საპასუხოდ (როგორც მე ვაკეთებ) გაუშვით შემდეგი კოდი:
if (_actualUpdate (true)) ESP.restart ();
// ან SPIFFS– ისთვის…
if (_actualUpdate (false)) ESP.restart ();
მოწყობილობა განახლდება და გადატვირთულია სერვერის უახლესი კოდი. ჩემთვის ბევრად უფრო ადვილია, ვიდრე 33 მოწყობილობის ხელით განახლება!
კიდევ ბევრი სასარგებლო ინფორმაცია სახლის ავტომატიზაციის, IOT და ESP8266 პროგრამირების შესახებ შეგიძლიათ იხილოთ ჩემს ბლოგზე
გირჩევთ:
Covid-19 განახლების ტრეკერი ESP8266 გამოყენებით: 9 ნაბიჯი
Covid-19 განახლებების მაძიებელი ESP8266– ის გამოყენებით: ეს არის პროექტი, რომელიც აჩვენებს ინდოეთის სხვადასხვა ქალაქების კორონავირუსის აფეთქების მიმდინარე მონაცემებს რეალურ დროში OLED ეკრანზე. ეს ცოცხალი სტატუსის მაძიებელი დაგეხმარებათ თქვენი რაიონის რეალურ დროში მონიტორინგისთვის. ეს პროექტი მთლიანად ბ
დააყენეთ Linux Windows- ისთვის!: 12 ნაბიჯი
Windows- ისთვის Linux- ის დაყენება!: მოგესალმებით Windows- ისთვის Linux- ის დაყენების ინსტრუქცია! ეს ინსტრუქცია არის დამწყებთათვის, რათა დაეხმაროს ბრძანების ხაზს შექმნან Ubuntu Linux სისტემა Windows მოწყობილობაზე და დააკავშირონ Windows ფაილები მათ Linux სისტემასთან. ლინუქსის ხელმოწერა
როგორ მოვაგვაროთ კლონი SimpleBGC კონტროლერის განახლების საკითხი: 4 ნაბიჯი
როგორ მოვაგვაროთ კლონი SimpleBGC კონტროლერის განახლების საკითხი: გამარჯობა. ცოტა ხნის წინ, მე ვმუშაობდი SimpleBGC გიმბალის კონტროლერზე ჩემი თვითმფრინავების პროექტისთვის. მე წარმატებით დავუკავშირე და დავარეგულირე. მშვენივრად მუშაობდა. ამის შემდეგ, მინდოდა მისი firmware- ის განახლება v2.2– დან v2.4– მდე. ასე რომ, მას შემდეგ რაც მე გავაუმჯობესე გიმბალი
დააყენეთ RTL-SDR MATLAB– ში როგორც FM მიმღები: 4 ნაბიჯი
RTL-SDR– ის დაყენება MATLAB– ში როგორც FM მიმღები: RTL-SDR ამ დღეებში საკმაოდ ცნობილია FM მიმღებლებისთვის და სხვა FM– სთან დაკავშირებული ამოცანებისათვის ჰობისტებისათვის და სტუდენტებისთვის. ეს არის მარტივი სამეურვეო პროგრამა SDR– ით MATLAB– ზე დასაწყებად. შემდგომი დახმარებისთვის გაიარეთ " საკომუნიკაციო სისტემის ინსტრუმენტების ყუთის მხარდაჭერის პაკეტი
ნარინჯისფერი PI როგორ: დააყენეთ ის 5 დიუმიანი HDMI TFT LCD ეკრანით: 8 ნაბიჯი (სურათებით)
ნარინჯისფერი PI როგორ: დააყენეთ ის 5 დიუმიანი HDMI TFT LCD ეკრანით: თუ თქვენ იყავით საკმარისად გონივრული იმისათვის, რომ შეუკვეთოთ HDMI TFT LCD ეკრანი თქვენს ნარინჯისფერ PI– სთან ერთად, თქვენ ალბათ იმედგაცრუებული დარჩებით იმ სირთულეებით, რომლებიც აიძულებენ მას მუშაობას … მაშინ, როდესაც სხვებმა ვერც კი შენიშნეს რაიმე დაბრკოლება. მთავარი ის არის, რომ არსებობს