Raspberry Pi in IoT

Raspberry Pi in IoT_第1张图片     Raspberry Pi in IoT_第2张图片

    Sensor                                                       Raspberry Pi

obtain and convert raw values 

mport pexpect
import sys
import time

bluetooth_adr = "54:6C:0E:52:FF:08"

def floatfromhex(h):
    t = float.fromhex(h)
    if t > float.fromhex('7FFF'):
       t = -(float.fromhex('FFFF') - t)
       pass
    return t


def calcTmpTarget(objT,ambT):
    m_tmpAmb = ambT/128.0
    Vobj2 = objT * 0.00000015625
    Tdie2 = m_tmpAmb + 273.15
    S0 = 6.4E-14
    a1 = 1.75E-3
    a2 = -1.678E-5
    b0 = -2.94E-5
    b1 = -5.7E-7
    b2 = 4.63E-9
    c2 = 13.4
    Tref = 298.15
    S = S0 * (1+a1*(Tdie2-Tref)+a2*pow((Tdie2-Tref),2))
    Vos = b0 + b1 *(Tdie2 - Tref) +b2*pow((Tdie2-Tref),2)
    fObj = (Vobj2 - Vos) + c2*pow((Vobj2 - Vos),2)
    tObj = pow(pow(Tdie2,4) + (fObj/S),.25)
    tObj = (tObj - 273.15)
    return "%.2f" % tObj

tool = pexpect.spawn('gatttool -b ' + bluetooth_adr + ' --interactive')
tool.expect('.*\[LE\]>', timeout=600)
print ("Preparing to connect. You might need to press the side button...")
tool.sendline('connect')
tool.expect('Connection successful.*\[LE\]>')

tool.sendline('char-write-cmd 0x27 01')
tool.expect('\[LE\]>')

print ("please input the number of loops you want")
n = input()
threshold = 83.0
for i in range(1,int(n)) :
    tool.sendline('char-read-hnd 0x24')
    tool.expect('descriptor: .*')
    rval = tool.after.split()
    objT = floatfromhex(str(rval[2] + rval[1])[2:6])
    ambT = floatfromhex(str(rval[4] + rval[3])[2:6])
    IRtemp = calcTmpTarget(objT,ambT)
    IRtemp2 = (float(IRtemp) - 32) * 5 / 9
    if(float(IRtemp) > threshold):
       print ( "the temperature is too high")
    print (bluetooth_adr, ": the Fahrenheit is :" , IRtemp, " the Celsius is %.2f:" % IRtemp2)

    time.sleep(5)

using the BluePy Library to Interact with SensorTag 

from bluepy.btle import BTLEException
from bluepy import sensortag
from bluepy.sensortag import SensorTag
import time
import datetime

SENSORTAG_ADDRESS = "54:6C:0E:52:FF:08"

def enable_sensors(tag):
    tag.IRtemperature.enable()
    tag.barometer.enable()
    tag.lightmeter.enable()
    tag.gyroscope.enable()
    time.sleep(1.0)

def disable_sensors(tag):
    tag.IRtemperature.disable()
    tag.lightmeter.disable()
    tag.barometer.disable()
    tag.gyroscope.disable()

def get_readings(tag):

    try:
        enable_sensors(tag)
        readings = {}
        readings["ir_temp_amb"],readings["ir_temp_obj"] = tag.IRtemperature.read()
        readings["baro_temp"],readings["pressure"] = tag.barometer.read()
        readings["light"] = tag.lightmeter.read()
        readings["gyro_x"],readings["gyro_y"],readings["gyro_z"] = tag.gyroscope.read()
        readings = {key: round(value,2) for key, value in readings.items()}
        return readings

    except BTLEException as e:

  print ("Unable to take sensor readings.")
        print(e)
        return {}

def  reconnect(tag):
    try:
        tag.connect(tag.deviceAddr,tag.addrType)

    except Exception as e:
        print ("Unable to reconnect to SensorTag.")
        raise e

print('Connecting to {}'.format(SENSORTAG_ADDRESS))
tag = SensorTag(SENSORTAG_ADDRESS)

while True:
   
    readings = get_readings(tag)
   
    if not readings:
        print ("SensorTag disconnected. Reconnecting.")
        reconnect(tag)
        continue
   
    print("Time:\t{}".format(datetime.datetime.now()))
    print("Temperature: ", readings["ir_temp_obj"])
    print("Pressure: ",readings["pressure"])
    print("Light: ",readings["light"])
    print("Gyro_x: ",readings["gyro_x"])
    print("Gyro_y: ",readings["gyro_y"])
    print("Gyro_z: ",readings["gyro_z"])
    print("--------------------------------------")

Sending an MQTT Message to Another Machine

To subscribe to a new MQTT topic on the Raspberry Pi:

( to get your IP address, you can use the command "ifconfig"

mosquitto_sub -h 192.168.2.16 -t pi/test

To publish a message using the following command:

mosquitto_pub -h 192.168.2.16 -t pi/test -m “Wakanda Forever!”

Using python instead:

First,create a text file called config.ini and save it to your Rasberry Pi:

[MQTT]

host = 192.168.2.26
port = 1883
prefix = test/topic

Then:

import paho.mqtt.client as mosquitto
import ConfigParser
import time

config_file = "config.ini"

if __name__ == "__main__":
  try:
     config = ConfigParser.ConfigParser()
     config.readfp(open(config_file,"r"))
  except IOError as e:
     print e
 
  try:
    host = config.get("MQTT","host")
  except ConfigParser.NoOptionError:
    host = os.getenv("MQTT_BROKER","localhost")
  try:
    port = config.getint("MQTT","port")
  except ConfigParser.NoOptionError:
    port = int(os.getenv("MQTT_BROKER","1883"))
  try:
    prefix = config.get("MQTT","prefix")
  except ConfigParser.NoOptionError:
    prefix = "test/topic"

topic = prefix
mqtt = mosquitto.Mosquitto()
mqtt.connect(host)
mqtt.loop_start()

while True:
    payload = "Hello World!"
    print (topic,payload)
    mqtt.publish(topic,payload,qos=0,retain=False)
    time.sleep(5)

mqtt.loop_stop()
mqtt.disconnect()


  

 use python yourname.py to run

你可能感兴趣的:(Summer,Camp,in,Ulster)