[모두의 아두이노 환경 센서] 책에서 설명하지 않았지만, PC프로그램을 이용해 실시간으로 [MH-Z19B 이산화탄소 아두이노 센서]의 측정값을 Node js를 이용해 PC 화면에 표시할 수 있다. CH340G 모듈을 사용한 COVERTER 이용하면 센서의 동작 확인이 가능하다.
MH-Z19B 아두이센소 Node JS 제어하기
USB to TTL Serial Convert 를 이용해 아두이노 없이 직접 MH-Z19B 센서의 UART(Tx, Rx)와 PC를 연결하여 데이터를 읽을 수 있다.
[실행순서]
(1) PC ↔ USB to Serial Convert ↔ MH-Z19B 센서를 연결한다.
(2) Node js 를 설치한다.
(3) Node js 시리얼 모듈을 설치한다.
C:\> npm install serialport
(4) 소스에서 연결된 시리얼 포트를 변경한다. Notepad 에서 편집하면 된다.
‘COM13’ 으로 설정된 PORT를 PC환경에 맞추어 변경한다.
소스는 다음과 같다.
const SerialPort = require('serialport');
const internalBus = new (require('events'))();
const {
APP_PORT,
STORAGE_FILENAME,
PUBLIC_PATH,
UART_ADAPTER,
MH_REQUEST_INTERVAL,
MESSAGE_NAME,
} = require('./const');
const GET_CO2_REQUEST = Buffer.from([
0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79
]);
const port = new SerialPort(
'COM13', {
baudRate: 9600,
}
);
port.on('data', onPortData);
port.on('open', onPortOpen);
port.on('error', onPortError);
function calculateCrc(buffer) {
const sumOfBytes1to7 = buffer
.slice(1, 8)
.reduce((sum, intVal) => sum + intVal, 0);
const sumWithInvertedBits = parseInt(
sumOfBytes1to7
.toString(2)
.split('')
.map(ch => ch === '1' ? '0' : '1')
.join(''),
2
);
return sumWithInvertedBits + 1;
}
function sendCO2Request() {
console.log('sent bytes: ', GET_CO2_REQUEST);
port.write(GET_CO2_REQUEST, function(err) {
if (err) {
console.log('write error: ', err);
}
});
}
function onPortData(buffer) {
console.log('received bytes: ', buffer);
const crc = calculateCrc(buffer);
const receivedCrc = buffer[8];
const startByte = buffer[0];
const sensorNum = buffer[1];
const co2HighByte = buffer[2];
const co2LowByte = buffer[3];
const temperatureRaw = buffer[4];
if (startByte === 0xFF && sensorNum === 0x86) {
if (receivedCrc === crc) {
const ppm = (256 * co2HighByte) + co2LowByte;
const temperature = temperatureRaw - 40;
console.log(`measured ppm: ${ppm} and temperature: ${temperature}`);
const timestamp = new Date();
internalBus.emit(MESSAGE_NAME, {
timestamp: timestamp.getTime(),
ppm,
temperature,
});
} else {
console.log(`checksum error`);
console.log('crc', crc);
console.log('receivedCrc', receivedCrc);
}
} else {
console.log(`unexpexted first two bytes of response`);
}
}
function onPortOpen() {
console.log(`serial port was opened`);
sendCO2Request();
setInterval(sendCO2Request, MH_REQUEST_INTERVAL);
}
function onPortError(err) {
console.error(err);
}
(5) Window CMD 창에서 다음을 실행한다.
node mhz19b.js
모두의 아두이노 환경 센서 책
[모두의 아두이노 환경 센서] 책은 예스24, 인터넷 교보문고, 알라딘, 인터파크도서, 영풍문고, 반디앤루니스 , 도서11번가 등에서 구입할 수 있다. 이 책에서는 PMS7003, GP2Y1010AU0F, PPD42NS, SDS011 미세먼지 센서, DHT22 온습도 센서, MH-Z19B 이산화탄소 센서, ZE08-CH2O 포름알데히드 센서, CCS811 총휘발성유기화합물 TVOC, GDK101 방사선(감마선) 센서, MQ-131 오존(O3) 센서, MQ-7 일산화탄소, MICS-4514 이산화질소 센서, MICS-6814 암모니아 센서, DGS-SO2 아황산가스(SO2) 센서, BME280 기압 센서, GUVA-S12SD 자외선(UV) 센서, MD0550 기류 센서, QS-FS01 풍속 센서(Wind speed) 를 사용한다.
'모두의 아두이노 환경 센서 > 3장 실대 대기 측정 센서' 카테고리의 다른 글
이산화탄소(CO2) 측정 센서들(MH-Z19B) (0) | 2021.05.07 |
---|---|
온도-습도 측정 센서들 (DHT22) (0) | 2021.05.07 |
C305 GDK101 방사선(감마선) 아두이노 센서 [모두의 아두이노 환경 센서] (0) | 2021.03.18 |
C304 CJMCU-8128 TVOC 아두이노 센서 (0) | 2021.03.18 |
C304 CCS811 TVOC 아두이노 센서 [모두의 아두이노 환경 센서] (0) | 2021.03.18 |
C303 ZE08-CH2O 포름알데히드(HCHO) 아두이노 센서 [모두의 아두이노 환경 센서] (0) | 2021.03.17 |
C302 MH-Z19B 이산화탄소(CO2) 아두이노 센서 [모두의 아두이노 환경 센서] (0) | 2021.03.17 |
C301 DHT22 온도/습도 아두이노 센서 [모두의 아두이노 환경 센서] (0) | 2021.03.15 |
댓글