Raspberry Pi

Bangun Stasiun Cuaca Raspberry Pi Anda Sendiri

Bangun Stasiun Cuaca Raspberry Pi Anda Sendiri
Raspberry Pi Sense Hat adalah papan tambahan yang dapat digunakan dengan komputer papan tunggal Raspberry Pi. Raspberry Pi Sense Hat memiliki layar LED 8x8 dan joystick 5 tombol, dan dilengkapi dengan sensor berikut:

  1. Giroskop
  2. Akselerometer
  3. Magnetometer
  4. Suhu
  5. Tekanan barometrik
  6. Kelembaban

Pada artikel ini, saya akan menunjukkan cara membuat aplikasi web stasiun cuaca berbasis Python API dengan menggunakan by suhu, tekanan barometrik, dan kelembaban sensor dari Raspberry Pi Sense Hat. Untuk mengikuti artikel ini, Anda memerlukan yang berikut:

  1. Raspberry Pi 3 atau Raspberry Pi 4 dengan konektivitas jaringan.
  2. Modul Topi Rasa Raspberry Pi.
  3. Adaptor daya micro-USB (Raspberry Pi 3) atau USB Type-C (Raspberry Pi 4).
  4. Kartu microSD 16 GB atau 32 GB dengan Raspberry Pi OS.
  5. Laptop atau komputer desktop untuk akses desktop jarak jauh VNC atau akses SSH ke Raspberry Pi.

CATATAN: Pada artikel ini, kita akan terhubung ke Raspberry Pi dari jarak jauh melalui VNC atau SSH menggunakan pengaturan headless dari Raspberry Pi. Jika Anda tidak ingin mengakses Raspberry Pi Anda dari jarak jauh melalui SSH atau VNC, Anda harus menghubungkan monitor, keyboard, dan mouse ke Raspberry Pi Anda.

Untuk mempelajari cara mem-flash gambar Raspberry Pi OS ke kartu microSD, silakan lihat Cara Memasang dan Menggunakan Raspberry Pi Imager. Jika Anda memerlukan bantuan untuk menginstal Raspberry Pi OS di Raspberry Pi Anda, baca Cara Menginstal Raspberry Pi OS di Raspberry Pi 4. Jika Anda memerlukan bantuan dengan pengaturan tanpa kepala dari Raspberry Pi, lihat Cara Menginstal dan Mengonfigurasi Raspberry Pi OS di Raspberry Pi 4 Tanpa Monitor Eksternal.

Menghubungkan Raspberry Pi Sense Hat ke Raspberry Pi

Kit Raspberry Pi Sense Hat dilengkapi dengan papan tambahan Raspberry Pi Sense Hat, header 40-pin male-to-female, dan beberapa sekrup dan spacer.

Sebelum Anda dapat memasang papan Sense Hat ke Raspberry Pi, Anda harus menghubungkan header 40-pin ke Sense Hat. Hubungkan pin pria dari header pria-wanita 40-pin ke Sense Hat seperti yang ditunjukkan pada gambar di bawah ini.

Komputer single-board Raspberry Pi memiliki 4 lubang yang dapat digunakan untuk memasang papan tambahan atau kasing. Untuk memasang papan tambahan, masukkan sekrup dari bagian belakang Raspberry Pi, seperti yang ditunjukkan pada gambar di bawah ini.

Kemudian, sambungkan spacer ke sekrup.

Setelah Anda menambahkan keempat sekrup dan spacer, Raspberry Pi Anda akan terlihat seperti yang ditunjukkan pada gambar di bawah ini.

Hubungkan Raspberry Pi Sense Hat ke header laki-laki GPIO 40-pin dari Raspberry Pi, seperti yang ditunjukkan pada gambar di bawah ini.

CATATAN: Hati-hati saat melepaskan Raspberry Pi Sense Hat dari header GPIO 40-pin Raspberry Pi untuk menghindari bengkoknya pin Raspberry Pi GPIO.

Dengan empat sekrup yang tersisa, kencangkan Raspberry Pi Sense Hat, seperti yang ditunjukkan pada gambar di bawah ini.

Menghidupkan Raspberry Pi

Sekarang setelah Raspberry Pi Sense Hat terhubung ke Raspberry Pi, masukkan kartu microSD dengan OS Raspberry Pi ke dalam slot kartu microSD dari Raspberry Pi, sambungkan kabel daya ke Raspberry Pi, dan nyalakan.

Menginstal Perpustakaan Raspberry Pi Sense Hat Python

Untuk menggunakan Raspberry Pi Sense Hat pada Raspberry Pi, indra-topi Pustaka Python harus diinstal pada Raspberry Pi OS. Itu indra-topi perpustakaan tersedia di repositori paket resmi Raspberry Pi OS.

Untuk menginstal Raspberry Pi indra-topi Pustaka Python pada Raspberry Pi OS, perbarui terlebih dahulu cache repositori paket APT dengan perintah berikut:

$ sudo apt update

Kemudian, jalankan perintah berikut:

$ sudo apt install sense-hat -y

Memasang Pustaka Python Kerangka Web Mikro Flask

Kami akan menggunakan kerangka Flask Python untuk membuat aplikasi cuaca kami. Anda dapat menginstal Flask dari repositori paket resmi Raspberry Pi OS dengan perintah berikut:

$ sudo apt install python3-flask -y

Membuat Direktori Proyek

Merupakan ide bagus untuk membuat direktori proyek untuk mengatur file proyek Anda. Untuk membuat direktori proyek ~/kerja, gunakan perintah berikut:

$ mkdir ~/work

Setelah direktori proyek dibuat, navigasikan ke direktori proyek sebagai berikut:

$ cd ~/kerja

Menguji Topi Rasa Raspberry Pi

Untuk menguji apakah Raspberry Pi Sense Hat berfungsi, kita dapat menulis skrip Python pengujian sederhana. Anda dapat membuat skrip Python baru bernama uji.py dengan nano editor teks sebagai berikut:

$ uji nano.py

Masukkan kode berikut di uji.py mengajukan. Impor baris 1 SenseTopi dari sense_hat modul, baris 3 membuat a SenseTopi objek dan menyimpan referensi di merasakan variabel, dan garis 5-6 mengatur warna semua LED 8x8 menjadi merah. Setelah selesai, tekan + X diikuti oleh kamu dan .

Anda dapat menjalankan uji.py Script Python dengan perintah berikut:

$ python3 tes.py

Matriks LED 8 × 8 harus menyala dalam warna merah seperti yang ditunjukkan pada gambar di bawah ini.

Untuk mematikan LED Sense Hat, jalankan bersih() metode tanpa nilai warna apa pun di uji.py Skrip Python, seperti yang ditunjukkan pada tangkapan layar di bawah, dan jalankan uji.py Skrip python lagi.

LED Sense Hat sekarang harus dimatikan, seperti yang ditunjukkan pada gambar di bawah ini.

Jika Sense Hat berfungsi dengan baik, lanjutkan ke bagian berikutnya.

Mendapatkan Data Cuaca dari Sense Hat

Anda dapat memperoleh data sensor dari Sense Hat dengan sangat mudah dengan menggunakan indra-topi Pustaka Python. Untuk mengambil data sensor dari Sense Hat, Anda dapat membuat skrip Python baru baca_sensor_data.py sebagai berikut:

$ nano read_sensor_data.py

Masukkan kode berikut di baca_sensor_data.py file python Python.

dari sense_hat impor SenseHat
dari waktu impor tidur
akal = SenseHat()
merasakan.bersih()
sementara Benar:
suhu C = rasa.get_temperature()
suhuF = suhuC * (9/5) + 32
tekanan = rasa.get_tekanan()
kelembaban = rasa.dapatkan_kelembaban()
print("Suhu : %.2f°C/%.2f°F\n" % (tempC, tempF))
print("Tekanan: %.2f mb\n" % (tekanan))
print("Kelembaban : %.2f%%\n\n" % (kelembaban))
tidur(5)

Setelah selesai, tekan + X diikuti oleh kamu dan .

Dalam kode di atas, baris 1 dan 2 mengimpor semua perpustakaan yang diperlukan, baris 4 membuat SenseTopi objek, dan baris 5 mematikan semua LED Sense Hat menggunakan tombol bersih() metode. Perulangan while pada baris 7 adalah perulangan tak terbatas yang akan menjalankan kode pada baris 8-16 selamanya.

Pada baris 8, get_temperature() metode yang digunakan untuk membaca data suhu (dalam derajat Celcius) dari sensor kelembaban Sense Hat. Pada baris 9, data suhu dikonversi dari derajat Celcius ke derajat Fahrenheit. Pada baris 10, get_tekanan() metode ini digunakan untuk membaca data tekanan udara (dalam milibar) dari sensor tekanan Sense Hat. Pada baris 11, dapatkan_kelembaban() metode yang digunakan untuk membaca data kelembaban (dalam %) dari sensor kelembaban Sense Hat.

Baris 13-15 digunakan untuk mencetak data sensor ke konsol, dan baris 16 digunakan untuk menunggu selama 5 detik sebelum membaca kembali data sensor.

Anda dapat menjalankan baca_sensor_data.py Script Python sebagai berikut:

$ python3 read_sensor_data.py

Setelah skrip dijalankan, data sensor akan dicetak ke konsol.

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

Membuat Aplikasi Web Stasiun Cuaca

Di bagian ini, kami akan menunjukkan cara menggunakan kerangka web Python Flask untuk membuat API cuaca dan aplikasi cuaca weather. Aplikasi cuaca akan mengakses API data cuaca dan menampilkan data cuaca secara real time. Semua kode yang dibahas di bagian ini tersedia di GitHub di shovon8/raspberry-pi-sense-hat-weather-app.

Pertama, buat server.py Script python di direktori proyek sebagai berikut:

$nano server.py

Masukkan kode berikut di server.py file python Python.

dari labu impor Flask
dari labu impor jsonify
dari labu impor render_template
dari labu impor url_for
dari sense_hat impor SenseHat
aplikasi = Labu(__nama__)
aplikasi.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0
akal = SenseHat()
merasakan.bersih()
dengan aplikasi.test_request_context():
url_for('statis', namafile='gaya.css')
url_for('statis', namafile='aplikasi.js')
@aplikasi.rute('/api')
def api():
suhu C = rasa.get_temperature()
suhuF = suhuC * (9/5) + 32
tekanan = rasa.get_tekanan()
tekananPsi = tekanan * 0.0145038
tekananP = tekanan * 100
kelembaban = rasa.dapatkan_kelembaban()
kembali jsonify(
"suhu": "C": tempC, "F": tempF ,
"tekanan": "mb": tekanan, "hPa": tekanan,
"psi": tekananPsi, "P": tekananP ,
"kelembaban": kelembaban
)
@aplikasi.rute('/')
def rumah():
kembali render_template('./rumah.html')

Lalu tekan + X diikuti oleh kamu dan untuk menyelamatkan server.py skrip python.

Pada kode di atas, baris 1-5 mengimpor semua library yang diperlukan, baris 7 membuat aplikasi Flask, baris 11 membuat objek SenseHat, dan baris 12 mematikan semua LED Sense Hat. Baris 8 menonaktifkan cache web untuk aplikasi Flasksk. Karena aplikasi ini ringan, tidak perlu caching. Jika Anda ingin memodifikasi aplikasi, menonaktifkan caching web akan membuat pengujian menjadi lebih mudah.

Baris 18-31 membaca data sensor dari Sense Hat dan mengembalikan data API dalam format JSON pada permintaan HTTP GET di /api titik akhir server web web. Baris 37-39 mengembalikan beranda aplikasi web cuaca di / titik akhir server web web. Beranda dirender dari rumah.html file, yang harus di templat/ direktori direktori proyek.

Jalur 14-16 digunakan untuk memungkinkan akses ke gaya.css dan aplikasi.js file statis. File-file ini harus di statis/ direktori direktori proyek. Itu gaya.css file digunakan untuk menata gaya rumah.html beranda, dan aplikasi.js file digunakan untuk meminta data API dari /api titik akhir dan perbarui data cuaca di rumah.html halaman setiap 5 detik.

Buat statis/ dan templat/ direktori dalam direktori proyek sebagai berikut:

$ mkdir -v statis,templat

Membuat rumah.html file di templat/ direktori sebagai berikut:

$ nano template/rumah.html

Masukkan kode berikut di rumah.html mengajukan.





Stasiun Cuaca Raspberry Pi
href=" url_for('static', namafile="style.css") "/>



Stasiun Cuaca Raspberry Pi



Suhu












Tekanan




















Kelembaban











Lalu tekan + X diikuti oleh kamu dan untuk menyelamatkan rumah.html mengajukan.

Membuat gaya.css file di statis/ direktori sebagai berikut:

$ nano statis/gaya.css

Masukkan kode berikut di gaya.css mengajukan.

@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
*
bantalan: 0;
margin: 0;
font-family: 'Roboto', sans-serif;

tubuh
latar belakang: #737373;

h1
tampilan: blok;
warna: #79DC7B;
perataan teks: tengah;
font-berat: 400;
latar belakang: #000;
bantalan: 0.5em 0;

h2
tampilan: blok;
latar belakang: #000;
warna: #ff;
perataan teks: tengah;
font-berat: 400;
ukuran font: 1em;

.data-konten
margin: 10 piksel;
perbatasan: 2px hitam pekat;
batas-radius: 5px;
warna latar: #79DC7B;

.baris data
tampilan: fleksibel;
arah fleksibel: baris;

.sel data
lebar: 100%;
tinggi: 80 piksel;
tampilan: fleksibel;
align-item: tengah;
justify-content: pusat;
font-berat: tebal;
ukuran font: 1.5em;
warna: #006902;

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

Lalu tekan + X diikuti oleh kamu dan untuk menyelamatkan gaya.css mengajukan.

Buat sebuah aplikasi.js file di statis/ direktori sebagai berikut:

$ nano statis/aplikasi.js

Masukkan kode berikut di aplikasi.js mengajukan.

jendela.addEventListener('memuat', utama);
fungsi utama()
fungsi getAPIData()
var http = XMLHttpRequest baru();
http.onreadystatechange = fungsi()
jika ini.readyState === 4 && ini.status === 200)
pembaruan (JSON.urai (ini.responTeks));


http.open("DAPATKAN", "/api", benar);
http.Kirim();

pembaruan fungsi (apiData)
var tempC = dokumen.getElementById("tempC");
var tempF = dokumen.getElementById("tempF");
var tekananMb = dokumen.getElementById("tekananMb");
var tekananPsi = dokumen.getElementById("tekananPsi");
var tekananHpa = dokumen.getElementById("tekananHpa");
var tekananP = dokumen.getElementById("tekananP");
var kelembaban = dokumen.getElementById("kelembaban");
suhuC.innerHTML = parseFloat(apiData.suhu.C).toFixed(2) + "°C";
tempF.innerHTML = parseFloat(apiData.suhu.F).toFixed(2) + "°F";
tekananMb.innerHTML = parseFloat(apiData.tekanan.mb).toFixed(2) + " mb";
tekananPsi.innerHTML = parseFloat(apiData.tekanan.psi).toFixed(2) + " psi";
tekananHpa.innerHTML = parseFloat(apiData.tekanan.hp).toFixed(2) + " hPa";
tekananP.innerHTML = parseFloat(apiData.tekanan.P).toFixed(2) + " P";
kelembaban.innerHTML = parseFloat(apiData.kelembaban).toFixed(2) + "%";

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

aplikasi();

Lalu tekan + X diikuti oleh kamu dan untuk menyelamatkan aplikasi.js mengajukan.

Di sini, baris 1 menjalankan utama() berfungsi ketika halaman web selesai dimuat. Dalam utama() fungsi, dapatkanAPIData() fungsi mengambil data API cuaca menggunakan AJAX dan memanggil memperbarui() fungsi (dalam baris 10) setelah data berhasil diambil. Itu memperbarui() fungsi memperbarui elemen halaman web menggunakan data API.

Pada baris 20, dokumen.getElementById() metode ini digunakan untuk mendapatkan referensi elemen halaman web dengan id suhuC. Baris 28 digunakan untuk mengganti konten elemen halaman web yang memiliki id suhuC dengan suhu (dalam Celcius) dari API. Dengan cara yang sama, konten semua elemen web (baris 21-26) diganti dengan data API masing-masing.

Dalam aplikasi() fungsi, dapatkanAPIData() dipanggil setiap 5 detik (5000 milidetik) untuk memperbarui data cuaca di aplikasi cuaca. Akhirnya, pada baris 46, aplikasi() fungsi dijalankan.

Untuk menguji aplikasi web, masukkan perintah berikut:

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

Aplikasi cuaca harus berjalan pada port 5000 (secara default).

Untuk menguji apakah Weather API berfungsi, jalankan perintah berikut:

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

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

Untuk menguji aplikasi Cuaca, kunjungi http://localhost:5000 dari browser web Chromium. Aplikasi Cuaca harus dimuat di browser web, tetapi tidak ada data cuaca yang ditampilkan terlebih dahulu.

Setelah beberapa detik, aplikasi cuaca akan selesai mengambil data cuaca dari API dan menampilkannya.

Kapan saja, Anda dapat menekan + C untuk menghentikan server web.

Membuat Layanan Systemd untuk Aplikasi Web Cuaca

Di bagian ini, kami akan menunjukkan kepada Anda cara membuat file layanan systemd untuk aplikasi cuaca sehingga secara otomatis akan dimulai saat booting.

Pertama, buat Stasiun cuaca.layanan file di direktori proyek Anda sebagai berikut:

$ nano stasiun cuaca.layanan

Masukkan baris kode berikut di Stasiun cuaca.layanan mengajukan.

[Satuan]
Description=Aplikasi Web Stasiun Cuaca Raspberry Pi Menggunakan Raspberry Pi Sense Hat
Setelah = jaringan.target
[Layanan]
WorkingDirectory=/home/pi/work
Lingkungan=FLASK_APP=server.py
Lingkungan=FLASK_ENV=produksi
ExecStart=/usr/bin/flask run --host=0.0.0.0
StandarOutput=mewarisi
StandardError=mewarisi
Mulai ulang = selalu
Pengguna=pi
[Install]
WantedBy=multi-pengguna.target

Lalu tekan + X diikuti oleh kamu dan untuk menyelamatkan Stasiun cuaca.layanan mengajukan.

Salin Stasiun cuaca.layanan file ke /etc/systemd/sistem/ direktori dengan perintah berikut:

$ sudo cp -v stasiun cuaca.layanan /etc/systemd/system/

Muat ulang daemon systemd agar perubahan diterapkan sebagai berikut:

$ sudo systemctl daemon-reload

Itu Stasiun cuaca layanan systemd seharusnya tidak aktif saat ini, seperti yang ditunjukkan pada tangkapan layar di bawah ini.

$ Sudo systemctl status stasiun cuaca.layanan

Memulai Stasiun cuaca layanan dengan perintah berikut:

$ sudo systemctl start stasiun cuaca.layanan

Seperti yang Anda lihat, Stasiun cuaca layanan sekarang berjalan.

$ Sudo systemctl status stasiun cuaca.layanan

Sekarang bahwa Stasiun cuaca service berfungsi, Anda dapat menambahkannya ke sistem startup Raspberry Pi OS dengan perintah berikut:

$ sudo systemctl aktifkan stasiun cuaca.layanan

Reboot Raspberry Pi Anda dengan perintah berikut:

$ sudo reboot

Setelah Raspberry Pi Anda boot, Stasiun cuaca layanan harus berjalan, seperti yang ditunjukkan pada tangkapan layar di bawah ini.

$ Sudo systemctl status stasiun cuaca.layanan

Mengakses Aplikasi Cuaca dari Perangkat Lain

Untuk mengakses aplikasi cuaca dari perangkat lain di jaringan rumah Anda, Anda perlu mengetahui alamat IP Raspberry Pi. Anda dapat menemukan alamat IP Raspberry Pi 4 Anda dari antarmuka manajemen web router rumah Anda. Dalam kasus kami, alamat IP adalah 192.168.0.103, tetapi alamat ini akan berbeda untuk Anda, jadi pastikan untuk mengganti alamat ini dengan alamat Anda di semua langkah selanjutnya.

Jika Anda memiliki akses ke konsol Raspberry Pi, Anda dapat menjalankan perintah berikut untuk menemukan alamat IP juga.

$ nama host -I

Setelah Anda mengetahui alamat IP Raspberry Pi Anda, Anda dapat mengaksesnya dari perangkat apa pun di jaringan rumah Anda. Seperti yang ditunjukkan pada tangkapan layar di bawah, kami telah mengakses aplikasi cuaca dari smartphone Android.

Kesimpulan

Dalam artikel ini, kami menunjukkan cara menggunakan Sense Hat Raspberry Pi untuk membangun stasiun cuaca Raspberry Pi. Kami menggunakan indra-topi Pustaka 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 mendapatkan data cuaca dari API cuaca setiap 5 detik untuk menjaga aplikasi web tetap up to date dengan data cuaca terbaru.

Cara Menggunakan AutoKey untuk Mengotomatiskan Game Linux
AutoKey adalah utilitas otomatisasi desktop untuk Linux dan X11, diprogram dengan Python 3, GTK dan Qt. Dengan menggunakan skrip dan fungsionalitas MA...
Cara Menampilkan Penghitung FPS di Game Linux
Game Linux mendapat dorongan besar ketika Valve mengumumkan dukungan Linux untuk klien Steam dan game mereka pada tahun 2012. Sejak itu, banyak game A...
Cara mengunduh dan Memainkan Civilization VI Sid Meier di Linux
Pengenalan permainan Civilization 6 adalah konsep modern dari konsep klasik yang diperkenalkan dalam seri game Age of Empires. Idenya cukup sederhana;...