You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python读取MLX90393的温度值及温度原始数据转换问题

解决MLX90393温度原始数据转换错误的问题

嘿,我来帮你搞定这个温度转换的坑!你现在磁场数据正常,唯独温度算出来离谱,核心问题出在字节顺序搞反了,再加上没套用正确的温度转换公式,咱们一步步来修正:

1. 先搞懂MLX90393的数据返回顺序

根据手册,当你发送0x4F命令读取温度+XYZ磁场时,返回的9字节数据结构是:

  • 字节0:状态字节
  • 字节1:温度低字节(T_LSB)
  • 字节2:温度高字节(T_MSB)
  • 字节3:X磁场低字节
  • 字节4:X磁场高字节
  • ...(Y、Z磁场以此类推)

你之前的代码把温度的高低字节搞反了,用data[1] * 256 + data[2]计算,相当于把低字节当高字节来用,自然得到完全错误的原始值。

2. 正确的温度转换公式

MLX90393的温度原始值是14位补码,每1个LSB对应0.0625℃,转换为实际摄氏温度的公式是:

实际温度(℃) = (原始温度值 / 16) - 273.15

3. 修正后的代码

把字节顺序调换,再套用公式,修改后的代码如下:

data = bus.read_i2c_block_data(mlx90393_address, 0x4F, 9)

# 修正温度读取与转换
temp_raw = data[2] * 256 + data[1]  # 高字节在前,低字节在后
if temp_raw > 32767 :
    temp_raw -= 65536  # 转换为有符号整数
temp_celsius = (temp_raw / 16) - 273.15
print(f"当前温度: {temp_celsius:.2f} °C")

# 磁场部分你的代码是对的,保留即可
xMag = data[4] * 256 + data[3]
if xMag > 32767 :
    xMag -= 65536
print(f"X轴磁场: {xMag}")
yMag = data[6] * 256 + data[5]
if yMag > 32767 :
    yMag -= 65536
print(f"Y轴磁场: {yMag}")
zMag = data[8] * 256 + data[7]
if zMag > 32767 :
    zMag -= 65536
print(f"Z轴磁场: {zMag}")

验证一下

比如环境温度是22℃时,对应的原始值大概是(22 + 273.15) * 16 ≈ 4722(十六进制0x1282),此时data[1]是0x82,data[2]是0x12,调换后计算得到的温度是4722/16 -273.15 ≈21.98℃,和实际环境温度一致。

内容的提问来源于stack exchange,提问作者Marco Bobinger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 19:39:06