Πίνακας περιεχομένων:
2025 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2025-01-13 06:57
Γειά σου Κόσμε! Αυτό είναι το πρώτο μου εκπαιδευτικό! Είμαι ο Marco από το Grosseto Ιταλίας, δεν είμαι προγραμματιστής, δεν είμαι ηλεκτρονικός μηχανικός αλλά είμαι περιβαλλοντικός οδηγός στο τοπικό μας φυσικό πάρκο (φυσικό πάρκο Maremma).
Στον συνεταιρισμό μου δουλεύουμε πολύ με εκδρομές με κανό, νατουραλιστικές και ήρεμες περιηγήσεις στον ποταμό Ombrone για παρατήρηση πουλιών και λίγη αίσθηση χαλάρωσης.
Αλλά ο ποταμός Ombrone είναι επίσης διάσημος για το χαρακτηριστικό είδος ροής του: από το καλοκαίρι "μηδέν" έως το φθινόπωρο-χειμώνα ροή αρκετών χιλιάδων κυβικών μέτρων νερού ανά ώρα.
Για το λόγο αυτό, ο ποταμός Ombrone παρακολουθείται συνεχώς από την εξαιρετική περιφερειακή υδρομετρική υπηρεσία (SIR), με μια φανταστική τοποθεσία που καθιστά τα συλλεγμένα δεδομένα διαθέσιμα.
Τώρα περιμένουμε το τέλος της σεζόν και τις πρώτες φθινοπωρινές πλημμύρες για την απομάκρυνση της αποβάθρας και των κανό…
Αλλά όταν αρχίζουμε να μιλάμε για απόξεση ανάλυσης esp32ing κλπ; μια στιγμη ακομη
Κατά τη διάρκεια του ιταλικού lockdown, έκανα το πρώτο μάθημα arduino blink, υπέροχο… και συνέχισα να παίζω με αισθητήρες και arduino C. Έτσι, αν βρείτε τον κώδικα μου ακατέργαστο ή γεμάτο ανοησίες λογικών κενών, σκεφτείτε το!
Έκανα πολλά πράγματα για να χάσω χρόνο, αλλά με αυτόν τον συνεχή κίνδυνο πλημμύρας αποφάσισα να κάνω κάτι δροσερό: χάρη σε ένα ESP32 με παράγοντα μορφής arduino (Wemos d1 r32) το οποίο κράτησα τυλιγμένο για μήνες επειδή το θεωρούσα "δύσκολο", Είχα πραγματικά πολλές ικανοποιήσεις:
Έχω κάνει ξύστρα που φέρνει και αναλύει δεδομένα από μια ιστοσελίδα SIR και εμφανίζει τις μεταβλητές που λαμβάνονται σε μια φθηνή οθόνη LCD i2c και καθώς η συχνότητα φωτεινότητας αναβοσβήνει σε μερικά led σε έναν ρεαλιστικό χάρτη.
οπότε αν προκληθεί πλημμύρα από την πλευρά του βουνού, θα προειδοποιηθώ από την αυξανόμενη φωτεινότητα (αλλαγή επιπέδου) και από την αυξανόμενη συχνότητα (αλλαγή επιπέδου σε μία ώρα) των led στο χάρτη … αλλά το ESP32 μπορεί επίσης να στέλνει μηνύματα ηλεκτρονικού ταχυδρομείου! Γιατί λοιπόν να μην κάνουμε μια λειτουργία για αυτό;
πάμε να δούμε τον παρακάτω κώδικα τώρα!
Προμήθειες
- Πλακέτα βασισμένη σε ESP32: Έχω χρησιμοποιήσει το Wemos d1 r32 επειδή έχουν θηλυκές καρφίτσες και είναι πιο εύκολο να το χειριστείς
- leds, το κόκκινο είναι πιο "ξύπνιο"
- I2C 16x2 LCD iv'e μόνο ένα μπλε, αλλά το πράσινο είναι πιο κομψό
- φθηνή σανίδα φελλού
- νυχτερινή ώρα (προαιρετικά)
Βήμα 1: Ο κώδικας
στο διαδίκτυο έχω βρει μόνο vapourous tutorials που χρησιμοποιεί εξωτερικούς ιστότοπους για την ανάλυση δεδομένων, οπότε προσπάθησα να δοκιμάσω τη δύναμη των πυρήνων esp32 αναλύοντας τα δεδομένα απευθείας στον πίνακα … χωρίς προβλήματα!
Έτσι, αν δείτε, η πηγή της σελίδας SIR μπορεί να καταλάβει πώς λειτουργεί: ευτυχώς χρησιμοποιούν τιμές "διαχωρισμένες με κόμμα" για την εμφάνιση των δεδομένων τους, οπότε με αυτόν τον κωδικό αναζητώ έναν υδρογραφικό σταθμό (κωδικός TOSnumber) και μετράω τον αριθμό των κόμματα (ως διαχωριστικό) που περιέχουν την τιμή που θέλω (και την αποθηκεύουμε ως μεταβλητή), στη συνέχεια την επανασχεδιάζουμε ως φωτεινότητα led και χρόνο σε millis για αναβοσβήνει "επίπεδο παραλλαγής"
Ο πυρήνας αυτού του ξύστρα βρίσκεται στην καρτέλα
ind = payload.indexOf ("TOSstation_number"); // λάβετε τη θέση (ind) από όπου αρχίζετε να μετράτε κόμματα
String my_var = getValue_ind (ωφέλιμο φορτίο, ',', 8); // όπου 8 είναι το όγδοο κελί που ορίζεται με κόμματα (διαχωριστής)
Το "ωφέλιμο φορτίο" είναι αυτό που λαμβάνω από τον ιστό που είχε προηγουμένως καθαριστεί από "εισαγωγικά" και "& nbsp";
και τη συνάρτηση getValue_ind που βρίσκεται στην κύρια καρτέλα
Συμβολοσειρά getValue_ind (Στοιχεία συμβολοσειράς, διαχωριστής χαρακτήρων, ευρετήριο int) {
int βρέθηκε = 0; int strIndex = {0, -1}; int maxIndex = data.length () - 1; για (int i = ind; i <= maxIndex && found <= index; i ++) {// από την ind θέση if (data.charAt (i) == διαχωριστής || i == maxIndex) {found ++; strIndex [0] = strIndex [1] + 1; strIndex [1] = (i == maxIndex); i + 1: i; }} επιστροφή βρέθηκε> ευρετήριο; data.substring (strIndex [0], strIndex [1]): ""; }
προσαρμοσμένο από
ο κώδικας ζητάει τη σελίδα κάθε 15 λεπτά, είναι περίπου 44Kb, δεν νομίζω ότι είναι μεγάλο φορτίο για τους διακομιστές και για το ESP32.. Για να αποφύγω την πολύ κύλιση έχω χωρίσει το πρόγραμμα σε διάφορες λειτουργίες, διαβάστε τα σχόλια
εδώ η επικόλληση κώδικα είναι πραγματικά ένα χάος … έβαλα τα αρχεία.ino απευθείας
Έχω χρησιμοποιήσει τη λειτουργία καρτέλας του arduino IDE, οπότε έχω διαφορετικά αρχεία.ino
αυτή είναι η τελευταία έκδοση του κώδικα (;), υπάρχουν πολλές προσπάθειες, οπότε θα εκτιμήσω κάθε πρόταση!
- για την ευθυγράμμιση της φωτεινότητας led για χαμηλές τιμές, - για τη λειτουργία "χάρτης" για μεταβλητές κυμαινόμενου σημείου - για τη χρήση του δεύτερου πυρήνα στο ESP32, - για την κατανόηση του τρόπου εκτύπωσης μιας αλληλογραφίας html από μια συμβολοσειρά με sprintfI έχουν ξοδέψατε πολύ πραγματικό "nerding time", οπότε διαβάστε τα σχόλια στα αρχεία.ino ή στο github!
ως ρυθμίσεις μεταφόρτωσης έχω χρησιμοποιήσει Εργαλεία: Σχέδιο κατατμήσεων: ΟΧΙ ΟΤΑ για να έχω περισσότερο χώρο για αυτόν τον τεράστιο κώδικα
καλα να περνατε
κάντε κλικ εδώ για τον κωδικό στο github
Βήμα 2: Ο χάρτης
αυτό το εγχειρίδιο είναι επικεντρωμένο στον κωδικό ESP32, ώστε να μπορώ να σας δώσω μόνο μερικές λέξεις -κλειδιά, συνδέσμους και εργαλεία που χρησιμοποιούνται:
η εξαιρετική υπηρεσία για την εξαγωγή διανυσματικών περιοχών από το openstreetmap
- το "ostic" QGis για την πέψη τους
- αναζητήστε πίνακα χαρακτηριστικών για απλοποίηση του χάρτη σας
- δημιουργήστε μια διάταξη εκτύπωσης και εξάγετε τον χάρτη σε μορφή svg σε μορφή χαρτιού Α3
- διασκεδάστε με τον "ομαλότερο" εικονογράφο
- τύπωσε το
Βήμα 3: The Hot Glue Party
έτσι μπορώ να προτείνω να κόψετε τις τρύπες για το led και την οθόνη στο χαρτί πριν το στερεώσετε στον πίνακα φελλού
η καλωδίωση είναι πολύ απλή και κακή από μένα: P
Το επίπεδο συγκόλλησης μου: Περιστέρι
όπως μπορείτε να δείτε από τον κώδικα τα led πηγαίνουν στις καρφίτσες IO
#define LED_PIN0 14 // si #define LED_PIN1 27 // buon #define LED_PIN2 16 // sass #define LED_PIN3 17 // tur #define LED_PIN4 25 // ist #define LED_PIN5 26 // berr
αναζητήστε το pinout ESP32 για κατανόηση
Βήμα 4: Το τελικό προϊόν
οπότε αυτή η φωτογραφία δεν είναι η καλύτερη, αλλά όταν έχουμε πλημμύρα στο ποτάμι θα βάλω ένα ωραίο βίντεο!