首页 > 解决方案 > ESP32 i2c GY-906 0xFF 1037.55 响应,温度传感器

问题描述

我正在尝试在运行来自 loboris 的 micropython 的ESP32 TTGO T 显示器上运行以下代码。(它是 esp32 预装了 TTGO Display 的显示驱动程序)我通过 i2c 连接了一个 GY-906 温度传感器进行测试。i2c.scan() 在 0x5a [80] 上发现它没有问题,就像它应该的那样,但是当我请求温度数据时,响应总是 0xFF 而不是正确的温度读数。

当我在 WeMos D1 上运行完全相同的代码时(唯一的区别是引脚号),我得到了返回的温度数据。我附上了两个逻辑分析仪屏幕截图,希望有人能告诉我我需要做些什么不同的事情。两者都直接从 3.3、gnd 和 2 个 i2c 引脚接线。

我尝试过的事情:在 SDA、SLC(10k、1k、100)上添加上拉电阻。切换到不同的 i2c 引脚。结果似乎是一样的。我错过了什么?我不知道的地方应该有一个电阻器吗?其他硬件?截图让我觉得GY906正在响应,只是响应值错误。

主要代码

import temp_sensor
Pin = machine.Pin
I2C = machine.I2C


i2c = machine.I2C(0, scl=Pin(22), sda=Pin(21), freq=100000)
temp1 = temp_sensor.Temp.init(i2c)
print(temp1.read_object_temp())
time.sleep(1)
print(temp1.read_object_temp())
time.sleep(1)
print(temp1.read_object_temp())
time.sleep(1)
print(temp1.read_object_temp())

temp_sensor.py

import mlx90614 ##From https://github.com/mcauser/micropython-mlx90614

class Temp():
    
    def init(i2c):
        try:
            sensor = mlx90614.MLX90614(i2c)
        except:
            print('couldnt connect to an i2c temp sensor')
            sensor = False
        else:
            print('temp found')
            #return sensor
        finally:
            return sensor

坏 esp32 TTGO T 显示器: esp32 - 不工作,0xFF 好 8266: esp8266 - 工作,返回温度读数

标签: i2cmicropython

解决方案


对于从 gy-906 或 MXL90614 传感器接收 1037.55 响应的任何人,这将转换为传感器的 0xFF、0xFF 或全高(1)。当传感器不了解如何响应时,这似乎会发生。(谢谢@jasonharper 帮助我理解这一点)

以下是数学的工作原理:

  • 十进制的 0xFF、0xFF 为 65535。
  • 传感器分辨率为 1/50 度,这意味着您将 65535 x 0.02 除以转换为开尔文或 1310.7 (K)
  • 开尔文到摄氏度(减去 237.15)得到 1037.55 C
  • 摄氏到华氏为您提供 1899.59 F

最重要的是,您的传感器打嗝是因为它不喜欢写入和读取之间的停止位,或者您的 I2C 总线有问题,协议执行请求错误或者您有布线问题(长度或电线量规或连接等)。如果是我喜欢的协议,看看最近是否有人更新了 I2C 系统库,如果可能的话尝试不同的版本。

我追踪这个问题好几天了。幸运的是,我有许多不同的支持 MicroPython 的芯片,并且能够将其缩小到机器的旧版本。I2C 库在上面添加了那个愚蠢的“停止”。

我在 amazon 上购买了 10 美元的协议分析器来制作上面的图像,并尝试在其中的每一个上加载代码:Wemos D1、HitLego ESP32S 和 TTGO T-Display。通过尝试每个代码,我能够将其范围缩小到只有 T-Display 不工作,这需要一个定制的旧固件版本才能让 ST7789 显示器工作。下一步是尝试从 loboris 更新和重新编译显示库,以使用最新的 Micropython 固件。如果我成功了,我会在下面回复。


推荐阅读