Raspberry Pico RP2040 + MicroPython + TMP102

 TI TMP102溫度感測器雖然有點年紀了, 但是幾年前我買了一個由sparkfun製作的模組, 這期間也使用過其他廠商的產品, 例如ASAIR AM2320, DHT11, TMP36, Bosch BME280。用起來, TMP102算是很好用的, 雖然只有單一的溫度感測功能, 但他很穩定, 使用的人也多, 很容易找到資源。

今天只想簡單的把微控制器接上TMP102, 讀一下溫度, 特別是冬天想做個麵包, 溫度是很重要的控制因素, 太冷的話, 發酵不起來的。

接線方法如下圖, 就2個模塊: Pico 和 TMP102。他們之間使用I2C溝通, 也就是實體線路SDA, SCL二條線, SDA我使用藍色的線, SCL我用紅色的線。不要忘記, 電路元件是要供電才會動的, 所以還要再接上GND, VCC。



用照片看不清楚的話, 我把Pico的Pinout圖放在下面, 我把使用到腳位打勾, 共4個Pin: 38 GND, 36 3V3(OUT), 22 GP17 (I2C0 SCL), 21 GP16 (I2C0 SDA)。各位可以用來和照片相互對照。其中39 VSYS (當接USB供電時, 此腳位是5V), 其實是用來輸入電源供電給Pico的, 這裡要改用36 3V3(OUT)比較適合。



好了, 硬體接線接好後, 要來驅動他們工作了。最最簡單的方法, 目前來說, 就是使用MicroPython了, 因為最煩人的部份, 他們都幫大家做完了! 剩下的部份, 留給大家來完成的就是最好玩的部份了。Pico的資源真的很多, Raspberry Pi原廠的文件和網站就已經做得很不錯, 其他相關廠商也有不錯的文件, 例如賣電子零組件的Digikey也寫了一份文件來教大家怎麼使用Pico的I2C: https://www.digikey.tw/en/maker/projects/raspberry-pi-pico-rp2040-i2c-example-with-micropython-and-cc/47d0c922b79342779cdbd4b37b7eb7e2

目前和MicroPython最匹配的軟體開發環境應該是Thonny, https://thonny.org/ 下載安裝後, 開啟Thonny, 在他的功能表Tools -- Options..., 切換到Interpreter頁面, 如下圖, 可以看到可以選擇到Pico這塊開發板, 在右下角的藍色字(Install or update firmware)按下去後, 依其說明就可以幫你的Pico安裝最新的MicroPython了。


建議裝好後, 先試一下, 是不是可以驅動Pico板子上的LED, 程式很簡單, 如下:

from machine import Pin

led = Pin(25, Pin.OUT)

led.toggle()

沒問題後, 我們來看TMP102的驅動, 他的操作方式也不複雜, 主要就是讀取幾個暫存器, 詳見其datasheet: https://www.ti.com/lit/ds/symlink/tmp102.pdf?ts=1673313827211&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FTMP102%253Futm_source%253Dgoogle%2526utm_medium%253Dcpc%2526utm_campaign%253Dasc-null-null-GPN_EN-cpc-pf-google-kr%2526utm_content%253DTMP102%2526ds_k%253DTMP102%2526DCM%253Dyes%2526gclid%253DEAIaIQobChMIsbz22Ou7_AIV0NKWCh05mQ2sEAAYASAAEgIn-fD_BwE%2526gclsrc%253Daw.ds

好累! 可以不用讀嗎? 當然可以, 其實有人已經讀完, 還幫你把驅動都寫好了。khoulihan/micropython-tmp102: https://github.com/khoulihan/micropython-tmp102 就是一個。我們就用他的驅動吧! 同樣先下載, 解壓縮後, 會看到一個tmp102目錄, 其下有數個.py的檔案, 大家先把這個目錄和其下的檔案都先搬到Pico去吧! 搬完之後, 用Thonny先檢查一下, 應該會出現如下圖的模樣 (紅筆圈起來的部份)。


最後一步, 輸入程式:

from tmp102 import Tmp102

i2c = machine.I2C(0, scl=machine.Pin(17), sda=machine.Pin(16))

sensor = Tmp102(i2c, 0x48)

print(sensor.temperature)

然後執行:
>>> print(sensor.temperature)
23.625
>>> print(sensor.temperature)
23.4375
>>> print(sensor.temperature)
24.4375
>>> print(sensor.temperature)
24.625
>>> print(sensor.temperature)
24.625

好了, 就這樣! 沒有了, 哈!

哦! 還有啦, 下次再加上OLED螢幕, 還有電池, 這樣就不用接電腦才會動。


留言

這個網誌中的熱門文章

D-BUS學習筆記

Cisco Switch學習筆記: EtherChannel

Cisco Switch學習筆記: interface的封包錯誤統計