๊ณต๊ธฐ์ง ๋ชจ๋ํฐ๋ง ์์คํ
๐ ์ด๋ฒ ๊ณต๊ธฐ์ง ๋ชจ๋ํฐ๋ง ์์คํ ์
๊ณต๊ธฐ์ฒญ์ ๊ธฐ ์์คํ ํ๋ก์ ํธ ์ดํ์ ๋ฐ๋ก ์งํํ ํ๋ก์ ํธ์ ๋๋ค.
์ด์ ํฌ์คํ ์์ ๋ง๋ ๊ณต๊ธฐ์ฒญ์ ๊ธฐ์ ์ผ์๋
๋ฏธ์ธ๋จผ์ง ์ธก์ ์ผ์ ๋จ ํ๋๋ก ๊ตฌ์ฑ๋์ด ์์์ต๋๋ค.
์ด๋ฒ ๊ณต๊ธฐ์ง ๋ชจ๋ํฐ๋ง ์์คํ ์ 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);
}
์ ์ด๋ถ - ์์ค์ฝ๋ (์๋ฒ ์ธก)
์ ์ด๋ถ - ๊ฒฐ๊ณผ