
一、통신 프로토콜개요
1. 默认통신매개변수
- 통신 속도:
9600 - 데이터 비트:
8 - 패리티:无
- 정지 비트:
1(即9600/8/N/1) - 默认设备주소:
0x01 - 响应时间:< 100ms
2. CRC 검증
- 算法:CRC-16/Modbus(多项式
0x8005) - 체크섬형식:2 바이트,高位在前(如
CRC_H CRC_L)。 - 계산도구:参考 CRCTool 或사양书第 IX 章代码。
二、프로토콜功能详解
1. 읽기设备주소和固件버전
功能:获取当前设备주소和固件버전号。
请求형식(主机→센서)
| 바이트位置 | 데이터 | 설명 |
|---|---|---|
| 0 | 0xFE | 广播주소(所有设备响应) |
| 1 | 0x11 | 기능 코드(읽기주소) |
| 2-5 | 0x00 | 固定填充 |
| 6-7 | CRC | CRC 검증码 |
예제命令:
FE 11 00 00 00 01 28 06
响应형식(센서→主机)
| 바이트位置 | 데이터 | 설명 |
|---|---|---|
| 0 | 0x01 | 设备주소 |
| 1 | 0x11 | 기능 코드 |
| 2 | 0x02 | 데이터길이(2 바이트) |
| 3 | 0x12 | 固件버전(如 0x12=V1.2) |
| 4 | 0x01 | 当前주소 |
| 5-6 | CRC | CRC 검증码 |
예제响应:
01 11 02 12 01 70 5C
분석:
- 固件버전:
V1.2 - 设备주소:
0x01
2. 修改设备주소
功能:更改设备 Modbus 주소(范围 1~247)。
请求형식(主机→센서)
| 바이트位置 | 데이터 | 설명 |
|---|---|---|
| 0 | 当前주소 | 原주소(如 0x01) |
| 1 | 0x06 | 기능 코드(修改주소) |
| 2-4 | 0x00 | 固定填充 |
| 5 | 新주소 | 目标주소(如 0x02) |
| 6-7 | CRC | CRC 검증码 |
예제命令(修改주소为 0x02):
01 06 00 00 00 02 08 0B
响应형식(센서→主机)
与请求형식一致,返回修改后的주소确认。
예제响应:
01 06 00 00 00 02 08 0B
설명:响应데이터与请求相同表示修改成功。
3. 읽기센서데이터
功能:읽기指定레지스터的센서데이터(支持单次읽기多个센서)。
请求형식(主机→센서)
| 바이트位置 | 데이터 | 설명 |
|---|---|---|
| 0 | 设备주소 | 如 0x01 |
| 1 | 0x03 | 기능 코드(읽기데이터) |
| 2-3 | 시작주소 | 레지스터시작주소(高位在前) |
| 4-5 | 레지스터 수량 | 需읽기的레지스터 수량 |
| 6-7 | CRC | CRC 검증码 |
예제命令(읽기전체 11 个센서데이터):
01 03 00 00 00 0B C5 CD
响应형식(센서→主机)
| 바이트位置 | 데이터 | 설명 |
|---|---|---|
| 0 | 设备주소 | 如 0x01 |
| 1 | 0x03 | 기능 코드 |
| 2 | 데이터길이 | 바이트数(레지스터 수량 × 2) |
| 3~N | 센서데이터 | 每个레지스터 2 바이트(高位在前) |
| N+1~N+2 | CRC | CRC 검증码 |
예제响应(部分데이터):
01 03 16 00 96 00 64 00 32 00 30 00 28 00 1E 01 2C 00 0A 00 14 70 5C
분석:
00 96→ eCO₂ = 150 ppm00 64→ TVOC = 100 ppb00 32→ CH₂O = 50 μg/m³- 온습도데이터:
- 湿度:
0x012C→ 300 → 300/100 = 30.0%RH - 온도:
0x000A→ 10 → 10/100 = 0.10℃
4. 系统매개변수설정(高级功能)
4.1 읽기/设置통신 속도
레지스터주소:0x0103(통신 속도代码见附录表)。
읽기통신 속도请求:
01 03 01 03 00 01 CRC
设置통신 속도请求(设为 115200):
01 06 01 03 00 07 CRC
4.2 校准센서데이터
레지스터주소:
- 온도校准:
0x011D - 湿度校准:
0x011C
예제命令(온도校准 +2.5℃):
01 06 01 1D 00 FA 98 73
설명:
00 FA→ 250(即 250/100 = 2.5℃)- 负值需转换为补码(如
0xFF9C→ -100 → -1.00℃)。
三、데이터분석方法
1. 계산公式
| 센서유형 | 公式 | 예제 |
|---|---|---|
| eCO₂ | CO₂ = (CO₂_H << 8) + CO₂_L | 0x0096 → 150 ppm |
| 온도 | 온도 = 有符号值 / 100 | 0xFF9C → -100 → -1.00℃ |
| 조도 | Lux = (Lux_H << 8) + Lux_L | 0x01F4 → 500 Lux |
2. 有符号数处理
- 方法 1:直接转为有符号整数(如
0xFF9C→ -100)。 - 方法 2:若值 > 32767,则
真实值 = (原始值 - 65536) / 100。
四、注意事项
- 预热时间:VOC 模块需预热 ≥3 分钟,其他센서上电即用。
- 安装要求:
- 安装高度 ≥15cm,避免地面尘埃污染。
- 避免高粉尘(>300 μg/m³)、油烟或高湿度환경。
- 校准警告:
- 高级功能需谨慎操作,误修改可能导致데이터异常。
- 校准值需按实际환경调整,建议记录出厂默认值。
- CRC 검증:所有命令必须包含正确 CRC,否则设备无响应。
五、附录
1. 센서레지스터주소表
| 레지스터주소 | 센서유형 | 데이터형식 |
|---|---|---|
0x0000 | eCO₂ | 2 바이트无符号整数(ppm) |
0x0001 | TVOC | 2 바이트无符号整数(ppb) |
0x0002 | CH₂O | 2 바이트无符号整数(μg/m³) |
0x0003 | PM2.5 | 2 바이트无符号整数(μg/m³) |
0x0004 | 湿度 | 2 바이트(真实值 × 100) |
0x0005 | 온도 | 2 바이트(真实值 × 100) |
0x0006 | PM10 | 2 바이트无符号整数(μg/m³) |
0x0007 | PM1.0 | 2 바이트无符号整数(μg/m³) |
0x0008 | 조도 | 2 바이트无符号整数(Lux) |
0x0009 | MCU 온도 | 2 바이트(真实值 × 100) |
0x000A | 소음 | 2 바이트无符号整数(dB) |
2. 통신 속도代码表
| 代码 | 통신 속도 |
|---|---|
0 | 1200 |
1 | 2400 |
2 | 4800 |
3 | 9600 |
4 | 19200 |
5 | 38400 |
6 | 57600 |
7 | 115200 |
3. CRC 계산代码(C 언어예제)
uint16_t CRC16_Check(const uint8_t *pushMsg, uint8_t us데이터Len) {
uint8_t uchCRCHi = 0xFF, uchCRCLo = 0xFF;
uint8_t uIndex;
while (us데이터Len--) {
uIndex = uchCRCLo ^ *pushMsg++;
uchCRCLo = uchCRCHi ^ auchCRCHi[uIndex];
uchCRCHi = auchCRCLo[uIndex];
}
return (uint16_t)(uchCRCHi << 8 | uchCRCLo);
}
답글 작성