###### tags: `FM631A` `ESP32` `TMP36` # ESP32 搭配 TMP36 溫度感測器 在 ESP32 上使用 [TMP36](https://www.analog.com/media/en/technical-documentation/data-sheets/TMP35_36_37.pdf) 溫度感測器時, 如果 [ADC 衰減](http://docs.micropython.org/en/latest/esp32/quickref.html#ADC.atten)設定為 `ADC.ATTN_11DB`, 雖然可以讓可感測的電壓直範圍最大, 但感測到的電壓值卻誤差很大, 換算出來的溫度值與實際室溫可能會相插到 10 度。 根據 [ESP32](https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf#2f) 的 [API 文件](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/adc.html#_CPPv425adc1_config_channel_atten14adc1_channel_t11adc_atten_t), 不同衰減值適合的量測範圍如下: | 衰減值 (dB) | 適合範圍 (mV) | 最高輸入電壓 (V)| |-------------|-----------------|-----| | 0 | 100 ~ 950 |1| | 2.5 | 100 ~ 1250 |1.34| | 6 | 150 ~ 1750 |2| | 11 | 150 ~ 2450 |3.6| 以 TMP36 0℃ 為 500mV、10mV/1℃ 的變化來說, 150mV~1750mV 已經涵蓋一般室溫的可量測範圍, 經過實驗衰減值設為 6dB 為最佳, 可將範例程式改為: ```python= from machine import Pin,ADC import time # 溫度感測器 adc_pin=Pin(32) adc = ADC(adc_pin) # 建立 ADC 物件 adc.width(ADC.WIDTH_12BIT) # 設定 ADC 解析度。12BIT代表範圍是0~4095 adc.atten(ADC.ATTN_6DB) # 將最大感測電壓設定成 3.6V, 超過 3.6V 時會得到 ADC 最大值 4095 while True: vol = (adc.read()/4095)*2 tem = (vol-0.5)*100 print("{}\t{}:".format(vol, tem)) # 顯示溫度值 time.sleep(1) ```