|
|
用普中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
|
評分
-
查看全部評分
|