본문 바로가기

개인 연구실/기획실장의 연구실

PMS7003 테스트 소스코드

[출처 : 기획실장 직접촬영]


PMS7003 모듈이 도착했습니다. 다행이 선을 연결할 수 있는 핀도 함께 왔습니다. 첫 사진은 블로그 메인에 뜨는 그림이라 그럴싸 한 걸로 우선 올려놓고...


1. 핀 배열


PMS7003 핀배열을 우선 알아봅니다. 아마도 여기가 센서모듈 제작사의 홈페이지가 아닐까 추측합니다.


http://mntech.com.tw/PMS7003


중국어로 되어있지만 영어단어로 추측하면 별 내용은 없습니다.

[출처 : http://mntech.com.tw/PMS7003]


  핀은 총 10개이고, 1번,2번이 동일하게 직류5V, 3번,4번도 동일하게 GND입니다. 시리얼 통신에 쓰이는 RX와 TX핀이 각각 7번과 9번, Reset과 Set은 실질적으로  사용하진 않습니다. 

  그런데, 살짝 궁금증이 생깁니다. 윗 그림을 보면, 핀1과 핀10은 표시가 되어있는데, 핀2는 핀1의 왼쪽인지, 아니면 아랫쪽인지...에 따라 나머지 핀들 배치가 달라질 수 있습니다. 그래서 테스터로 직어봤습니다. 핀1의 아랫쪽이 핀2 입니다. 그 다음은 자연스럽게 핀1의 왼쪽핀이 핀3이 되겠습니다. 정리하면 아래와 같습니다.


 PIN9 TX

 PIN7 RX

 PIN5 RESET

 PIN3 GND

 PIN1 VCC

 PIN10 SET

 PIN8 NC

 PIN6 NC 

 PIN4 GND

 PIN2 VCC

[출처 : 기획실장 직접 작성]


  정리하면, 위의 표와 같이 진하게 표시된 네 개 핀만 사용하면 됩니다. 혹시나 핀2와 핀4를  VCC와 GND로 쓰셔도 전혀(!) 상관 없습니다.



2. 아두이노와 연결하기


  PMS7003 모듈은 시리얼 통신으로 측정 데이터를 읽어올 수 있습니다. 그런데 아두이노 우노는 하드웨어적으로 지원하는 시리얼 통신이 1개 뿐이라서 이 녀석은 주로 프로그램을 업로드 하거나 개발자의 디버깅용으로 많이 쓰니 그대로 두어야 편할 겁니다. 그래서 우리는 소프트웨어적으로 시리얼 포트를 구현한 "소프트웨어 시리얼"을 사용해서 PMS7003과 연결할 예정입니다. 


  SoftwareSerial 에 관해서는 여기를 참고하세요 => https://www.arduino.cc/en/Reference/SoftwareSerial


  이미 소프트웨어시리얼 라이브러리는 아두이노 개발환경에 포함되어 있기 때문에 사용법은 아주 간단합니다.

  소스코드 제일 윗 부분에 아래 헤더파일을 인클루드 하시고, 시리얼포트로 사용하고자 하는 이름을 정해서 해당하는 아두이노 핀을 써주면 됩니다(아랫 줄을 그대로 쓰시면 됩니다).



#include <SoftwareSerial.h> 


 SoftwareSerial Serial1(10, 11); // RX, TX



  자, 그럼 아두이노의 5V 핀에 PMS7003의 1번핀을 연결하고, 아두이노 GND핀에 PMS7003의 3번핀을 연결합니다. 그리고 소프트웨어시리얼에 정의된 대로 아두이노 10번 핀(RX)에 PMS9번 핀(TX)을, 아두이노 11번 핀(TX)에 PMS7003의 7번 핀(RX)을 연결합니다. 요렇게 4개만 연결하면 끝!


 PMS7003 모듈 핀

아두이노 우노 

 1번 VCC

 아두이노 5V 

 3번 GND 

 아두이노 GND 

 7번 RX 

 아두이노 11번 소프트웨어시리얼 TX 

 9번 TX

 아두이노 10번 소프트웨어시리얼 RX 



3. 테스트 코드 


  구글링을 살짝 해보면 쉽게 찾을 수 있는 테스트 코드입니다.


https://github.com/MartyMacGyver/PMS7003-on-Particle/blob/master/pms7003-photon-demo-1/pms7003-photon-demo-1.ino


  이 소스코드를 가져와서 쓰시면 되는데, 에러가 발생하는 한 줄이 있어서 그것부터 우선 주석처리 합니다. 191번 줄 Particle....... 로 되어있는 줄 앞에 주석처리를 해줍니다(아래와 같이....).



 //    Particle.publish("Data1", printbuf, 60, PRIVATE);



  그리고, 앞에서 이야기한 소프트웨어 시리얼을 사용하기 위한 두 줄을 소스코드 제일 위에 추가해 줍니다.



#include <SoftwareSerial.h> 


 SoftwareSerial Serial1(10, 11); // RX, TX



  소프트웨어시리얼 이름을 Serial1로 한 이유는 우리가 구한 소스코드가 Serial1로 되어있어서 그렇습니다. 


자, 이렇게 수정해서 컴파일하고 아두이노에 업로드해보니...


[출처 : 기획실장 직접 시연장면을 캡처]


  이렇게 결과가 나오는군요^^ 결과에 대한 의미는 좀 더 공부해보고 따로 정리해서 올리겠습니다. 


  그럼 즐거운 한 주가 되시길~