用普中ESP32开发板,板载DS18B20温度传感器、4位数码管,只有三根外接线,如图:- from machine import Pin
- import time
- import tm1637
- import onewire
- import ds18x20
- # 定义数码管控制对象
- smg = tm1637.TM1637(clk=Pin(16), dio=Pin(17))
- # DS18B20数据线连接到GPIO15
- ds_pin = Pin(15)
- ds_sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin))
- # 扫描DS18B20设备
- roms = ds_sensor.scan()
- print('发现DS18B20设备:', roms)
- def display_temperature(temp):
- """显示整数温度,格式为 ±XXC 或 ±XC,共3位"""
- temp_int = round(temp) # 四舍五入到整数
-
- if -99 <= temp_int <= 999:
- # 构造显示字符串
- temp_str = str(temp_int) + 'C'
- if len(temp_str) < 4: # 例如: "5C"
- display_str = ' ' + temp_str
- elif len(temp_str) == 4: # 例如: "-15C"
- display_str = temp_str
- smg.show(display_str)
- else:
- smg.show(' Err') # 错误信息也保持4位
- # 程序入口
- if __name__ == "__main__":
- if not roms:
- print("未找到DS18B20设备")
- smg.show(' NO') # 保持4位显示
- else:
- while True:
- try:
- # 启动温度转换
- ds_sensor.convert_temp()
- # 等待转换完成
- time.sleep_ms(750)
-
- # 读取温度
- for rom in roms:
- temp = ds_sensor.read_temp(rom)
- print(f'原始温度: {temp}°C')
-
- # 在数码管上显示温度
- display_temperature(temp)
-
- except Exception as e:
- print(f'读取温度失败: {e}')
- smg.show(' Err') # 保持4位显示
-
- # 延时2秒后再次读取
- time.sleep(2)
复制代码 Shell栏显示如下: 原始温度: 10.4375°C原始温度: 10.4375°C
原始温度: 10.4375°C
原始温度: 10.375°C
原始温度: 10.4375°C
原始温度: 10.375°C
|