Pai raspberi

Bina Stesen Cuaca Raspberry Pi Anda Sendiri

Bina Stesen Cuaca Raspberry Pi Anda Sendiri
Raspberry Pi Sense Hat adalah papan tambahan yang boleh digunakan dengan komputer papan tunggal Raspberry Pi. Topi Raspberry Pi Sense mempunyai paparan LED 8 × 8 dan kayu bedik 5 butang, dan dilengkapi dengan sensor berikut:

  1. Giroskop
  2. Pecut
  3. Magnetometer
  4. Suhu
  5. Tekanan barometrik
  6. Kelembapan

Dalam artikel ini, saya akan menunjukkan kepada anda cara membuat aplikasi web stesen cuaca berdasarkan Python API dengan menggunakan suhu, tekanan barometrik, dan kelembapan sensor Topi Raspberry Pi Sense. Untuk mengikuti artikel ini, anda memerlukan perkara berikut:

  1. Raspberry Pi 3 atau Raspberry Pi 4 dengan sambungan rangkaian.
  2. Modul Raspberry Pi Sense Hat.
  3. Penyesuai kuasa mikro-USB (Raspberry Pi 3) atau USB Jenis-C (Raspberry Pi 4).
  4. Kad microSD 16 GB atau 32 GB dengan OS Raspberry Pi.
  5. Komputer riba atau komputer meja untuk akses desktop jauh VNC atau akses SSH ke Raspberry Pi.

NOTA: Dalam artikel ini, kami akan menyambung ke Raspberry Pi dari jauh melalui VNC atau SSH menggunakan penyediaan tanpa kepala Raspberry Pi. Sekiranya anda tidak mahu mengakses Raspberry Pi anda dari jarak jauh melalui SSH atau VNC, anda perlu menyambungkan monitor, papan kekunci dan tetikus ke Raspberry Pi anda.

Untuk mengetahui cara memancarkan gambar Raspberry Pi OS ke kad microSD, rujuk Cara Memasang dan Menggunakan Raspberry Pi Imager. Sekiranya anda memerlukan bantuan untuk memasang Raspberry Pi OS pada Raspberry Pi anda, baca Cara Memasang Raspberry Pi OS pada Raspberry Pi 4. Sekiranya anda memerlukan bantuan dengan penyediaan Raspberry Pi tanpa kepala, lihat Cara Memasang dan Mengkonfigurasi OS Raspberry Pi di Raspberry Pi 4 Tanpa Monitor Luaran.

Menyambungkan Raspberry Pi Sense Hat ke Raspberry Pi

Kit Raspberry Pi Sense Hat dilengkapi dengan papan tambah Raspberry Pi Sense Hat, header lelaki-ke-wanita 40-pin, dan beberapa skru dan spacer.

Sebelum anda boleh memasang papan Sense Hat ke Raspberry Pi, anda harus menyambungkan tajuk 40-pin ke Sense Hat. Sambungkan pin lelaki dari header lelaki-wanita 40-pin ke Topi Sense seperti yang ditunjukkan dalam gambar di bawah.

Komputer papan tunggal Raspberry Pi mempunyai 4 lubang yang dapat digunakan untuk memasang papan tambah atau casing. Untuk memasang papan tambah, masukkan skru dari bahagian belakang Raspberry Pi, seperti yang ditunjukkan dalam gambar di bawah.

Kemudian, sambungkan spacer ke skru.

Sebaik sahaja anda menambah keempat-empat skru dan spacer, Raspberry Pi anda akan kelihatan seperti yang ditunjukkan dalam gambar di bawah.

Sambungkan Raspberry Pi Sense Hat ke header lelaki GPIO 40 pin dari Raspberry Pi, seperti yang ditunjukkan dalam gambar di bawah.

NOTA: Berhati-hatilah semasa melepaskan Raspberry Pi Sense Hat dari tajuk GPIO Raspberry Pi 40-pin untuk mengelakkan membengkokkan pin Raspberry Pi GPIO.

Dengan empat skru yang tinggal, kencangkan Raspberry Pi Sense Hat, seperti yang ditunjukkan dalam gambar di bawah.

Menghidupkan Raspberry Pi

Setelah Raspberry Pi Sense Hat disambungkan ke Raspberry Pi, masukkan kad microSD dengan OS Raspberry Pi ke dalam slot kad microSD Raspberry Pi, sambungkan kabel kuasa ke Raspberry Pi, dan hidupkan.

Memasang Perpustakaan Raspberry Pi Sense Hat Python

Untuk menggunakan Raspberry Pi Sense Hat pada Raspberry Pi, the topi akal Pustaka Python mesti dipasang pada OS Raspberry Pi. The topi akal perpustakaan boleh didapati di repositori pakej rasmi Raspberry Pi OS.

Untuk memasang Raspberry Pi topi akal Pustaka Python pada Raspberry Pi OS, kemas kini cache repositori pakej APT dengan arahan berikut:

$ sudo apt kemas kini

Kemudian, jalankan arahan berikut:

$ sudo apt install sense-hat -y

Memasang Flask Micro Web Framework Python Library

Kami akan menggunakan kerangka Flask Python untuk membuat aplikasi cuaca kami. Anda boleh memasang Flask dari repositori pakej rasmi Raspberry Pi OS dengan arahan berikut:

$ sudo apt pasang python3-flask -y

Membuat Direktori Projek

Adalah idea yang baik untuk membuat direktori projek untuk menyusun fail projek anda. Untuk membuat direktori projek ~ / bekerja, gunakan arahan berikut:

$ mkdir ~ / kerja

Setelah direktori projek dibuat, arahkan ke direktori projek seperti berikut:

$ cd ~ / kerja

Menguji Topi Raspberry Pi Sense

Untuk menguji sama ada Raspberry Pi Sense Hat berfungsi, kita boleh menulis skrip Python ujian sederhana. Anda boleh membuat skrip Python baru yang dipanggil ujian.py dengan nano penyunting teks seperti berikut:

ujian $ nano.py

Masukkan kod berikut di ujian.py fail. Baris 1 import SenseHat daripada rasa_apa modul, baris 3 mencipta a SenseHat objek dan menyimpan rujukan di akal berubah-ubah, dan garis 5-6 menetapkan warna semua 8 × 8 LED menjadi merah. Setelah selesai, tekan + X diikuti oleh Y dan .

Anda boleh menjalankan ujian.py Skrip Python dengan arahan berikut:

ujian $ python3.py

Matriks LED 8 × 8 harus bersinar dengan warna merah seperti yang ditunjukkan dalam gambar di bawah.

Untuk mematikan LED Sense Hat, jalankan jelas () kaedah tanpa nilai warna di ujian.py Skrip Python, seperti yang ditunjukkan dalam tangkapan skrin di bawah, dan jalankan ujian.py Skrip Python lagi.

LED Sense Hat kini harus dimatikan, seperti yang ditunjukkan dalam gambar di bawah.

Sekiranya Topi Sense berfungsi dengan baik, teruskan ke bahagian seterusnya.

Mendapatkan Data Cuaca dari Sense Hat

Anda dapat memperoleh data sensor dari Hat Sense dengan sangat mudah dengan menggunakan topi akal Perpustakaan Python. Untuk mengambil data sensor dari Hat Sense, anda boleh membuat skrip Python baru baca_sensor_data.py seperti berikut:

$ nano read_sensor_data.py

Masukkan kod berikut di baca_sensor_data.py Fail Python.

dari sense_hat import SenseHat
dari waktu tidur import
akal = SenseHat ()
akal.jelas ()
Walaupun Betul:
tempC = akal.get_temperature ()
tempF = tempC * (9/5) + 32
tekanan = akal.get_tekanan ()
kelembapan = rasa.get_humidity ()
cetak ("Suhu:%.2f ° C /%.2f ° F \ n "% (tempC, tempF))
cetak ("Tekanan:%.2f mb \ n "% (tekanan))
cetak ("Kelembapan:%.2f %% \ n \ n "% (kelembapan))
tidur (5)

Setelah selesai, tekan + X diikuti oleh Y dan .

Dalam kod di atas, baris 1 dan 2 mengimport semua perpustakaan yang diperlukan, baris 4 membuat a SenseHat objek, dan baris 5 mematikan semua LED Sense Hat menggunakan jelas () kaedah. Gelung sementara di baris 7 adalah gelung tak terhingga yang akan menjalankan kod pada baris 8-16 selamanya.

Selaras 8, the get_temperature () kaedah digunakan untuk membaca data suhu (dalam darjah Celsius) dari sensor kelembapan Topi Sense. Pada baris ke-9, data suhu ditukar dari darjah Celsius ke darjah Fahrenheit. Dalam baris 10, the get_pressure () kaedah digunakan untuk membaca data tekanan udara (dalam millibars) dari sensor tekanan Hat Sense. Pada baris 11, the get_humidity () kaedah digunakan untuk membaca data kelembapan (dalam%) dari sensor kelembapan Sense Hat.

Garis 13-15 digunakan untuk mencetak data sensor ke konsol, dan baris 16 digunakan untuk menunggu selama 5 saat sebelum membaca data sensor lagi.

Anda boleh menjalankan baca_sensor_data.py Skrip Python seperti berikut:

$ python3 read_sensor_data.py

Setelah skrip dijalankan, data sensor akan dicetak ke konsol.

Sekarang kita dapat membaca data sensor dari Sense Hat, tekan + C untuk menghentikan program.

Membuat Aplikasi Web Stesen Cuaca

Di bahagian ini, kami akan menunjukkan kepada anda bagaimana menggunakan kerangka web Python Flask untuk membuat API cuaca dan aplikasi cuaca. Aplikasi cuaca akan mengakses API data cuaca dan menunjukkan data cuaca dalam masa nyata. Semua kod yang dibincangkan dalam bahagian ini terdapat di GitHub di aplikasi shovon8 / raspberry-pi-sense-hat-weather-app.

Pertama, buat a pelayan.py Skrip Python dalam direktori projek seperti berikut:

pelayan $ nano.py

Masukkan kod berikut di pelayan.py Fail Python.

dari termos import termos
dari termos import jsonify
dari terma import_template termos
dari url_for import termos
dari sense_hat import SenseHat
aplikasi = Kelalang (__ nama__)
aplikasi.config ['SEND_FILE_MAX_AGE_DEFAULT'] = 0
akal = SenseHat ()
akal.jelas ()
dengan aplikasi.test_request_context ():
url_for (gaya 'statik', nama fail = '.css ')
url_for (aplikasi 'statik', nama fail = '.js ')
@aplikasi.laluan ('/ api')
def api ():
tempC = akal.get_temperature ()
tempF = tempC * (9/5) + 32
tekanan = akal.get_pressure ()
tekananPsi = tekanan * 0.0145038
tekananP = tekanan * 100
kelembapan = rasa.get_humidity ()
kembali jsonify (
"suhu": "C": tempC, "F": tempF,
"tekanan": "mb": tekanan, "hPa": tekanan,
"psi": pressurePsi, "P": pressureP,
"kelembapan": kelembapan
)
@aplikasi.laluan ('/')
rumah def ():
kembali render_template ('./ rumah.html ')

Kemudian, tekan + X diikuti oleh Y dan untuk menyelamatkan pelayan.py Skrip Python.

Dalam kod di atas, baris 1-5 mengimport semua perpustakaan yang diperlukan, baris 7 membuat aplikasi Flask, baris 11 membuat objek SenseHat, dan baris 12 mematikan semua LED dari Sense Hat. Baris 8 melumpuhkan caching web untuk aplikasi Flask. Oleh kerana aplikasi ini ringan, tidak perlu melakukan cache. Sekiranya anda ingin mengubah suai aplikasinya, maka cache web dilumpuhkan akan menjadikan ujian lebih mudah.

Garis 18-31 membaca data sensor dari Sense Hat dan mengembalikan data API dalam format JSON pada permintaan HTTP GET di / api titik akhir pelayan web. Garis 37-39 mengembalikan halaman utama aplikasi web cuaca di / titik akhir pelayan web. Halaman utama diberikan dari kediaman.html fail, yang sepatutnya ada di templat / direktori direktori projek.

Garis 14-16 digunakan untuk membenarkan akses ke gaya.css dan aplikasi.js fail statik. Fail-fail ini mesti ada di statik / direktori direktori projek. The gaya.css fail digunakan untuk menggayakan kediaman.html laman utama, dan aplikasi.js file digunakan untuk meminta data API dari / api titik akhir dan mengemas kini data cuaca di kediaman.html halaman setiap 5 saat.

Buat statik / dan templat / direktori dalam direktori projek seperti berikut:

$ mkdir -v statik, templat

Buat a kediaman.html fail di templat / direktori seperti berikut:

templat $ nano / rumah.html

Masukkan kod berikut di kediaman.html fail.





Stesen Cuaca Raspberry Pi
href = "url_for (gaya 'statik', nama fail =".css ")" />



Stesen Cuaca Raspberry Pi



Suhu












Tekanan




















Kelembapan











Kemudian, tekan + X diikuti oleh Y dan untuk menyelamatkan kediaman.html fail.

Buat a gaya.css fail di statik / direktori seperti berikut:

$ nano statik / gaya.css

Masukkan kod berikut di gaya.css fail.

@import url ('https: // fon.googleapis.com / css2?keluarga = Roboto & paparan = pertukaran ');
*
pembalut: 0;
margin: 0;
font-keluarga: 'Roboto', sans-serif;

badan
latar belakang: # 737373;

h1
paparan: blok;
warna: # 79DC7B;
text-align: tengah;
berat huruf: 400;
latar belakang: # 000;
pembalut: 0.5em 0;

h2
paparan: blok;
latar belakang: # 000;
warna: #fff;
text-align: tengah;
berat huruf: 400;
saiz fon: 1em;

.kandungan data
margin: 10 piksel;
sempadan: 2px hitam pejal;
sempadan-jejari: 5px;
warna latar: # 79DC7B;

.baris data
paparan: flex;
arah lentur: baris;

.sel data
lebar: 100%;
tinggi: 80px;
paparan: flex;
align-item: tengah;
justify-content: pusat;
font-weight: tebal;
saiz fon: 1.5em;
warna: # 006902;

.sel data: arahkan
latar belakang: # FFE891;
warna: # AA8600;
kursor: penunjuk;

Kemudian, tekan + X diikuti oleh Y dan untuk menyelamatkan gaya.css fail.

Buat sebuah aplikasi.js fail di statik / direktori seperti berikut:

$ nano statik / aplikasi.js

Masukkan kod berikut di aplikasi.js fail.

tingkap.addEventListener ('load', utama);
fungsi utama ()
fungsi getAPIData ()
var http = XMLHttpRequest baru ();
http.onreadystatechange = fungsi ()
sekiranya (ini.readyState === 4 && ini.status === 200)
kemas kini (JSON.menghuraikan (ini.responsTeks));


http.buka ("GET", "/ api", benar);
http.hantar ();

kemas kini fungsi (apiData)
var tempC = dokumen.getElementById ("tempC");
var tempF = dokumen.getElementById ("tempF");
var pressureMb = dokumen.getElementById ("pressureMb");
var pressurePsi = dokumen.getElementById ("pressurePsi");
var pressureHpa = dokumen.getElementById ("pressureHpa");
var pressureP = dokumen.getElementById ("pressureP");
kelembapan var = dokumen.getElementById ("kelembapan");
tempC.innerHTML = parseFloat (apiData.suhu.C).keBetul (2) + "° C";
tempF.innerHTML = parseFloat (apiData.suhu.F).keBetul (2) + "° F";
tekananMb.innerHTML = parseFloat (apiData.tekanan.mb).keBetul (2) + "mb";
tekananPsi.innerHTML = parseFloat (apiData.tekanan.psi).keBetul (2) + "psi";
tekananHpa.innerHTML = parseFloat (apiData.tekanan.hPa).untuk Tetap (2) + "hPa";
tekananP.innerHTML = parseFloat (apiData.tekanan.P).keBetul (2) + "P";
kelembapan.innerHTML = parseFloat (apiData.kelembapan).keBetul (2) + "%";

aplikasi fungsi ()
tingkap.setInterval (fungsi ()
getAPIData ();
, 5000);

aplikasi();

Kemudian, tekan + X diikuti oleh Y dan untuk menyelamatkan aplikasi.js fail.

Di sini, baris 1 menjalankan utama () berfungsi apabila halaman web selesai dimuat. Di dalam utama () fungsi, yang getAPIData () fungsi mengambil data API cuaca menggunakan AJAX dan memanggil kemas kini () berfungsi (dalam baris 10) setelah data berjaya diambil. The kemas kini () fungsi mengemas kini elemen laman web menggunakan data API.

Dalam baris 20, the dokumen.getElementById () kaedah digunakan untuk mendapatkan rujukan elemen halaman web dengan id tempC. Baris 28 digunakan untuk menggantikan kandungan elemen laman web yang mempunyai id tempC dengan suhu (dalam Celsius) dari API. Dengan cara yang sama, kandungan semua elemen web (baris 21-26) diganti dengan data API masing-masing.

Di dalam aplikasi() fungsi, yang getAPIData () dipanggil setiap 5 saat (5000 milisaat) untuk mengemas kini data cuaca dalam aplikasi cuaca. Akhirnya, dalam baris 46, the aplikasi() fungsi dijalankan.

Untuk menguji aplikasi web, masukkan perintah berikut:

$ FLASK_APP = pelayan.py flask run --host = 0.0.0.0

Aplikasi cuaca harus berjalan di port 5000 (secara lalai).

Untuk menguji sama ada Weather Weather berfungsi, jalankan arahan berikut:

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

Seperti yang anda lihat, data Weather Weather dicetak ke konsol. Oleh itu, API berfungsi.

Untuk menguji aplikasi Cuaca, lawati http: // localhost: 5000 dari penyemak imbas web Chromium. Aplikasi Cuaca harus dimuat di penyemak imbas web, tetapi tidak ada data cuaca yang harus ditampilkan pada awalnya.

Setelah beberapa saat, aplikasi cuaca akan selesai mengambil data cuaca dari API dan memaparkannya.

Pada bila-bila masa, anda boleh menekan + C untuk menghentikan pelayan web.

Membuat Perkhidmatan Systemd untuk Aplikasi Web Cuaca

Di bahagian ini, kami akan menunjukkan kepada anda bagaimana membuat file service systemd untuk aplikasi cuaca sehingga akan otomatis dimulakan semasa boot.

Pertama, buat a stesen kaji cuaca.perkhidmatan failkan di direktori projek anda seperti berikut:

stesen cuaca $ nano.perkhidmatan

Masukkan baris kod berikut di stesen kaji cuaca.perkhidmatan fail.

[Unit]
Penerangan = Aplikasi Web Stesen Cuaca Raspberry Pi Menggunakan Topi Raspberry Pi Sense
Selepas = rangkaian.sasaran
[Perkhidmatan]
WorkingDirectory = / rumah / pi / kerja
Persekitaran = FLASK_APP = pelayan.py
Persekitaran = FLASK_ENV = pengeluaran
ExecStart = / usr / bin / flask run --host = 0.0.0.0
StandardOutput = mewarisi
StandardError = mewarisi
Mulakan semula = selalu
Pengguna = pi
[Pasang]
WantedBy = berbilang pengguna.sasaran

Kemudian, tekan + X diikuti oleh Y dan untuk menyelamatkan stesen kaji cuaca.perkhidmatan fail.

Salin stesen kaji cuaca.perkhidmatan fail ke / etc / systemd / sistem / direktori dengan arahan berikut:

$ sudo cp -v stesen cuaca.perkhidmatan / dll / systemd / sistem /

Muat semula daemon systemd agar perubahan tersebut berlaku seperti berikut:

$ sudo systemctl daemon-reload

The stesen kaji cuaca perkhidmatan systemd tidak aktif pada masa ini, seperti yang ditunjukkan dalam tangkapan skrin di bawah.

$ sudo systemctl status-stesen cuaca.perkhidmatan

Mulakan stesen kaji cuaca perkhidmatan dengan arahan berikut:

$ sudo systemctl memulakan stesen cuaca.perkhidmatan

Seperti yang anda lihat, stesen kaji cuaca perkhidmatan kini berjalan.

$ sudo systemctl status-stesen cuaca.perkhidmatan

Sekarang bahawa stesen kaji cuaca perkhidmatan berfungsi, anda boleh menambahkannya ke sistem permulaan Raspberry Pi OS dengan arahan berikut:

$ sudo systemctl mengaktifkan stesen cuaca.perkhidmatan

Nyalakan semula Raspberry Pi anda dengan arahan berikut:

but semula $ sudo

Setelah Raspberry Pi anda but, stesen kaji cuaca perkhidmatan harus berjalan seperti yang ditunjukkan dalam tangkapan skrin di bawah.

$ sudo systemctl status-stesen cuaca.perkhidmatan

Mengakses Aplikasi Cuaca dari Peranti Lain

Untuk mengakses aplikasi cuaca dari peranti lain di rangkaian rumah anda, anda perlu mengetahui alamat IP Raspberry Pi anda. Anda boleh mendapatkan alamat IP Raspberry Pi 4 anda dari antara muka pengurusan web penghala rumah anda. Dalam kes kami, alamat IP adalah 192.168.0.103, tetapi alamat ini akan berbeza untuk anda, jadi pastikan untuk mengganti alamat ini dengan alamat anda dalam semua langkah seterusnya.

Sekiranya anda mempunyai akses ke konsol Raspberry Pi, anda boleh menjalankan perintah berikut untuk mencari alamat IP juga.

$ nama host -I

Setelah anda mengetahui alamat IP Raspberry Pi anda, anda boleh mengaksesnya dari mana-mana peranti di rangkaian rumah anda. Seperti yang ditunjukkan dalam tangkapan skrin di bawah, kami telah mengakses aplikasi cuaca dari smartphone Android.

Kesimpulannya

Dalam artikel ini, kami menunjukkan kepada anda bagaimana menggunakan Raspberry Pi Sense Hat untuk membina stesen cuaca Raspberry Pi. Kami menggunakan topi akal Perpustakaan Python untuk mengekstrak data cuaca dari Raspberry Pi Sense Hat. Kemudian, kami menggunakan kerangka web mikro Flask Python untuk membuat API cuaca dan aplikasi web. Aplikasi web mendapat data cuaca dari API cuaca setiap 5 saat untuk memastikan aplikasi web sentiasa diperbarui dengan data cuaca terkini.

Cara memasang Server XAMPP pada Linux Mint 20
Pengenalan: XAMPP adalah pelayan web lintas platform yang dirancang untuk menguji aplikasi web anda berdasarkan Apache, MySQL, Perl, dan PHP. Pelayan...
Cara Memasang Anaconda di Linux Mint 20?
Anaconda adalah platform Python yang popular yang banyak digunakan dalam pembelajaran Mesin dan bidangnya yang berkaitan. Ia mengandungi banyak paket...
Cara Memasang PHP 8 pada Linux Mint 20?
Sebagai bahasa skrip sisi pelayan yang popular, PHP digunakan dalam pembuatan laman web dinamik, sistem pengurusan kandungan, dan banyak kerangka kerj...