Daftar Isi:

RuuviTag dan PiZero W dan Blinkt! Termometer Berbasis Bluetooth Beacon: 3 Langkah (dengan Gambar)
RuuviTag dan PiZero W dan Blinkt! Termometer Berbasis Bluetooth Beacon: 3 Langkah (dengan Gambar)

Video: RuuviTag dan PiZero W dan Blinkt! Termometer Berbasis Bluetooth Beacon: 3 Langkah (dengan Gambar)

Video: RuuviTag dan PiZero W dan Blinkt! Termometer Berbasis Bluetooth Beacon: 3 Langkah (dengan Gambar)
Video: Pomodoro timer using Blinkt! 2024, Juli
Anonim
RuuviTag dan PiZero W dan Blinkt! Termometer Berbasis Suar Bluetooth
RuuviTag dan PiZero W dan Blinkt! Termometer Berbasis Suar Bluetooth
RuuviTag dan PiZero W dan Blinkt! Termometer Berbasis Suar Bluetooth
RuuviTag dan PiZero W dan Blinkt! Termometer Berbasis Suar Bluetooth
RuuviTag dan PiZero W dan Blinkt! Termometer Berbasis Suar Bluetooth
RuuviTag dan PiZero W dan Blinkt! Termometer Berbasis Suar Bluetooth

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

Perangkat dan Program
Perangkat dan Program
Perangkat dan Program
Perangkat dan Program
Perangkat dan Program
Perangkat dan Program
Perangkat dan Program
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

Direkomendasikan: