如果我們只是想要量測溫度,並沒有量測濕度的需求,那麼使用LM35這顆類比式IC會是比較好的選擇,因為它的溫度輸出是類比信號,直接以電壓的方式把溫度呈現輸出接腳,對於可以具有ADC類比輸入的Pico來說,讀取溫度數值可以立即取得,非常迅速,在讀取速度上比DHT11快多了。
常見的LM35是以電晶體的型式包裝,看起來像是下面這個樣子(在接腳的上方會有LM35的字樣,不過因為拍照設備及環境的關係,在下圖中看不太出來):
它的3支接腳中,左側是Vcc,在這裡我們把它接上來自於Pico板子上的3.3V電源,右側的接腳則是接地,直接把它接到板子上的GND。中間的是電壓信號輸出,把它接到Pico上的ADC0~ADC2任一個皆可。在這個例子中,我們把它接到ADC1,也就是實體接腳的第32腳。
以下是每隔0.2秒在Shell中顯示目前溫度的程式碼:
from machine import ADC
import time
temp_sensor = ADC(1)
while True:
val = temp_sensor.read_u16()
temp = (val/65536) * 3.3 * 100
print(temp)
time.sleep(0.2)
以下是在Shell中輸出的結果截圖:
結合之前的SSD1306微型顯示器的成果,我們可以利用以下的程式,把目前的溫度顯示在SSD1306顯示器上:
from machine import ADC, Pin, I2C
import time
import ssd1306
i2c = I2C(0, sda=Pin(16), scl=Pin(17))
disp = ssd1306.SSD1306_I2C(128, 64, i2c)
temp_sensor = ADC(1)
while True:
val = temp_sensor.read_u16()
temp = round((val/65536) * 3.3 * 100, 2)
disp.fill(0)
disp.text('NKUST CCET', 0, 0)
disp.text('Min-Huang Ho', 0, 8)
disp.text("Temp:{}C".format(temp), 0, 30)
disp.show()
time.sleep(1)
此程式的執行畫面如下:
如果你使用的是Pico W的話,也可以透過MQTT把溫度資料傳送出去喔。