如何在Raspberry Pi上获取已连接DS18B20传感器的详细信息?
当然可以!DS18B20这类1-Wire协议的传感器本身就把型号、序列号等身份信息存在了自身的ROM芯片里,树莓派完全能直接读取这些数据,刚好可以整合到你的LCD显示程序里。下面我一步步给你讲怎么做:
DS18B20依赖1-Wire协议工作,所以得先让树莓派开启这个功能:
- 打开终端,输入
sudo raspi-config - 依次选择「Interface Options」→「1-Wire」→ 确认启用,然后重启树莓派。
重启后,树莓派会自动识别DS18B20,相关设备文件会放在/sys/bus/w1/devices/目录下。你可以用命令查看:
ls /sys/bus/w1/devices/
输出里会有一个以28-开头的目录(28就是DS18B20的专属家族代码),这个目录名就是传感器的唯一ID(比如28-00000abcdef)。
有两种方式可以获取这些信息,一种是直接读系统文件,另一种是用Python库快速集成到你的程序里:
方法一:直接读取系统文件(适合快速验证)
进入传感器对应的目录:
cd /sys/bus/w1/devices/28-XXXXXXXXXXXX
(把上面的XXXXXXXXXXXX换成你实际看到的ID)
然后查看name文件,里面直接包含了传感器的家族码和唯一序列号:
cat name
另外,DS18B20的家族码0x28对应的就是德州仪器(原达拉斯半导体)的这款数字温度传感器,通过这个代码就能确定制造商和型号。
方法二:用Python库读取(适合集成到你的LCD程序)
如果你想用Python获取信息并显示到LCD上,推荐用w1thermsensor库,它封装了所有1-Wire传感器的操作逻辑,能直接返回型号、序列号等信息。
首先安装库:
pip install w1thermsensor
然后写一段测试代码:
from w1thermsensor import W1ThermSensor # 获取所有连接的DS18B20传感器 sensors = W1ThermSensor.get_available_sensors([W1ThermSensor.THERM_SENSOR_DS18B20]) for sensor in sensors: print(f"传感器型号: {sensor.model}") print(f"制造商家族码: 0x{sensor.family_code:02X}") print(f"唯一序列号: {sensor.id}") print(f"当前温度: {sensor.get_temperature()}°C")
运行这段代码,就能看到你需要的所有信息,直接把这些输出逻辑替换成LCD显示的代码就行。
假设你用的是常见的16x2 I2C LCD,用RPLCD库控制的话,这里给你一个简单的整合示例:
from w1thermsensor import W1ThermSensor from RPLCD.i2c import CharLCD # 初始化LCD(I2C地址通常是0x27或0x3F,根据你的模块调整) lcd = CharLCD('PCF8574', 0x27) # 获取第一个连接的DS18B20传感器信息 sensor = W1ThermSensor() # 在LCD上显示信息 lcd.clear() lcd.write_string(f"Model: {sensor.model}") lcd.cursor_pos = (1, 0) lcd.write_string(f"ID: {sensor.id[:8]}...") # 因为ID太长,只显示前8位加省略号
这样传感器一连接,程序启动后就会自动在LCD上显示型号和序列号啦。
- 如果你的树莓派连接了多个DS18B20,上面的Python代码会自动识别每个传感器的独立信息,适合多传感器场景。
- DS18B20的家族码是固定的
0x28,对应制造商是德州仪器(TI),型号就是DS18B20,所以通过家族码就能直接确定这些信息。
内容的提问来源于stack exchange,提问作者ALFA

