JUGEMテーマ:電子工作
 

■CO2センサーMH-Z19Cの使い方

 

■配線

 USBuart MH-Z19C
 5V-------Vin
 TX-------RX
 RX-------TX
 GND------GND

 

■ソース(パソコン側)

 

import serial
import time

ser = serial.Serial("COM10", 9600, timeout=1)

while True :
  b = bytearray([0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79])
  ser.write(b)
  time.sleep(0.1)

  result = ser.read(9)
  print(str(result[2])+" - "+str(result[3]))
  ppm = result[2]*256+result[3]
  print("ppm="+str(ppm))
  time.sleep(5)

 

■ESP32と接続

ESP32が3.3V動作なのでMH-Z19Cからの戻りのTXは分圧しています。

# ESP32      MH-Z19C
# 5V-----------------Vin
# 33(TX)-------------RX
# 32(RX)----+--2KΩ--TX
#            |
#          3.3KΩ※
#            |
# GND-------+--------GND

 

■ソース

#
# Co2センサー MH-Z19C
#

#接続
#
# ESP32      MH-Z19C
# 5V-----------------Vin
# 33(TX)-------------RX
# 32(RX)----+--2KΩ--TX
#            |
#          3.3KΩ※
#            |
# GND-------+--------GND
#
# ※ MH-Z19CのTXが5Vなので、
#    分圧してESP32が破壊されないようにする
#    RXは3.3Vぐらいで出ると思われるがMH-Z19Cで
#    きちんと読み取ってくれるので問題ない
#

from machine import UART
import time

uart = UART(2, baudrate=9600, tx=33, rx=32)

while True:
  b = bytearray([0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79])
  uart.write(b)
  time.sleep(0.1)    #少し待たないと後ろの処理がエラーになる
  result = uart.read(9)
  #print(str(result[2])+" - "+str(result[3]))
  ppm = ( result[2] * 256 ) + result[3]
  print("ppm="+str(ppm))
  time.sleep(5)