Arduino 非接觸式溫度計|GY-906+0.91 吋 OLED
用Arduino搭配GY-906紅外線測溫模組與0.91吋OLED顯示器,打造非接觸式溫度計。透過I2C介面同時連接兩個模組,即時將物體表面溫度顯示在螢幕上。
大家還記得疫情期間,天天用的溫度計嗎?今天這篇教學就是要用 GY-906(MLX90614)紅外線測溫模組搭配 0.91 吋 OLED 顯示器,打造一個迷你非接觸式溫度計。
關於 GY-906(MLX90614)
GY-906 模組的核心是 Melexis 的 MLX90614 紅外線溫度感測器。它利用偵測物體發出的紅外線輻射來計算溫度,完全不需要接觸目標物。
主要規格如下:
- 測量範圍:-70°C ~ 380°C(物體溫度)
- 精度:±0.5°C(0~50°C 範圍)
- 通訊介面:I2C(預設位址
0x5A) - 工作電壓:3V ~ 5V
材料清單
| 材料 | 數量 |
|---|---|
| Arduino UNO | 1 |
| GY-906(MLX90614)模組 | 1 |
| 0.91 吋 OLED 顯示器(I2C,SSD1306) | 1 |
| 麵包板 | 1 |
| 杜邦線 | 若干 |


腳位接線
GY-906 和 OLED 都使用 I2C 通訊,可以同時掛在同一組 SDA/SCL 線上。
Arduino UNO 的 I2C 腳位:
- SDA → A4
- SCL → A5
| 模組 | 模組腳位 | Arduino UNO |
|---|---|---|
| GY-906 | VCC(VDD) | 5V(或 3.3V) |
| GY-906 | GND(VSS) | GND |
| GY-906 | SDA | A4 |
| GY-906 | SCL | A5 |
| OLED | VCC | 3.3V(或 5V) |
| OLED | GND | GND |
| OLED | SDA | A4 |
| OLED | SCL | A5 |
⚠️ 注意: GY-906 與 OLED 的 SDA、SCL 直接並聯到同一腳位即可,I2C 匯流排支援多個裝置同時連接。

安裝函式庫
這個專案需要安裝以下三個函式庫,請在 Arduino IDE 的「程式庫管理員」中搜尋並安裝:
- Adafruit MLX90614 Library(用於 GY-906 溫度讀取)
- Adafruit GFX Library(OLED 繪圖底層)
- Adafruit SSD1306(OLED 驅動)
開啟路徑:選單 → 工具 → 管理程式庫,逐一搜尋安裝。
程式碼
/*
* Arduino 非接觸式測溫器範例
* 使用 GY-906(MLX90614)搭配 0.91 吋 OLED
* 由傑森創工提供
*
* 請先安裝:
* - Adafruit MLX90614 Library
* - Adafruit GFX Library
* - Adafruit SSD1306
*
* 粉絲團:https://www.facebook.com/jasonshow
* 傑森創工購物網:https://www.jmaker.com.tw/
* 傑森創工部落格:https://blog.jmaker.com.tw/
*/
#include <Wire.h>
#include <Adafruit_MLX90614.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED 寬度(像素)
#define SCREEN_HEIGHT 32 // OLED 高度(像素)
// OLED Reset 腳位
// I2C 版本的 OLED 通常沒有獨立 Reset 腳,設為 -1 即可
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
void setup() {
Serial.begin(9600);
// 初始化 OLED,I2C 位址 0x3C(0.91 吋常見位址)
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 初始化失敗,請檢查接線"));
for (;;); // 停住不繼續執行
}
// 開機顯示歡迎畫面
display.clearDisplay();
display.setRotation(2); // OLED 顯示方向,可依安裝方向調整(0~3)
display.setTextSize(4); // 字體大小
display.setTextColor(SSD1306_WHITE); // 顯示顏色(OLED 只有亮/暗)
display.setCursor(0, 0);
display.print("Hello~");
display.display();
delay(1000);
// 初始化 MLX90614
Serial.println("MLX90614 紅外線溫度感測器啟動");
mlx.begin();
}
void loop() {
// 將環境溫度與物體溫度輸出到序列埠監控視窗
Serial.print("環境溫度 = ");
Serial.print(mlx.readAmbientTempC());
Serial.print(" °C\t物體溫度 = ");
Serial.print(mlx.readObjectTempC());
Serial.println(" °C");
// 在 OLED 顯示物體溫度
display.clearDisplay();
// 大字體顯示溫度數值(取到小數點後 1 位)
display.setTextSize(4);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 4);
display.print(mlx.readObjectTempC(), 1);
// 小字體顯示「°C」單位
display.setTextSize(2);
display.setCursor(99, 0);
display.print("o"); // 上標圓圈代表「度」
display.setTextSize(3);
display.setCursor(109, 12);
display.print("C");
display.display();
delay(500);
}
程式說明
初始化部分(setup):
OLED_RESET -1:I2C 版本的 0.91 吋 OLED 通常沒有獨立 Reset 腳,設為-1讓它與 Arduino 共用 Reset,這樣才不會初始化失敗。display.begin(SSD1306_SWITCHCAPVCC, 0x3C):指定 OLED 的 I2C 位址。大多數 0.91 吋模組預設為0x3C,少數為0x3D,若無法啟動可以嘗試換一下。display.setRotation(2):旋轉顯示方向,0~3各代表不同角度,可依你的安裝方向調整。mlx.begin():初始化 MLX90614,GY-906 的 I2C 位址預設為0x5A,與 OLED 的0x3C不衝突。
主迴圈(loop):
mlx.readAmbientTempC():讀取感測器本身周圍的環境溫度。mlx.readObjectTempC():讀取被偵測目標物的表面溫度,這才是我們要顯示的值。display.print(mlx.readObjectTempC(), 1):第二個參數1代表顯示到小數點後一位,例如36.5。°C符號用兩段文字拼出:上方小字的o充當度數符號,下方大字的C是攝氏。

常見問題
Q:OLED 開機後一片黑,什麼都沒顯示? 先用 I2C Scanner 程式確認 OLED 的位址。搜尋 "Arduino I2C Scanner" 可以找到範例,燒錄後開啟序列埠監控視窗查看實際位址。
Q:溫度讀到的值明顯偏高或偏低? MLX90614 感測到的是物體的「表面輻射溫度」,測量距離建議在 1~5 公分,且要對準目標物中心。隔著玻璃或反光面量測會有誤差。
Q:兩個模組同時接上就無法運作? 確認 SDA 和 SCL 有正確並聯,GND 也要共地。另外確認電源足夠,OLED 和 MLX90614 同時運作時電流需求會增加。
成果展示
燒錄完成後,OLED 會先顯示 Hello~,接著進入主迴圈,畫面上會即時更新顯示物體溫度,單位 °C。同時也可以開啟序列埠監控視窗(9600 baud)看到環境溫度與物體溫度。
傑森創工|jmaker.com.tw | blog.jmaker.com.tw | Facebook