Arduino에서 공기 품질 (+ CO2 농도)을 측정하고 json 서버로 값을 반환합니다.

17588 단어 MQ135Arduino
Arduino에서 공기 품질(+CO2 농도)을 측정하여 json 서버로 값을 반환합니다.

샘플 코드를 실행하여 htp://192.168.0.117/ 에 액세스하면 다음과 같은 값을 얻을 수 있습니다.

사용 장비


품목
장비명


사용중인 Arduino
arduino nano

쓰기 부트로더
atmega328old

LAN 실드
ENC28J60

공기 품질 센서
MQ135


GPIO 단자의 연결 설정


센서 단자
Arduino 터미널


A0
A0

Vcc
3.3V

GND
GND


소스 코드는 이쪽

SensorJsonServer.ino
#include <UIPEthernet.h>

byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x78, 0xEE  };  
IPAddress ip(192, 168, 0, 117);
IPAddress myDns(192, 168, 0, 1);                        

EthernetServer server(80);

int valueA0;

void setup(){

  Serial.begin(9600);      // sets the serial port to 9600

  // start ip address
  Ethernet.begin(mac, ip , myDns );

  // start server
  server.begin();

}

void loop(){

  EthernetClient client = server.available();

  if (client){  

    boolean currentLineIsBlank = true;

    while (client.connected()){

      if (client.available()){

        char c = client.read();

        if (c == '\n' && currentLineIsBlank){

          valueA0 = analogRead(A0);
          Serial.print(valueA0, DEC);
          Serial.println("ppm");

          float mq135_ro = mq135_getro( ( 2000.0 * ( 1023 - valueA0 ) / valueA0 ) , 399 );
          Serial.println( mq135_ro );

          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: application/json");
          client.println();
          /*
          const char index_html[] PROGMEM = R"rawliteral(
[
  {"id" : 0, "name" : "MQ135" , "gpio" : "A0" , "value" : "valueA0" , "unit" : "ppm" }
]
)rawliteral";
          client.print(index_html);
          */
          client.println("[");
          client.println("  {\"id\" : 0, \"sensor\" : \"MQ135\" , \"gpio\" : \"A0\" , \"type\" : \"air_quality\" , \"value\" : " +  String( valueA0 )      + " , \"unit\" : \"ppm\" } , " );
          client.println("  {\"id\" : 1, \"sensor\" : \"MQ135\" , \"gpio\" : \"A0\" , \"type\" : \"co2_percent\" , \"value\" : " +  String(mq135_ro , 0 )  + " , \"unit\" : \"%\"   }" );
          client.println("]");
          break;

        }

        if (c == '\n') {
          currentLineIsBlank = true;
        }
        else if (c != '\r'){
          currentLineIsBlank = false;
        }

      }

    }

     delay(10);

    client.stop();
    //Serial.println("   Disconnected\n");

  }

}

//
long mq135_getro(long resvalue, double ppm) {
  return (long)( resvalue * exp( log( 116.6020682 / ppm ) /  -2.769034857  ) );
}


php로 읽을 수 있는지 확인하십시오.

php 소스 코드

json_print.php
<?php

$json     = file_get_contents( "http://192.168.0.117/" );
$json_arr = json_decode( $json , true );
var_dump( $json_arr );

실행
php json_print.php ;

결과
array(2) {
  [0]=>
  array(6) {
    ["id"]=>
    int(0)
    ["sensor"]=>
    string(5) "MQ135"
    ["gpio"]=>
    string(2) "A0"
    ["type"]=>
    string(11) "air_quality"
    ["value"]=>
    int(1014)
    ["unit"]=>
    string(3) "ppm"
  }
  [1]=>
  array(6) {
    ["id"]=>
    int(1)
    ["sensor"]=>
    string(5) "MQ135"
    ["gpio"]=>
    string(2) "A0"
    ["type"]=>
    string(11) "co2_percent"
    ["value"]=>
    int(26)
    ["unit"]=>
    string(1) "%"
  }
}

CO2 농도도 일단 기술하고 있습니다만, 자신이 없기 때문에 자세한 방법 교수 부탁드립니다 m(_ _)m

참고 링크


  • iot - How to find Co2 and O2 level using MQ135 with Arduino - Stack Overflow
  • empierre/arduino: arduino scripts for MySensors IoT
  • ESP-WROOM-02 및 MQ-135로 CO2 농도 측정 - Qiita
  • CO2 센서 > MQ-135 Gas Sensor > MQ135_MAXRSRO / MQ135_MINRSRO 찾는 방법 - Qiita
  • 좋은 웹페이지 즐겨찾기