from machine import Pin, I2C
from time import sleep_ms
# fonction qui prend en valeur temp_h et temp_l des registres du capteur
# et renvoie la température en Celsius
def temp_data_to_celsius(temp_h, temp_l):
# convertir la chaine d'octets en valeur décimale
temp_h = temp_h[0] # int
temp_l = temp_l[0] # int
temp_h = temp_h << 8 # int
temp_data = temp_h | temp_l # int (16 bits)
if temp_data & 0b1000000000000000:
temp_data = -((temp_data ^ 0b1111111111111111) + 1)
temp_c = (temp_data / 340.0) + 36.53
return temp_c
# Adresse I2C du Capteur MPU6050
MPU6050_ADDR = 0x68
# Adresse des registres TEMP_OUT_H
MPU6050_TEMP_OUT_H = 0x41
# Adresse des registres TEMP_OUT_L
MPU6050_TEMP_OUT_L = 0x42
# Adresse du registre d'activation du capteur
MPU6050_PWR_MGMT_1 = 0x6B
# Initialisation du BUS I2C
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
# Activer le capteur
i2c.writeto_mem(MPU6050_ADDR, MPU6050_PWR_MGMT_1, bytes([0x00]))
while True:
# Lire les deux registres de température
temp_h = i2c.readfrom_mem(MPU6050_ADDR, MPU6050_TEMP_OUT_H, 1)
temp_l = i2c.readfrom_mem(MPU6050_ADDR, MPU6050_TEMP_OUT_L, 1)
# ---------- AJOUT DES PRINTS (DEBUG) ----------
print("temp_h :")
print(" type :", type(temp_h))
print(" valeur hex :", "0x{:02X}".format(temp_h[0]))
print(" valeur bin :", "{:08b}".format(temp_h[0]))
print("temp_l :")
print(" type :", type(temp_l))
print(" valeur hex :", "0x{:02X}".format(temp_l[0]))
print(" valeur bin :", "{:08b}".format(temp_l[0]))
# ----------------------------------------------
# Extraire la température
temp_c = temp_data_to_celsius(temp_h, temp_l)
# Affichage température
print("Température en Celsius :", "{:.2f}".format(temp_c))
print("---------------------------------------")
sleep_ms(10000)