Φτιάξτε το δικό σας μετεωρολογικό σταθμό Raspberry Pi

Build Your Own Raspberry Pi Weather Station



Το Raspberry Pi Sense Hat είναι ένας πρόσθετος πίνακας που μπορεί να χρησιμοποιηθεί με υπολογιστές Raspberry Pi με έναν πίνακα. Το Raspberry Pi Sense Hat διαθέτει οθόνη LED 8 × 8 και χειριστήριο 5 κουμπιών και είναι εξοπλισμένο με τους ακόλουθους αισθητήρες:

  1. Γυροσκόπιο
  2. Επιταχυνσιόμετρο
  3. Μαγνητόμετρο
  4. Θερμοκρασία
  5. Βαρομετρική πίεση
  6. Υγρασία

Σε αυτό το άρθρο, θα σας δείξω πώς να δημιουργήσετε μια εφαρμογή web μετεωρολογικού σταθμού που βασίζεται σε Python API χρησιμοποιώντας το θερμοκρασία , βαρομετρική πίεση , και υγρασία αισθητήρες του Raspberry Pi Sense Hat. Για να ακολουθήσετε αυτό το άρθρο, θα χρειαστείτε τα ακόλουθα:







  1. Ένα Raspberry Pi 3 ή Raspberry Pi 4 με δυνατότητα σύνδεσης στο δίκτυο.
  2. Μια μονάδα Raspberry Pi Sense Hat.
  3. Προσαρμογέας τροφοδοσίας micro-USB (Raspberry Pi 3) ή USB Type-C (Raspberry Pi 4).
  4. Κάρτα microSD 16 GB ή 32 GB με Raspberry Pi OS.
  5. Φορητός υπολογιστής ή επιτραπέζιος υπολογιστής για απομακρυσμένη πρόσβαση επιτραπέζιου υπολογιστή VNC ή πρόσβαση SSH στο Raspberry Pi.

ΣΗΜΕΙΩΣΗ: Σε αυτό το άρθρο, θα συνδεθούμε στο Raspberry Pi εξ αποστάσεως μέσω VNC ή SSH χρησιμοποιώντας την ακέφαλη ρύθμιση του Raspberry Pi. Εάν δεν θέλετε να αποκτήσετε πρόσβαση στο Raspberry Pi σας από απόσταση μέσω SSH ή VNC, θα πρέπει να συνδέσετε μια οθόνη, ένα πληκτρολόγιο και ένα ποντίκι στο Raspberry Pi.



Για να μάθετε πώς να αναβοσβήνετε την εικόνα Raspberry Pi OS σε κάρτα microSD, ανατρέξτε στον τρόπο εγκατάστασης και χρήσης του Raspberry Pi Imager. Εάν χρειάζεστε βοήθεια για την εγκατάσταση του Raspberry Pi OS στο Raspberry Pi, διαβάστε Πώς να εγκαταστήσετε το Raspberry Pi OS στο Raspberry Pi 4 Το Εάν χρειάζεστε βοήθεια με την ακέφαλη ρύθμιση του Raspberry Pi, ανατρέξτε στον τρόπο με τον οποίο μπορείτε να εγκαταστήσετε και να διαμορφώσετε το Raspberry Pi OS στο Raspberry Pi 4 χωρίς εξωτερική οθόνη.



Σύνδεση Raspberry Pi Sense Hat με Raspberry Pi

Το κιτ Raspberry Pi Sense Hat συνοδεύεται από την πρόσθετη πλακέτα Raspberry Pi Sense Hat, μια κεφαλίδα 40-pin από άντρα σε γυναίκα και μερικές βίδες και αποστάτες.





Προτού μπορέσετε να συνδέσετε τον πίνακα Sense Hat στο Raspberry Pi, πρέπει να συνδέσετε την κεφαλίδα 40 ακίδων στο Sense Hat. Συνδέστε τις αρσενικές ακίδες της κεφαλίδας ανδρών-γυναικών 40 ακίδων στο καπέλο Sense, όπως φαίνεται στις παρακάτω εικόνες.



Οι υπολογιστές Raspberry Pi με έναν πίνακα έχουν 4 οπές που μπορούν να χρησιμοποιηθούν για τη στερέωση πρόσθετων πλακών ή θήκης. Για να προσαρτήσετε την πρόσθετη πλακέτα, τοποθετήστε βίδες από το πίσω μέρος του Raspberry Pi, όπως φαίνεται στις παρακάτω εικόνες.

Στη συνέχεια, συνδέστε ένα διαχωριστικό στη βίδα.

Μόλις προσθέσετε και τις τέσσερις βίδες και αποστάτες, το Raspberry Pi θα πρέπει να μοιάζει με αυτό που φαίνεται στην παρακάτω εικόνα.

Συνδέστε το Raspberry Pi Sense Hat στην ανδρική κεφαλίδα GPIO 40 ακίδων του Raspberry Pi, όπως φαίνεται στις παρακάτω εικόνες.

ΣΗΜΕΙΩΣΗ: Να είστε προσεκτικοί ενώ αποσυνδέετε το Raspberry Pi Sense Hat από την κεφαλίδα GPIO 40 ακίδων Raspberry Pi για να αποφύγετε να λυγίζετε τις ακίδες του Raspberry Pi GPIO.

Με τις τέσσερις βίδες που απομένουν, στερεώστε το Raspberry Pi Sense Hat, όπως φαίνεται στις παρακάτω εικόνες.

Ενεργοποίηση του Raspberry Pi

Τώρα που το Raspberry Pi Sense Hat είναι συνδεδεμένο στο Raspberry Pi, τοποθετήστε την κάρτα microSD με το Raspberry Pi OS στην υποδοχή κάρτας microSD του Raspberry Pi, συνδέστε το καλώδιο τροφοδοσίας στο Raspberry Pi και ενεργοποιήστε το.

Εγκατάσταση της βιβλιοθήκης Raspberry Pi Sense Hat Python

Για να χρησιμοποιήσετε το Raspberry Pi Sense Hat στο Raspberry Pi, το αίσθηση-καπέλο Η βιβλιοθήκη Python πρέπει να εγκατασταθεί στο Raspberry Pi OS. ο αίσθηση-καπέλο η βιβλιοθήκη είναι διαθέσιμη στο επίσημο αποθετήριο πακέτων του Raspberry Pi OS.

Για να εγκαταστήσετε το Raspberry Pi αίσθηση-καπέλο Βιβλιοθήκη Python στο Raspberry Pi OS, ενημερώστε πρώτα την προσωρινή μνήμη αποθήκευσης πακέτων APT με την ακόλουθη εντολή:

$ sudo apt ενημέρωση

Στη συνέχεια, εκτελέστε την ακόλουθη εντολή:

$ sudo apt install sense -hat -y

Εγκατάσταση της βιβλιοθήκης Python Flask Micro Web Framework

Θα χρησιμοποιήσουμε το πλαίσιο Flask Python για να δημιουργήσουμε την εφαρμογή καιρού. Μπορείτε να εγκαταστήσετε το Flask από το επίσημο αποθετήριο πακέτων του Raspberry Pi OS με την ακόλουθη εντολή:

$ sudo apt install python3 -flask -y

Δημιουργία καταλόγου έργου

Είναι καλή ιδέα να δημιουργήσετε έναν κατάλογο έργου για να οργανώσετε τα αρχεία του έργου σας. Για να δημιουργήσετε έναν κατάλογο έργου ~/εργασία , χρησιμοποιήστε την ακόλουθη εντολή:

$ mkdir ~/εργασία

Μόλις δημιουργηθεί ο κατάλογος έργου, μεταβείτε στον κατάλογο έργου ως εξής:

$ cd ~/εργασία

Δοκιμή του Raspberry Pi Sense Hat

Για να ελέγξουμε αν λειτουργεί το Raspberry Pi Sense Hat, μπορούμε να γράψουμε ένα απλό δοκιμαστικό σενάριο Python. Μπορείτε να δημιουργήσετε ένα νέο σενάριο Python που ονομάζεται test.py με την νανο επεξεργαστής κειμένου ως εξής:

$ nano test.py

Εισαγάγετε τον ακόλουθο κώδικα στο test.py αρχείο. Γραμμή 1 εισαγωγές SenseHat από το αίσθηση_τι ενότητα, η γραμμή 3 δημιουργεί α SenseHat αντικείμενο και αποθηκεύει μια αναφορά στο έννοια μεταβλητή και οι γραμμές 5–6 ορίζουν το χρώμα και των 8 LED των 8 to 8 σε κόκκινο. Μόλις τελειώσετε, πατήστε + Χ ακολουθούμενη από ΚΑΙ και Το

Μπορείτε να εκτελέσετε το test.py Σενάριο Python με την ακόλουθη εντολή:

$ python3 test.py

Η μήτρα LED 8 × 8 πρέπει να λάμπει σε κόκκινο χρώμα όπως φαίνεται στην παρακάτω εικόνα.

Για να απενεργοποιήσετε τα LED του Sense Hat, εκτελέστε το Σαφή() μέθοδο χωρίς καμία τιμή χρώματος στο test.py Σενάριο Python, όπως φαίνεται στο παρακάτω στιγμιότυπο οθόνης και εκτελέστε το test.py Ξανά σενάριο Python.

Τα LED του Sense Hat θα πρέπει τώρα να είναι απενεργοποιημένα, όπως φαίνεται στην παρακάτω εικόνα.

Εάν το καπέλο Sense λειτουργεί σωστά, προχωρήστε στην επόμενη ενότητα.

Λήψη δεδομένων καιρού από το Sense Hat

Μπορείτε να λάβετε δεδομένα αισθητήρα από το Sense Hat πολύ εύκολα χρησιμοποιώντας το αίσθηση-καπέλο Βιβλιοθήκη Python. Για να ανακτήσετε δεδομένα αισθητήρα από το Sense Hat, μπορείτε να δημιουργήσετε ένα νέο σενάριο Python read_sensor_data.py ως εξής:

$ nano read_sensor_data.py

Εισαγάγετε τον ακόλουθο κώδικα στο read_sensor_data.py Python file.

απόαίσθηση_τιεισαγωγήSenseHat
από χρόνος εισαγωγήύπνος
έννοια=SenseHat()
έννοια.Σαφή()
ενώ Αληθής:
tempC=έννοια.πάρει_θερμοκρασία()
tempF=tempC *(9/5)+32
πίεση=έννοια.get_pressure()
υγρασία=έννοια.πάρε_υγρασία()

Τυπώνω('Θερμοκρασία: %.2f ° C/ %. 2f ° F n'%(tempC,tempF))
Τυπώνω('Πίεση: %.2f mb n'%(πίεση))
Τυπώνω('Υγρασία:%.2f %% n n'%(υγρασία))
ύπνος(5)

Μόλις τελειώσετε, πατήστε + Χ ακολουθούμενη από ΚΑΙ και Το

Στον παραπάνω κώδικα, οι γραμμές 1 και 2 εισάγουν όλες τις απαιτούμενες βιβλιοθήκες, η γραμμή 4 δημιουργεί a SenseHat αντικείμενο, και η γραμμή 5 απενεργοποιεί όλα τα LED του Sense Hat χρησιμοποιώντας το Σαφή() μέθοδος. Ο βρόχος while στη γραμμή 7 είναι ένας άπειρος βρόχος που θα τρέξει τον κώδικα στις γραμμές 8-16 για πάντα.

Στη γραμμή 8, το get_temperature () η μέθοδος χρησιμοποιείται για την ανάγνωση των δεδομένων θερμοκρασίας (σε βαθμούς Κελσίου) από τον αισθητήρα υγρασίας του Sense Hat. Στη γραμμή 9, τα δεδομένα θερμοκρασίας μετατρέπονται από βαθμούς Κελσίου σε βαθμούς Φαρενάιτ. Στη γραμμή 10, το get_pressure () η μέθοδος χρησιμοποιείται για την ανάγνωση των δεδομένων πίεσης αέρα (σε χιλιοστά μπαρ) από τον αισθητήρα πίεσης του Sense Hat. Στη γραμμή 11, το get_hidity () η μέθοδος χρησιμοποιείται για την ανάγνωση των δεδομένων υγρασίας (σε %) από τον αισθητήρα υγρασίας του Sense Hat.

Οι γραμμές 13-15 χρησιμοποιούνται για την εκτύπωση των δεδομένων του αισθητήρα στην κονσόλα και η γραμμή 16 χρησιμοποιείται για να περιμένει 5 δευτερόλεπτα πριν ξαναδιαβάσει τα δεδομένα του αισθητήρα.

Μπορείτε να εκτελέσετε το read_sensor_data.py Το σενάριο Python ως εξής:

$ python3 read_sensor_data.py

Μόλις εκτελεστεί το σενάριο, τα δεδομένα του αισθητήρα θα εκτυπωθούν στην κονσόλα.

Τώρα που μπορούμε να διαβάσουμε τα δεδομένα του αισθητήρα από το Sense Hat, πατήστε + ντο να σταματήσει το πρόγραμμα.

Δημιουργία μιας εφαρμογής Web μετεωρολογικού σταθμού

Σε αυτή την ενότητα, θα σας δείξουμε πώς να χρησιμοποιήσετε το πλαίσιο ιστού Python Flask για να δημιουργήσετε ένα API καιρού και μια εφαρμογή καιρού. Η εφαρμογή καιρού θα έχει πρόσβαση στο API δεδομένων καιρού και θα εμφανίζει τα δεδομένα καιρού σε πραγματικό χρόνο. Όλος ο κώδικας που συζητείται σε αυτήν την ενότητα είναι διαθέσιμος στο GitHub στη διεύθυνση shovon8 / raspberry-pi-sense-hat-weather-app Το

Αρχικά, δημιουργήστε ένα server.py Σενάριο Python στον κατάλογο έργου ως εξής:

$ nano server.py

Εισαγάγετε τον ακόλουθο κώδικα στο server.py Python file.

απόφλάσκαεισαγωγήΦλάσκα
απόφλάσκαεισαγωγήjsonify
απόφλάσκαεισαγωγήrender_template
απόφλάσκαεισαγωγήurl_for
απόαίσθηση_τιεισαγωγήSenseHat
εφαρμογή=Φλάσκα(__όνομα__)
εφαρμογήδιαμόρφωση['SEND_FILE_MAX_AGE_DEFAULT'] = 0
έννοια=SenseHat()
έννοια.Σαφή()
μεεφαρμογήtest_request_context():
url_for('στατικός',όνομα αρχείου='style.css')
url_for('στατικός',όνομα αρχείου='app.js')
@εφαρμογήΔιαδρομή('/Φωτιά')
defΦωτιά():
tempC=έννοια.πάρει_θερμοκρασία()
tempF=tempC *(9/5)+32
πίεση=έννοια.get_pressure()
πίεσηPsi=πίεση *0,0145038
πίεσηP=πίεση *100
υγρασία=έννοια.πάρε_υγρασία()

ΕΠΙΣΤΡΟΦΗjsonify({
'θερμοκρασία':{ 'ΝΤΟ': tempC, 'ΦΑ': tempF},
'πίεση':{ 'mb': πίεση, 'hPa': πίεση,
'psi': πίεσηPsi, 'Π': πίεσηP},
'υγρασία': υγρασία
})
@εφαρμογήΔιαδρομή('/')
defΣπίτι():
ΕΠΙΣΤΡΟΦΗrender_template('./home.html')

Στη συνέχεια, πατήστε + Χ ακολουθούμενη από ΚΑΙ και να σώσει το server.py Python script.

Στον παραπάνω κώδικα, οι γραμμές 1–5 εισάγουν όλες τις απαιτούμενες βιβλιοθήκες, η γραμμή 7 δημιουργεί μια εφαρμογή Flask, η γραμμή 11 δημιουργεί ένα αντικείμενο SenseHat και η γραμμή 12 απενεργοποιεί όλα τα LED του Sense Hat. Η γραμμή 8 απενεργοποιεί την προσωρινή αποθήκευση ιστού για την εφαρμογή Flask. Επειδή αυτή η εφαρμογή είναι ελαφριά, δεν υπάρχει ανάγκη για προσωρινή αποθήκευση. Εάν θέλετε να τροποποιήσετε την εφαρμογή, τότε η απενεργοποίηση της προσωρινής αποθήκευσης ιστού θα κάνει τη δοκιμή πολύ πιο εύκολη.

Οι γραμμές 18-31 διαβάζουν τα δεδομένα αισθητήρα από το Sense Hat και επιστρέφουν τα δεδομένα API σε μορφή JSON σε αίτημα HTTP GET στο /Φωτιά τελικό σημείο του διακομιστή ιστού. Οι γραμμές 37-39 επιστρέφουν την αρχική σελίδα της εφαρμογής web καιρού στο / τελικό σημείο του διακομιστή ιστού. Η αρχική σελίδα αποδίδεται από το home.html αρχείο, το οποίο πρέπει να βρίσκεται στο πρότυπα/ κατάλογο του καταλόγου έργου.

Οι γραμμές 14-16 χρησιμοποιούνται για να επιτρέψουν την πρόσβαση στο style.css και app.js στατικά αρχεία. Αυτά τα αρχεία πρέπει να βρίσκονται στο στατικός/ κατάλογο του καταλόγου έργου. ο style.css Το αρχείο χρησιμοποιείται για το στυλ του home.html αρχική σελίδα, και το app.js το αρχείο χρησιμοποιείται για να ζητήσει τα δεδομένα API από το /Φωτιά τελικό σημείο και ενημέρωση των δεδομένων καιρού στο home.html σελίδα κάθε 5 δευτερόλεπτα.

Δημιουργήστε το στατικός/ και πρότυπα/ κατάλογο στον κατάλογο έργου ως εξής:

$ mkdir -v {static, templates}

Δημιουργώ ένα home.html αρχείο στο πρότυπα/ κατάλογο ως εξής:

$ nano templates/home.html

Εισαγάγετε τον ακόλουθο κώδικα στο home.html αρχείο.


< html >>
< κεφάλι >>
< μετα όνομα='Θέα' περιεχόμενο='πλάτος = πλάτος συσκευής, αρχική κλίμακα = 1,0'>>
< τίτλος >>Μετεωρολογικός Σταθμός Raspberry Pi</ τίτλος >>
< Σύνδεσμος σχετ='φύλλο στυλ' τύπος='text/css'
href='{{url_for (' static ', filename =' style.css ')}}'/>>
</ κεφάλι >>
< σώμα >>
< div ταυτότητα='περιεχόμενο'>>
< η1 >>Μετεωρολογικός Σταθμός Raspberry Pi</ η1 >>

< div τάξη='περιεχόμενο δεδομένων'>>
< η2 >>Θερμοκρασία</ η2 >>
< div τάξη='σειρά δεδομένων'>>
< div τάξη='data-cell' ταυτότητα='tempC'>>
...
</ div >>
< div τάξη='data-cell' ταυτότητα='tempF'>>
...
</ div >>
</ div >>
</ div >>

< div τάξη='περιεχόμενο δεδομένων'>>
< η2 >>Πίεση</ η2 >>
< div τάξη='σειρά δεδομένων'>>
< div τάξη='data-cell' ταυτότητα='pressMb'>>
...
</ div >>
< div τάξη='data-cell' ταυτότητα='pressPsi'>>
...
</ div >>
</ div >>
< div τάξη='σειρά δεδομένων'>>
< div τάξη='data-cell' ταυτότητα='πίεσηHpa'>>
...
</ div >>
< div τάξη='data-cell' ταυτότητα='πίεσηP'>>
...
</ div >>
</ div >>
</ div >>

< div τάξη='περιεχόμενο δεδομένων'>>
< η2 >>Υγρασία</ η2 >>
< div τάξη='σειρά δεδομένων'>>
< div τάξη='data-cell' ταυτότητα='υγρασία'>>
...
</ div >>
</ div >>
</ div >>
</ div >>

< γραφή τύπος='κείμενο/javascript' src='{{url_for (' static ', filename =' app.js ')}}'>></ γραφή >>
</ σώμα >>
</ html >>

Στη συνέχεια, πατήστε + Χ ακολουθούμενη από ΚΑΙ και να σώσει το home.html αρχείο.

Δημιουργώ ένα style.css αρχείο στο στατικός/ κατάλογο ως εξής:

$ nano static/style.css

Εισαγάγετε τους ακόλουθους κωδικούς στο style.css αρχείο.

@εισαγωγή url('https://fonts.googleapis.com/css2?family=Roboto&display=swap')?
* {
υλικό παραγεμίσματος: 0?
περιθώριο: 0?
γραμματοσειρά-οικογένεια: 'Ρομπότ', Σανς σέριφ?
}
σώμα{
Ιστορικό: # 737373?
}
η1{
απεικόνιση: ΟΙΚΟΔΟΜΙΚΟ ΤΕΤΡΑΓΩΝΟ?
χρώμα: #79DC7B?
στοίχιση κειμένου: κέντρο?
γραμματοσειρά-βάρος: 400?
Ιστορικό: # 000?
υλικό παραγεμίσματος: 0,5εκ 0?
}
η2{
απεικόνιση: ΟΙΚΟΔΟΜΙΚΟ ΤΕΤΡΑΓΩΝΟ?
Ιστορικό: # 000?
χρώμα: #fff?
στοίχιση κειμένου: κέντρο?
γραμματοσειρά-βάρος: 400?
μέγεθος γραμματοσειράς: 1εμ?
}
.data-content {
περιθώριο: 10 εικονοστοιχεία?
σύνορο: 2 εικονοστοιχεία στερεός μαύρος?
περιθώριο-ακτίνα: 5 εικονοστοιχεία?
χρώμα του φόντου: #79DC7B?
}
.data-row {
απεικόνιση:καλώδιο?
flex-direction:σειρά?
}
. data-cell {
πλάτος: 100%?
ύψος: 80 εικονοστοιχεία?
απεικόνιση:καλώδιο?
ευθυγράμμιση-στοιχεία: κέντρο?
δικαιολογητικό-περιεχόμενο: κέντρο?
γραμματοσειρά-βάρος: τολμηρός?
μέγεθος γραμματοσειράς: 1,5εκ?
χρώμα: # 006902?
}
. data-cell:φτερουγίζω {
Ιστορικό: # FFE891?
χρώμα: # AA8600?
δρομέας: δείκτης?
}

Στη συνέχεια, πατήστε + Χ ακολουθούμενη από ΚΑΙ και να σώσει το style.css αρχείο.

Δημιουργήστε ένα app.js αρχείο στο στατικός/ κατάλογο ως εξής:

$ nano static/app.js

Εισαγάγετε τον ακόλουθο κώδικα στο app.js αρχείο.

παράθυρο.addEventListener('φορτώνω',κύριος)?
λειτουργίακύριος() {
λειτουργίαgetAPIData() {
όπουhttp= νέοςXMLHttpRequest()?

httponrightstatechange = λειτουργία() {
αν(ΑυτόΤοreadyState === 4 && ΑυτόΤοκατάσταση === 200) {
εκσυγχρονίζω(JSON.αναλύω πρόταση(ΑυτόΤοreplyText))?
}
}

httpΆνοιξε('ΠΑΙΡΝΩ', '/Φωτιά', αληθής)?
httpστείλετε()?
}


λειτουργίαεκσυγχρονίζω(apiData) {
όπουtempC=έγγραφο.getElementById('tempC')?
όπουtempF=έγγραφο.getElementById('tempF')?
όπουπίεσηMb=έγγραφο.getElementById('pressMb')?
όπουπίεσηPsi=έγγραφο.getElementById('pressPsi')?
όπουπίεσηHpa=έγγραφο.getElementById('πίεσηHpa')?
όπουπίεσηP=έγγραφο.getElementById('πίεσηP')?
όπουυγρασία=έγγραφο.getElementById('υγρασία')?

tempC.innerHTML =parseFloat(apiData.θερμοκρασίαΤοντο)ΤοtoFixed(2) + '° C'?
tempF.innerHTML =parseFloat(apiData.θερμοκρασίαΤοφά)ΤοtoFixed(2) + '° F'?

πίεσηMbinnerHTML =parseFloat(apiData.πίεσηΤοmb)ΤοtoFixed(2) + 'mb'?
πίεσηPsi.innerHTML =parseFloat(apiData.πίεσηΤοpsi)ΤοtoFixed(2) + 'psi'?
πίεσηHpa.innerHTML =parseFloat(apiData.πίεσηΤοhPa)ΤοtoFixed(2) + 'hPa'?
πίεσηP.innerHTML =parseFloat(apiData.πίεσηΤοΠ)ΤοtoFixed(2) + ' Π'?

υγρασία.innerHTML =parseFloat(apiData.υγρασία)ΤοtoFixed(2) + '%'?
}


λειτουργίαεφαρμογή() {
παράθυρο.setInterval(λειτουργία() {
getAPIData()?
}, 5000)?
}

εφαρμογή()?
}

Στη συνέχεια, πατήστε + Χ ακολουθούμενη από ΚΑΙ και να σώσει το app.js αρχείο.

Εδώ, η γραμμή 1 εκτελεί το κύριος() λειτουργία όταν τελειώσει η φόρτωση της ιστοσελίδας. Στο κύριος() συνάρτηση, το getAPIData() Λειτουργία συλλέγει τα δεδομένα API καιρού χρησιμοποιώντας AJAX και καλεί το εκσυγχρονίζω() λειτουργία (στη γραμμή 10) μόλις τα δεδομένα έχουν επιτευχθεί με επιτυχία. ο εκσυγχρονίζω() συνάρτηση ενημερώνει το στοιχείο της ιστοσελίδας χρησιμοποιώντας τα δεδομένα API.

Στη γραμμή 20, το document.getElementById () η μέθοδος χρησιμοποιείται για να λάβετε την αναφορά του στοιχείου της ιστοσελίδας με το αναγνωριστικό tempC Το Η γραμμή 28 χρησιμοποιείται για την αντικατάσταση του περιεχομένου του στοιχείου της ιστοσελίδας που έχει το αναγνωριστικό tempC με τη θερμοκρασία (σε Κελσίου) από το API. Με τον ίδιο τρόπο, τα περιεχόμενα όλων των στοιχείων ιστού (γραμμές 21-26) αντικαθίστανται με τα αντίστοιχα δεδομένα API.

Στο εφαρμογή () συνάρτηση, το getAPIData() καλείται κάθε 5 δευτερόλεπτα (5000 χιλιοστά του δευτερολέπτου) για να διατηρεί ενημερωμένα τα δεδομένα καιρού στην εφαρμογή καιρού. Τέλος, στη γραμμή 46, το εφαρμογή () εκτελείται η λειτουργία.

Για να δοκιμάσετε την εφαρμογή ιστού, εισαγάγετε την ακόλουθη εντολή:

$ FLASK_APP = server.py εκτέλεση φιάλης --host = 0.0.0.0

Η εφαρμογή καιρού θα πρέπει να λειτουργεί στη θύρα 5000 (από προεπιλογή).

Για να ελέγξετε αν λειτουργεί το API καιρού, εκτελέστε την ακόλουθη εντολή:

$ curl -s http: // localhost: 5000/api | json_pp

Όπως μπορείτε να δείτε, τα δεδομένα του API καιρού εκτυπώνονται στην κονσόλα. Επομένως, το API λειτουργεί.

Για να δοκιμάσετε την εφαρμογή Καιρός, επισκεφτείτε http: // localhost: 5000 από ένα πρόγραμμα περιήγησης ιστού Chromium. Η εφαρμογή Καιρός θα πρέπει να φορτωθεί στο πρόγραμμα περιήγησης ιστού, αλλά δεν πρέπει να εμφανίζονται πρώτα δεδομένα καιρού.

Μετά από μερικά δευτερόλεπτα, η εφαρμογή καιρού θα πρέπει να ολοκληρώσει τη λήψη των δεδομένων καιρού από το API και να τα εμφανίσει.

Σε οποιοδήποτε σημείο, μπορείτε να πατήσετε + ντο για διακοπή του διακομιστή ιστού.

Δημιουργία υπηρεσίας Systemd για την εφαρμογή καιρού Web

Σε αυτήν την ενότητα, θα σας δείξουμε πώς να δημιουργήσετε ένα αρχείο υπηρεσίας συστήματος για την εφαρμογή καιρού, έτσι ώστε να ξεκινά αυτόματα κατά την εκκίνηση.

Αρχικά, δημιουργήστε ένα μετεωρολογικός σταθμός. υπηρεσία στον κατάλογο του έργου σας ως εξής:

$ nano weather-station.service

Εισαγάγετε τις ακόλουθες γραμμές κώδικα στο μετεωρολογικός σταθμός. υπηρεσία αρχείο.

[Μονάδα]
Περιγραφή = Ιστός Ιστού Raspberry Pi Weather Station Using Raspberry Pi Sense Hat
Μετά = network.target

[Υπηρεσία]
WorkingDirectory =/home/pi/work
Περιβάλλον = FLASK_APP = server.py
Περιβάλλον = FLASK_ENV = παραγωγή
ExecStart =/usr/bin/flask run --host = 0.0.0.0
StandardOutput = κληρονομώ
StandardError = κληρονομώ
Επανεκκίνηση = πάντα
Χρήστης = pi

[Εγκαθιστώ]
WantedBy = multi-user.target

Στη συνέχεια, πατήστε + Χ ακολουθούμενη από ΚΑΙ και να σώσει το μετεωρολογικός σταθμός. υπηρεσία αρχείο.

Αντιγράψτε το μετεωρολογικός σταθμός. υπηρεσία αρχείο στο /etc/systemd/system/ κατάλογο με την ακόλουθη εντολή:

$ sudo cp -v weather -station.service/etc/systemd/system/

Φορτώστε ξανά τους δαιμόνιους του συστήματος για να ισχύσουν οι αλλαγές ως εξής:

$ sudo systemctl δαίμονας-επαναφόρτωση

ο ΜΕΤΕΩΡΟΛΟΓΙΚΟΣ ΣΤΑΘΜΟΣ η υπηρεσία systemd θα πρέπει να είναι ανενεργή αυτή τη στιγμή, όπως φαίνεται στο παρακάτω στιγμιότυπο οθόνης.

$ sudo systemctl status weather-station.service

Ξεκινήστε το ΜΕΤΕΩΡΟΛΟΓΙΚΟΣ ΣΤΑΘΜΟΣ υπηρεσία με την ακόλουθη εντολή:

$ sudo systemctl start weather-station.service

Όπως μπορείτε να δείτε, το ΜΕΤΕΩΡΟΛΟΓΙΚΟΣ ΣΤΑΘΜΟΣ η υπηρεσία τρέχει τώρα.

$ sudo systemctl status weather-station.service

Τώρα που το ΜΕΤΕΩΡΟΛΟΓΙΚΟΣ ΣΤΑΘΜΟΣ η υπηρεσία λειτουργεί, μπορείτε να την προσθέσετε στην εκκίνηση συστήματος του Raspberry Pi OS με την ακόλουθη εντολή:

$ sudo systemctl ενεργοποίηση weather-station.service

Επανεκκινήστε το Raspberry Pi με την ακόλουθη εντολή:

$ sudo επανεκκίνηση

Μόλις οι μπότες σας Raspberry Pi, το ΜΕΤΕΩΡΟΛΟΓΙΚΟΣ ΣΤΑΘΜΟΣ η υπηρεσία πρέπει να εκτελείται, όπως φαίνεται στο παρακάτω στιγμιότυπο οθόνης.

$ sudo systemctl status weather-station.service

Πρόσβαση στην εφαρμογή Καιρού από άλλες συσκευές

Για να αποκτήσετε πρόσβαση στην εφαρμογή καιρού από άλλες συσκευές στο οικιακό σας δίκτυο, πρέπει να γνωρίζετε τη διεύθυνση IP του Raspberry Pi. Μπορείτε να βρείτε τη διεύθυνση IP του Raspberry Pi 4 από τη διεπαφή διαχείρισης ιστού του δρομολογητή του σπιτιού σας. Στην περίπτωσή μας, η διεύθυνση IP είναι 192.168.0.103, αλλά αυτή η διεύθυνση θα είναι διαφορετική για εσάς, οπότε φροντίστε να αντικαταστήσετε αυτήν τη διεύθυνση με τη δική σας σε όλα τα επόμενα βήματα.

Εάν έχετε πρόσβαση στην κονσόλα Raspberry Pi, μπορείτε να εκτελέσετε την ακόλουθη εντολή για να βρείτε επίσης τη διεύθυνση IP.

$ hostname -I

Αφού γνωρίζετε τη διεύθυνση IP του Raspberry Pi, μπορείτε να έχετε πρόσβαση σε αυτήν από οποιαδήποτε συσκευή στο οικιακό σας δίκτυο. Όπως φαίνεται στο παρακάτω στιγμιότυπο οθόνης, έχουμε πρόσβαση στην εφαρμογή καιρού από smartphone Android.

συμπέρασμα

Σε αυτό το άρθρο, σας δείξαμε πώς να χρησιμοποιήσετε το Raspberry Pi Sense Hat για την κατασκευή ενός μετεωρολογικού σταθμού Raspberry Pi. Χρησιμοποιήσαμε το αίσθηση-καπέλο Βιβλιοθήκη Python για εξαγωγή δεδομένων καιρού από το Raspberry Pi Sense Hat. Στη συνέχεια, χρησιμοποιήσαμε το πλαίσιο ιστού Flask Python για τη δημιουργία ενός API καιρού και μιας διαδικτυακής εφαρμογής. Η εφαρμογή ιστού λαμβάνει τα δεδομένα καιρού από το API καιρού κάθε 5 δευτερόλεπτα για να ενημερώνεται η εφαρμογή ιστού με τα τελευταία δεδομένα καιρού.