driver_mlx.py 1.88 KB
# -*-coding: utf-8 -*-

#import smbus
import time
import math
import subprocess
#subprocess.check_output(['i2cget', 'y 1 0x5a 0x06'])

def get_data(debug_level=0):
    """Lecture d'une trame du capteur MLX90614
Retourne un tuple, dans l'ordre: Un code de validité, la température du ciel en °C, la température du boitier en °C, octet brut temperature du ciel,octet brut temperature du boitier
Exemple:

import driver_mlx ; driver_mlx.get_data(2)
"""
    add_i2c=0x5a
    #bus = smbus.SMBus(1)
    err=0
    k=0
    sortie=False
    while (sortie==False):
        err=0
        try :
            #raw_data_ciel = bus.read_word_data(add_i2c,0x07)
            #raw_data_boit = bus.read_word_data(add_i2c,0x06)
            str_data_ciel = subprocess.check_output(['i2cget', '-y','1',str(add_i2c),'0x07','w'])
            str_data_boit = subprocess.check_output(['i2cget', '-y','1',str(add_i2c),'0x06','w'])
            raw_data_ciel = int(str_data_ciel[0:6],16)
            raw_data_boit = int(str_data_boit[0:6],16)
        #except IOError:
        except:
            err=1
            raw_data_ciel=0
            raw_data_boit=0
        if ((err==0) or (k>5)):
            sortie=True
        else:
            time.sleep(0.1)
        k+=1
    tmp_ciel = raw_data_ciel*0.02-273.15
    tmp_boit = raw_data_boit*0.02-273.15
    
    if (debug_level==2):
        print (" la valeur binaire de température ciel vaut : {}".format(raw_data_ciel))
        print (" la valeur binaire de température boitier vaut : {}".format(raw_data_boit))
    if (debug_level==1):
        print ("la température de l'objet vaut : {}".format(tmp_ciel));
        print ("\n")
        print ("la température du boitier vaut : {}".format(tmp_boit));
        if tmp_ciel < -16:
            print ("Le ciel est clair")
        else:
            print ("le ciel est nuageux")
        
    return err,tmp_ciel,tmp_boit,raw_data_ciel,raw_data_boit