學習目標
- ✓辨識溫度、濕度、氣壓與估算高度的關係。
- ✓設定 BME280 I2C 位址並更新資料。
- ✓使用不同單位積木比較 hPa、Pa 與公尺高度。
SENSOR / BME280
BME280 可以量測溫度、相對濕度與氣壓,並以 I2C 或 SPI 傳輸。氣壓資料還可以搭配海平面標準氣壓估算高度,是很適合做環境資料整合的感測器。
先確認這一課要學會什麼,以及桌面上需要哪些材料。
BME280 將溫度、濕度與氣壓轉成數位資料;高度是由氣壓模型估算,不是感測器直接看見的絕對高度。
將 SDA/SCL 接到 Arduino 的 I2C 腳位。
讀取最新溫度、濕度與氣壓。
輸入當地海平面標準氣壓,換算相對高度。
海平面氣壓、天氣與室內氣流會影響結果;高度值適合教學比較,不宜視為測量儀器校正值。
先用 I2C 位址確認模組是否為 0x76 或 0x77,再在所有 BME280 積木選相同位址。
| 模組腳位 | 接到控制板 | 訊號方向 | 檢查重點 |
|---|---|---|---|
| VIN/VCC | 依模組規格 | 電源 | BME280 晶片本身是低電壓,模組版本可能含穩壓。 |
| GND | GND | 地線 | 建立共同地線。 |
| SDA | A4 / SDA | I2C 資料 | UNO 的 SDA。 |
| SCL | A5 / SCL | I2C 時脈 | UNO 的 SCL。 |
已將 4 條線路依同一筆資料逐列對齊;電壓仍須依手上模組版本確認。
積木名稱與型別以桃園版 Blockly 現行程式為準,不以通用積木替代。
playrobot_bme280_setup啟動指定 I2C 位址的 BME280
位置:感測器 → 環境感測器 → BME280playrobot_bme280_update取得最新環境資料
位置:感測器 → 環境感測器 → BME280playrobot_bme280_temperature讀取攝氏溫度
位置:感測器 → 環境感測器 → BME280playrobot_bme280_humidity讀取相對濕度
位置:感測器 → 環境感測器 → BME280playrobot_bme280_pressure_hpa讀取常用氣壓單位
位置:感測器 → 環境感測器 → BME280playrobot_bme280_altitude依海平面氣壓估算高度
位置:感測器 → 環境感測器 → BME280在不同位置更新 BME280,列印氣壓與估算高度。
playrobot_bme280_setuparduino_delayplayrobot_bme280_updateplayrobot_bme280_pressure_hpaplayrobot_bme280_altitudearduino_serial_printplayrobot_bme280_setuparduino_delayplayrobot_bme280_updateplayrobot_bme280_pressure_hpaplayrobot_bme280_altitudearduino_serial_print確認模組標示或使用 I2C 掃描器。
為什麼:位址錯誤會導致初始化失敗。在每輪讀取三種資料前放更新積木。
為什麼:各數值要來自同一筆環境資料。比較上下樓層並記錄當時天氣或氣壓。
為什麼:氣壓與天氣變化會影響高度換算。playrobot_bme280_setup:啟動指定 I2C 位址的 BME280
下載桃園版 Blockly 專案或對應的文字程式。
| 測試情境 | 可能讀值 | 判讀 |
|---|---|---|
| 位置升高 | 氣壓通常下降,估算高度上升 | 大氣壓力隨高度變化,但不是固定比例。 |
| 天氣系統改變 | 同一位置高度值也可能漂移 | 高度公式需要可靠的海平面氣壓基準。 |
這段程式把「BME280 溫濕度/氣壓感測器」的實體接線、桃園版 Blockly 積木與 Arduino 執行流程接在一起。先對照腳位,再看初始化、讀值、輸出與等待的順序;每一步都可以回到本頁的積木範例實測。
#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);
}#include <Wire.h>函式庫提供桃園版 Blockly 產生器所需的底層功能;若這裡的函式庫或物件名稱不對,後面的 playrobot_bme280_setup 就算接線正確也無法使用。
// VIN/VCC → 依模組規格、GND → GND、SDA → A4 / SDA、SCL → A5 / SCL本頁接線是 VIN/VCC → 依模組規格、GND → GND、SDA → A4 / SDA、SCL → A5 / SCL。程式常數、積木欄位與實體線材必須使用同一組設定;若改了其中一邊,另外兩邊也要一起改。
void setup() {啟動序列埠、I²C/UART 或感測器初始化通常只需要做一次,所以要放在「初始化」區,不要每一圈重複建立裝置。這也對應範例中的啟動積木。
void loop() {重複執行區先讓感測器更新,再讀取 BME280 初始化。若元件有 data ready、可用性或逾時條件,先判斷狀態再使用數值,避免把無效資料當成真實測量。
if (!bme.begin(0x76)) Serial.println("BME280 init failed");先把原始值、單位或狀態送到序列埠,才能和預期結果比較;等待時間則決定更新速度。若看到亂碼,先檢查鮑率;若數值跳動,先增加合理的取樣間隔或做校正。
先從「電源、接線、腳位、物體」四個方向檢查,再修改程式。
先檢查:確認 I2C 位址是 0x76 或 0x77。
處理方式:逐一嘗試兩個位址,並檢查 SDA/SCL。
先檢查:確認海平面氣壓輸入與測量時間。
處理方式:使用當地氣象資料或同一時段的基準值,並把結果視為估算。
先檢查:確認更新積木與等待時間。
處理方式:固定更新週期,並避免把感測器放在密閉盒中。
從顯示數值,逐步走向條件判斷、燈號回饋與雷達專題。
題目:列印溫度、濕度與氣壓三種資料。
這題要延伸「BME280 初始化」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。先把資料整理成可觀察的序列埠或表格結果。
題目:在兩個樓層量測並比較氣壓差。
這題要延伸「BME280 初始化」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。先把資料整理成可觀察的序列埠或表格結果。
題目:連續記錄一天的氣壓,觀察高度估算值的漂移。
這題要延伸「BME280 初始化」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。先把資料整理成可觀察的序列埠或表格結果。
確認溫度、濕度、氣壓、I2C/SPI 與規格範圍。
補充電氣與環境規格。
對照 setup、update、溫濕度、氣壓與高度積木。