TY桃園智造感測器教學庫
感測器教學庫/環境感測器/GY-39/MAX4400 四合一氣象
BATCH 02 · 已發布

SENSOR / GY39

GY-39/MAX4400 四合一氣象模組一次讀取光度、溫度、濕度與氣壓

GY-39-44009 類型模組把光度與 BME280 類環境資料整合,再由板上 MCU 透過 MCU_IIC 回傳。桃園版 Blockly 預設使用 0x5B,教學時要先確認模組版本與 S0 模式。

入門45 分鐘Arduino UNO(MCU_IIC,I2C 0x5B)
READYDATA
SIGNAL STABLE
GY-39/MAX4400 四合
VCC / 3.3–5V 依模組GND / GND
01 / PREPARE

課前準備

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

學習目標

  1. 認識多物理量環境模組的資料整合。
  2. 將 GY-39 設為 MCU_IIC 並使用 0x5B。
  3. 讀取光度、溫濕度、氣壓與高度資料。

材料清單

1 個GY-39/MAX4400 BME280 模組確認是 GY-39-44009 類型。
1 組Arduino UNOUNO 使用 A4/A5 I2C。
數個光源與不同位置用手遮光、移動到窗邊比較。
適用對象國中生活科技與 Arduino 初學者
建議課時45 分鐘
示範平台Arduino UNO(MCU_IIC,I2C 0x5B)
02 / HOW IT WORKS

一條 I2C 讀出多種環境量

GY-39 的板上 MCU 會把多個感測器資料整理成固定格式;MCU_IIC 模式下,Arduino 讀取的是模組整理後的資料,不是直接讀每顆晶片。

01

設定 MCU_IIC

依模組說明將 S0 接地。

02

讀取 14 bytes

從 0x5B 的資料暫存器取得整包資料。

03

解析資料

分離光度、溫度、壓力、濕度與高度。

DISTANCE FORMULAI2C address = 0x5B

GY-39 市面版本可能不同;若模組無回應,先確認板上晶片與工作模式。

03 / WIRING

接線配置

桃園版 Blockly 的 GY-39 積木以 MCU_IIC 為前提;S0 接地後使用 SDA/SCL,不要把 UART 腳當 I2C。

MODULEGY-39/MAX4400 四合VCCGNDSDASCLS0
CONTROLArduino UNO(MCU_IIC,I2C 0x5B)3.3–5V 依模組GNDA4 / SDAA5 / SCLGND
模組腳位接到控制板訊號方向檢查重點
VCC3.3–5V 依模組電源確認轉接板規格。
GNDGND地線共地。
SDAA4 / SDAI2C 資料MCU_IIC 模式。
SCLA5 / SCLI2C 時脈MCU_IIC 模式。
S0GND模式設定依 GY-39 版本說明選 MCU_IIC。
✓ WIRING ROWS ALIGNED

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

04 / BLOCK GUIDE

本課會用到的積木

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

GY-39/MAX4400 初始化
BLOCK 01playrobot_gy39_setup

GY-39/MAX4400 初始化

啟動 0x5B MCU_IIC 模式

位置:感測器 → 環境感測器 → GY-39/MAX4400
GY-39 更新資料
BLOCK 02playrobot_gy39_update

GY-39 更新資料

讀取一整包環境資料

位置:感測器 → 環境感測器 → GY-39/MAX4400
光度(lux)
BLOCK 03playrobot_gy39_lux

光度(lux)

讀取照度

位置:感測器 → 環境感測器 → GY-39/MAX4400
溫度(°C)
BLOCK 04playrobot_gy39_temperature

溫度(°C)

讀取溫度

位置:感測器 → 環境感測器 → GY-39/MAX4400
大氣壓力(hPa)
BLOCK 05playrobot_gy39_pressure_hpa

大氣壓力(hPa)

讀取氣壓

位置:感測器 → 環境感測器 → GY-39/MAX4400
05 / BLOCK EXAMPLE

教室光線與氣壓觀察站

每次更新後同時列印 lux、溫度與氣壓。

桃園版 BLOCKLY / WORKSPACE● BLOCK STYLE
Arduino 程式
初始化
GY-39 初始化(0x5B)sensor_block
重複執行arduino_delay
GY-39 更新資料playrobot_gy39_update
GY-39 光度(lux)playrobot_gy39_lux
GY-39 溫度與氣壓sensor_block
序列埠列印arduino_serial_print
重複執行
GY-39 初始化(0x5B)sensor_block
重複執行arduino_delay
GY-39 更新資料playrobot_gy39_update
GY-39 光度(lux)playrobot_gy39_lux
GY-39 溫度與氣壓sensor_block
序列埠列印arduino_serial_print
X / 010Y / 024

組合步驟

01
設定正確模式

確認 S0 與 I2C 接線。

為什麼:UART 模式與 MCU_IIC 的腳位不同。
02
一次更新一包

先更新再讀各個數值積木。

為什麼:各數值要來自同一筆資料。
03
改變光線

遮住模組或移到窗邊。

為什麼:lux 是最容易直接觀察的變化。
積木使用重點先辨認積木是「回傳值」還是「執行動作」,再放到正確的拼接位置。

playrobot_gy39_setup啟動 0x5B MCU_IIC 模式

預期觀察結果

測試情境可能讀值判讀
手遮住模組lux 明顯改變光度資料來自 MAX4400 類光感測器。
上下樓層氣壓可能不同大氣壓力會隨高度與天氣變化。
06 / CODE EXPLAINED

範例程式逐段解說

這段程式把「GY-39/MAX4400 四合一氣象模組」的實體接線、桃園版 Blockly 積木與 Arduino 執行流程接在一起。先對照腳位,再看初始化、讀值、輸出與等待的順序;每一步都可以回到本頁的積木範例實測。

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

const uint8_t GY39_ADDR = 0x5B;

void setup() {
  Serial.begin(115200);
  Wire.begin();
}

void loop() {
  Wire.beginTransmission(GY39_ADDR);
  Wire.write(0x00);
  Wire.endTransmission(false);
  if (Wire.requestFrom(GY39_ADDR, (uint8_t)14) == 14) {
    uint8_t data[14];
    for (uint8_t i = 0; i < 14; ++i) data[i] = Wire.read();
    Serial.println("GY-39 data received");
  }
  delay(1000);
}
SELF STUDY GUIDE先看哪一段、為什麼?
01
先載入函式庫與建立裝置#include <Wire.h>

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

02
把程式腳位對回接線表// VCC → 3.3–5V 依模組、GND → GND、SDA → A4 / SDA、SCL → A5 / SCL、S0 → GND

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

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

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

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

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

05
輸出結果並控制取樣速度if (Wire.requestFrom(GY39_ADDR, (uint8_t)14) == 14) {

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

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

常見問題與故障排除

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

ERR 01

0x5B 沒有回應

先檢查:確認 S0 模式、SDA/SCL 與位址。

處理方式:依模組手冊將 S0 接地並重新掃描 I2C。

ERR 02

資料解析錯誤

先檢查:確認模組版本與資料格式。

處理方式:不要混用 UART 範例,先以同一版本手冊解析 14 bytes。

ERR 03

光度正常但氣壓異常

先檢查:確認模組內部 BME280 或版本。

處理方式:將結果視為模組整合資料,必要時核對晶片型號。

08 / NEXT MISSION

延伸挑戰

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

L1

光度變化

題目:遮光與照光,列印 lux。

解題方向

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

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

四種資料表

題目:記錄光度、溫度、濕度、氣壓。

解題方向

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

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

資料封包解析

題目:畫出 14 bytes 與各物理量的欄位對應。

解題方向

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

  1. 先匯入本頁 Blockly 範例,確認感測器在沒有加入挑戰功能時能穩定讀值。
  2. 保留 playrobot_gy39_setup,先把讀值送到序列埠,建立正常範圍或基準值。
  3. 依題目「畫出 14 bytes 與各物理量的欄位對應。」加入比較、分類、累計或時間判斷;門檻要用實測資料決定,不要直接猜一個數字。
  4. 用至少三種不同情境測試,記錄輸入、程式判斷與輸出結果,再修正門檻或取樣間隔。
完成檢核:完成後應能指出:哪一個積木取得資料、哪一段負責判斷或換算、先把資料整理成可觀察的序列埠或表格結果是否在所有測試情境都正確反應。
教師快速檢核4 POINT CHECK
  • 能說明 MCU_IIC 與 UART 模式差異。
  • 能正確使用 0x5B 與更新積木。
  • 能將多種環境資料分別解讀。
09 / EVIDENCE資料來源與版本展開查看 +
LAST REVIEWED / 2026-08-13

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

返回教學庫 →