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

Python实现DS18B20传感器温度数据写入文本文件故障求助

DS18B20温度写入文件故障排查

已确认的故障点

  • file.write(id,t) 语法错误:Python的文件write方法仅支持传入单个字符串参数,直接传入id和t两个变量会触发参数数量不匹配异常,需先将两个变量格式化为字符串再传入
  • time.sleep(10.0) 缩进错误:该行当前缩进层级在while循环之外,代码首次执行完循环后会直接触发语法异常,且被空的except语句捕获吞掉无报错
  • 文件写入逻辑位置错误:写文件代码放在了if "YES"判断外,若传感器读取失败未进入判断分支,t变量未定义会直接报错
  • 文件打开模式问题:每次循环都用"w"(覆盖写入)模式打开文件,多个传感器的场景下最终只会保留最后一个传感器的读数
  • 路径匹配规则问题:glob匹配路径写为28-0*,若传感器ID遵循通用规则为28-00xxxx格式,可能出现匹配不到设备的问题
  • 空异常捕获问题:except: pass会吞掉所有报错,无法定位问题根源
  • 变量名不规范:使用id作为变量名,覆盖了Python内置的id()函数,属于不规范的写法,可能引发隐藏问题

修复后代码示例

#!/usr/bin/env python
import glob
import time
from datetime import datetime

while True:
    # 先收集所有传感器读数
    temp_records = []
    # 匹配规则和参考代码对齐,可根据实际传感器ID调整
    for sensor in glob.glob("/sys/bus/w1/devices/28-00*/w1_slave"):
        sensor_id = sensor.split("/")[5]
        try:
            with open(sensor, "r") as f:
                data = f.read()
            if "YES" in data:
                _, _, reading = data.partition(' t=')
                t = float(reading) / 1000.0
                # 格式化要写入的内容,加换行符分隔不同传感器
                temp_records.append(f"{sensor_id} {t:.1f}\n")
        except Exception as e:
            # 打印错误方便排查,不需要可以注释
            print(f"读取传感器{sensor_id}失败:{str(e)}")
            continue
    # 所有读数收集完成后一次性写入文件,用w模式每次保存最新读数,要历史记录改成a
    if temp_records:
        with open("/var/tmp/temp.txt", "w", encoding="utf-8") as f:
            f.writelines(temp_records)
    # 缩进对齐,放在while循环内
    time.sleep(10.0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 06:15:04