driver_mlx.py
1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# -*-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