概述
博世推出了新型BMP280傳感器,這是一種具有溫度,大氣壓力的環(huán)境傳感器,是BMP085/BMP180/BMP183的下一代升級產(chǎn)品,可進(jìn)一步提高競爭力。該傳感器非常適合各種天氣傳感,甚至可以在I2C和SPI中使用!
博世的這種精密傳感器是用于測量氣壓為±1的最佳低成本,精密傳感解決方案。 hPa絕對精度,溫度精度為±1.0°C。由于壓力會隨高度變化,因此壓力測量值非常好,因此您也可以將其用作高度計(jì),精度為±1米
BME280是博世的下一代傳感器,是BMP085/BMP180/的升級版BMP183-具有0.25m的低海拔噪聲和相同的快速轉(zhuǎn)換時(shí)間。它具有相同的規(guī)格,但可以使用I2C 或 SPI。為了實(shí)現(xiàn)簡單易接線,請使用I2C。如果要連接一堆傳感器而不必?fù)?dān)心I2C地址沖突,請使用SPI。
好的傳感器對嗎?因此,我們使您輕松進(jìn)入下一個(gè)項(xiàng)目。表面貼裝傳感器焊接到PCB上,并帶有3.3V穩(wěn)壓器和電平轉(zhuǎn)換功能,因此您可以將其與3V或5V邏輯微控制器一起使用而無需擔(dān)心。我們甚至編寫了一個(gè)不錯(cuò)的教程,其中包含接線圖,原理圖,庫和示例,讓您在10分鐘內(nèi)就可以運(yùn)行!
插腳
電源引腳:
Vin -這是電源引腳。由于傳感器芯片使用3 VDC,因此我們在板載了一個(gè)穩(wěn)壓器,該穩(wěn)壓器將采用3-5 VDC,并將其安全地轉(zhuǎn)換下來。要為電路板供電,請為其提供與微控制器邏輯電平相同的功率-例如,對于像Arduino這樣的5V微型電池,請使用5V
3Vo -這是穩(wěn)壓器的3.3V輸出,如果您愿意,您可以從中獲取100mA電流
GND -電源和邏輯的公共接地
SPI邏輯引腳:
所有進(jìn)入分線的引腳均具有電平轉(zhuǎn)換電路,以使其具有3-5V邏輯電平安全。使用 Vin!
SCK 上的任何邏輯電平-這是 S PI C loc k 引腳,它是芯片的輸入
SDO -這是 S 串行 D ata O ut/ M aster I n S lave O ut針,用于從BMP280發(fā)送到處理器的數(shù)據(jù)
SDI -這是 S 串行 D ata I n/ M aster O ut S lave I n pin,數(shù)據(jù)從處理器發(fā)送到BMP280
CS -這是 C hip S 選擇引腳,將其降低開始SPI事務(wù)。它是芯片的輸入
如果要將多個(gè)BMP280連接到一個(gè)微控制器,請讓它們共享SDI,SDO和SCK引腳。然后為每個(gè)分配一個(gè)唯一的CS引腳。
I2C邏輯引腳:
SCK -這也是 I2C時(shí)鐘引腳,連接到您的微控制器I2C時(shí)鐘線。
SDI -這也是 I2C數(shù)據(jù)引腳,連接到微控制器的I2C數(shù)據(jù)線。
將其他引腳斷開
程序集
裝配像素使用BME280,但形狀/大小與BMP280
相同tr》
準(zhǔn)備標(biāo)題欄:
如有必要,將條切成一定長度。如果將其插入面包板,則焊接會更容易-長按針腳
添加分線板:
將分線板放在插針上,以便短插針穿過分線墊
然后焊接!
請務(wù)必焊接所有引腳以實(shí)現(xiàn)可靠的電接觸。
(有關(guān)焊接的技巧,請務(wù)必查看我們的 優(yōu)秀焊接指南 )。
您完成了!目視檢查焊點(diǎn),然后繼續(xù)進(jìn)行下一步
Arduino測試
您可以輕松地將此分線連接到任何微控制器,我們將使用Arduino。對于另一種微控制器,只要您有4個(gè)可用的引腳,就可以“逐位SPI”,也可以使用兩個(gè)I2C引腳,但是通常這些引腳固定在硬件中。只需簽出庫,然后移植代碼。
I2C接線
如果要通過I2C接口進(jìn)行連接,請使用此接線
將 Vin 連接到電源,3-5V可以。使用微控制器邏輯所基于的相同電壓。對于大多數(shù)Arduino,這是5V
將 GND 連接到公共電源/數(shù)據(jù)地
將 SCK 引腳連接到I2C在Arduino上的時(shí)鐘 SCL 引腳上。在基于UNO和‘328的Arduino上,這也稱為 A5 ,在Mega上也稱為 digital 21 ,在Leonardo/Micro上,也稱為數(shù)字3
將 SDI 引腳連接到Arduino上的I2C數(shù)據(jù) SDA 引腳。在基于UNO&’328的Arduino上,這也稱為 A4 ,在Mega上也稱為 digital 20 ,在Leonardo/Micro上,也稱為數(shù)字2
SPI接線
由于這是具有SPI功能的傳感器,因此我們可以使用硬件或“軟件” SPI。為了使所有Arduino上的接線相同,我們將從“軟件” SPI開始。應(yīng)該使用以下引腳:
將 Vin 連接到電源,可以使用3V或5V。使用微控制器邏輯所基于的相同電壓。對于大多數(shù)Arduino,這是5V
將 GND 連接到公共電源/數(shù)據(jù)地
將 SCK 引腳連接到數(shù)字#13 ,但是以后可以使用任何引腳
將 SDO 引腳連接到數(shù)字#12 ,但是可以使用任何引腳稍后
將 SDI 引腳連接到數(shù)字#11 ,但是以后可以使用任何引腳
連接 CS 引腳數(shù)字#10 ,但以后可以使用任何引腳
稍后,一旦我們開始使用它,我們便可以根據(jù)需要調(diào)整庫以使用硬件SPI,或?qū)⒁_更改為其他
要開始讀取傳感器數(shù)據(jù),您需要安裝Adafruit_BMP280庫(代碼在我們的github存儲庫)。可以從Arduino庫管理器中獲得它,因此我們建議使用它。
從IDE中打開庫管理器。..
,然后輸入 adafruit bmp280 來查找?guī)臁|c(diǎn)擊安裝
您還需要安裝 Adafruit統(tǒng)一傳感器庫
我們還提供了有關(guān)Arduino庫安裝的出色教程,網(wǎng)址為:
http://learn .adafruit.com/adafruit-all-about-arduino-libraries-install-use
加載演示
打開文件-》示例-》 Adafruit_BMP280 -》 bmp280test 并上傳到您的Arduino接線至傳感器
根據(jù)您使用的是I2C還是SPI,更改引腳名稱并注釋或取消注釋以下幾行。
下載:文件
復(fù)制代碼
#define BMP_SCK 13
#define BMP_MISO 12
#define BMP_MOSI 11
#define BMP_CS 10
Adafruit_BMP280 bmp; // I2C
//Adafruit_BMP280 bmp(BMP_CS); // hardware SPI
//Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK); #define BMP_SCK 13
#define BMP_MISO 12
#define BMP_MOSI 11
#define BMP_CS 10
Adafruit_BMP280 bmp; // I2C
//Adafruit_BMP280 bmp(BMP_CS); // hardware SPI
//Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);
上傳到y(tǒng)o您的Arduino,以9600的波特率打開串行控制臺,以查看正在打印的數(shù)據(jù)
溫度以攝氏度為單位,您可以使用經(jīng)典的F = C * 9/5將其轉(zhuǎn)換為F + 32等式。
壓力以 Pascals 的SI單位返回。 100帕斯卡= 1 hPa = 1毫巴。通常,大氣壓力以毫巴或英寸汞柱表示。供將來參考,1帕斯卡= 0.000295333727英寸汞柱,或1英寸汞柱= 3386.39帕斯卡。因此,如果將Pascal值(例如100734)除以3389.39,將得到29.72英寸汞柱。
您還可以計(jì)算海拔高度。 但是,只有知道您所在位置和一天在海平面上的hPa壓力,您才能真正做得非常準(zhǔn)確!傳感器非常精確,但是如果您沒有更新數(shù)據(jù)對于當(dāng)前一天,則可能很難獲得比10米更高的精度。
庫參考
您可以使用
通過使用任一軟件SPI(其中所有四個(gè)引腳可以是任何I/O)創(chuàng)建BMP280對象開始。 div》
下載:文件
復(fù)制代碼
Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK); Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);
或者您可以使用硬件SPI。使用硬件SPI,您必須使用Arduino的硬件SPI引腳-每個(gè)arduino類型都有不同的引腳!請檢查SPI參考以查看使用哪些引腳。在這種情況下,您可以使用任何CS引腳,但其他三個(gè)引腳是固定的
下載:文件
復(fù)制代碼
Adafruit_BMP280 bmp(BMP_CS); // hardware SPI Adafruit_BMP280 bmp(BMP_CS); // hardware SPI
或使用默認(rèn)I2C總線的I2C,未分配任何引腳
下載:文件
復(fù)制代碼
Adafruit_BMP280 bmp; // I2C Adafruit_BMP280 bmp; // I2C
啟動后,您可以使用
下載:文件
復(fù)制代碼
if (!bmp.begin()) {
Serial.println(“Could not find a valid BMP280 sensor, check wiring!”);
while (1);
} if (!bmp.begin()) {
Serial.println(“Could not find a valid BMP280 sensor, check wiring!”);
while (1);
}
begin()將在找到傳感器后返回True,否則返回False。如果返回假值,請檢查接線!
讀取溫度和壓力很容易,只需致電:
下載:文件
復(fù)制代碼
bmp.readTemperature()
bmp.readPressure() bmp.readTemperature()
bmp.readPressure()
溫度在百年歷程中始終是一個(gè)浮點(diǎn)數(shù)。 Pressure是一個(gè)32位整數(shù),壓力單位為Pascals。您可能需要將其轉(zhuǎn)換為其他值,以使其與天氣報(bào)告相匹配。
還可以將BMP280轉(zhuǎn)換為高度計(jì)。如果您知道海平面的壓力,則圖書館可以將當(dāng)前的大氣壓計(jì)入海拔高度
Python和CircuitPython測試
使用帶有CircuitPython和Adafruit CircuitPython BMP280模塊的BMP280傳感器很容易。此模塊使您可以輕松編寫可從傳感器讀取溫度和壓力的Python代碼。
您可以將此傳感器與任何CircuitPython微控制器板或具有GPIO和Python的計(jì)算機(jī)配合使用,這要感謝我們的CircuitPython Adafruit_Blinka -for-Python兼容性庫。
CircuitPython微控制器接線
首先,將Arduino的BMP280完全連接到您的電路板上。您可以使用I2C或SPI布線,盡管為簡單起見建議使用I2C。以下是使用I2C將Feather M0連接到傳感器的示例:
板3V 到傳感器VIN
板GND 》到傳感器GND
板SCL 到傳感器SCK
板SDA 到傳感器SDI
以及一個(gè)羽毛M0的示例
板3V 到傳感器VIN
板GND 到傳感器GND
板載SCK 到傳感器SCK
BoardMOSI 到傳感器SDI
板MISO 到傳感器SDO
板D5 到傳感器CS (或使用任何其他免費(fèi)的數(shù)字I/O引腳)
Python計(jì)算機(jī)接線
由于有數(shù)十種Linux計(jì)算機(jī)/板供您使用,我們將顯示Raspberry Pi的接線。對于其他平臺,請?jiān)L問Linux上的CircuitPython指南,以了解您的平臺是否受支持。
以下是與I2C相連的Raspberry Pi:
Pi 3V3 至傳感器VIN
Pi GND 至傳感器GND
Pi SCL 至傳感器SCK
Pi SDA 到傳感器SDI
以及連接SPI的Raspberry Pi 3 Model B的示例:
Pi 3V3 到傳感器VIN
Pi GND 到傳感器GND
Pi MOSI 到傳感器SDI
Pi MISO 到傳感器SDO
Pi SCLK 到傳感器SCK
Pi#5 到傳感器CS (或使用任何其他可用的GPIO引腳)
CircuitPython安裝BMP280庫
您需要在CircuitPython板上安裝Adafruit CircuitPython BMP280庫。
首先請確保為您的電路板運(yùn)行最新版本的Adafruit CircuitPython。
接下來,您需要安裝必要的庫以使用硬件-仔細(xì)按照以下步驟查找并安裝這些庫來自Adafruit的CircuitPython庫捆綁包。我們的CircuitPython入門指南上有一個(gè)很棒的頁面,說明如何安裝庫捆綁包。
對于諸如Trinket M0或Gemma M0的非表達(dá)板,您需要從捆綁包中手動安裝必要的庫:
adafruit_bmp280.mpy
adafruit_bus_device
在繼續(xù)之前,請確保板的lib文件夾或根文件系統(tǒng)已復(fù)制 adafruit_bmp280.mpy,和 adafruit_bus_device 文件和文件夾。/p》
下一步連接到開發(fā)板的串行REPL,因此您位于CircuitPython的提示符下。
BMP280庫的Python安裝
您需要安裝Adafruit_Blinka庫在Python中提供CircuitPython支持。這可能還需要在您的平臺上啟用I2C并驗(yàn)證您正在運(yùn)行Python3。由于每個(gè)平臺都有所不同,并且Linux經(jīng)常更改,請?jiān)L問Linux上的CircuitPython指南以準(zhǔn)備好您的計(jì)算機(jī)!
完成后,從命令行運(yùn)行以下命令:
sudo pip3 install adafruit-circuitpython-bmp280
如果您的默認(rèn)Python是版本3,則可能需要改為運(yùn)行“ pip”。只要確保您不嘗試在Python 2.x上使用CircuitPython,就不支持它!
CircuitPython和Python的用法
為演示傳感器的用法,我們將對其進(jìn)行初始化,并從電路板上讀取溫度,濕度等信息Python REPL。
如果您使用的是I2C連接,請運(yùn)行以下代碼以導(dǎo)入必要的模塊并使用傳感器初始化I2C連接:
下載:文件
復(fù)制代碼
import board
import busio
import adafruit_bmp280
i2c = busio.I2C(board.SCL, board.SDA)
sensor = adafruit_bmp280.Adafruit_BMP280_I2C(i2c) import board
import busio
import adafruit_bmp280
i2c = busio.I2C(board.SCL, board.SDA)
sensor = adafruit_bmp280.Adafruit_BMP280_I2C(i2c)
或者,如果您使用的是SPI連接,請運(yùn)行以下代碼來設(shè)置SPI連接和傳感器:
下載:文件
復(fù)制代碼
import board
import busio
import digitalio
import adafruit_bmp280
spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
cs = digitalio.DigitalInOut(board.D5)
sensor = adafruit_bmp280.Adafruit_BMP280_SPI(spi, cs) import board
import busio
import digitalio
import adafruit_bmp280
spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
cs = digitalio.DigitalInOut(board.D5)
sensor = adafruit_bmp280.Adafruit_BMP280_SPI(spi, cs)
現(xiàn)在您可以從中讀取值了傳感器具有以下任一屬性:
溫度-傳感器溫度,以攝氏度為單位。
壓力-以hPa為單位的壓力。
海拔-以米為單位的海拔。
例如打印溫度和壓力:
下載:文件
復(fù)制代碼
print(‘Temperature: {} degrees C’.format(sensor.temperature))
print(‘Pressure: {}hPa’.format(sensor.pressure)) print(‘Temperature: {} degrees C’.format(sensor.temperature))
print(‘Pressure: {}hPa’.format(sensor.pressure))
對于海拔高度,您需要設(shè)置您所在位置的海平面壓力以獲得最準(zhǔn)確的測量值(請記住,這些傳感器只能根據(jù)壓力推斷海拔高度,并且需要設(shè)置校準(zhǔn)點(diǎn))。查看您當(dāng)?shù)氐奶鞖忸A(yù)報(bào)以獲取海平面讀數(shù)的壓力,并設(shè)置 seaLevelhPA 屬性:
下載:文件
復(fù)制代碼
sensor.sea_level_pressure = 1013.25 sensor.sea_level_pressure = 1013.25
然后讀取海拔高度屬性更準(zhǔn)確的海拔高度讀數(shù)(但請記住,該海拔高度會隨氣壓變化而波動!):
下載:文件
復(fù)制代碼
print(‘Altitude: {} meters’.format(sensor.altitude)) print(‘Altitude: {} meters’.format(sensor.altitude))
這是在CircuitPython中使用BMP280傳感器的全部內(nèi)容!
這是一個(gè)開始打印的示例每2秒測量一次溫度,壓力和海拔高度:
下載:Project Zip 或bmp280_simpletest.py | 在Github上查看
復(fù)制代碼
import time
import board
# import digitalio # For use with SPI
import busio
import adafruit_bmp280
# Create library object using our Bus I2C port
i2c = busio.I2C(board.SCL, board.SDA)
bmp280 = adafruit_bmp280.Adafruit_BMP280_I2C(i2c)
# OR create library object using our Bus SPI port
#spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
#bmp_cs = digitalio.DigitalInOut(board.D10)
#bmp280 = adafruit_bmp280.Adafruit_BMP280_SPI(spi, bmp_cs)
# change this to match the location‘s pressure (hPa) at sea level
bmp280.sea_level_pressure = 1013.25
while True:
print(“ Temperature: %0.1f C” % bmp280.temperature)
print(“Pressure: %0.1f hPa” % bmp280.pressure)
print(“Altitude = %0.2f meters” % bmp280.altitude)
time.sleep(2)
import time
import board
# import digitalio # For use with SPI
import busio
import adafruit_bmp280
# Create library object using our Bus I2C port
i2c = busio.I2C(board.SCL, board.SDA)
bmp280 = adafruit_bmp280.Adafruit_BMP280_I2C(i2c)
# OR create library object using our Bus SPI port
#spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
#bmp_cs = digitalio.DigitalInOut(board.D10)
#bmp280 = adafruit_bmp280.Adafruit_BMP280_SPI(spi, bmp_cs)
# change this to match the location’s pressure (hPa) at sea level
bmp280.sea_level_pressure = 1013.25
while True:
print(“ Temperature: %0.1f C” % bmp280.temperature)
print(“Pressure: %0.1f hPa” % bmp280.pressure)
print(“Altitude = %0.2f meters” % bmp280.altitude)
time.sleep(2)
常見問題解答
為什么海拔高度計(jì)算錯(cuò)誤?我的傳感器壞了嗎?
不,您的傳感器可能還好。高度計(jì)算取決于了解海平面的氣壓
如果您在當(dāng)前日期未為您所在的位置設(shè)置正確的海平面壓力,它將無法準(zhǔn)確計(jì)算高度
海平面氣壓每天都會根據(jù)天氣而變化!
如果兩次讀取之間有較長的延遲,則第一個(gè)數(shù)據(jù)讀取似乎不正確?
BMx280“保存”內(nèi)存中的最后一次讀取供您查詢。只需連續(xù)閱讀兩次并扔掉第一讀!
下載
文檔
分組討論中使用的BMP280傳感器的數(shù)據(jù)表
Arduino BMP280驅(qū)動程序
Adafruit Fritzing庫中的Fritzing對象
上的EagleCAD PCB文件GitHub
示意圖 strong》
單擊放大。 BMP280與BME280共享相同的封裝和引腳,因此原理圖是相同的
div》尺寸
以英寸為單位。 BMP280與BME280共享相同的封裝和引腳,因此布局相同
責(zé)任編輯:wv
-
傳感器
+關(guān)注
關(guān)注
2548文章
50704瀏覽量
752084 -
BMP280
+關(guān)注
關(guān)注
1文章
20瀏覽量
5710
發(fā)布評論請先 登錄
相關(guān)推薦
評論