ESP8266, espeasy, HA, MQTT, 센서를 이용하여 실내공기질을 측정하자(3)-미세먼지

3. pms7003

 알리에서 구매 약 20,000원

 가. 하드웨어연결

pms7003 선 연결은 작고 네모난 모양의 커넥터를 사용한다. 보통 핀헤더로 연결하는 점퍼는 안들어가고, 사진과 같이 생긴 어댑터보드가 필요하다. 위 링크는 센서+어댑터로 구성되어있다. 어댑터빼고 싸게 파는것도 있는데 이거는 다른특별한 수단 있는거 아님 사지말자. 심히 고생한다(고 한다).

주의할점은 이 어댑터를 끼우는 방향이다. 케이블 나오는 쪽이 센서 아래로 가도록 꽂아야 한다. 반대로 꽂으면 핀연결이 달라진다. 다른핀은 큰문제가 아닐수 있는데 5v가 set에 붙는 관계로 모듈에 문제가 생길수 있다(set은 3.3v로 신호 받게 되어있다)

pms7003도 전원은 5v로 공급받고 통신은 3.3v로 하는 센서이다. 센서에는 각인이 안되어있는데 어댑터보드에는 각인이 되어있으니 연결이 편하다. 저 보드를 꽂고, 케이블 중간을 잘라서 적당히 해체한다음에 필요한 곳에 연결하면된다. 아니면 하네스커텍터 10핀(아마도 이런거)짜리를 사서 이어도 되는데 그럼 또 납땜하고 더 복잡해질수도 있다.

Function: Pin PMS7003 ESP8266 VCC 1 or 2 5V GND 3 or 4 GND TX 9 1st GPIO specified in Device-settings Set 10 free gpio
Reset 5 3rd GPIO specified in Device-settings

nodemcu의 경우 5v는 vin이라는 이름으로 있다. tx는 빈 gpio에 연결하면 espeasy에서 설정할 수 있다. set도 마찬가지. reset도 마찬가지이긴한데, reset은 꼭 필요아지 않은 것으로 보인다. esp8266의 gpio는 생각보다 많지 않기 때문에 다른센서 연결할거면 reset은 연결하지 않아도 좋다. reset과 set은 gpio만 연결하면안되고, 연결한 후에 접점과 3.3v 사이를 10k옴 저항으로 이어줘야 한다(풀업 저항). 이게 귀찮아서라도 reset 은 연결안하게 된다. set도 그냥 비워놔도 되는데, 수명때문에 연결해주는게 좋다. rx는 연결하지 않아도 된다(pms7003은 특별한 다른 조치가 없을경우 전원+set이 3.3v일 경우 자동으로 주기적으로 센서값을 리포팅한다.) 



나. espeasy 설정



gpio<-tx는 pms7003의 tx와 연결된 핀이다.gpio->rx는 실질적으로 쓰이지는 않는데 설정을 안하면 에러가 나서 있는 부분이다. 아무거나 설정해줘도 된다. reset은 해도된고 안해도된다. 연결해주면(위에서 본것처럼 저항도 필요) esp8266이 리셋될때 pms7003에도 리셋신호를 보내서 리셋한다(고 한다).

set은 연결안했으면 여기서 끝내면되는데(이때는 device 이름을 dust_raw가 아닌 dust로 바꿔주어야 한다), set을 연결하면 rule을 추가해줘야 한다. espeasy에 rule 탭이 있으면 아래 내용을 rule에 추가하고 submit 하면되고, rule이 없으면 tools-advanced-rules에 체크박스를 체크하고 새로고침하면 rule탭이 생긴다.

on System#Boot do
  gpio,14,0
  timerSet,1,120
endon
On Rules#Timer=1 do
  LongPulse,14,1,50
  timerSet, 2, 40
endon
On Rules#Timer=2 do
  publish /%sysname%/dust/pm1.0,[dust_raw#pm1.0]
  publish /%sysname%/dust/pm2.5,[dust_raw#pm2.5]
  publish /%sysname%/dust/pm10,[dust_raw#pm10]
  timerSet,1,120
endon
이건 2분동안 센서를 재우고, 2분지나면 센서를 살려 50초동안 신호를 받으며, 그 중 40초 경과후에 센서값을 뽑아서 mqtt로 보내는 방식이다.
이렇게 하는 이유는 1) 이 센서는 계속 돌릴 경우 수명이 약 1년이다. 2) 그래서 set을 이용해서 재웠다 살렸다를 반복한다. rules에 추가하는것이 이런내용이다(이 룰에 따르면 2분 재우고 50초 돌리므로 약 3배, 3년정도로 수명이 는다). 3) 그런데 재웠다가 살리면 팬이 멈췄다 다시 돌기시작하는데 이때 최소한 30초가 지나야 공기흐름이 안정되어서 제대로 된 결과가 나온다. 그전에 센서값 뽑으면 이상한값이 잔뜩나와서 믿을수가 없게된다.
다. ha설정
Sensors.yaml 에 아래 내용을 추가한다.

  - platform: mqtt

    name: IA_pm1

    unit_of_measurement: "ug/m³"

    qos: 1

    state_topic: "/ESP_IAQ/dust/pm1.0"

  - platform: mqtt

    name: IA_pm2

    unit_of_measurement: "ug/m³"

    qos: 1

    state_topic: "/ESP_IAQ/dust/pm2.5"

  - platform: mqtt

    name: IA_pm10

    unit_of_measurement: "ug/m³"

    qos: 1

    state_topic: "/ESP_IAQ/dust/pm10"
라. 결과


이렇게 오른쪽부분처럼 나오면 된것이다. 여기서 왼쪽에 값 엄청 값이 심하게 흔들리는 부분이 위에서 말한 재웠다 깨웠을때의 문제를 보여주는데, 왼쪽부분은 60초 재웠다가 센서를 살린후 바로 값을 뽑는 방식으로 측정한 것이다. 값이 얼만지 믿을수 없을정도로 널뛰어서 신뢰성이 하나도 없다.

댓글

이 블로그의 인기 게시물

ESP8266, espeasy, HA, MQTT를 이용하여 에어컨 자동화하기(1)

Home Assitant 설치(2)

ESP8266, espeasy, HA, MQTT, 센서를 이용하여 실내공기질을 측정하자(1)