Mục lục:

RuuviTag và PiZero W và Blinkt! nhiệt kế dựa trên đèn hiệu Bluetooth: 3 bước (có hình ảnh)
RuuviTag và PiZero W và Blinkt! nhiệt kế dựa trên đèn hiệu Bluetooth: 3 bước (có hình ảnh)

Video: RuuviTag và PiZero W và Blinkt! nhiệt kế dựa trên đèn hiệu Bluetooth: 3 bước (có hình ảnh)

Video: RuuviTag và PiZero W và Blinkt! nhiệt kế dựa trên đèn hiệu Bluetooth: 3 bước (có hình ảnh)
Video: Raspberry Pi Pico for Robotics 2024, Tháng bảy
Anonim
RuuviTag và PiZero W và Blinkt! nhiệt kế dựa trên đèn hiệu Bluetooth
RuuviTag và PiZero W và Blinkt! nhiệt kế dựa trên đèn hiệu Bluetooth
RuuviTag và PiZero W và Blinkt! nhiệt kế dựa trên đèn hiệu Bluetooth
RuuviTag và PiZero W và Blinkt! nhiệt kế dựa trên đèn hiệu Bluetooth
RuuviTag và PiZero W và Blinkt! nhiệt kế dựa trên đèn hiệu Bluetooth
RuuviTag và PiZero W và Blinkt! nhiệt kế dựa trên đèn hiệu Bluetooth

Tài liệu hướng dẫn này mô tả cách tiếp cận để đọc dữ liệu nhiệt độ và độ ẩm từ RuuviTag bằng Bluetooth với Raspberry Pi Zero W và hiển thị các giá trị ở dạng số nhị phân trên nháy mắt Pimoroni! pHAT Hay nói một cách ngắn gọn là: cách xây dựng một nhiệt kế hiện đại và một chút sành điệu.

RuuviTag là một đèn hiệu bluetooth cảm biến mã nguồn mở đi kèm với các cảm biến nhiệt độ / độ ẩm / áp suất và nhiệt độ, nhưng cũng có thể hoạt động như một đèn hiệu tiệm cận Eddystone ™ / iBeacon tiêu chuẩn. Đó là một dự án Kickstarter rất thành công và tôi đã nhận được tài khoản của mình cách đây vài tuần. Có một Github với phần mềm python để đọc RuuviTag bằng quả mâm xôi và tôi đã sử dụng một trong các ví dụ của chúng, với một số bổ sung.

Raspberry Pi Zero W là thành viên mới nhất của gia đình RPi, về cơ bản là Pi Zero có thêm Bluetooth và WLAN.

Cái chớp mắt! pHAT từ Pimoroni về cơ bản là một dải tám đèn LED RBG được định cấu hình làm HAT cho Raspberry Pi. Nó rất dễ sử dụng và đi kèm với một thư viện python. Ý tưởng là đọc dữ liệu từ RuuviTag và hiển thị nó bằng nháy mắt! HAT. Các giá trị được hiển thị dưới dạng số nhị phân bằng cách sử dụng 7 trong số các đèn LED, trong khi tám giá trị được sử dụng để cho biết các giá trị độ ẩm hoặc nhiệt độ (+ / - / 0) có được hiển thị hay không.

Bước 1: Thiết lập hệ thống

Cài đặt hệ thống dễ dàng: - Bật RuuviTag (Phiên bản cảm biến nhiệt độ RuuviTag).

- Thiết lập RPi Zero W, RPi3 hoặc bất kỳ RPi nào khác có thêm công suất bluetooth, làm theo hướng dẫn trên www.raspberrypi.org.

- Đặt chớp mắt! HAT trên RPi (trong khi tắt).

- Cài đặt nháy mắt! và phần mềm RuuviTag, như được chỉ ra trên các trang GitHub tương ứng.

- Bây giờ bạn phải xác định địa chỉ MAC của RuuviTag của bạn

- sao chép chương trình Python đính kèm, mở nó bằng IDLE cho Python 3

- Thay đổi địa chỉ MAC của RuuviTag thành địa chỉ của bạn, sau đó lưu và chạy chương trình.

- thoải mái sửa đổi và tối ưu hóa chương trình. Chương trình đến như vậy, được sử dụng theo rủi ro của riêng bạn, không có trách nhiệm pháp lý đối với bất kỳ thiệt hại nào.

Bước 2: Thiết bị và Chương trình

Thiết bị và Chương trình
Thiết bị và Chương trình
Thiết bị và Chương trình
Thiết bị và Chương trình
Thiết bị và Chương trình
Thiết bị và Chương trình
Thiết bị và Chương trình
Thiết bị và Chương trình

Như đã đề cập ở trên, ý tưởng là xây dựng một hệ thống đơn giản và rẻ tiền để đọc dữ liệu từ beacon và hiển thị các giá trị số trên nháy mắt! HAT hoặc dải đèn LED tương tự.

Phạm vi giá trị cho nhiệt độ được đo bằng hệ thống dựa trên RPi trong hầu hết các trường hợp sẽ nằm trong khoảng từ - 50 ° C đến + 80 ° C, đối với độ ẩm từ 0 đến 100%. Vì vậy, một màn hình có thể cung cấp các giá trị từ -100 đến +100 sẽ là đủ cho hầu hết các ứng dụng. Các số thập phân nhỏ hơn 128 có thể được hiển thị dưới dạng số nhị phân với 7 bit (hoặc đèn LED). Vì vậy, chương trình lấy các giá trị nhiệt độ và độ ẩm từ RuuviTag dưới dạng các số "float" và chuyển chúng thành các số nhị phân, sau đó được hiển thị trên nháy mắt !.

Bước đầu tiên, số được làm tròn, phân tích nếu dương, âm hoặc 0, sau đó chuyển thành số dương bằng cách sử dụng "abs". Sau đó, số thập phân được chuyển đổi thành số nhị phân gồm 7 chữ số, về cơ bản là một chuỗi các số 0 và 1, được phân tích và hiển thị trên 7 pixel cuối cùng của chớp mắt !.

Đối với các giá trị nhiệt độ, pixel đầu tiên cho biết giá trị là dương (đỏ), 0 (đỏ tươi) hay âm (xanh lam). Hiển thị các giá trị độ ẩm nó được đặt thành màu xanh lục. Để đơn giản hóa sự phân biệt giữa các giá trị nhiệt độ và độ ẩm, các pixel nhị phân được đặt màu trắng cho nhiệt độ và màu vàng cho độ ẩm. Để nâng cao tính dễ đọc của các số nhị phân, pixel "0" không bị tắt hoàn toàn mà thay vào đó được đặt yếu hơn nhiều so với ở trạng thái "1". Như chớp mắt! pixel rất sáng, bạn có thể đặt độ sáng chung thay đổi thông số "sáng"

Chương trình cũng hiển thị các giá trị và các phần của quá trình trên màn hình. Ngoài ra, bạn sẽ tìm thấy một số hướng dẫn in (#) bị tắt tiếng. Tôi đã để chúng ở lại, vì bạn có thể thấy chúng hữu ích để hiểu quá trình nếu bị tắt tiếng.

Các giá trị cũng có thể được lưu trữ trong một tệp nhật ký.

Bước 3: Mã chương trình

Mã đã được gỡ lỗi và tối ưu hóa một chút. Bây giờ bạn có thể tìm thấy phiên bản 3 (20_03_2017).

'Chương trình này nhằm đọc các giá trị nhiệt độ, độ ẩm và áp suất tạo thành một RuuviTag' 'và để hiển thị các giá trị nhiệt độ và độ ẩm dưới dạng số nhị phân trên nháy mắt Pimorini! HAT. '' '' Nó dựa trên ví dụ print_to_screen.py từ thư viện ruuvitag tại github. '' Yêu cầu Pi Zero W, Pi 3 hoặc bất kỳ RPi nào khác được trang bị bluetooth và cài đặt tất cả các thư viện cần thiết. '

thời gian nhập khẩu

nhập hệ điều hành từ datetime nhập datetime

từ ruuvitag_sensor.ruuvi nhập RuuviTagSensor

từ flash nhập set_clear_on_exit, set_pixel, clear, show

def temp_blinkt (bt):

# quy trình này nhận giá trị nhiệt độ và hiển thị nó dưới dạng số nhị phân trên nháy mắt!

sạch ()

# màu và cường độ của pixel "1": trắng

r1 = 64 g1 = 64 b1 = 64

# màu và cường độ của pixel "0": trắng

r0 = 5 g0 = 5 b0 = 5

# Làm tròn và chuyển đổi thành số nguyên

r = vòng (bt)

# vz biểu thị dấu đại số cho pixel chỉ báo

if (r> 0): vz = 1 # positive elif (r <0): vz = 2 # negative else: vz = 0 # zero # print (vz) i = abs (r) #print (i)

# biến đổi thành số nhị phân 7 chữ số tuyệt đối

i1 = i + 128 # cho tôi kết quả là một số nhị phân gồm 8 chữ số bắt đầu bằng 1 # print (i1)

b = "{0: b}". format (i1) # chuyển đổi thành nhị phân

# print (b)

b0 = str (b) # chuyển đổi thành chuỗi

b1 = b0 [1: 8] #truncate bit đầu tiên

print ("số nhị phân:", b1)

# Đặt pixel trên nháy mắt!

# đặt số nhị phân

cho h trong phạm vi (0, 7): f = (h + 1) if (b1 [h] == "1"): set_pixel (f, r1, g1, b1) # print ("bit", h, " là 1, pixel ", f) else: set_pixel (f, r0, g0, b0) # print (" nil ")

# Đặt pixel chỉ báo

if (vz == 1): set_pixel (0, 64, 0, 0) # red cho các giá trị dương elif (vz == 2): set_pixel (0, 0, 0, 64) # blue cho các giá trị âm else: set_pixel (0, 64, 0, 64) # đỏ tươi nếu 0

chỉ()

# end of temp_blinkt ()

def hum_blinkt (bh):

# giá trị này nhận giá trị độ ẩm và hiển thị dưới dạng số nhị phân trên nháy mắt!

sạch()

# màu và cường độ của "1" pixel: màu vàng

r1 = 64 g1 = 64 b1 = 0

# màu và cường độ của pixel "0":

r0 = 5 g0 = 5 b0 = 0

# Làm tròn và biến đổi thành số nguyên

r = vòng (bh)

# biến đổi thành số nhị phân 7 chữ số tuyệt đối i = abs (r) #print (i)

i1 = i + 128 # cho tôi cho một số nhị phân gồm 8 chữ số bắt đầu bằng 1

# print (i1)

b = "{0: b}". format (i1)

# print (b)

b0 = str (b)

b1 = b0 [1: 8] #truncate bit đầu tiên

print ("số nhị phân:", b1)

# Đặt pixel trên nháy mắt!

# đặt số nhị phân thành pixel

cho h trong phạm vi (0, 7): f = (h + 1) if (b1 [h] == "1"): set_pixel (f, r1, g1, b1) else: # tắt tiếng để trống các đèn LED set_pixel (f, r0, g0, b0) # tắt tiếng để trống các đèn LED

# Đặt pixel chỉ báo

set_pixel (0, 0, 64, 0) # xanh cho độ ẩm

chỉ()

# end of hum_blinkt ()

set_clear_on_exit ()

# Đọc dữ liệu từ RuuviTag

mac = 'EC: 6D: 59: 6D: 01: 1C' # Thay đổi thành địa chỉ mac của thiết bị của bạn

print ('Đang bắt đầu')

sensor = RuuviTagSensor (mac)

trong khi Đúng:

data = sensor.update ()

line_sen = str.format ('Cảm biến - {0}', mac)

line_tem = str.format ('Nhiệt độ: {0} C', dữ liệu ['nhiệt độ']) line_hum = str.format ('Độ ẩm: {0}%', dữ liệu ['độ ẩm']) line_pre = str.format ('Áp lực: {0}', dữ liệu ['áp suất'])

in()

# hiển thị nhiệt độ trên nháy mắt! ba = str.format ('{0}', data ['Temperature']) bt = float (ba) print (bt, "Â ° C") temp_blinkt (bt) print ()

time.sleep (10) # hiển thị nhiệt độ trong 10 giây

# hiển thị độ ẩm trên nháy mắt!

bg = str.format ('{0}', dữ liệu ['độ ẩm']) bh = float (bg) print (bh, "%") hum_blinkt (bh) print ()

# Xóa màn hình và in dữ liệu cảm biến ra màn hình

os.system ('clear') print ('Nhấn Ctrl + C để thoát. / n / n') print (str (datetime.now ())) print (line_sen) print (line_tem) print (line_hum) print (line_pre) print ('\ n / n / r …….')

# Chờ vài giây và bắt đầu lại

try: time.sleep (8) ngoại trừ KeyboardInterrupt: # Khi nhấn Ctrl + C, việc thực hiện vòng lặp while bị dừng in ('Thoát') clear () show () break

Đề xuất: