새창 작성 수정 목록 링크 Edit G카랜다 HDD HDD HDD 게시물 주소 복사


● ESPHome에서 MQ135 공기 품질 센서를 사용하기 위한 YAML 소스 코드 예제

♨ 카랜더 일정 : 2025년03월10일
  • 링크

  • 첨부

  • 컨텐츠 정보

    본문

     ESPHome에서 MQ135 공기 품질 센서를 사용하기 위한 YAML 소스 코드 예제

    제품> https://ko.aliexpress.com/item/4000587261511.html


    특징:
    고품질 듀얼 패널 설계, 전원 표시기 및 TTL 신호 출력 지침 사용
    DO (TTL) 출력과 아날로그 출력 AO를 갖는 스위칭 신호.
    TTL 출력 유효 신호가 낮습니다. (출력 표시등을 마이크로 컨트롤러 또는 릴레이 모듈에 직접 연결할 수있는 경우 저레벨 신호)
    고농도의 아날로그 출력 전압
    쉬운 위치를위한 4 개의 나사 구멍이 있습니다.
    긴 수명과 안정적인 안정성
    신속한 대응 및 복구 특성
    입력 전압: DC5V 전력 소비 (전류): 150mA
    DO 출력: TTL 디지털 0 및 1 ( 0.1 및 5V)
    AO 출력: 0.1-0 .3 V (오염에 비해), 약 4V 의 최대 전압 농도
    특별 참고 사항: 센서에 전원이 공급 된 후 약 20S 를 예열해야하며 측정 된 데이터가 안정적이었습니다. 열 센서는 정상적인 현상입니다. 뜨겁다면 정상이 아닙니다.
    배선:
    VCC: 양의 전원 공급 장치 (5V)
    GND: 전원 공급 장치가 음수입니다.
    DO: TTL 스위칭 신호 출력
    AO: 아날로그 신호 출력
    참고:
    센서에 전원이 공급 된 후 약 20S 를 따뜻하게해야하며 측정 된 데이터가 안정되고 열 센서가 정상입니다.
    크기:


    센서종류

    3232235521_1741608797.2007.png


    3232235521_1741599982.582.png

    3232235521_1741599949.9049.png

    3232235521_1741601772.9094.png


    연결보드

    https://ko.aliexpress.com/item/1005007546914400.html

    3232235521_1741602157.1043.png

    MQ135 공기 품질 센서를 ESP32에 연결할 때, 센서의 핀 단자(DO와 AO)를 적절히 활용할 수 있습니다. MQ135의 핀은 다음과 같은 역할을 합니다:
    DO (Digital Output): TTL 스위칭 신호 출력으로, 설정된 임계값(보통 센서 모듈의 가변 저항으로 조정)을 초과하면 HIGH(3.3V 또는 5V) 신호를 출력하고, 그렇지 않으면 LOW(0V)를 출력합니다.

    AO (Analog Output): 아날로그 신호 출력으로, 0V에서 전원 전압(보통 5V 또는 3.3V) 사이의 연속적인 전압 값을 출력하며, 이는 가스 농도에 비례합니다.

    ESP32는 3.3V 로직을 사용하므로, MQ135가 5V로 동작하는 경우 레벨 변환(예: 저항 분배기 또는 레벨 시프터)이 필요할 수 있습니다. 아래에서 ESP32와의 연결 방법을 설명합니다.
    ESP32와 MQ135 핀 연결
    기본 핀 구성
    MQ135 핀

    ESP32 핀

    설명

    VCC 3.3V 또는 VIN (5V)

    MQ135의 전원 공급. 3.3V로 동작 가능하나, 5V 권장 (VIN 사용 시 5V).

    GND GND

    공통 접지 연결.

    DO GPIO (예: GPIO 14)

    디지털 입력으로 사용. 임계값 초과 여부를 감지.

    AO ADC 핀 (예: GPIO 36)

    아날로그 입력으로 사용. 가스 농도에 따른 전압 측정.

    연결 세부 사항
    VCC와 GND
    MQ135는 일반적으로 5V로 동작하도록 설계되었지만, 3.3V에서도 작동 가능합니다.

    5V 사용 시: ESP32의 VIN 핀(보통 USB나 외부 전원에서 5V 공급)에 연결.

    3.3V 사용 시: ESP32의 3.3V 핀에 연결. 이 경우 출력 전압 범위가 낮아질 수 있음.

    GND는 ESP32의 GND 핀에 연결.

    DO (디지털 출력)
    ESP32의 GPIO 핀(예: GPIO 14)에 연결합니다.

    MQ135 모듈의 가변 저항을 조정하여 특정 농도에서 HIGH 신호가 출력되도록 임계값을 설정할 수 있습니다.

    ESP32는 3.3V 로직이므로, MQ135가 5V로 동작할 경우 출력이 5V로 나올 수 있습니다. 이 경우:
    저항 분배기 (예: 10kΩ와 20kΩ 저항 사용)로 5V를 3.3V로 낮추거나,

    레벨 시프터(예: 74HC4050)를 사용하세요.

    AO (아날로그 출력)
    ESP32의 ADC 핀(예: GPIO 36, VP)에 연결합니다.

    ESP32의 ADC는 최대 3.3V까지만 측정 가능하므로, MQ135가 5V로 동작하면 AO 출력이 3.3V를 초과할 수 있습니다. 이를 해결하려면:
    저항 분배기를 사용해 전압을 3.3V 이하로 낮춥니다 (예: 10kΩ와 10kΩ 저항으로 5V를 2.5V로 분배).

    또는 MQ135를 3.3V로 동작시켜 AO 출력이 3.3V 범위 내에 머물게 합니다.

    ESP32의 ADC1 채널(GPIO 32~39 중 하나)을 사용하세요. ADC2는 Wi-Fi 사용 시 제한이 있으므로 주의.

    ESPHome YAML 예제 (DO와 AO 모두 사용)
    아래는 DO와 AO를 모두 활용한 ESPHome 설정 예제입니다.
    yaml

    esphome:
      name: mq135_air_quality
      platform: ESP32
      board: esp32dev

    wifi:
      ssid: "YOUR_WIFI_SSID"
      password: "YOUR_WIFI_PASSWORD"

    ota:
      password: "YOUR_OTA_PASSWORD"
    api:

    # 디지털 입력 (DO)
    binary_sensor:
      - platform: gpio
        pin: GPIO14
        name: "MQ135 Threshold Exceeded"
        device_class: gas
        filters:
          - delayed_on: 10ms  # 노이즈 제거용 디바운스

    # 아날로그 입력 (AO)
    sensor:
      - platform: adc
        pin: GPIO36
        name: "MQ135 Voltage"
        update_interval: 5s
        filters:
          - multiply: 3.3  # 3.3V 기준, 5V 사용 시 분배 비율 조정
        unit_of_measurement: "V"
        id: sensor_volt
        accuracy_decimals: 4

      - platform: template
        name: "CO2 PPM (Rough Estimate)"
        lambda: |-
          float voltage = id(sensor_volt).state;
          // 간단한 선형 근사 (실제로는 캘리브레이션 필요)
          return (voltage / 3.3) * 2000;  # 0-2000 PPM 범위 가정
        update_interval: 5s
        unit_of_measurement: "ppm"
        id: ppm_co2
        accuracy_decimals: 1


    입니다. MQ135는 다양한 가스(CO2, CO, NH3, 알코올 등)를 감지할 수 있는 아날로그 센서로, ESPHome에서는 이를 ADC 플랫폼과 템플릿 센서를 통해 설정할 수 있습니다. 이 예제는 CO2 농도를 PPM 단위로 계산하며, 온도와 습도 보정을 포함합니다(온도/습도 센서가 있다고 가정).

    esphome:
      name: mq135_air_quality
      platform: ESP32  # 또는 ESP8266 사용 시 수정
      board: esp32dev  # 보드에 맞게 수정 (예: nodemcu-32s, esp01_1m 등)
    
    # Wi-Fi 설정
    wifi:
      ssid: "YOUR_WIFI_SSID"
      password: "YOUR_WIFI_PASSWORD"
    
    # OTA 및 API 설정
    ota:
      password: "YOUR_OTA_PASSWORD"
    api:
    
    # 글로벌 변수 설정
    globals:
      - id: RLOAD
        type: float
        restore_value: no
        initial_value: '1.0'  # 부하 저항 값 (kOhm), MQ135 모듈에 따라 다름
      - id: RZERO
        type: float
        restore_value: no
        initial_value: '76.63'  # 신선한 공기에서의 R0 값 (캘리브레이션 필요)
      - id: ATMOCO2
        type: float
        restore_value: no
        initial_value: '400'  # 대기 중 CO2 기본값 (PPM)
      - id: PARA
        type: float
        restore_value: no
        initial_value: '110.47'  # CO2에 대한 회귀 상수 a
      - id: PARB
        type: float
        restore_value: no
        initial_value: '-2.862'  # CO2에 대한 회귀 상수 b
      - id: volt_resolution
        type: float
        restore_value: no
        initial_value: '5.0'  # MQ135 전원 전압 (5V 또는 3.3V)
    
    # 센서 설정
    sensor:
      # MQ135 아날로그 입력
      - platform: adc
        pin: GPIO36  # ESP32의 ADC 핀 (예: VP/GPIO36), ESP8266의 경우 A0
        name: "MQ135 Voltage"
        update_interval: 1s
        filters:
          - multiply: 3.3  # ESP32의 경우 3.3V 기준, 5V 사용 시 5.0으로 수정
        unit_of_measurement: "V"
        id: sensor_volt
        accuracy_decimals: 4
    
      # 저항 계산 (RS)
      - platform: template
        name: "MQ135 Resistance"
        lambda: |-
          return ((id(volt_resolution) * id(RLOAD) / id(sensor_volt).state) - id(RLOAD));
        update_interval: 5s
        unit_of_measurement: "kOhm"
        id: resistance
        accuracy_decimals: 3
    
      # CO2 PPM 계산
      - platform: template
        name: "CO2 PPM"
        lambda: |-
          float rs_r0_ratio = id(resistance).state / id(RZERO);
          return id(PARA) * pow(rs_r0_ratio, id(PARB));
        update_interval: 5s
        unit_of_measurement: "ppm"
        id: ppm_co2
        accuracy_decimals: 1
    
      # 선택적: 온도 및 습도 센서 (HTU21D 예시)
      - platform: htu21d
        temperature:
          name: "Temperature"
          id: htu21d_temperature
        humidity:
          name: "Humidity"
          id: htu21d_humidity
        update_interval: 30s
    
      # 선택적: 온도/습도 보정된 저항
      - platform: template
        name: "Corrected Resistance"
        lambda: |-
          float temp = id(htu21d_temperature).state;
          float hum = id(htu21d_humidity).state;
          float correction = 1.0;
          if (temp < 20) {
            correction = 0.00035 * temp * temp - 0.02718 * temp + 1.39538 - (hum - 33.0) * 0.0018;
          } else {
            correction = -0.00333 * temp - 0.00192 * hum + 1.13013;
          }
          return id(resistance).state / correction;
        update_interval: 5s
        unit_of_measurement: "kOhm"
        id: corrected_resistance
        accuracy_decimals: 3
    
      # 보정된 CO2 PPM
      - platform: template
        name: "Corrected CO2 PPM"
        lambda: |-
          float rs_r0_ratio = id(corrected_resistance).state / id(RZERO);
          return id(PARA) * pow(rs_r0_ratio, id(PARB));
        update_interval: 5s
        unit_of_measurement: "ppm"
        id: corrected_ppm_co2
        accuracy_decimals: 1

    3232235521_1741607339.8419.png

    ☞ https://11q.kr 에 등록된 자료 입니다. ♠ 정보찾아 공유 드리며 출처는 링크 참조 바랍니다♠1.png

    [ 추가 정보 ... 더보기) ]
    뷰PDF 1,2



    office view

    관련자료

    댓글목록

    등록된 댓글이 없습니다.


    새창 작성 수정 목록 링크 Edit G카랜다 HDD HDD HDD 게시물 주소 복사


    ♥간단_메모글♥


    최근글


    새댓글



    PHP 안에 HTML ☞ 홈페이지 화면갱신 시간은 ♨
    ▶ 2025-03-10 23:22:07

    오늘의 홈 현황


    • 현재 접속자♨ 288 명
    • 오늘 가입자※ 1 명
    • 어제 가입자※ 2 명
    • 주간 가입자※ 14 명
    • 오늘 방문자 3,130 명
    • 어제 방문자 2,708 명
    • 최대 방문자 13,042 명
    • 전체 방문자 5,134,682 명
    • 전체 게시물※ 8,937 개
    • 전체 댓글수※ 25,490 개
    • 전체 회원수 11,528 명

    QR코드


    ☞ QR코드 스캔은 kakao앱 자체 QR코드

    알림 0








    최신글↑