2025 Pengarang: John Day | [email protected]. Terakhir diubah: 2025-01-13 06:57
Instruksi ini menjelaskan pendekatan untuk membaca data suhu dan kelembaban dari RuuviTag menggunakan Bluetooth dengan Raspberry Pi Zero W dan untuk menampilkan nilai dalam bilangan biner pada kedipan Pimoroni! pHAT. Atau singkatnya: bagaimana membangun keadaan seni dan termometer yang sedikit kutu buku.
RuuviTag adalah suar bluetooth sensor open source yang dilengkapi dengan sensor suhu/kelembaban/tekanan dan akselerasi, tetapi juga dapat bertindak sebagai suar proximity Eddystone™ / iBeacon standar. Itu adalah proyek Kickstarter yang sangat sukses dan saya mendapatkannya beberapa minggu yang lalu. Ada Github dengan perangkat lunak python untuk membaca RuuviTag menggunakan raspberry, dan saya telah menggunakan salah satu contohnya, dengan beberapa tambahan.
Raspberry Pi Zero W adalah anggota terbaru dari keluarga RPi, pada dasarnya Pi Zero dengan Bluetooth dan WLAN ditambahkan.
Yang berkedip! pHAT dari Pimoroni pada dasarnya adalah strip delapan LED RBG yang dikonfigurasi sebagai HAT untuk Raspberry Pi. Sangat mudah digunakan dan dilengkapi dengan pustaka python. Idenya adalah untuk membaca data dari RuuviTag dan menampilkannya menggunakan blinkt! TOPI. Nilai ditampilkan sebagai bilangan biner menggunakan 7 LED, sedangkan yang delapan digunakan untuk menunjukkan apakah nilai kelembaban atau suhu (+/-/0) ditampilkan.
Langkah 1: Menyiapkan Sistem
Menyiapkan sistem itu mudah:- Nyalakan RuuviTag (versi sensor suhu RuuviTag).
- Siapkan RPi Zero W, RPi3, atau RPi lainnya dengan kapasitas bluetooth yang ditambahkan, dengan mengikuti petunjuk di www.raspberrypi.org.
- Tempatkan kedipan! HAT pada RPi (saat off).
- Instal blinkt! dan perangkat lunak RuuviTag, seperti yang ditunjukkan pada halaman GitHub yang sesuai.
- Anda sekarang harus mengidentifikasi alamat MAC RuuviTag
- salin program Python terlampir, buka dengan IDLE untuk Python 3
- ubah alamat MAC RuuviTag menjadi milik Anda, lalu simpan dan jalankan program.
- jangan ragu untuk memodifikasi dan mengoptimalkan program. Program datang apa adanya, untuk digunakan dengan risiko Anda sendiri, tidak ada kewajiban yang diambil untuk kerusakan apa pun.
Langkah 2: Perangkat dan Program
Seperti disebutkan di atas, idenya adalah untuk membangun sistem yang sederhana dan murah untuk membaca data dari suar dan menampilkan nilai numerik pada blinkt! HAT, atau strip LED serupa.
Kisaran nilai suhu yang akan diukur dengan sistem berbasis RPi dalam banyak kasus akan berada di antara - 50°C dan +80°C, untuk kelembapan antara 0 dan 100%. Jadi tampilan yang dapat memberikan nilai dari -100 hingga +100 akan cukup untuk sebagian besar aplikasi. Bilangan desimal yang lebih kecil seperti 128 dapat ditampilkan sebagai bilangan biner dengan 7 bit (atau LED). Jadi program mengambil nilai suhu dan kelembaban dari RuuviTag sebagai angka "mengambang" dan mengubahnya menjadi angka biner, yang kemudian ditampilkan pada blinkt!.
Sebagai langkah awal, bilangan dibulatkan, dianalisis apakah positif, negatif atau nol, kemudian diubah menjadi bilangan positif menggunakan "abs". Kemudian angka desimal diubah menjadi angka biner 7 digit, pada dasarnya string 0s dan 1s, yang dianalisis dan ditampilkan pada 7 piksel terakhir dari blinkt!.
Untuk nilai suhu, piksel pertama menunjukkan apakah nilainya positif (merah), nol (magenta) atau negatif (biru). Menampilkan nilai kelembaban itu diatur ke hijau. Untuk menyederhanakan diskriminasi antara nilai suhu dan kelembaban, piksel biner diatur putih untuk suhu dan kuning untuk kelembaban. Untuk meningkatkan keterbacaan bilangan biner, piksel "0" tidak dimatikan sepenuhnya, melainkan disetel jauh lebih lemah daripada di status "1". Seperti berkedip! piksel sangat cerah, Anda dapat mengatur kecerahan umum dengan mengubah parameter "terang"
Program menampilkan nilai dan bagian dari proses juga di layar. Selain itu, Anda akan menemukan beberapa instruksi cetak yang diredam (#). Saya membiarkannya masuk, karena Anda mungkin merasa terbantu untuk memahami prosesnya jika diaktifkan.
Nilai mungkin juga disimpan dalam file log.
Langkah 3: Kode Program
Kode sedikit di-debug dan dioptimalkan. Anda sekarang dapat menemukan versi 3 (20_03_2017).
' Program ini dimaksudkan untuk membaca nilai suhu, kelembaban dan tekanan membentuk RuuviTag '' dan untuk menampilkan nilai suhu dan kelembaban sebagai angka biner pada kedipan Pimorini! TOPI. ' '' ' Ini didasarkan pada contoh print_to_screen.py dari perpustakaan ruuvitag di github. ' ' Memerlukan Pi Zero W, Pi 3 atau RPi lain yang dilengkapi dengan bluetooth dan semua pustaka yang diperlukan terpasang.'
waktu impor
impor os dari datetime impor datetime
dari ruuvitag_sensor.ruuvi impor RuuviTagSensor
dari blinkt impor set_clear_on_exit, set_pixel, clear, show
def temp_blinkt(bt):
# rutin ini mengambil nilai suhu dan menampilkannya sebagai bilangan biner di blinkt!
jernih ()
# warna dan intensitas piksel "1": putih
r1 = 64 g1 = 64 b1 = 64
#warna dan intensitas piksel "0": putih
r0 = 5 g0 = 5 b0 = 5
# Bulatkan dan ubah menjadi bilangan bulat
r = bulat (bt)
# vz mewakili tanda aljabar untuk piksel indikator
if (r>0): vz = 1 # positif elif (r<0): vz= 2 # negatif lain: vz= 0 # nol # print (vz) i = abs(r) #print (i)
# berubah menjadi bilangan biner 7 digit absolut
i1 = i + 128 # untuk i menghasilkan angka biner 8 digit dimulai dengan 1 # print (i1)
b = "{0:b}".format(i1) # konversi ke biner
# cetak (b)
b0 = str (b) # konversi ke string
b1 = b0[1:8] #memotong bit pertama
print("bilangan biner: ", b1)
# Atur piksel pada blinkt!
# atur bilangan biner
untuk h dalam rentang (0, 7): f = (h+1) if (b1[h] == "1"): set_pixel (f, r1, g1, b1) # print ("bit ", h, " adalah 1, piksel ", f) else: set_pixel (f, r0, g0, b0) # print("nil")
# Atur piksel indikator
if (vz==1): set_pixel (0, 64, 0, 0) # merah untuk nilai positif elif (vz==2): set_pixel (0, 0, 0, 64) # biru untuk nilai negatif else: set_pixel (0, 64, 0, 64) # magenta jika nol
menunjukkan()
# akhir temp_blinkt()
def hum_blinkt(bh):
# ini mengambil nilai kelembaban dan menampilkannya sebagai angka biner di blinkt!
jernih()
# warna dan intensitas piksel "1": kuning
r1 = 64 g1 = 64 b1 = 0
#warna dan intensitas piksel "0":
r0 = 5 g0 = 5 b0 = 0
# Bulatkan dan ubah menjadi bilangan bulat
r = bulat (bh)
# transformasi ke mutlak, bilangan biner 7-digit i = abs(r) #print (i)
i1 = i + 128 # untuk i memberikan angka biner 8 digit dimulai dengan 1
# cetak (i1)
b = "{0:b}".format(i1)
# cetak (b)
b0 = str (b)
b1 = b0[1:8] #memotong bit pertama
print("bilangan biner: ", b1)
# Atur piksel pada blinkt!
# atur angka biner ke piksel
untuk h dalam rentang (0, 7): f = (h+1) if (b1[h] == "1"): set_pixel (f, r1, g1, b1) else: # mute to blank LED set_pixel (f, r0, g0, b0) # bisu ke LED kosong
# Atur piksel indikator
set_pixel (0, 0, 64, 0) # hijau untuk kelembapan
menunjukkan()
# akhir hum_blinkt()
set_clear_on_exit()
# Membaca data dari RuuviTag
mac = 'EC:6D:59:6D:01:1C' # Ubah ke alamat mac perangkat Anda
print('Mulai')
sensor = RuuviTagSensor(mac)
sementara Benar:
data = sensor.update()
line_sen = str.format('Sensor - {0}', mac)
line_tem = str.format('Suhu: {0} C', data['suhu']) line_hum = str.format('Kelembaban: {0} %', data['kelembaban']) line_pre = str.format('Tekanan: {0}', data['tekanan'])
mencetak()
# menampilkan suhu di blinkt! ba = str.format('{0}', data['temperature']) bt = float (ba) print (bt, " °C") temp_blinkt (bt) print()
time.sleep (10) # suhu tampilan selama 10 detik
# tampilkan kelembapan di blinkt!
bg = str.format('{0}', data['humidity']) bh = float (bg) print (bh, " %") hum_blinkt (bh) print ()
# Bersihkan layar dan cetak data sensor ke layar
os.system('clear') print('Tekan Ctrl+C untuk keluar.\n\n') print(str(datetime.now())) print(line_sen) print(line_tem) print(line_hum) print(line_pre) print('\n\n\r…….')
# Tunggu beberapa detik dan mulai dari awal lagi
try: time.sleep(8) kecuali KeyboardInterrupt: # Ketika Ctrl+C ditekan, eksekusi while loop dihentikan print('Exit') clear() show() break