main_inside.ino 5.06 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <SoftwareSerial.h>
#include <DHT.h>
#include <DHT_U.h>



#define ESPPIN_TX 2     // ESP 8266 모듈의 TX 핀
#define ESPPIN_RX 3     // ESP 8266 모듈의 RX 핀

#define DHTPIN 7        // DHT11 핀 
#define DHTTYPE DHT11   // DHT 모듈 종류

#define CDS_D 4         // CDS 모듈 디지털 핀
#define CDS_A A0        // CDS 모듈 아날로그 핀

uint32_t delayMS;       // 센서를 읽는 지연시간


SoftwareSerial esp(ESPPIN_TX,ESPPIN_RX);
DHT_Unified dht(DHTPIN, DHTTYPE);


String SSID = "Wifi_SSID";        // Wifi - SSID
String SSPW = "Wifi_SSPW";        // Wifi - SSPW

String EUEIP = "EUE_IP";          // Web Server - IP
int EUEPORT = 8081;               // Web Server - Port

void connectESP();
void connectWifi();
void sendData(String vars);


void setup() {

  pinMode(CDS_D, INPUT);  // CDS모듈의 Pinmode를 Input으로 설정
  
  Serial.begin(9600);     // Serial monitor의 통신 속도 9600으로 설정
  esp.begin(9600);        // esp모듈의 통신 속도 9600으로 설정

  connectESP();           // ESP 모듈 탐색
  connectWifi();          // ESP 모듈 wifi 연결

  dht.begin();            // DHT11 센서 작동 시작
  Serial.println("DHT11 Unified Sensor Start.");

  sensor_t sensor;        // dht11 구조체 생성

  // 온도센서 정보 출력
  dht.temperature().getSensor(&sensor);
  Serial.println("------------------------------------");
  Serial.println("Temperature(온도)");
  Serial.print("Sensor : ");Serial.println(sensor.name);
  Serial.print("Drive Ver : ");Serial.println(sensor.version);
  Serial.print("Unique ID : ");Serial.println(sensor.sensor_id);
  Serial.print ("Max Value : "); Serial.print(sensor.max_value); Serial.println(" *C");
  Serial.print ("Min Value : "); Serial.print(sensor.min_value); Serial.println(" *C");
  Serial.print ("Resolution : "); Serial.print(sensor.resolution); Serial.println(" *C");  
  Serial.println("------------------------------------");

  // 습도센서 정보 프린트
  dht.humidity().getSensor(&sensor);
  Serial.println("------------------------------------");
  Serial.println("Humidity(습도)");
  Serial.print ("Sensor : "); Serial.println(sensor.name);
  Serial.print ("Driver Ver : "); Serial.println(sensor.version);
  Serial.print ("Unique ID : "); Serial.println(sensor.sensor_id);
  Serial.print ("Max Value : "); Serial.print(sensor.max_value); Serial.println("%");
  Serial.print ("Min Value : "); Serial.print(sensor.min_value); Serial.println("%");
  Serial.print ("Resolution : "); Serial.print(sensor.resolution); Serial.println("%");  
  Serial.println("------------------------------------");

  delayMS =sensor.min_delay /1000;                    // 센서를 읽는 시간을 최소로 설정
}

void loop() {
  String input = "";

KangMin An's avatar
KangMin An committed
79
80
81
82
83
84
85
86
87
88
89
90
91
  // 사용자 ID
  String ID = "Admin";

  // 측정기 분류(IN / OUT)
  String type_ = "In";
  
  // 사용자 장소의 위도(Latitude), 경도(Longitude)
  float lati = 37.241706;
  String str_lati = String(lati,6);
  float lng = 131.864889;
  String str_lng = String(lng,6);

  // DHT11 모듈의 측정 event
92
93
  sensors_event_t event;
  
KangMin An's avatar
KangMin An committed
94
  // 온도
95
96
97
98
  dht.temperature().getEvent(&event);
  float temp = event.temperature;
  String str_Temp = String(temp);

KangMin An's avatar
KangMin An committed
99
  // 습도
100
101
102
103
  dht.humidity().getEvent(&event);
  float humi = event.relative_humidity;
  String str_Humi = String(humi);

KangMin An's avatar
KangMin An committed
104
  // 광도
105
106
107
108
  int lights = analogRead(CDS_A);
  String str_Lights = String(lights);
  
  input += "id=" + ID;
KangMin An's avatar
KangMin An committed
109
110
111
  input += "&type=" + type_;
  input += "&lat=" + str_lati;
  input += "&lng=" + str_lng;
112
113
114
115
116
  input += "&temp=" + str_Temp;
  input += "&humi=" + str_Humi;
  input += "&lights=" + str_Lights;
  Serial.println(input);
  
KangMin An's avatar
KangMin An committed
117
  // 데이터 전송
118
  sendData(input);
KangMin An's avatar
KangMin An committed
119
120
121

  // 1분마다 전송 진행
  delay(60000);
122
123
}

KangMin An's avatar
KangMin An committed
124
// ESP모듈 연결
125
126
127
128
129
130
131
132
133
134
void connectESP(){
  esp.println("AT");
  Serial.println("AT Sent");
  while(!esp.find("OK")){
    esp.println("AT");
    Serial.println("ESP8266 Not Found.");
  }
  Serial.println("OK Command Received.");
}

KangMin An's avatar
KangMin An committed
135
// 공유기와 연결
136
void connectWifi(){
KangMin An's avatar
KangMin An committed
137
138
  // ESP8266 모듈 Client로 설정
  String cmd = "AT+CWMODE=1";
139
140
141
  esp.println(cmd);
  Serial.println("Set ESP8266 to client.");

KangMin An's avatar
KangMin An committed
142
  // 공유기와 연결
143
144
145
  Serial.println("Connecting to Wifi...");
  cmd = "AT+CWJAP=\"" + SSID + "\"," + SSPW + "\"";
  esp.println(cmd);
KangMin An's avatar
KangMin An committed
146
147
  
  // 연결 확인
148
149
150
  while(!esp.find("OK"));
  Serial.println("Wifi Connected");
  
KangMin An's avatar
KangMin An committed
151
  // 연결된 공유기 확인
152
153
154
155
156
157
  cmd = "AT+CWJAP?";
  esp.println(cmd);
  Serial.write(esp.read());
}

void sendData(String input){
KangMin An's avatar
KangMin An committed
158
  // ESP 모듈을 통해 Server와 연결
159
160
161
162
163
  esp.println("AT+CIPSTART=\"TCP\",\"" + EUEIP + "\"," + EUEPORT);
  if(esp.find("Error")){
    Serial.println("AT+CIPSTART Error...");
  }

KangMin An's avatar
KangMin An committed
164
  // 서버로 전송할 데이터 작성
165
166
167
168
169
170
171
172
173
  String vars = input;
  
  String msg = "GET /data/input?";
  msg += vars;
  msg += " HTTP/1.0\r\n\r\n";
  esp.print("AT+CIPSEND=");
  esp.println(msg.length());
  delay(2000);

KangMin An's avatar
KangMin An committed
174
  // 데이터 전송
175
176
177
178
179
  if(esp.find(">")){
    esp.print(msg);
    Serial.println("Data sent.");
    delay(1000);
  }
KangMin An's avatar
KangMin An committed
180
181

  // 서버와 연결 종료
182
183
184
  Serial.println("Connection Closed.");
  esp.println("AT+CIPCLOSE");
}