[출처 : http://mntech.com.tw/PMS7003]
PMS7003 프로토콜은 지난 번에 링크로 걸었던 곳에 중국어 버전 스펙에 설명이 나와 있습니다.
https://drive.google.com/file/d/0B6jowxS0fbXsQi1MSHR5UzFPa3c/view
스펙의 앞 부분은 모듈의 전기적 특성이나 기능요약, 외관에 대한 설명이고, 제일 마지막 페이지를 보면 프로토콜 설명이 나옵니다.
1. 시리얼 통신 연결
우선 시리얼 통신으로 접속할 때, 설정할 부분입니다.
전송 속도 : 9600Kbps 패리티 비트 : No 스탑 비트 : 1 |
2. 프로토콜
이렇게 연결을 하고 읽어오면 데이터가 수루룩~~ 잃혀오는데, 8비트 단위로 끊어보면 아래와 같은 의미가 있습니다.
[2BYTE] 시작문자 : 0x42 0x4d [2BYTE] 프레임길이 = 2x13 + 2 (데이터 + 패리티 비트) [2BYTE] 데이터1 : PM1.0 표시 (CF=1 표준 입자 물질) [2BYTE] 데이터2 : PM2.5 표시 (CF=1 표준 입자 물질) [2BYTE] 데이터3 : PM10 표시 (CF=1 표준 입자 물질) [2BYTE] 데이터4 : PM1.0 표시 (대기상태하에서) [2BYTE] 데이터5 : PM2.5 표시 (대기상태하에서) [2BYTE] 데이터6 : PM10 표시 (대기상태하에서) [2BYTE] 데이터7 : 0.1 직경미터 공기당 0.3um이상 입자개수 [2BYTE] 데이터8 : 0.1 직경미터 공기당 0.5um이상 입자개수 [2BYTE] 데이터9 : 0.1 직경미터 공기당 1.0um이상 입자개수 [2BYTE] 데이터10 : 0.1 직경미터 공기당 2.5um이상 입자개수 [2BYTE] 데이터11 : 0.1 직경미터 공기당 5.0um이상 입자개수 [2BYTE] 데이터12 : 0.1 직경미터 공기당 10um이상 입자개수 [1BYTE] 버전 정보 [1BYTE] 에러 [2BYTE] 체크썸 = 1 + 2 + start code data ...... .. + 13 low eight data |
날아오는 데이터가 0x42 0x4d로 시작되면 이제 프레임이 시작된다는 이야깁니다. 그 다음 프레임 길이가 나오는데 숫자로 계산해보면 0x1C 즉, 28개로 표시됩니다. 그런데 2바이트로 날아오니 0x00 0x1C로 찍힙니다. 이건 뭐 모듈과 예제소스가 알아서 할 일이고...
우리가 관심있는 부분은 시작분자로부터 다섯번 째 값부터 입니다. CF=1 표준입자물질일때 PM1.0 값을 2BYTE로 표시합니다. 사실 이게 무슨 소린지 잘 모르겠습니다. 어떤 표준조건에서 PM1.0 값인것 같습니다. 그렇게 PM2.5, PM10을 표시하고 나면 이번엔 대기상태 아래에서 PM값을 또 보여줍니다.
그렇게 6개 값을 받고, 뒤 이어 0.1 직경미터 공기당 0.3um이상 입자개수를 보여줍니다. 점점 더 큰 입자를 보여주고 마지막에 10um이상 입자개수를 보여줍니다.
버전정보, 에러, 체크썸은 이미 예제 소스에서 처리해주니까 크게 신경 안 써도 될 것 같습니다.
3. 디버깅 모드
프로토콜과 화면에 찍히는 데이터들의 관계를 정확하게 보시고 싶으시면, 소스코드의 아래 부분을 수정하시면 됩니다.
const bool DEBUG = false; => false를 true로 수정 |
이렇게 하시면, 아래 캡쳐처럼 읽는 한 바이트 바이트당 표시되는 값이 정리되어서 나옵니다. 대신 스크롤이 후루룩~ 되어버리니 정신 없습니다.
[출처 : 기획실장이 직접 캡쳐함]
디버깅 모드가 아니면 이렇게 결과만 찍힙니다.
[출처 : 기획실장이 직접 캡쳐함]
4. 데이터 종류
여하튼 중국어 스펙을 구글 번역기로 돌려보다 보니, 정확하게 이해가 안 됩니다. 하지만, 데이터 형태를 보면 크게 세 가지 형태로 나온다는 것을 알 수 있습니다.
1. CF=1인 조건에서 PM 데이터 => "CF1" 로 표기됨 3. 단위 면적당(부피당?) 크기별 입자 갯수 => "raw"로 표기됨
|
실제로 터미널 창에 찍히는 예를 보면 아래와 같습니다(ver이하는 삭제함).
PMS7003 [42 4d] (001c) CF1=[0000 0002 0004] amb=[0000 0002 0004] raw=[0129 003d 000c 0002 0002 0000] |
이제 앞으로 조사해야 될 내용은, 저 세가지 데이터 중에서 우리가 원하는 현재 대기중의 미세먼지는 어떤 값을 참고하는게 가장 좋으냐...하는 것입니다. 이 문제는...
함께 풀어보시죠^^