Project

๊ณต๊ธฐ์งˆ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ

serin99 2023. 5. 19. 02:48
728x90

๐Ÿ˜Š  ์ด๋ฒˆ ๊ณต๊ธฐ์งˆ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์€

๊ณต๊ธฐ์ฒญ์ •๊ธฐ ์‹œ์Šคํ…œ ํ”„๋กœ์ ํŠธ ์ดํ›„์— ๋ฐ”๋กœ ์ง„ํ–‰ํ•œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

 

์ด์ „ ํฌ์ŠคํŒ…์—์„œ ๋งŒ๋“  ๊ณต๊ธฐ์ฒญ์ •๊ธฐ์˜ ์„ผ์„œ๋Š”

๋ฏธ์„ธ๋จผ์ง€ ์ธก์ • ์„ผ์„œ ๋‹จ ํ•˜๋‚˜๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋ฒˆ ๊ณต๊ธฐ์งˆ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์€ CO2 ์„ผ์„œ์™€ ์˜จ์Šต๋„ ์„ผ์„œ๋ฅผ ์ด์šฉํ•˜์—ฌ,

์‹ค๋‚ด, ์‹ค์™ธ ํ™˜๊ฒฝ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค. 


 

์ „์ฒด ์‹œ์Šคํ…œ ๊ตฌ์กฐ

 

 

์„œ๋ฒ„ WINDOW 10 ํ™˜๊ฒฝ์—์„œ Apache, PHP, MariaDB๋ฅผ
์„ค์น˜ํ•˜์—ฌ ์„œ๋ฒ„๋กœ ์‚ฌ์šฉ

์„ผ์„œ๋ถ€์™€ ํ†ต์‹ ํ•˜์—ฌ ์„ผ์„œ๊ฐ’์„ ๋ฐ›์•„ DB์— ์ €์žฅํ•˜๊ณ ,
์›น ํŽ˜์ด์ง€์— ํ•ด๋‹น ๊ฐ’๋“ค์„ ํ‘œํ˜„
์„ผ์„œ๋ถ€ ์•„๋‘์ด๋…ธ ์šฐ๋…ธ์— ๋ณด๋“œ CO2, ๋ฏธ์„ธ๋จผ์ง€, ์˜จ์Šต๋„ ์„ผ์„œ๋ฅผ ๋ถ€์ฐฉํ•˜์—ฌ
์„ผ์„œ๋ถ€๋กœ ๋™์ž‘

์ธก์ •๋˜๋Š” ์„ผ์„œ๊ฐ’์€ Wifi ๋ชจ๋“ˆ์„ ํ†ตํ•ด ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜์—ฌ
DB์— ์ €์žฅ
์ œ์–ด๋ถ€ ์„œ๋ฒ„์™€ TCP ์†Œ์ผ“ ํ†ต์‹ ์„ ํ•˜๋ฉฐ ์„œ๋ฒ„๋กœ ๋ถ€ํ„ฐ ๋ฐ›์€
์ œ์–ด ๋ช…๋ น์„ ์ฒ˜๋ฆฌ

์ฒ˜๋ฆฌ ๋ช…๋ น์€ ๊ฐ„๋‹จํ•˜๊ฒŒ LED ์ œ์–ด๋กœ ํ‘œํ˜„

 

 

์„ผ์„œ๋ถ€ ์—ฐ๊ฒฐ๋„

 

 

์„ผ์„œ๋ถ€ ์•„๋‘์ด๋…ธ ์ฝ”๋”ฉ

 

 

#include <string.h>
#include "ESP8266.h"
#include <SoftwareSerial.h>
#include <dht.h>

// ESP-01 setting
#define SSID "์™€์ดํŒŒ์ด ์ด๋ฆ„"
#define PASSWORD "์™€์ดํŒŒ์ด ๋น„๋ฐ€๋ฒˆํ˜ธ"
#define SERVERIP "์„œ๋ฒ„ ํ”ผ์‹œ์˜ IP"
SoftwareSerial mySerial(11, 10);

// MG811 setting
#define MG_PIN (0) // A0 ํ•€
#define BOOL_PIN (9) // D9
#define DC_GAIN (8.5)
#define READ_SAMPLE_INTERVAL (50) // ์ธก์ •๋ฐ˜๋ณต๊ฐ„๊ฒฉ
#define READ_SAMPLE_TIMES (5) // ์ธก์ •๋ฐ˜๋ณตํšŸ์ˆ˜
#define ZERO_POINT_VOLTAGE (0.160)
#define REACTION_VOLTAGE (0.010)
float co2Curve[3] - {2.602, ZERO_POINT_VOLTAGE, (REACTION_VOLTAGE) / (2.602-3))}

// GP2Y101AUOF setting
int Vo = A1;
int V_LED = 3; // D3ํ•€ ์—ฐ๊ฒฐ
float Vo_value = 0; // ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™”
float Voltage = 0;
float dustDensity = 0;

// DHT11 setting
dht DHT;
int DHT11_PIN = 2; // D2ํ•€ ์—ฐ๊ฒฐ
int hum = 0;
int temp = 0;

// ESP-01 function
boolean connectWifi()
{
	String cmd = "AT+CWJAP=\"";
    cmd+=SSID;
    cmd+="\", \"";
    cmd+=PASSWORD;
    cmd+="\"";
    mySerial.println(cmd);
    Serial.println(cmd);
    delay(3000);
    if(mySerial.find("OK")) {
    	Serial.println("OK, Connected to Wifi. ");
        return ture;
        }
        else {
        	Serial.println("Can not connect to the Wifi.");
            return false;
        }
}

void setup() {
	
    Serial.begin(9600);
    mySerial.begin(9600);
    
    Serial.println("ESP8266 connect");
    boolean connected = false;
    for(int i = 0; i < 10; i++) {
    	if (connectWifi()) {
        	connected = ture;
            break;
        }
    }
	
    if (!connected) {
    	while(1);
    }
    // GP2Y1010AU0F pin setup
    	pinMode(V_LED, OUTPUT);
        pinMode(Vo, INPUT);
    //
    
    Serial.print("All sensor setting OK\n");
    delay(3000);  
}

void loop() {
	// MG811 loop
    int percentage;
    float volts;
    
    volts = MGRead(MG_PIN);
    percentage = MGGetPercentage(volts, co2Curve);
    Serial.print("co2: ");
    if (percentage < 400) {
    	Serial.print("<400");
    }
    else {
    	Serial.print(percentage);
    }
	
    Serial.print("ppm\n");
    
    if (digitalRead(BOOL_PIN) {
    	Serial.print("BOOL is HIGH");
    }
    else {
    	Serial.print("BOOL is LOW");
    }
    Serial.print("\n");
    
    // MG811 function
    float MGRead(int mg_pin)
    {
    	int i;
        float v = 0;
        
        for (i=0; i<READ_SAMPLE_TIMES; i++) {
        v += analogRead(mg_pin);
        delay(READ_SAMPLE_INTERVAL);
        }
        v = (v/READ_SAMPLE_TIMES) * 5/1024;
        return v;
    }
    
    int MGGetPercentage(float volts, float * pcurve)
    {
    	if((volts/DC_GAIN) >= ZERO_POINT_VOLTAGE) {
        	return pow(10, ((volts/DC_GAIN) - pcurve[1]) / pcurve[2] + pcurve[0]);
    	} else {
        	return pow (10, ((volts/DC_GAIN) - pcurve[1])/pcurve[2]+pcurve[0]);
        } 
    }
    
    // DHT loop
    DHT.read11(DHT11_PIN);
    hum = DHT.humidity;
    temp = DHT.temperature;
    Serial.print("Humidity: ");
    Serial.print(hum);
    Serial.print(" %, Temp: ");
    Serial.println(" Celsius");
    Serial.print("\n");
    
    // GP2Y1010AU0F loop
    digitalWrite(V_LED, LOW);
    delayMicroseconds(280);
    Vo_value = analogRead(Vo);
    delayMicroseconds(40);
    digitalWrite(V_LED, HIGH);
    delayMicroseconds(9680);
    Voltage = Vo_value * 5.0 / 1024.0;
    dustDensity = (Voltage)/0.005;
    
    Serial.print("Voltage: ");
    Serial.println(voltage);
    Serial.print("Dust Density: ");
    Serial.println(dustDensity);
    Serial.print("\n");
    
    
    // Wifi loop
   	String cmd =  "AT+CIPSTART=\ "TCP\", \"";
    cmd += SERVERIP;
    cmd += "\", 80";
    Serial.println(cmd);
    mySerial.println(cmd);
    	if(mySerial.find("Error")) {
        	Serial.println("TCP connect error");
            return;
        }
    String Temp_A(temp);
    String Humidity_A(hum);
    String co2_A(percentage);
    String Dust_A(dustDensity);
    
	cmd = 'GET /sensor_data_input.php?temp_R="Temp_A+"&humi_R="+Humidity_A+"&CO2_R="+CO2_A+"&Dust_A+"\r\n;
    mySerial.print("AT+CIPSEND=");
    mySerial.println(cmd.length());
    
    Serial.println(cmd);
    
    mySerial.print(cmd);
    delay(2000);
   	Serial.println("-----");
    delay(300000);
}

 

 

์„ผ์„œ๋ถ€ - ๊ฒฐ๊ณผ

 


 

์„œ๋ฒ„ - ๊ตฌ์กฐ

 

 

์„œ๋ฒ„๋Š” PC์— XAMPP๋ฅผ ์ด์šฉํ•˜์—ฌ APM์„ ๊ตฌ์ถ•ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

XAMPP๋Š” Apache, PHP, MariaDB๋ฅผ ํ•œ ๋ฒˆ์— ์„ค์น˜ํ•˜์—ฌ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ํŒจํ‚ค์ง€ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.

์ถ”๊ฐ€๋กœ DB๋ฅผ ์›น์ƒ์—์„œ ์‰ฝ๊ฒŒ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ๋„๊ตฌ์ธ phpmyadmin๋ฅผ ๋”ฐ๋กœ ์„ค์น˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. 

 

 

 

์„œ๋ฒ„ - ์†Œ์Šค์ฝ”๋“œ(DB์— ์„ผ์„œ๊ฐ’ ์ €์žฅ)

 

 

 

์„œ๋ฒ„ - ์†Œ์Šค์ฝ”๋“œ(์˜จ์Šต๋„ ๊ฐ’ ์›นํŽ˜์ด์ง€ ์ถœ๋ ฅ)

 

 

 

์„œ๋ฒ„ - ์†Œ์Šค์ฝ”๋“œ(CO2๊ฐ’ ์›นํŽ˜์ด์ง€ ์ถœ๋ ฅ)

 

 

 

์„œ๋ฒ„ - ์†Œ์Šค์ฝ”๋“œ(๋ฏธ์„ธ๋จผ์ง€ ๊ฐ’ ์›นํŽ˜์ด์ง€ ์ถœ๋ ฅ)

 

 

 

์„œ๋ฒ„ - ์†Œ์Šค์ฝ”๋“œ(ํ†ตํ•ฉ ์„ผ์„œ ๊ฐ’ ์ถœ๋ ฅ)

 

 


์„œ๋ฒ„ - ์†Œ์Šค์ฝ”๋“œ(์›นํŽ˜์ด์ง€ ํ™•์ธ)

 


 

์ œ์–ด๋ถ€  -  ๊ตฌ์กฐ

 

 

 

 

 

์ œ์–ด๋ถ€ - ์•„๋‘์ด๋…ธ ์†Œ์Šค์ฝ”๋“œ 

 

#include <doxygen.h> // ESP-01 ์‚ฌ์šฉ์— ๋ช…๋ น์–ด๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
#include <ESP8266.h> // ESP-01 ์‚ฌ์šฉ์— ๊ด€ํ•œ ๊ฐ์ฒด ์ƒ์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
#include <SoftwareSerial.h> // ์‹œ๋ฆฌ์–ผ ํ†ต์‹ ์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

#define SSID "์™€์ดํŒŒ์ด ์•„์ด๋””" // Wifi ์•„์ด๋””
#define PASSWORD "์™€์ดํŒŒ์ด ๋น„๋ฐ€๋ฒˆํ˜ธ" // Wifi ํŒจ์Šค์›Œ๋“œ
#define HOST_NAME "์„œ๋ฒ„ IP" // ์„œ๋ฒ„ IP
#define HOST_PORT (8090) // ์„œ๋ฒ„ ํฌํŠธ

softwareSerial.mySerial(11, 10); //RX: D10, TX: D9
ESP8266 wifi (mySerial); // wifi๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ์ฒด ์ƒ์„ฑ

void setup(void)
{
	Serial.begin(9600);
    
    pinMode(2, OUTPUT);
    digitalWrite(2, LOW); // ์˜จ๋„ ์ ์ƒ‰ LED ์ดˆ๊ธฐ OFF ์ƒํƒœ
    pinMode(3, OUTPUT);
    digitalWrite(3, HIGH); // ์˜จ๋„ ๋…น์ƒ‰ ์ดˆ๊ธฐ ON ์ƒํƒœ
    
    pinMode(4, OUTPUT);
    digitalWrite(4, LOW); //  ์Šต๋„ ์ ์ƒ‰ LED ์ดˆ๊ธฐ OFF ์ƒํƒœ
    pinMode(5, OUTPUT);
    digitalWrite(5, HIGH); // ์Šต๋„ ๋…น์ƒ‰ LED ์ดˆ๊ธฐ ON ์ƒํƒœ
    
    pinMode(6, OUTPUT);
    digitalWrite(6, LOW); //  CO2 ์ ์ƒ‰ LED ์ดˆ๊ธฐ OFF ์ƒํƒœ
    pinMode(7, OUTPUT);
    digitalWrite(7, HIGH); // CO2 ๋…น์ƒ‰ LED ์ดˆ๊ธฐ ON ์ƒํƒœ
    
    pinMode(8, OUTPUT);
    digitalWrite(8, LOW); //  ๋ฏธ์„ธ๋จผ์ง€ ์ ์ƒ‰ LED ์ดˆ๊ธฐ OFF ์ƒํƒœ
    pinMode(9, OUTPUT);
    digitalWrite(9, HIGH); // ๋ฏธ์„ธ๋จผ์ง€ ๋…น์ƒ‰ LED ์ดˆ๊ธฐ ON ์ƒํƒœ
    
    
    Serial.print("setup begin\r\n");
    
    wifi.restart(); // ESP-01 ์žฌ์‹œ์ž‘
   	if(wifi.kick ()) // ESP-01 ํ™œ์„ฑ ์—ฌ๋ถ€ ํ™•์ธ
    	Serial.print("esp8266 is alive\r\n");
    else
    	Serial.print("esp8266 is not alive\r\n");
        
   	Serial.print("FW Version: ");
    Serial.println(wifi.getVersion(). c_str()); // ESP-01์˜ ํŽŒ์›จ์–ด ๋ฒ„์ „ ์ฒดํฌ
    
    if (wifi.setOprToStation ()) {
    	Serial.print("to stataion mode\r\n");
    } else {
    	Serial.print("to station mode error\r\n");
    }
    
    if (wifi.disavleMUX()) { //MUX ์‹ฑ๊ธ€๋ชจ๋“œ(๋‹จ์ผ ์—ฐ๊ฒฐ๋ชจ๋“œ)
    	Serial.print("single ok\r\n");   
    } else {
    	Serial.print("single err\r\n");
    }    
     
    if (wifi.joinAP(SSID, PASSWORD) { //Wifi ์—ฐ๊ฒฐ ์‹œ๋„
    	Serial.print("Join AP success\r\n");
        Serial.print("IP: ");=
    } else {
    	Serial.print("Join AP failure\r\n");
        
    Serial.print("setup end\r\n");
}
void loop(void)
{
	uint8_t buffer[128] = {0}; // ์ž๋ฃŒํ˜• uint8_t๋Š” intํ˜•์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์žฌ์ •์˜ 8bit
    String response = "";
    
    if (wifi.createTCP(HOST_NAME, HOST_PORT)) { // ์„œ๋ฒ„์˜ IP์™€ ํฌํŠธ๋กœ ์—ฐ๊ฒฐ ์‹œ๋„
    	Serial.print("create tcp ok\r\n");
    } else {
 		Serial.print("create tcp err\r\n");   
    }
    
    char *sendData = "Pin Number Check";
    wifi.send((const uint8_t*)sendData, strlen(sendData)); // ๋ฐ์ดํ„ฐ ์†ก์‹ 
    
    uint32_t recvData = wifi.recv(buffer, sizeof(buffer), 10000); //๋ฐ์ดํ„ฐ ์ˆ˜์‹  ํ›„ 10์ดˆ ๋Œ€๊ธฐ
    if (recvData > 0) {
    	Serial.println("์ฒดํฌ ๊ฒฐ๊ณผ");
        Serial.println("--------");
        for(uint32_t i = 0; i < recvData; i++) {
        	response += (char)buffer[i];
        }
    }
    Serial.println(response);
}

 

 

์ œ์–ด๋ถ€ - ์†Œ์Šค์ฝ”๋“œ (์„œ๋ฒ„ ์ธก)

 

 

 

 


์ œ์–ด๋ถ€ - ๊ฒฐ๊ณผ

 


 

 

728x90