본문 바로가기
개발 공부/프로젝트

프로젝트 ESP32를 이용해 센서값 서버로 보내기(map 함수를 이용한 % 변경)

by momo'sdad 2023. 10. 20.

※ 센서(온/습도 센서, 초음파센서를 이용한 수위%, 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); # 전송 간격

}

 
반응형