TY桃園智造感測器教學庫
感測器教學庫/環境感測器/BME280 溫濕度/氣壓
BATCH 01 · 已發布

SENSOR / BME280

BME280 溫濕度/氣壓感測器把三種環境資料放在同一個 I2C 模組

BME280 可以量測溫度、相對濕度與氣壓,並以 I2C 或 SPI 傳輸。氣壓資料還可以搭配海平面標準氣壓估算高度,是很適合做環境資料整合的感測器。

入門45 分鐘Arduino UNO(I2C,Adafruit BME280 Library)
READYDATA
SIGNAL STABLE
BME280 溫濕度/氣壓感測器
VIN/VCC / 依模組規格GND / GND
01 / PREPARE

課前準備

先確認這一課要學會什麼,以及桌面上需要哪些材料。

學習目標

  1. 辨識溫度、濕度、氣壓與估算高度的關係。
  2. 設定 BME280 I2C 位址並更新資料。
  3. 使用不同單位積木比較 hPa、Pa 與公尺高度。

材料清單

1 個BME280 模組常見 I2C 位址為 0x76 或 0x77。
1 組Arduino UNO 與 USB 線UNO 使用 A4/A5 作為 I2C。
至少 2 處不同高度位置可比較樓梯、教室與走廊的資料。
適用對象國中生活科技與 Arduino 初學者
建議課時45 分鐘
示範平台Arduino UNO(I2C,Adafruit BME280 Library)
02 / HOW IT WORKS

氣壓可以拿來估高度,但要有基準

BME280 將溫度、濕度與氣壓轉成數位資料;高度是由氣壓模型估算,不是感測器直接看見的絕對高度。

01

連接 I2C

將 SDA/SCL 接到 Arduino 的 I2C 腳位。

02

更新資料

讀取最新溫度、濕度與氣壓。

03

估算高度

輸入當地海平面標準氣壓,換算相對高度。

DISTANCE FORMULAaltitude ≈ 44330 × (1 − (pressure / seaLevelPressure)^0.1903)

海平面氣壓、天氣與室內氣流會影響結果;高度值適合教學比較,不宜視為測量儀器校正值。

03 / WIRING

接線配置

先用 I2C 位址確認模組是否為 0x76 或 0x77,再在所有 BME280 積木選相同位址。

MODULEBME280 溫濕度/氣壓感測器VIN/VCCGNDSDASCL
CONTROLArduino UNO(I2C,Adafruit BME280 Library)依模組規格GNDA4 / SDAA5 / SCL
模組腳位接到控制板訊號方向檢查重點
VIN/VCC依模組規格電源BME280 晶片本身是低電壓,模組版本可能含穩壓。
GNDGND地線建立共同地線。
SDAA4 / SDAI2C 資料UNO 的 SDA。
SCLA5 / SCLI2C 時脈UNO 的 SCL。
✓ WIRING ROWS ALIGNED

已將 4 條線路依同一筆資料逐列對齊;電壓仍須依手上模組版本確認。

04 / BLOCK GUIDE

本課會用到的積木

積木名稱與型別以桃園版 Blockly 現行程式為準,不以通用積木替代。

BME280 初始化I2C_ADDR 0x76 或 0x77
BLOCK 01playrobot_bme280_setup

BME280 初始化

啟動指定 I2C 位址的 BME280

位置:感測器 → 環境感測器 → BME280
I2C_ADDR
0x76 或 0x77必須與模組位址相同。
BME280 更新資料
BLOCK 02playrobot_bme280_update

BME280 更新資料

取得最新環境資料

位置:感測器 → 環境感測器 → BME280
BME280 溫度(°C)
BLOCK 03playrobot_bme280_temperature

BME280 溫度(°C)

讀取攝氏溫度

位置:感測器 → 環境感測器 → BME280
BME280 濕度(%)
BLOCK 04playrobot_bme280_humidity

BME280 濕度(%)

讀取相對濕度

位置:感測器 → 環境感測器 → BME280
BME280 氣壓(hPa)
BLOCK 05playrobot_bme280_pressure_hpa

BME280 氣壓(hPa)

讀取常用氣壓單位

位置:感測器 → 環境感測器 → BME280
BME280 海拔高度(m)SEA_LEVEL_PRESSURE 1013.25
BLOCK 06playrobot_bme280_altitude

BME280 海拔高度(m)

依海平面氣壓估算高度

位置:感測器 → 環境感測器 → BME280
SEA_LEVEL_PRESSURE
1013.25輸入當地或當時的海平面氣壓 hPa。
05 / BLOCK EXAMPLE

做一個樓層氣壓比較器

在不同位置更新 BME280,列印氣壓與估算高度。

桃園版 BLOCKLY / WORKSPACE● BLOCK STYLE
Arduino 程式
初始化
BME280 初始化(0x76)I2C_ADDR 0x76 或 0x77playrobot_bme280_setup
重複執行arduino_delay
BME280 更新資料playrobot_bme280_update
BME280 氣壓(hPa)playrobot_bme280_pressure_hpa
BME280 海拔高度(m,1013.25)playrobot_bme280_altitude
序列埠列印資料arduino_serial_print
重複執行
BME280 初始化(0x76)I2C_ADDR 0x76 或 0x77playrobot_bme280_setup
重複執行arduino_delay
BME280 更新資料playrobot_bme280_update
BME280 氣壓(hPa)playrobot_bme280_pressure_hpa
BME280 海拔高度(m,1013.25)playrobot_bme280_altitude
序列埠列印資料arduino_serial_print
X / 010Y / 024

組合步驟

01
找出模組位址

確認模組標示或使用 I2C 掃描器。

為什麼:位址錯誤會導致初始化失敗。
02
先更新再讀值

在每輪讀取三種資料前放更新積木。

為什麼:各數值要來自同一筆環境資料。
03
討論高度是估算

比較上下樓層並記錄當時天氣或氣壓。

為什麼:氣壓與天氣變化會影響高度換算。
積木使用重點先辨認積木是「回傳值」還是「執行動作」,再放到正確的拼接位置。

playrobot_bme280_setup啟動指定 I2C 位址的 BME280

預期觀察結果

測試情境可能讀值判讀
位置升高氣壓通常下降,估算高度上升大氣壓力隨高度變化,但不是固定比例。
天氣系統改變同一位置高度值也可能漂移高度公式需要可靠的海平面氣壓基準。
06 / CODE EXPLAINED

範例程式逐段解說

這段程式把「BME280 溫濕度/氣壓感測器」的實體接線、桃園版 Blockly 積木與 Arduino 執行流程接在一起。先對照腳位,再看初始化、讀值、輸出與等待的順序;每一步都可以回到本頁的積木範例實測。

GENERATED LOGIC / EXCERPT積木背後的程式碼收合程式碼 −
TAOYUAN BLOCKLY / ARDUINO C++READ ONLY
#include <Wire.h>
#include <Adafruit_BME280.h>

Adafruit_BME280 bme;

void setup() {
  Serial.begin(115200);
  if (!bme.begin(0x76)) Serial.println("BME280 init failed");
}

void loop() {
  Serial.print(bme.readTemperature());
  Serial.print(" C, ");
  Serial.print(bme.readHumidity());
  Serial.print(" %, ");
  Serial.print(bme.readPressure() / 100.0F);
  Serial.println(" hPa");
  delay(1000);
}
SELF STUDY GUIDE先看哪一段、為什麼?
01
先載入函式庫與建立裝置#include <Wire.h>

函式庫提供桃園版 Blockly 產生器所需的底層功能;若這裡的函式庫或物件名稱不對,後面的 playrobot_bme280_setup 就算接線正確也無法使用。

02
把程式腳位對回接線表// VIN/VCC → 依模組規格、GND → GND、SDA → A4 / SDA、SCL → A5 / SCL

本頁接線是 VIN/VCC → 依模組規格、GND → GND、SDA → A4 / SDA、SCL → A5 / SCL。程式常數、積木欄位與實體線材必須使用同一組設定;若改了其中一邊,另外兩邊也要一起改。

03
在 setup 只做一次初始化void setup() {

啟動序列埠、I²C/UART 或感測器初始化通常只需要做一次,所以要放在「初始化」區,不要每一圈重複建立裝置。這也對應範例中的啟動積木。

04
在 loop 更新並取得資料void loop() {

重複執行區先讓感測器更新,再讀取 BME280 初始化。若元件有 data ready、可用性或逾時條件,先判斷狀態再使用數值,避免把無效資料當成真實測量。

05
輸出結果並控制取樣速度if (!bme.begin(0x76)) Serial.println("BME280 init failed");

先把原始值、單位或狀態送到序列埠,才能和預期結果比較;等待時間則決定更新速度。若看到亂碼,先檢查鮑率;若數值跳動,先增加合理的取樣間隔或做校正。

自學檢查
  • 實體接線:VIN/VCC → 依模組規格、GND → GND、SDA → A4 / SDA、SCL → A5 / SCL。
  • 主要積木:playrobot_bme280_setup;先確認它是回傳值還是執行動作。
  • 本課板子:Arduino UNO(I2C,Adafruit BME280 Library);更換控制板或模組版本時,電壓、腳位與函式庫都要重新確認。
07 / DEBUG

常見問題與故障排除

先從「電源、接線、腳位、物體」四個方向檢查,再修改程式。

ERR 01

找不到 BME280

先檢查:確認 I2C 位址是 0x76 或 0x77。

處理方式:逐一嘗試兩個位址,並檢查 SDA/SCL。

ERR 02

高度值不準

先檢查:確認海平面氣壓輸入與測量時間。

處理方式:使用當地氣象資料或同一時段的基準值,並把結果視為估算。

ERR 03

資料變化很慢

先檢查:確認更新積木與等待時間。

處理方式:固定更新週期,並避免把感測器放在密閉盒中。

08 / NEXT MISSION

延伸挑戰

從顯示數值,逐步走向條件判斷、燈號回饋與雷達專題。

L1

三合一環境表

題目:列印溫度、濕度與氣壓三種資料。

解題方向

這題要延伸「BME280 初始化」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。先把資料整理成可觀察的序列埠或表格結果。

  1. 先匯入本頁 Blockly 範例,確認感測器在沒有加入挑戰功能時能穩定讀值。
  2. 保留 playrobot_bme280_setup,先把讀值送到序列埠,建立正常範圍或基準值。
  3. 依題目「列印溫度、濕度與氣壓三種資料。」加入比較、分類、累計或時間判斷;門檻要用實測資料決定,不要直接猜一個數字。
  4. 用至少三種不同情境測試,記錄輸入、程式判斷與輸出結果,再修正門檻或取樣間隔。
完成檢核:完成後應能指出:哪一個積木取得資料、哪一段負責判斷或換算、先把資料整理成可觀察的序列埠或表格結果是否在所有測試情境都正確反應。
L2

樓層比較

題目:在兩個樓層量測並比較氣壓差。

解題方向

這題要延伸「BME280 初始化」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。先把資料整理成可觀察的序列埠或表格結果。

  1. 先匯入本頁 Blockly 範例,確認感測器在沒有加入挑戰功能時能穩定讀值。
  2. 保留 playrobot_bme280_setup,先把讀值送到序列埠,建立正常範圍或基準值。
  3. 依題目「在兩個樓層量測並比較氣壓差。」加入比較、分類、累計或時間判斷;門檻要用實測資料決定,不要直接猜一個數字。
  4. 用至少三種不同情境測試,記錄輸入、程式判斷與輸出結果,再修正門檻或取樣間隔。
完成檢核:完成後應能指出:哪一個積木取得資料、哪一段負責判斷或換算、先把資料整理成可觀察的序列埠或表格結果是否在所有測試情境都正確反應。
L3

氣象資料分析

題目:連續記錄一天的氣壓,觀察高度估算值的漂移。

解題方向

這題要延伸「BME280 初始化」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。先把資料整理成可觀察的序列埠或表格結果。

  1. 先匯入本頁 Blockly 範例,確認感測器在沒有加入挑戰功能時能穩定讀值。
  2. 保留 playrobot_bme280_setup,先把讀值送到序列埠,建立正常範圍或基準值。
  3. 依題目「連續記錄一天的氣壓,觀察高度估算值的漂移。」加入比較、分類、累計或時間判斷;門檻要用實測資料決定,不要直接猜一個數字。
  4. 用至少三種不同情境測試,記錄輸入、程式判斷與輸出結果,再修正門檻或取樣間隔。
完成檢核:完成後應能指出:哪一個積木取得資料、哪一段負責判斷或換算、先把資料整理成可觀察的序列埠或表格結果是否在所有測試情境都正確反應。
教師快速檢核4 POINT CHECK
  • 能說出 BME280 的三種直接量測量。
  • 能正確設定 I2C 位址與更新流程。
  • 能解釋為何高度是依氣壓基準估算。
09 / EVIDENCE資料來源與版本展開查看 +
原廠文件
BME280 product pageBosch Sensortec

確認溫度、濕度、氣壓、I2C/SPI 與規格範圍。

原廠文件
BME280 datasheetBosch Sensortec

補充電氣與環境規格。

桃園版 Blockly
桃園版 Blockly BME280 積木桃園版 Blockly

對照 setup、update、溫濕度、氣壓與高度積木。

LOCAL
LAST REVIEWED / 2026-08-13

本頁使用零件圖鑑標準範本,內容可由網站編輯模式持續維護。

返回教學庫 →