※ 센서(온/습도 센서, 초음파센서를 이용한 수위%, CO2센서)
#include "DHT.h"
#include "CO2Sensor.h"
#include <WiFi.h> // ESP32
#define DHTTYPE DHT22 // DHT 22 (AM2302)
int DHTPIN = 4;
int trig = 12;
int echo = 13;
int CO2PIN = 35;
DHT dht(DHTPIN, DHTTYPE);
WiFiClient client;
const char* ssid = "wifi 이름";
const char* password = "Wifi 비밀번호";
const char* server = "서버주소";
const int port = 서버포트;
const int sendingInternval = 2 * 1000;
CO2Sensor co2Sensor(CO2PIN, 0.99, 10);
void setup()
{
Serial.begin(115200);
dht.begin();
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
co2Sensor.calibrate();
Serial.println("Connecting");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(100);
}
Serial.println("\r\nWiFi connected");
}
void loop()
{
digitalWrite(trig, HIGH);
delay(10);
digitalWrite(trig, LOW);
int duration = pulseIn(echo, HIGH);
duration = duration / 2;
int distance = 76 - (duration / 29.1); // 물통 76cm
float h = dht.readHumidity();
float t = dht.readTemperature();
int c = co2Sensor.read();
int d = map(distance, 0, 76, 0, 100);
Serial.print(t);
Serial.print("°C ");
Serial.print(h);
Serial.print("% ");
Serial.print(d);
Serial.print("% ");
Serial.print(c);
Serial.println("ppm");
if (isnan(t) || isnan(h))
{
Serial.println("Failed to read from DHT");
}
// else
// {
// if (d >= 5) {
// Serial.print(t);
// Serial.print("°C ");
// Serial.print(h);
// Serial.print("% ");
// Serial.print(d);
// Serial.print("cm ");
// Serial.print(c);
// Serial.println("ppm");
// delay(1000);
// }
if (client.connect(server, port)) {
String req_url = "/insertSensor?temp=" + String(t) + "&humd=" + String(h) + "&height=" + String(d) + "&co2=" + String(c);
client.print(String("GET ") + req_url + " HTTP/1.1\r\n" +
"Host: " + server + "\r\n" +
"Connection: close\r\n\r\n");
Serial.printf("Nhiet do %s - Do am %s\r\n", String(t, 1).c_str(), String(h, 1).c_str(), String(d, 1).c_str(), String(c, 1).c_str());
}
client.stop();
delay(sendingInternval);
}
ESP32 핀번호
센서값들의 핀번호
int DHTPIN = 4; # 온/습도 센서
int trig = 12; # 초음파센서의 trig핀
int echo = 13; # 초음파센서의 echo핀
int CO2PIN = 35; # CO2센서
DHT dht(DHTPIN, DHTTYPE); # DHT 선언(핀번호, DHT센서 타입)
WiFiClient client; # WfiClient를 client로 선언
--------------Wifi/ get방식을로 받을 서버주소-------------
const char* ssid = "wifi 이름";
const char* password = "Wifi 비밀번호";
const char* server = "서버주소";
const int port = 서버포트;
------------------------------------------------------------------
const int sendingInternval = 2 * 1000; # 전송간격
CO2Sensor co2Sensor(CO2PIN, 0.99, 10); # CO2센서핀 선언 (핀번호)
void setup() # 핀설정 및 set up 설정
{
Serial.begin(115200); # 시리얼모니터 출력
dht.begin(); # 온/습도 센서 측정시작
pinMode(trig, OUTPUT); # 초음파센서의 trig핀 출력
pinMode(echo, INPUT); # 초음파센서의 echo핀 입력
co2Sensor.calibrate(); # CO2센서 측정시작
-------------------- Wifi연결 출력------------------------
Serial.println("Connecting");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(100);
}
Serial.println("\r\nWiFi connected");
}
-------------------------------------------------------------
void loop()
{
digitalWrite(trig, HIGH); # tirg로 초음파 출력 10초
delay(10);
digitalWrite(trig, LOW); # trig 10초뒤 off
int duration = pulseIn(echo, HIGH); # trig에서 보낸 초음파를 echo에서 측정
duration = duration / 2; # 초음파의 왕복거리이므로 2로 나누어줌
# 거리 = 시간(duration)/속도 초음파의 상온 속도(3928.5 m/s)
int distance = 76 - (duration / 29.1);
# 물통 76cm에서 거리 = 시간(duration)/속도(29.1(초음파의 상온 속도의 역수))
float h = dht.readHumidity(); # 습도
float t = dht.readTemperature(); # 온도
int c = co2Sensor.read(); # CO2농도
int d = map(distance, 0, 76, 0, 100); # map 함수를 이용해 0~76cm를 100%로 표현
---------------------- Serial 창에 t:온도°C, h:습도%, d:수위량%, c: CO2ppm------------------
Serial.print(t);
Serial.print("°C ");
Serial.print(h);
Serial.print("% ");
Serial.print(d);
Serial.print("% ");
Serial.print(c);
Serial.println("ppm");
--------------------------------------------------------------------------------------------------------------
if (isnan(t) || isnan(h))
{
Serial.println("Failed to read from DHT");
}
------------------------------------- Wifi통신을 이용해 서버로 센서값들 보내기-----------------------------
if (client.connect(server, port)) {
String req_url = "/insertSensor?temp=" + String(t) + "&humd=" + String(h) + "&height=" + String(d) + "&co2=" + String(c);
client.print(String("GET ") + req_url + " HTTP/1.1\r\n" +
"Host: " + server + "\r\n" +
"Connection: close\r\n\r\n");
Serial.printf("Nhiet do %s - Do am %s\r\n", String(t, 1).c_str(), String(h, 1).c_str(), String(d, 1).c_str(), String(c, 1).c_str());
}
client.stop();
delay(sendingInternval); # 전송 간격
}
'개발 공부 > 프로젝트' 카테고리의 다른 글
flask에서 request.args.get()의 의미 (0) | 2023.11.23 |
---|---|
프로젝트 : 적외선 송신기 만들기3 (0) | 2023.10.20 |
프로젝트 : 적외선 송신기 만들기2 (0) | 2023.10.20 |
프로젝트 : 적외선 송신기 만들기1 (0) | 2023.10.20 |
프로젝트 라즈베리파이를 이용해 서버에서 액츄레이터 제어 (0) | 2023.10.20 |