فهرست مطالب:

RuuviTag و PiZero W و Blinkt! دماسنج مبتنی بر چراغ بلوتوث: 3 مرحله (همراه با تصاویر)
RuuviTag و PiZero W و Blinkt! دماسنج مبتنی بر چراغ بلوتوث: 3 مرحله (همراه با تصاویر)

تصویری: RuuviTag و PiZero W و Blinkt! دماسنج مبتنی بر چراغ بلوتوث: 3 مرحله (همراه با تصاویر)

تصویری: RuuviTag و PiZero W و Blinkt! دماسنج مبتنی بر چراغ بلوتوث: 3 مرحله (همراه با تصاویر)
تصویری: Аудиокнига «Зов предков» Джека Лондона 2024, جولای
Anonim
RuuviTag و PiZero W و Blinkt! دماسنج مبتنی بر چراغ بلوتوث
RuuviTag و PiZero W و Blinkt! دماسنج مبتنی بر چراغ بلوتوث
RuuviTag و PiZero W و Blinkt! دماسنج مبتنی بر چراغ بلوتوث
RuuviTag و PiZero W و Blinkt! دماسنج مبتنی بر چراغ بلوتوث
RuuviTag و PiZero W و Blinkt! دماسنج مبتنی بر چراغ بلوتوث
RuuviTag و PiZero W و Blinkt! دماسنج مبتنی بر چراغ بلوتوث

این دستورالعمل روشی را برای خواندن داده های دما و رطوبت از RuuviTag با استفاده از بلوتوث با Raspberry Pi Zero W و نمایش مقادیر به صورت دوتایی در یک چشمک زدن Pimoroni توصیف می کند! PHAT. یا به طور خلاصه: چگونه می توان یک سطح پیشرفته و دماسنج کمی نامطلوب ایجاد کرد.

RuuviTag یک چراغ بلوتوث سنسور منبع باز است که دارای سنسورهای دما/رطوبت/فشار و شتاب می باشد ، اما ممکن است به عنوان یک چراغ مجاور استاندارد Eddystone ™/iBeacon نیز عمل کند. این یک پروژه بسیار موفق Kickstarter بود و من چند هفته پیش پروژه خود را دریافت کردم. یک Github با نرم افزار python وجود دارد که RuuviTag را با استفاده از تمشک می خواند ، و من از یکی از نمونه های آنها ، با برخی افزودنی ها استفاده کرده ام.

Raspberry Pi Zero W جدیدترین عضو خانواده RPi است که در اصل Pi Zero با بلوتوث و WLAN اضافه شده است.

پلک زدن! PHAT از Pimoroni اساساً یک نوار از هشت LED RBG است که به عنوان یک HAT برای رزبری پای پیکربندی شده است. استفاده از آن بسیار آسان است و دارای یک کتابخانه پایتون است. ایده این بود که داده های RuuviTag را بخوانید و با استفاده از چشمک زدن آنها را نمایش دهید! کلاه مقادیر به عنوان اعداد باینری با استفاده از 7 LED نشان داده می شوند ، در حالی که هشت عدد برای نشان دادن میزان رطوبت یا دما (+/-/0) نشان داده می شود.

مرحله 1: راه اندازی سیستم

راه اندازی سیستم آسان است:- RuuviTag (نسخه سنسور دما RuuviTag) را روشن کنید.

- RPi Zero W ، RPi3 یا هر RPi دیگری را با ظرفیت بلوتوث اضافه شده ، طبق دستورالعمل های www.raspberrypi.org تنظیم کنید.

- چشمک را بگذار! HAT در RPi (در حالت خاموش).

- چشمک را نصب کنید! و نرم افزار RuuviTag ، همانطور که در صفحات مربوطه GitHub نشان داده شده است.

- اکنون باید آدرس MAC RuuviTag خود را شناسایی کنید

- برنامه ضمیمه پایتون را کپی کنید ، آن را با IDLE برای پایتون 3 باز کنید

- آدرس MAC RuuviTag را به نام خود تغییر دهید ، سپس برنامه را ذخیره و اجرا کنید.

- با خیال راحت برنامه را اصلاح و بهینه سازی کنید. این برنامه همانطور که هست ارائه می شود ، برای استفاده در معرض خطر خود ، هیچ گونه تعهدی در قبال هرگونه خسارت بر عهده نمی گیرد.

مرحله 2: دستگاه و برنامه

دستگاه و برنامه
دستگاه و برنامه
دستگاه و برنامه
دستگاه و برنامه
دستگاه و برنامه
دستگاه و برنامه
دستگاه و برنامه
دستگاه و برنامه

همانطور که در بالا ذکر شد ، ایده ایجاد یک سیستم ساده و ارزان برای خواندن داده ها از چراغ راهنما و نمایش مقادیر عددی در چشمک زدن بود! HAT یا یک نوار LED مشابه.

محدوده مقادیر دما برای اندازه گیری با سیستم مبتنی بر RPi در بیشتر موارد چیزی بین - 50 تا 80 درجه سانتیگراد ، برای رطوبت بین 0 تا 100 درصد خواهد بود. بنابراین یک صفحه نمایش که می تواند مقادیر -100 تا +100 را نشان دهد برای اکثر برنامه ها کافی است. اعداد اعشاری کوچکتر از 128 می توانند به عنوان اعداد باینری با 7 بیت (یا LED) نمایش داده شوند. بنابراین برنامه مقادیر دما و رطوبت را از RuuviTag به عنوان اعداد "شناور" می گیرد و آنها را به اعداد دودویی تبدیل می کند ، که سپس در چشمک زدن نمایش داده می شوند !.

در مرحله اول ، عدد گرد می شود ، در صورت مثبت ، منفی یا صفر تجزیه و تحلیل می شود و سپس با استفاده از "abs" به عدد مثبت تبدیل می شود. سپس عدد اعشاری به یک عدد باینری 7 رقمی تبدیل می شود که اساساً یک رشته 0 و 1 است و در 7 پیکسل آخر پلک تجزیه و تحلیل می شود.

برای مقادیر دما ، پیکسل اول نشان می دهد که مقدار مثبت (قرمز) ، صفر (سرخابی) یا منفی (آبی) است. با نمایش مقادیر رطوبت روی سبز تنظیم شده است. برای ساده سازی تمایز بین مقادیر دما و رطوبت ، پیکسل های دوتایی برای دما سفید و زرد برای رطوبت تنظیم می شوند. برای افزایش خوانایی اعداد دوتایی ، پیکسل "0" به طور کامل خاموش نمی شود ، اما در عوض بسیار ضعیف تر از حالت "1" تنظیم می شود. به عنوان چشمک! پیکسل ها بسیار روشن هستند ، می توانید روشنایی کلی را با تغییر پارامتر "روشن" تنظیم کنید

این برنامه مقادیر و قسمت های فرآیند را نیز روی صفحه نمایش می دهد. علاوه بر این ، چندین دستور چاپ بی صدا (#) را خواهید یافت. من آنها را رها کردم ، زیرا ممکن است برای درک روند در صورت بیصدا شدن آنها مفید واقع شوند.

همچنین ممکن است مقادیر در یک فایل log ذخیره شوند.

مرحله 3: کد برنامه

کد کمی اشکال زدایی و بهینه سازی شد. اکنون ممکن است نسخه 3 (20_03_2017) را بیابید.

"این برنامه برای خواندن مقادیر دما ، رطوبت و فشار از RuuviTag در نظر گرفته شده است" و مقادیر دما و رطوبت را به صورت اعداد دوتایی در یک چشمک زدن Pimorini نشان می دهد! کلاه '' '' بر اساس مثال print_to_screen.py از کتابخانه ruuvitag در github است. "نیاز به Pi Zero W ، Pi 3 یا هر RPi مجهز به بلوتوث و نصب همه کتابخانه های مورد نیاز."

زمان واردات

import os from datetime وارد کردن datetime

از ruuvitag_sensor.ruuvi واردات RuuviTagSensor

از واردات blinkt set_clear_on_exit ، set_pixel ، clear ، show

def temp_blinkt (bt):

# این روال مقدار دما را می گیرد و آن را به صورت یک عدد باینری در چشمک زدن نمایش می دهد!

روشن ()

# رنگ و شدت پیکسل "1": سفید

r1 = 64 g1 = 64 b1 = 64

#رنگ و شدت پیکسل "0": سفید

r0 = 5 g0 = 5 b0 = 5

# گرد کنید و به عدد صحیح تبدیل کنید

r = گرد (bt)

# vz نشان دهنده علامت جبری برای پیکسل نشانگر است

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

# تبدیل به عدد باینری مطلق و 7 رقمی

i1 = i + 128 # برای i منجر به یک عدد باینری 8 رقمی می شود که با چاپ 1 # شروع می شود (i1)

b = "{0: b}". فرمت (i1) # تبدیل به باینری

# چاپ (ب)

b0 = str (b) # تبدیل به رشته

b1 = b0 [1: 8] #بیت اول را کوتاه کنید

چاپ ("شماره دودویی:" ، b1)

# پیکسل ها را روی چشمک زدن تنظیم کنید!

# شماره دودویی تنظیم کنید

برای h در محدوده (0 ، 7): f = (h+1) if (b1 [h] == "1"): set_pixel (f، r1، g1، b1) # print ("bit"، h، " 1 است ، پیکسل "، و) دیگر: set_pixel (f، r0، g0، b0) # چاپ (" صفر ")

# پیکسل نشانگر را تنظیم کنید

if (vz == 1): set_pixel (0، 64، 0، 0) # قرمز برای مقادیر مثبت elif (vz == 2): set_pixel (0، 0، 0، 64) # آبی برای مقادیر منفی دیگر: set_pixel (0 ، 64 ، 0 ، 64) # سرخابی اگر صفر باشد

نمایش ()

# پایان temp_blinkt ()

def hum_blinkt (bh):

# این مقدار رطوبت را می گیرد و آن را به صورت یک عدد باینری در چشمک زدن نمایش می دهد!

روشن ()

# رنگ و شدت پیکسل "1": زرد

r1 = 64 g1 = 64 b1 = 0

#رنگ و شدت پیکسل "0":

r0 = 5 g0 = 5 b0 = 0

# گرد کنید و به عدد صحیح تبدیل کنید

r = گرد (bh)

# تبدیل به عدد باینری مطلق 7 رقمی i = abs (r) #print (i)

i1 = i + 128 # برای i یک عدد باینری 8 رقمی می دهد که با 1 شروع می شود

# چاپ (i1)

b = "{0: b}". فرمت (i1)

# چاپ (ب)

b0 = str (b)

b1 = b0 [1: 8] #بیت اول را کوتاه کنید

چاپ ("شماره دودویی:" ، b1)

# پیکسل ها را روی چشمک زدن تنظیم کنید!

# تعداد دودویی را روی پیکسل تنظیم کنید

برای h در محدوده (0 ، 7): f = (h+1) if (b1 [h] == "1"): set_pixel (f، r1، g1، b1) else: # بیصدا کردن LED های خالی set_pixel (f ، r0 ، g0 ، b0) # LED های خالی را خاموش کنید

# پیکسل نشانگر را تنظیم کنید

set_pixel (0 ، 0 ، 64 ، 0) # سبز برای رطوبت

نمایش ()

# پایان hum_blinkt ()

set_clear_on_exit ()

# خواندن داده ها از RuuviTag

mac = 'EC: 6D: 59: 6D: 01: 1C' # تغییر آدرس مک دستگاه خود

چاپ ("شروع")

سنسور = RuuviTagSensor (مک)

در حالی که True:

data = sensor.update ()

line_sen = str.format ('Sensor - {0}'، mac)

line_tem = str.format ('دما: {0} C' ، داده ['دما']) line_hum = str.format ('رطوبت: {0}٪' ، داده ['رطوبت']) line_pre = str.format ("فشار: {0}" ، داده ["فشار"])

چاپ()

# دمای نمایش در چشمک زدن! ba = str.format ('{0}' ، داده ['دما']) bt = float (ba) print (bt، "Â ° C") temp_blinkt (bt) print ()

time.sleep (10) # دمای نمایش به مدت 10 ثانیه

# نمایش رطوبت در چشمک زدن!

bg = str.format ('{0}' ، داده ['رطوبت']) bh = float (bg) print (bh، "٪") hum_blinkt (bh) print ()

# صفحه را پاک کنید و داده های حسگر را روی صفحه چاپ کنید

os.system ('clear') print ('برای خروج Ctrl+C را فشار دهید. / n / n') print (str (datetime.now ())) print (line_sen) print (line_tem) print (line_hum) print (line_pre) چاپ ('\ n / n / r …….')

# چند ثانیه صبر کنید و دوباره شروع کنید

try: time.sleep (8) به جز KeyboardIntruptrupt: # وقتی Ctrl+C فشار داده می شود ، اجرای حلقه while متوقف می شود چاپ ('Exit') clear () break () break () break ()

توصیه شده: