戈尔巴乔.夫 2023-10-14 22:32 采纳率: 0%
浏览 12

MicroPython ESP32 读取DS18B20温度CRC error

使用esp32读取DS18B20时一直遇到如下问题,thonny提示如下错误,有没有懂的帮忙解决,谢谢。

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-15 08:56
    关注

    【以下回答由 GPT 生成】

    由于CRC校验错误可能是由于数据传输错误引起的,可以尝试以下解决方案:

    1. 确保DS18B20传感器连接正确:首先,确保DS18B20传感器正确连接到ESP32的引脚。可以检查引脚连接是否正确,以及传感器是否损坏。

    2. 延长转换时间:在代码中,使用了time.sleep_ms(750)来等待温度转换完成。尝试增加等待时间以确保转换被正确完成。可以将等待时间增加到1000毫秒(1秒)或更长的时间。

    3. 使用电源滤波电容:在DS18B20传感器的电源线上添加一个电容可以帮助稳定电源,减少传输错误。可以尝试在VDD线上添加一个100nF的电容。

    4. 使用机械重试逻辑:在读取温度数据之前,可以添加重试逻辑。例如,可以设置一个最大重试次数,当发生CRC错误时,可以尝试重新读取温度数据,直到达到最大重试次数或成功读取数据。可以使用一个for循环和try-except语句来实现重试逻辑。

    下面是一个修改后的代码示例,其中添加了重试逻辑和延长等待时间的操作:

    from machine import Pin
    import onewire
    import ds18x20
    import time
    
    ds = ds18x20.DS18X20(onewire.OneWire(Pin(4)))
    
    def ds18b20_read():
        roms = ds.scan()
        ds.convert_temp()
        time.sleep_ms(1000)  # 增加等待时间
        for rom in roms:
            retry = 0
            max_retry = 3  # 最大重试次数
            while retry < max_retry:
                try:
                    temp = ds.read_temp(rom)
                    break
                except Exception as e:
                    print("CRC error, retrying...")
                    retry += 1
            else:
                print("Failed to read temperature")
                temp = None
        return temp
    
    def main():
        while True:
            temperature = ds18b20_read()
            if temperature is not None:
                print("Temperature: %.2f" % temperature)
            time.sleep(2)
    
    if __name__ == "__main__":
        main()
    

    请试试这些改进的方法,看看是否可以解决CRC校验错误的问题。如果仍然存在问题,请确保您的硬件连接正确,并尝试更新MicroPython固件和库版本。如果问题仍然存在,您可能需要进一步检查硬件故障或寻求专业的技术支持。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 10月14日

悬赏问题

  • ¥15 创建一个数据库(要创建的表和记事本的代码截图))
  • ¥15 有没有整苹果智能分拣线上图像数据
  • ¥20 有没有人会这个东西的
  • ¥15 cfx考虑调整“enforce system memory limit”参数的设置
  • ¥30 航迹分离,航迹增强,误差分析
  • ¥15 Chrome Manifest扩展引用Ajax-hook库拦截请求失败
  • ¥15 用Ros中的Topic通讯方式控制小乌龟的速度,走矩形;编写订阅器代码
  • ¥15 LLM accuracy检测
  • ¥15 pycharm添加远程解释器报错
  • ¥15 如何让子窗口鼠标滚动独立,不要传递消息给主窗口