i2c - 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
解决方案
对于从 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 固件。如果我成功了,我会在下面回复。
推荐阅读
- git - 压缩/修复 GIT 中的空提交
- scala - 比较两个 RDDS 中的数据
- angular - RxJS ReplaySubject 没有更新 Angular Zone
- opengl - lwjgl 模型不在其中心旋转
- appium - 我们可以在 ios 设备上使用 Appium 自动化内置相机功能吗
- sql - SQL / Postgresql如何对列进行分组但根据某些条件找到另一列的平均值
- jupyter-notebook - Jupyter Notebook 对象没有属性
- oracle - OCI ObjectStorage 需要 CopyObject 的权限吗?
- php - 如何使网站对用户 PHP 不可用?
- vb.net - 无法在 Zebra 打印机上打印表格