---
# System prepended metadata

title: SHT20 溫濕度感測器 Modbus RS485 應用說明
tags: [Nuvoton]

---

# SHT20 溫濕度感測器 Modbus RS485 應用說明

作者： Jack OmniXRI, 2025/11/10

![RS485_SHT20](https://hackmd.io/_uploads/rkwan7yebe.jpg)


這裡將網路上的資料重新整理了一下，方便大家了解這個 SHT20 感測器，更完整的資料可參考文末相關連結。

## 產品說明

產品採用工業級芯片，高精度進口 SHT20 溫濕度傳感器，確保產品的優異可靠性、高精度、互換性。採用 RS485 硬體接口(具有防雷設計)，協議層兼容標準的工業 Modbus-Rtu 協議。本產品集 MODBUS 協議與普通協議於一體，用戶可以自行選擇通信協議，普通協議帶有自動上傳功能（連接RS485通過串口調式工具即會自動輸出溫濕度）。

## 產品亮點

* 工業級產品，高精度 SHT20 溫濕度感測器，RS485 通信。
* 標準 MODBUS 協議與普通協議於一體，用戶可以自行選擇通信協議。
* 鮑率可以自行設定。
* 普通協議帶有自動上傳功能，上傳速率可以自行設定。 

## 產品參數

* 工作電壓：DC4-30V（不要超過33V）
* 大功率：0.2W
* 工作溫度：溫度-20℃+60℃，濕度0%RH-RH
* 控制精度：溫度±0.3℃(25℃)，濕度±3%RH(25℃)
* 輸出接口：RS485通信（標準 MODBUS 協議和自定義普通協議），詳見協議說明。
* 設備地址：可設置1-247，默認為1。
* 鮑率：默認9600bps（用戶可自行設定），8位數據，1位停止，無校驗
* 尺寸：60*30*18 mm

## MODBUS 協議

產品所用功能碼：
* 0x03 : 讀取保持寄存器
* 0x04 : 讀取輸入寄存器
* 0x06 : 寫入單個保持寄存器
* 0x10 : 寫入多個保持寄存器

| 暫存器類型 | 暫存器位址 | 資料內容 | 位元組數 |
| :------: | :------: | :------: | :------: |
| 輸入暫存器 | 0x0001 | 溫度值    | 2 |
|          | 0x0002 | 濕度值    | 2 |
| 保持暫存器 | 0x0101 | 設備位址<br>(1~247) | 2 |
|          | 0x0102 | 鮑率<br> 0:9600<br> 1:14400<br> 2:19200 | 2 |
|          | 0x0103 | 溫度修正值(/10)<br> -10.0 ~ +10.0 | 2 |
|          | 0x0104 | 濕度修正值(/10)<br> -10.0 ~ +10.0 | 2 |

## Modbus 通訊格式

* **主機(Host)發送資料格式**

| 從機位址 | 功能碼 | 暫存器位址<br> 高位元組 | 暫存器位址<br> 低位元組 | 暫存器數量<br> 高位元組 | 暫存器數量<br> 低位元組 | CRC<br> 高位元組 | CRC<br> 低位元組 | 
| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: |

* **從機(Slave)回應資料格式**

| 從機位址 | 功能碼 | 資料數量 | 回應資料1<br> 高位元組 | 回應資料1<br> 低位元組 | 回應資料N<br> 高位元組 | 回應資料N<br> 低位元組 | CRC<br> 高位元組 | CRC<br> 低位元組 | 
| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: |  :------: |

## MODBUS 命令範例

### 範例一：讀取溫度值

主機讀取從機編號 0x01 的溫度，功能碼為 0x04，即從設備編號 0x01 暫存器位址 0x0001 讀取 1 組暫存器數值(2個位元組）。

| 從機位址 | 功能碼 | 暫存器位址<br> 高位元組 | 暫存器位址<br> 低位元組 | 暫存器數量<br> 高位元組 | 暫存器數量<br> 低位元組 | CRC<br> 高位元組 | CRC<br> 低位元組 |
| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: |
| 0x01 | 0x04 | 0x00 | 0x01 | 0x00 | 0x01 | 0x60 | 0x0A | 

從機回應溫度內容：

| 從機位址 | 功能碼 | 資料數量 | 回應資料1<br> 高位元組 | 回應資料1<br> 低位元組 |  CRC<br> 高位元組 | CRC<br> 低位元組 | 
| :------: | :------: | :------: | :------: | :------: | :------: | :------: |
| 0x01 | 0x04 | 0x02 | 0x01 | 0x31 | 0x79 | 0x74 | 

溫度值 = 0x131,轉換成十進制305，實際溫度值 = 305 / 10 = 30.5℃

註：溫度是有符號16進制數，溫度值 = 0xFF33,轉換成十進制 -205，實際溫度 = -205 / 10 = -20.5℃；

### 範例二：讀取濕度值

主機讀取從機編號 0x01 的濕度，功能碼為 0x04，即從設備編號 0x01 暫存器位址 0x0002 讀取 1 組暫存器數值(2個位元組）。

| 從機位址 | 功能碼 | 暫存器位址<br> 高位元組 | 暫存器位址<br> 低位元組 | 暫存器數量<br> 高位元組 | 暫存器數量<br> 低位元組 | CRC<br> 高位元組 | CRC<br> 低位元組 |
| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: |
| 0x01 | 0x04 | 0x00 | 0x02 | 0x00 | 0x01 | 0xC1 | 0xCA | 

從機回應濕度內容：

| 從機位址 | 功能碼 | 資料數量 | 回應資料1<br> 高位元組 | 回應資料1<br> 低位元組 |  CRC<br> 高位元組 | CRC<br> 低位元組 | 
| :------: | :------: | :------: | :------: | :------: | :------: | :------: |
| 0x01 | 0x04 | 0x02 | 0x02 | 0x22 | 0xD1 | 0xBA | 

濕度值 = 0x222,轉換成十進制546，實際濕度值 = 546 / 10 = 54.6%；

### 範例三：連續讀取溫濕度值

主機讀取從機編號 0x01 的濕度，功能碼為 0x04，即從設備編號 0x01 暫存器位址 0x0001 連續讀取 2 組暫存器數值(4個位元組），表示溫度和濕度。

| 從機位址 | 功能碼 | 暫存器位址<br> 高位元組 | 暫存器位址<br> 低位元組 | 暫存器數量<br> 高位元組 | 暫存器數量<br> 低位元組 | CRC<br> 高位元組 | CRC<br> 低位元組 |
| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: |
| 0x01 | 0x04 | 0x00 | 0x01 | 0x00 | 0x02 | 0x20 | 0x0B | 

從機回應溫度內容：

| 從機位址 | 功能碼 | 資料數量 | 回應資料1<br> 高位元組 | 回應資料1<br> 低位元組 | 回應資料2<br> 高位元組 | 回應資料2<br> 低位元組 | CRC<br> 高位元組 | CRC<br> 低位元組 | 
| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: |
| 0x01 | 0x04 | 0x04 | 0x01 | 0x31 | 0x02 | 0x22 | 0x2A | 0xCE | 

回應資料1（暫存器位址 0x0001）為溫度，回應資料2（暫存器位址 0x0002）為濕度。

### 範例四：從保持暫存器讀取內容

主機讀取從機編號 0x01 的設備編號，功能碼為 0x03，即從設備編號 0x01 暫存器位址 0x0101 讀取 1 組暫存器數值(2個位元組）。

| 從機位址 | 功能碼 | 暫存器位址<br> 高位元組 | 暫存器位址<br> 低位元組 | 暫存器數量<br> 高位元組 | 暫存器數量<br> 低位元組 | CRC<br> 高位元組 | CRC<br> 低位元組 |
| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: |
| 0x01 | 0x03 | 0x01 | 0x01 | 0x00 | 0x01 | 0xD4 | 0x0F | 

從機回應內容：

| 從機位址 | 功能碼 | 資料數量 | 回應資料1<br> 高位元組 | 回應資料1<br> 低位元組 |  CRC<br> 高位元組 | CRC<br> 低位元組 | 
| :------: | :------: | :------: | :------: | :------: | :------: | :------: |
| 0x01 | 0x03 | 0x02 | 0x00 | 0x01 | 0x30 | 0x18 | 

0x01 號從機回應設備號為 0x0001。

### 範例五：寫入資料到保持暫存器

主機改變從機編號將 0x01 變為 0x08，功能碼為 0x06，即對設備編號 0x01 暫存器位址 0x0101 寫入 1 組暫存器數值(2個位元組）。

| 從機位址 | 功能碼 | 暫存器位址<br> 高位元組 | 暫存器位址<br> 低位元組 | 暫存器內容<br> 高位元組 | 暫存器內容<br> 低位元組 | CRC<br> 高位元組 | CRC<br> 低位元組 |
| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: |
| 0x01 | 0x06 | 0x01 | 0x01 | 0x00 | 0x08 | 0xD4 | 0x0F | 

從機回應內容與發送相同：

| 從機位址 | 功能碼 | 暫存器位址<br> 高位元組 | 暫存器位址<br> 低位元組 | 暫存器內容<br> 高位元組 | 暫存器內容<br> 低位元組 | CRC<br> 高位元組 | CRC<br> 低位元組 |
| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: |
| 0x01 | 0x06 | 0x01 | 0x01 | 0x00 | 0x08 | 0xD4 | 0x0F | 

### 範例六：連續修改保持暫存器

主機改變從機編號將 0x01 變為 0x20（即十進制32）且鮑率變為 0x2580（即十進制 9600），功能碼為 0x10，即對設備編號 0x01 暫存器位址 0x0101 連續寫入 2 組暫存器數值(4個位元組）。

| 從機位址 | 功能碼 | 暫存器位址<br> 高位元組 | 暫存器位址<br> 低位元組 | 暫存器數量<br> 高位元組 | 暫存器數量<br> 低位元組 | 位元組數 | 暫存器1<br> 高位元組 |暫暫存器1<br> 低位元組 | 暫存器1<br> 高位元組 |暫暫存器1<br> 低位元組 | CRC<br> 高位元組 |CRC<br> 低位元組 |
| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | 
| 0x01 | 0x10 | 0x01 | 0x01 | 0x00 | 0x02 | 0x04 | 0x00 | 0x20 | 0x25 | 0x80 | 0x25 | 0x09 |

從機回應內容與發送相同：

| 從機位址 | 功能碼 | 暫存器位址<br> 高位元組 | 暫存器位址<br> 低位元組 | 暫存器數量<br> 高位元組 | 暫存器數量<br> 低位元組 | 位元組數 | 暫存器1<br> 高位元組 |暫暫存器1<br> 低位元組 | 暫存器1<br> 高位元組 |暫暫存器1<br> 低位元組 | CRC<br> 高位元組 |CRC<br> 低位元組 |
| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | 
| 0x01 | 0x10 | 0x01 | 0x01 | 0x00 | 0x02 | 0x04 | 0x00 | 0x20 | 0x25 | 0x80 | 0x25 | 0x09 |

## 普通版本協議

鮑率默認為 9600bps（用戶可自行設定），8位元資料，1位停止位元，無校驗。

* RS485通訊格式：

| 序列命令 | 說明 |
| :------: | :------: |
| READ | 觸發一次溫濕度上報 |
| AUTO | 啟動溫濕度自動上報 |
| STOP | 停止溫濕度自動上報 |
| BR：XXXX | 設置鮑率 9600~19200 |
| TC：XX.X | 設定溫度校準 -10.0 ~ +10.0 |
| HC：XX.X | 設定濕度校準 -10.0 ~ +10.0 |
| HZ：XX.X | 設定溫濕度上報速度 0.5, 1,2,5,10 HZ |
| PARAM | 讀取系統目前設定值 |

* PARAM 指令
  **TC:0.0,HC:0.0,BR:9600,HZ:1** 表示溫度修正值 0.0, 濕度修正值 0.0, 鮑率 9600bps, 上報速率 1 HZ。
  **SLAVE_ADD：1** 表示 MODBUS 從機位址（設備編號）為 0x01

SLAVE_ADD:1->MODBUSthe slave address0x01

## 參考文獻

* 溫濕度變送器 SHT20傳感器 工業級高精度溫濕度監測 Modbus RS485
https://www.ruten.com.tw/item/show?22025708278575

* SHT20 เซ็นเซอร์วัดอุณหภูมิและความชื้น Temperature and Humidity Transmitter SHT20 RS485 Sensor Module
https://www.cybertice.com/product/4802/sht20-%E0%B9%80%E0%B8%8B%E0%B9%87%E0%B8%99%E0%B9%80%E0%B8%8B%E0%B8%AD%E0%B8%A3%E0%B9%8C%E0%B8%A7%E0%B8%B1%E0%B8%94%E0%B8%AD%E0%B8%B8%E0%B8%93%E0%B8%AB%E0%B8%A0%E0%B8%B9%E0%B8%A1%E0%B8%B4%E0%B9%81%E0%B8%A5%E0%B8%B0%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1%E0%B8%8A%E0%B8%B7%E0%B9%89%E0%B8%99-temperature-and-humidity-transmitter-sht20-rs485-sensor-module

* TTL轉RS485工業用轉換模組(MAX1348)
https://jin-hua.com.tw/page/product/show.aspx?num=35141&lang=TW

![](https://jin-hua.com.tw/upload/images/2430000014178-901.jpg =240x)

![](https://jin-hua.com.tw/upload/images/2430000014178-903.jpg =240x)

