Revision [22120]
This is an old revision of SensorPuck made by ToBo on 2015-10-17 02:48:35.
Sensor Puck
"The sensor puck demonstrates Silicon Laboratories optical sensor (Si1147M01 Si1147-M01) RH and temperature sensor
Si7021 and low power MCU (EFM32G210 Gecko). The data is broadcast using a Bluetooth Low Energy (BLE)
module and can be displayed on a mobile device (Apple iOS or Android) that supports the BLE protocol.
By using broadcast mode, a connection does not have to be established, making it possible to display the data
from several modules at the same time."
Microcontroller EFM32G210
http://www.silabs.com/products/sensors/Pages/environmental-biometric-sensor-puck.aspx
# Code based on the implementation from http://amperture.com/?p=23
# With additions by Andreas Tobola, October 2015, http://tnotes.de/SensorPuck
import subprocess
import os
proc = subprocess.Popen(['hcidump --raw'], stdout=subprocess.PIPE, shell=True)
hrmStateStr = ['Idle', 'No Signal', 'Acquiring', 'Active', 'Invalid', 'Error']
while True:
line = proc.stdout.readline()
if ">" not in line:
hexarray = line.split()
N = len(hexarray)
os.system('clear')
if N==14:
print "== Enviromental Mode ==\n"
# Humidity uint16 deciprecent
humidity = (int(hexarray[6], 16) << 8) + int(hexarray[5], 16)
humidity = float(humidity)/10
# Temperature int16 decidegrees (can be negative -> twos complement)
temp = (int(hexarray[8], 16) << 8) + int(hexarray[7], 16)
temp = float(temp)/10
# Ambient Light uint16 lux/2
amblight = (int(hexarray[10], 16) << 8) + int(hexarray[9], 16)
amblight = float(amblight)/2
# UV Index uint8 index
uvidx = int(hexarray[11], 16)
# Battery Voltage uint8 decivolts
vbat = int(hexarray[12], 16)
vbat = float(vbat)/10
print "Humidity: %.1f " %humidity
print "Temperature: %.1f C" %temp
print "Ambient light: %.1f Lux" %amblight
print "UV index: %.1f" %uvidx
print "Battery voltage: %.1f V" %vbat
elif N==18:
print "== Biometric Mode ==\n"
# HRM State uint8 none
hrmState = int(hexarray[5], 16)
print "HRM state: " + hrmStateStr[hrmState]
# HRM Rate uint8 bpm
pulseRate = int(hexarray[6], 16)
print "Pulse rate: " + str(pulseRate) + " bpm"
# HRM Sample Array uint16[5] none
# ...
print " "
# With additions by Andreas Tobola, October 2015, http://tnotes.de/SensorPuck
import subprocess
import os
proc = subprocess.Popen(['hcidump --raw'], stdout=subprocess.PIPE, shell=True)
hrmStateStr = ['Idle', 'No Signal', 'Acquiring', 'Active', 'Invalid', 'Error']
while True:
line = proc.stdout.readline()
if ">" not in line:
hexarray = line.split()
N = len(hexarray)
os.system('clear')
if N==14:
print "== Enviromental Mode ==\n"
# Humidity uint16 deciprecent
humidity = (int(hexarray[6], 16) << 8) + int(hexarray[5], 16)
humidity = float(humidity)/10
# Temperature int16 decidegrees (can be negative -> twos complement)
temp = (int(hexarray[8], 16) << 8) + int(hexarray[7], 16)
temp = float(temp)/10
# Ambient Light uint16 lux/2
amblight = (int(hexarray[10], 16) << 8) + int(hexarray[9], 16)
amblight = float(amblight)/2
# UV Index uint8 index
uvidx = int(hexarray[11], 16)
# Battery Voltage uint8 decivolts
vbat = int(hexarray[12], 16)
vbat = float(vbat)/10
print "Humidity: %.1f " %humidity
print "Temperature: %.1f C" %temp
print "Ambient light: %.1f Lux" %amblight
print "UV index: %.1f" %uvidx
print "Battery voltage: %.1f V" %vbat
elif N==18:
print "== Biometric Mode ==\n"
# HRM State uint8 none
hrmState = int(hexarray[5], 16)
print "HRM state: " + hrmStateStr[hrmState]
# HRM Rate uint8 bpm
pulseRate = int(hexarray[6], 16)
print "Pulse rate: " + str(pulseRate) + " bpm"
# HRM Sample Array uint16[5] none
# ...
print " "
Siehe auch • • • • • • • •