สารบัญ:

RuuviTag และ PiZero W และ Blinkt! เทอร์โมมิเตอร์แบบ Bluetooth Beacon: 3 ขั้นตอน (พร้อมรูปภาพ)
RuuviTag และ PiZero W และ Blinkt! เทอร์โมมิเตอร์แบบ Bluetooth Beacon: 3 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: RuuviTag และ PiZero W และ Blinkt! เทอร์โมมิเตอร์แบบ Bluetooth Beacon: 3 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: RuuviTag และ PiZero W และ Blinkt! เทอร์โมมิเตอร์แบบ Bluetooth Beacon: 3 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: DIY WiFi BBQ Temperature Probe 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 โดยใช้ Bluetooth พร้อม Raspberry Pi Zero W และเพื่อแสดงค่าเป็นเลขฐานสองบน Pimoroni กะพริบตา! pHAT.หรือพูดสั้น ๆ: วิธีการสร้างที่ทันสมัยและเทอร์โมมิเตอร์แบบเนิร์ดเล็กน้อย

RuuviTag เป็นบีคอนบลูทูธเซ็นเซอร์โอเพนซอร์สที่มาพร้อมกับเซ็นเซอร์อุณหภูมิ/ความชื้น/ความดันและการเร่งความเร็ว แต่อาจทำหน้าที่เป็นบีคอนความใกล้เคียง Eddystone ™ / iBeacon มาตรฐาน มันเป็นโครงการ Kickstarter ที่ประสบความสำเร็จอย่างมาก และฉันได้รับของฉันเมื่อไม่กี่สัปดาห์ก่อน มี Github พร้อมซอฟต์แวร์ python สำหรับอ่าน RuuviTag โดยใช้ราสเบอร์รี่ และฉันได้ใช้หนึ่งในตัวอย่างของพวกเขา โดยมีการเพิ่มเติมบางส่วน

Raspberry Pi Zero W เป็นสมาชิกล่าสุดของตระกูล RPi โดยทั่วไปจะเป็น Pi Zero ที่มี Bluetooth และ WLAN ที่เพิ่มเข้ามา

กะพริบตา! pHAT จาก Pimoroni นั้นเป็นแถบ LED RBG แปดดวงที่กำหนดค่าเป็น HAT สำหรับ Raspberry Pi มันใช้งานง่ายมากและมาพร้อมกับไลบรารี่หลาม แนวคิดคือการอ่านข้อมูลจาก RuuviTag และแสดงโดยใช้ flasht! หมวก. ค่าจะแสดงเป็นเลขฐานสองโดยใช้ LED จำนวน 7 ดวง ในขณะที่ค่า 8 ดวงใช้เพื่อระบุว่าค่าความชื้นหรืออุณหภูมิ (+/-/0) จะแสดงขึ้นหรือไม่

ขั้นตอนที่ 1: การตั้งค่าระบบ

การตั้งค่าระบบทำได้ง่าย:- เปิด RuuviTag (รุ่นเซ็นเซอร์อุณหภูมิ RuuviTag)

- ตั้งค่า RPi Zero W, RPi3 หรือ RPi อื่นๆ ที่มีการเพิ่มความจุของบลูทูธ โดยทำตามคำแนะนำใน www.raspberrypi.org

- วางไฟกระพริบ! HAT บน RPi (ขณะปิด)

- ติดตั้งไฟกระพริบ! และซอฟต์แวร์ RuuviTag ตามที่ระบุไว้ในหน้า GitHub ที่เกี่ยวข้อง

- ตอนนี้คุณต้องระบุที่อยู่ MAC ของ RuuviTag. ของคุณ

- คัดลอกโปรแกรม Python ที่แนบมา เปิดด้วย IDLE สำหรับ Python 3

- เปลี่ยนที่อยู่ MAC ของ RuuviTag เป็นของคุณ จากนั้นบันทึกและเรียกใช้โปรแกรม

- อย่าลังเลที่จะปรับเปลี่ยนและเพิ่มประสิทธิภาพโปรแกรม โปรแกรมมาตามที่เป็นอยู่เพื่อใช้ในความเสี่ยงของคุณเองไม่มีหนี้สินใด ๆ สำหรับความเสียหายใด ๆ

ขั้นตอนที่ 2: อุปกรณ์และโปรแกรม

อุปกรณ์และโปรแกรม
อุปกรณ์และโปรแกรม
อุปกรณ์และโปรแกรม
อุปกรณ์และโปรแกรม
อุปกรณ์และโปรแกรม
อุปกรณ์และโปรแกรม
อุปกรณ์และโปรแกรม
อุปกรณ์และโปรแกรม

ดังที่กล่าวไว้ข้างต้น แนวคิดคือการสร้างระบบที่เรียบง่ายและราคาไม่แพงเพื่ออ่านข้อมูลจากบีคอนและแสดงค่าตัวเลขในชั่วพริบตา! HAT หรือแถบ LED ที่คล้ายกัน

ช่วงของค่าอุณหภูมิที่จะวัดด้วยระบบที่ใช้ RPi ส่วนใหญ่จะอยู่ระหว่าง - 50°C ถึง +80°C สำหรับความชื้นระหว่าง 0 ถึง 100% ดังนั้นการแสดงผลที่สามารถให้ค่าตั้งแต่ -100 ถึง +100 จะเพียงพอสำหรับการใช้งานส่วนใหญ่ ตัวเลขทศนิยมที่เล็กกว่า 128 สามารถแสดงเป็นเลขฐานสองที่มี 7 บิต (หรือ LED) ดังนั้นโปรแกรมจึงนำค่าอุณหภูมิและความชื้นจาก RuuviTag เป็นตัวเลข "float" และแปลงเป็นเลขฐานสองซึ่งจะแสดงบน blinkt!

ในขั้นแรก ตัวเลขจะถูกปัดเศษ วิเคราะห์ว่าบวก ลบ หรือศูนย์ แล้วแปลงเป็นจำนวนบวกโดยใช้ "abs" จากนั้นเลขทศนิยมจะถูกแปลงเป็นเลขฐานสอง 7 หลัก โดยทั่วไปจะเป็นสตริงของ 0 และ 1 ซึ่งได้รับการวิเคราะห์และแสดงบน 7 พิกเซลสุดท้ายของการกะพริบ!

สำหรับค่าอุณหภูมิ พิกเซลแรกจะระบุว่าค่านั้นเป็นค่าบวก (สีแดง) ศูนย์ (สีม่วงแดง) หรือค่าลบ (สีน้ำเงิน) การแสดงค่าความชื้นถูกตั้งค่าเป็นสีเขียว เพื่อลดความซับซ้อนในการเลือกปฏิบัติระหว่างค่าอุณหภูมิและความชื้น พิกเซลไบนารีจะถูกตั้งค่าเป็นสีขาวสำหรับอุณหภูมิและสีเหลืองสำหรับความชื้น เพื่อเพิ่มความชัดเจนของเลขฐานสอง พิกเซล "0" จะไม่ถูกปิดโดยสมบูรณ์ แต่มีการตั้งค่าที่อ่อนแอกว่าในสถานะ "1" มาก พริบตาเดียว! พิกเซลสว่างมาก คุณสามารถตั้งค่าความสว่างทั่วไปโดยเปลี่ยนพารามิเตอร์ "สว่าง"

โปรแกรมจะแสดงค่าและส่วนต่าง ๆ ของกระบวนการบนหน้าจอด้วย นอกจากนี้ คุณจะพบคำแนะนำในการพิมพ์ที่ปิดเสียง (#) หลายรายการ ฉันปล่อยไว้เพราะคุณอาจพบว่ามีประโยชน์ในการทำความเข้าใจกระบวนการหากเปิดเสียงไว้

ค่าอาจถูกเก็บไว้ในล็อกไฟล์

ขั้นตอนที่ 3: รหัสโปรแกรม

รหัสถูกดีบั๊กและปรับให้เหมาะสมเล็กน้อย ขณะนี้คุณอาจพบเวอร์ชัน 3 (20_03_2017)

' โปรแกรมนี้มีวัตถุประสงค์เพื่ออ่านค่าอุณหภูมิ ความชื้น และความดันจาก RuuviTag'' และเพื่อแสดงค่าอุณหภูมิและความชื้นเป็นเลขฐานสองบน Pimorini กะพริบตา! หมวก. '' ' ขึ้นอยู่กับตัวอย่าง print_to_screen.py จากไลบรารี ruuvitag ที่ github ' ต้องใช้ Pi Zero W, Pi 3 หรือ RPi อื่นใดที่ติดตั้งบลูทูธและติดตั้งไลบรารีที่จำเป็นทั้งหมด'

เวลานำเข้า

นำเข้าระบบปฏิบัติการจากวันที่เวลานำเข้าวันที่เวลา

จาก 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 แสดงถึงเครื่องหมายพีชคณิตสำหรับตัวบ่งชี้ pixel

ถ้า (r>0): vz = 1 # บวก elif (r<0): vz= 2 # ลบอื่น: vz= 0 # ศูนย์ # พิมพ์ (vz) i = abs(r) #print (i)

# แปลงเป็นเลขฐานสองแบบสัมบูรณ์ 7 หลัก

i1 = i + 128 # for i ส่งผลให้เลขฐานสอง 8 หลักเริ่มต้นด้วย 1 # พิมพ์ (i1)

b = "{0:b}".format(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, พิกเซล ", f) อื่นๆ: set_pixel (f, r0, g0, b0) # print("nil")

# ตั้งค่าพิกเซลตัวบ่งชี้

ถ้า (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}".format(i1)

# พิมพ์ (ข)

b0 = str (ข)

b1 = b0[1:8] #ตัดทอนบิตแรก

พิมพ์ ("เลขฐานสอง: ", b1)

# ตั้งค่าพิกเซลเป็นกะพริบ!

# ตั้งค่าเลขฐานสองเป็นพิกเซล

สำหรับ h ในช่วง (0, 7): f = (h+1) ถ้า (b1[h] == "1"): set_pixel (f, r1, g1, b1) อื่น: # ปิดเสียง 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' # เปลี่ยนเป็นที่อยู่ mac ของอุปกรณ์ของคุณเอง

พิมพ์ ('เริ่มต้น')

เซ็นเซอร์ = RuuviTagSensor(mac)

ในขณะที่จริง:

ข้อมูล = sensor.update()

line_sen = str.format('เซนเซอร์ - {0}', mac)

line_tem = str.format('อุณหภูมิ: {0} C', data['temperature']) line_hum = str.format('ความชื้น: {0} %', data['humidity']) line_pre = str.format('ความดัน: {0}', ข้อมูล['ความดัน'])

พิมพ์()

# แสดงอุณหภูมิในพริบตา! ba = str.format('{0}', data['temperature']) bt = float (ba) print (bt, " °C") temp_blinkt (bt) print()

time.sleep (10) # แสดงอุณหภูมิ 10 วินาที

#แสดงความชื้นในพริบตา!

bg = str.format('{0}', data['humidity']) bh = float (bg) พิมพ์ (bh, " %") hum_blinkt (bh) พิมพ์ ()

# ล้างหน้าจอและพิมพ์ข้อมูลเซ็นเซอร์ไปที่หน้าจอ

os.system('clear') print('กด Ctrl+C เพื่อออก\n\n') พิมพ์ (str(datetime.now())) พิมพ์ (line_sen) พิมพ์ (line_tem) พิมพ์ (line_hum) พิมพ์ (line_pre) พิมพ์('\n\n\r…….')

#รอสักครู่แล้วเริ่มใหม่อีกครั้ง

ลอง: time.sleep(8) ยกเว้น KeyboardInterrupt: # เมื่อกด Ctrl+C การดำเนินการของ while loop หยุดลง print('Exit') clear() show () break

แนะนำ: