問:使用Raspberry Pi 從 MCP9808讀取溫度數(shù)據(jù)
MCP9808是一款溫度傳感器,采用I2C通信標準來傳輸連續(xù)輪詢溫度。它支持報警功能和待機模式,以便在需要時節(jié)省電力。在本說明文檔中,我們將執(zhí)行幾個python命令來獲取傳感器的溫度。
MCP9808上的I2C
Microchip將0x18用作此板上的主地址,借助芯片上的3個引腳來更改I2C地址沖突時的地址。當調(diào)用傳感器中的任何寄存器時,該板應寫入或獲得雙字節(jié)響應(MSB優(yōu)先,LSB最后)。我使用的是Adafruit的分線板[1528-1032-ND],其中已經(jīng)包含一些正偏電阻。
需注意的寄存器:
0x01:0000000X00011111:這里的X是配置中的備用位,默認為0,此為連續(xù)輪詢模式。溫度寄存器會不斷更新,但存在功耗問題。將此位設為1將停止輪詢并節(jié)省功耗。
0x05:AAASMMMMLLLLLLLL:該寄存器包含12位浮點溫度,其中“A”為報警信息,“S”為符號位,“M”和“L”分別代表MSB和LSB。最終輸出將顯示為MMMMLLLL.LLLL。
請注意,在本說明中,我沒有設置符號位和報警位,但如果你希望測量零下溫度,則需要進行設置。
在Raspberry PI上的實現(xiàn):
使用Raspberry Pi與I2C接口相連的好處在于Python終端的交互性。我使用的是在Raspbian發(fā)行版上啟用了I2C的Raspberry Pi 4。確保你的GPIO支持3V3、GND、SDA并且SCL支持MCP9808上的正確引腳。在Raspbian中打開終端并執(zhí)行以下三個命令:
python
from smbus import SMBus
bus = SMBus(1)
該命令將創(chuàng)建一個待連接的總線對象,該對象將反過來收集我們請求的I2C數(shù)據(jù)。接下來,向芯片詢問它的溫度數(shù)據(jù):
temp_binary =format(bus.read_word_data(0x18, 0x05),‘016b’)
該bus.read_byte_data(Address, Register)將從傳感器檢索數(shù)據(jù),我們使用封閉的format()函數(shù)將信息讀取為二進制數(shù),這樣是為了使提取這兩個字節(jié)變得簡單。Python通常喜歡使用int或float,但這會造成妨礙,因為會由多個字節(jié)返回值。我們將按照[0:8][8:16]順序將其編制索引,而MSB位于數(shù)組的后半部分。
計算輸出:
我們可以利用以下函數(shù)來正確地獲取輸出值
defword_To_LSB_MSB(word):
return word[0:8], word[12 :16] // note that word indices [8,9,10,11] are notused in this example.
請查看下圖,了解我們所需的輸出。
最后,將這二者結合在一起,再加上一些浮點運算即可。
LSB, MSB =word_To_LSB_MSB(temp_binary)
float(int(MSB + LSB,2)) / 16
除以16可將結果轉為MMMMLLLL.LLLL,并獲得十進制精度。注意,返回的結果應以攝氏為單位。在上圖所示的情況下,我們從二進制浮動數(shù)00010111.0101計算出的溫度是23.3125攝氏度。
完成后進入省電模式:
如果你希望在完成操作后關閉器件,只需將待機位設置為省電模式:
bus.write_byte_data(0x18,0x01,0b00000001)
由于只需更改MCP9809配置寄存器中的MSB,所以我們寫入一個字節(jié),不過我們將字符縮短了,因此不會更改寄存器中的LSB。
要使MCP9808恢復到完全工作功能狀態(tài),必須使傳感器獲得動力循環(huán)或使用寄存器的零刷新模式。
Microchip的規(guī)格書在此傳感器的應用中仍然非常有用,如果你要使用MCP9808,請務必定期查詢。注意,本文未涉及此傳感器的一些重要功能,例如中斷、負溫度的符號位和待機工作。
使用的項:
Raspberry Pi:1690-RASPBERRYPI4B/4GB-ND
母頭到公頭的面包板線:1568-1511-ND
用于MCP9808的Adafruit分線板:1528-1032-ND
審核編輯:劉清
-
溫度傳感器
+關注
關注
48文章
3021瀏覽量
158011 -
python
+關注
關注
56文章
4823瀏覽量
86116 -
樹莓派
+關注
關注
121文章
1933瀏覽量
106928 -
MSB
+關注
關注
0文章
13瀏覽量
8356 -
MCP
+關注
關注
0文章
270瀏覽量
14233
原文標題:攻略來了:用樹莓派讀取溫度傳感器MCP9808的數(shù)據(jù)
文章出處:【微信號:得捷電子DigiKey,微信公眾號:得捷電子DigiKey】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
使用樹莓派Pico的RP2040微控制器內(nèi)置溫度傳感器
樹莓派3通過串口連接溫度傳感器求助!!!
如何開發(fā)MCP9808溫度傳感器代碼?
MCP9808溫度數(shù)據(jù)顯示在終端所需的轉換例程
在Uno、Mega、ESP8266和ESP32上運行各種溫度傳感器,哪個溫度傳感器給出真實(實際)值?
MCP9808最大精度的數(shù)字溫度傳感器

Microchip溫度傳感器系列產(chǎn)品

基于MCP9808帶有±0.5°C 最高精度數(shù)字溫度傳感器

高精度數(shù)字溫度傳感器的工作原理說明

評論