---
title: XY-MD02
tags: Device Integration
image:
---
# XY-MD02
:::info
* IC: SHT20 [datasheet](https://www.mouser.com/datasheet/2/682/Sensirion_Humidity_Sensors_SHT20_Datasheet-1274196.pdf)
* [Manual](http://www.sah.rs/media/sah/techdocs/xy-md02-manual.pdf)
:::
[toc]
MD02為一台溫溼度檢測機,可經由RS485控制,baud rate 初始設定為9600
## 運作環境

## 接線方式
上述已知此設備的傳輸方式為RS-485,所以主機設定serial port 以RS485輸出,由於現有主機端都僅有DB9或者USB接口,所以根據下列方式接線即可,將設備A、B端分別接入端子台1、2孔位,如下圖所示,注意,部分電腦需跳線

## 03h command

此程式碼為讀取機器內部register value,每一Byte以空白鍵區分,注意主機端baud rate設定需改成9600
### Master Transmin

* ID 1byte
機器初始設定為ID=1
* 04h 1byte
為04h command 代碼
* Address 1word(2byte)
為記憶體起始位,以下為常用起始位

* Quantity 1word(2byte)
需讀取的Register byte數,最長支援36 byte
* CRC16 1word(2byte)
CRC(Cyclic redundancy check)檢查碼,根據特定算法計算出的2byte檢查碼,詳細算法參考[Wikipedia 循環冗餘校驗](https://zh.m.wikipedia.org/zh-tw/%E5%BE%AA%E7%92%B0%E5%86%97%E9%A4%98%E6%A0%A1%E9%A9%97)
### Slave Reply

* ID 1byte
機器初始設定為ID=1。廣播模式 ID=EF
* 04h 1byte
為04h command 代碼
* Bytes(n) 1byte
紀錄本次register value 回傳byte數
* Register Value
回傳register value 紀錄資料,在register中資料以固定排序紀錄,slave 會根據master transmit 的address起始位開始讀取 quantity數量並回傳,資料排序詳細參考排序為下
* CRC16 1word(2byte)
CRC(Cyclic redundancy check)檢查碼,根據特定算法計算出的2byte檢查碼,詳細算法參考[Wikipedia 循環冗餘校驗](https://zh.m.wikipedia.org/zh-tw/%E5%BE%AA%E7%92%B0%E5%86%97%E9%A4%98%E6%A0%A1%E9%A9%97)
example:
以下為一個讀取機器溫度與濕度的範例
格式
Master Transmin:

01 04 00 01 00 01 60 0A
Slave Reply:

01 04 02 09 83 24 77
09 83 為temperature,以1word紀錄,即0983=2435 temperature 為 24.35℃
!!!PS. 計算方式與網頁中的方式不一樣,換算後的數值是除以100,並非文件中除以10!!!
## Thingsboard gateway config
```
{
"master": {
"slaves":[
{
"type": "serial",
"method": "rtu",
"port": "/dev/ttyUSB0",
"baudrate": 9600,
"timeout": 35,
"unitId": 1,
"bytesiaze": 8,
"byteOrder":"BIG",
"wordOrder":"BIG",
"retries":true,
"retryOnEmpty":true,
"pollPeriod":5000,
"deviceName": "MD02",
"deviceType":"intelligent cabinet",
"attributesPollPeriod": 5000,
"timeseriesPollPeriod": 5000,
"sendDataOnlyOnChange": false,
"connectAttemptTimeMs":5000,
"connectAttempCount":5,
"waitAfterFailedAttemptsMs":300000,
"attributes": [
],
"timeseries":[
{
"tag": "temperature",
"type": "16uint",
"functionCode": 4,
"objectsCount": 1,
"address": 1,
"divider": 100
} ,
{
"tag" : "MD02_humidity",
"type": "16uint",
"functionCode": 4,
"objectsCount": 1,
"address": 2,
"divider": 100
}
],
"attributeUpdates":[
],
"rpc":[
]
}
]
}
}
```
## Troubleshooting
XY_MD02在與其他器材長時間串連時~(20分鐘-1小時,看polling次數約100-200次)~,可能會發生設備無回應的問題,而同時連結的iAeris 20 仍可繼續回傳,目前還不確定原因,猜測可能是 firmware 造成的原因

**將線材改用雙絞線後**,有大幅提升設備連接穩定度
## Reference
[Manual](http://www.sah.rs/media/sah/techdocs/xy-md02-manual.pdf)
[露天賣家](https://www.ruten.com.tw/item/show?22025708149291)
[Wikipedia 循環冗餘校驗](https://zh.m.wikipedia.org/zh-tw/%E5%BE%AA%E7%92%B0%E5%86%97%E9%A4%98%E6%A0%A1%E9%A9%97)
[16進制線上轉換器](https://www.convertworld.com/zh-hant/numerals/hexadecimal.html)
[CRC計算機](https://www.lddgo.net/encrypt/crc)