Πίνακας περιεχομένων:
- Βήμα 1: Αυτό που χρειάζεστε
- Βήμα 2: Δημιουργήστε ένα αποθετήριο για να κρατάτε δυαδικά υλικολογισμικά
- Βήμα 3: Δημιουργήστε τα δυαδικά αρχεία
- Βήμα 4: Δημιουργήστε τη ροή διακομιστή
- Βήμα 5: Προσθέστε τη Λογική διακομιστή
- Βήμα 6: Προσθέστε κώδικα στο σκίτσο για να ζητήσετε ενημέρωση
- Βήμα 7: Τέλος, ξεκινήστε την ενημέρωση
Βίντεο: Ρύθμιση διακομιστή αυτόματης ενημέρωσης ESP8266: 7 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:38
Πολλοί άνθρωποι χρησιμοποιούν τώρα το 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), αλλά πρέπει να ξέρετε πώς να ρυθμίσετε τον δικό σας διακομιστή για να λειτουργήσει.
Αυτό το Instructable σας δείχνει τον τρόπο χρήσης ενός διακομιστή NODE-RED, αλλά η ίδια λογική ισχύει για οποιαδήποτε τεχνολογία διακομιστή της επιλογής σας π.χ. Apache + PHP κλπ
Βήμα 1: Αυτό που χρειάζεστε
- Arduino IDE
- ESP8266 πυρήνας
- Οποιοσδήποτε πίνακας ESP8266 dev με 1M ή περισσότερη μνήμη RAM flash
- Ένας διακομιστής Ιστού (ακόμη και ένα ταπεινό βατόμουρο Pi θα το κάνει - είναι αυτό που χρησιμοποιώ)
- (προαιρετικό) εργαλείο mkspiffs εάν θέλετε να ενημερώσετε αυτόματα μια εικόνα συστήματος αρχείων SPIFFS
Βήμα 2: Δημιουργήστε ένα αποθετήριο για να κρατάτε δυαδικά υλικολογισμικά
Στον διακομιστή μου, έχω έναν φάκελο που ονομάζεται/home/pi/trucFirmware που περιέχει τα διάφορα υλικολογισμικά συσκευών και εικόνες SPIFFS
Διατηρώ ένα ξεχωριστό δυαδικό αρχείο για κάθε τύπο υλικού (από ένα αρχείο προέλευσης με μερικούς #ορισμούς) και όταν μια νέα έκδοση είναι έτοιμη, χρησιμοποιώ την εντολή μενού Arduino IDE "σκίτσο/Εξαγωγή μεταγλωττισμένου δυαδικού" για κάθε συσκευή -στόχο. Σημειώστε ότι ακόμη και αν και υπάρχουν 5 διαφορετικοί τύποι υλικού, υπάρχουν μόνο δύο δυαδικά SPIFFS: έκδοση 1Μ και 4Μ - κατασκευασμένη με το εργαλείο mkspiffs - αφού όλες οι συσκευές διαθέτουν φλας 1Μ ή 4Μ.
Βήμα 3: Δημιουργήστε τα δυαδικά αρχεία
Χρησιμοποιώντας το σχέδιο του μενού Arduino IDE/Export Compiled Binary, δημιουργήστε το υλικολογισμικό που θα μεταφορτωθεί στη συσκευή όταν το ζητήσει από το διακομιστή ενημέρωσης.
Εάν χρειάζεστε ένα δυαδικό SPIFFS, θα χρειαστεί να εγκαταστήσετε το εργαλείο mkspiffs.
Μόλις το έχετε, η δημιουργία του δυαδικού SPIFFS είναι απλή. Έχω ένα αρχείο δέσμης μιας γραμμής για την έκδοση 1Μ που λαμβάνει ως παράμετρο τον αριθμό έκδοσης (%1)
mkspiffs -c data/ spiffs_%1_1M.bin
και άλλο για την έκδοση 4Μ:
mkspiffs -p 256 -b 8192 -s 0x0FB000 -c data/ 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: Προσθέστε τη Λογική διακομιστή
Ο πρώτος κόμβος στη ροή "ακούει" ένα http αίτημα για url https://192.168.1.4:1880/update με συνημμένο τον τύπο συσκευής. Το περνάει στον κόμβο λειτουργίας "Κατασκευή διαδρομής αναζήτησης", ο οποίος έχει τον ακόλουθο κώδικα 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 == "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. αντικατάσταση (/_ / dM \.bin/, ""); }
αν (msg.version <f) {
node.warn ("απαιτείται αναβάθμιση");
node.warn ("θα επιστρέψει"+msg.filename); επιστροφή msg. } node.warn ("καμία αναβάθμιση"); msg.statusCode = 304; msg.payload = ;
επιστροφή msg.
Ο κόμβος διακόπτη διασφαλίζει ότι είτε αποστέλλεται το μήνυμα "δεν απαιτείται ενημέρωση" 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; // αυτός είναι ο διακομιστής μου βατόμουρου Pi, το 1880 είναι η προεπιλεγμένη θύρα NODE-RED // /η ενημέρωση είναι το url που επέλεξα για διακομιστή για "ακρόαση", ακολουθούμενο από τον τύπο συσκευής … 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; }
Βήμα 7: Τέλος, ξεκινήστε την ενημέρωση
Κατά την εκκίνηση ή ίσως ως απάντηση σε ένα μήνυμα MQTT (όπως κάνω) εκτελέστε τον ακόλουθο κώδικα:
if (_actualUpdate (true)) ESP.restart ();
// ή για SPIFFS…
if (_actualUpdate (false)) ESP.restart ();
Η συσκευή θα ενημερωθεί και θα επανεκκινήσει εκτελώντας τον πιο πρόσφατο κώδικα από το διακομιστή. Είναι πολύ πιο απλό για μένα από τη μη αυτόματη ενημέρωση 33 συσκευών!
Πολύ περισσότερες χρήσιμες πληροφορίες σχετικά με τον αυτοματισμό σπιτιού, το IOT και τον προγραμματισμό του ESP8266 μπορείτε να βρείτε στο My Blog
Συνιστάται:
Σύστημα αυτόματης καθυστέρησης: 5 βήματα
Σύστημα αυτόματης καθυστέρησης: Αυτό το έργο αναπτύσσεται τροποποιώντας τον αλγόριθμο του ρομπότ αποφυγής αντικειμένων. Επιπλέον, το ρομπότ σε αυτό το εκπαιδευτικό μπορεί να ελεγχθεί από ένα smartphone μέσω Bluetooth
Ανεμόμετρο αυτόματης καταγραφής δεδομένων: 11 βήματα (με εικόνες)
Ένα αυτοτελές ανεμόμετρο καταγραφής δεδομένων: Μου αρέσει να συλλέγω και να αναλύω δεδομένα. Μου αρέσει επίσης να δημιουργώ ηλεκτρονικά gadget. Πριν από ένα χρόνο όταν ανακάλυψα τα προϊόντα Arduino, σκέφτηκα αμέσως, " Θα ήθελα να συλλέξω περιβαλλοντικά δεδομένα. " wasταν μια θυελλώδης μέρα στο Πόρτλαντ, OR, οπότε
Φορητό ηλιακό σύστημα αυτόματης παρακολούθησης: 9 βήματα (με εικόνες)
Φορητό σύστημα ηλιακής αυτόματης παρακολούθησης: Η Medomyself συμμετέχει στο πρόγραμμα Amazon Services LLC Associates Program, ένα διαφημιστικό πρόγραμμα συνεργατών που έχει σχεδιαστεί για να παρέχει μέσα στους ιστότοπους να κερδίζουν διαφημιστικά τέλη μέσω της διαφήμισης και της σύνδεσης με το amazon.com
Ρύθμιση του Raspberry Pi για διακομιστή μεσολάβησης: 6 βήματα
Ρύθμιση του Raspberry Pi για διακομιστή μεσολάβησης: Εάν θέλετε το Raspberry Pi να έχει πρόσβαση στο διαδίκτυο μέσω διακομιστή μεσολάβησης, θα πρέπει να ρυθμίσετε τις παραμέτρους του Pi σας ώστε να χρησιμοποιεί τον διακομιστή προτού μπορέσετε να έχετε πρόσβαση στο διαδίκτυο. Υπάρχουν δύο μέθοδοι με τις οποίες μπορείτε να ρυθμίσετε διακομιστή μεσολάβησης. Ωστόσο, στο πρώτο μ
Ρύθμιση διακομιστή FTP χρησιμοποιώντας το Filezilla!: 7 βήματα
Ρύθμιση διακομιστή FTP χρησιμοποιώντας το Filezilla !: 1. Τι είναι διακομιστής FTP; 2. Γιατί θα ήθελα να φτιάξω ένα; 1. Το πρωτόκολλο μεταφοράς αρχείων (FTP) είναι ένα πρωτόκολλο δικτύου που χρησιμοποιείται για τη μεταφορά δεδομένων από τον έναν υπολογιστή στον άλλο μέσω ενός δικτύου, όπως το Διαδίκτυο. Το FTP είναι ένα πρωτόκολλο μεταφοράς αρχείων για πρώην