如何用Python字典将10个以上传感器ROM地址映射为Sensor-1类自定义名称
传感器ROM映射功能实现方案
1. 核心实现思路
通过Python字典定义ROM地址和自定义传感器名的映射关系,新增串口数据解析逻辑提取ROM地址匹配映射即可,无需修改Arduino侧的输出逻辑。
2. 完整修改后代码
import csv from time import time import serial # --------------------------配置区域开始-------------------------- # 1. 串口配置 SERIAL_PORT = "COM12" BAUD_RATE = 57600 # 2. ROM-传感器名称映射字典,按实际传感器ROM添加即可,支持无上限扩展 ROM_SENSOR_MAP = { "28 46 04 1F 0D 00 00 74": "Sensor-1", "第二个传感器的ROM地址": "Sensor-2", "第三个传感器的ROM地址": "Sensor-3", # 继续按格式添加剩余传感器即可 "第十个传感器的ROM地址": "Sensor-10" } # 3. CSV文件路径 CSV_PATH = "Sensor_data.csv" # --------------------------配置区域结束-------------------------- # 初始化串口 ser = serial.Serial(SERIAL_PORT, baudrate=BAUD_RATE, bytesize=8, timeout=1) # 打开CSV文件,首次写入自动添加表头 with open(CSV_PATH, "a+", encoding="utf-8", newline="") as f: writer = csv.writer(f, delimiter=',') # 移动文件指针到开头,判断是否为空文件,为空就写入表头 f.seek(0) if len(f.readlines()) == 0: writer.writerow(["时间戳", "传感器名称", "温度值", "原始数值1", "原始数值2"]) while True: s = ser.readline().decode().rstrip() if not s: continue # 解析串口数据 try: # 拆分ROM地址和数值部分 rom_part = s.split("ROM = ")[1].split(" value : ")[0].strip() value_part = s.split(" value : ")[1].strip().split(" ") # 匹配传感器名称,匹配不到默认返回Unknown-Sensor避免报错 sensor_name = ROM_SENSOR_MAP.get(rom_part, "Unknown-Sensor") # 构造写入行 row = [int(time()), sensor_name] + value_part print(row) writer.writerow(row) f.flush() except IndexError: # 解析失败跳过无效数据行,避免程序崩溃 continue
3. 注意事项
- 映射字典里的ROM地址要和Arduino输出的ROM字符串完全一致,包括空格,避免匹配失败
- 后续新增传感器直接在
ROM_SENSOR_MAP里加键值对即可,无需修改其他逻辑 - 代码增加了异常捕获逻辑,遇到串口输出的异常格式数据会自动跳过,不会中断运行
内容的提问来源于stack exchange,提问作者Khangesh
相关产品推荐
相关产品推荐

