극한의 아두이노 DIY생활 - 식물상태를 알려주는 기기17

in kr-dev 커뮤니티2 years ago (edited)

안녕하세요 Jimae입니다.

자 저번에 이어서 마저 시작해보겠습니다.

    case DATASEND:
                  BluetoothLEDOn(); // LED 계속 켜짐

                  SensorDataRead(); // 센서값들 읽기

                  SensorDataSend(); // 센서 값들 전송
        
                  programStep = DATACONFIRM;
                  
                  break;

이제 블루투스로 데이터를 전송하는 과정인대 이과정은 기존에 설명되었던 모든센서들의 값을 취득하여

블루투스로 전송하는 과정입니다.

하나하나씩 보겠습니다.


#define BLUELED 5

void BluetoothLEDOn(void)
{
  digitalWrite(BLUELED, HIGH);
}

우선 LED의 불을 계속킨 상태로 두고요.

double lux = 0;
double temperature = 0;
double humidity = 0;

double soilHumidity = 0;
double soilTemperature = 0;

void SensorDataRead(void)
{
  lux = LightSensorRead();

  THumidityRead();  //온습도 센서 값일기
         
  soilHumidity = SoilHumidityRead();
 
  soilTemperature = TemperatureRead();                         
}

SensorDataRead 함수에는 조도 센서, 온습도 센서, 토양 센서, 방수된 온도센서 이렇게 총 5가지의 데이터를 수집하고있습니다.

double LightSensorRead(void)
{
  double lux = 0;    // Resulting lux value
  
  delay(ms);

  unsigned int data0, data1;

  if (light.getData(data0,data1))
  {
    // getData() returned true, communication was successful
 
    boolean good;  // True if neither sensor is saturated
    
    // Perform lux calculation:

    good = light.getLux(gain,ms,data0,data1,lux);
    
    // Print out the results:
  
  }
  else
  {
    // getData() returned false because of an I2C error, inform the user.

    byte error = light.getError();
//    printError(error);
  }

  return lux;
}

void THumidityRead(void)
{
  if (THumidity.measure()) {
    temperature = THumidity.getTemperature();
    humidity = THumidity.getHumidity();
  }
  else {  // error has occured
    int errorCode = THumidity.getErrorCode();
    switch (errorCode) {
      case 1: Serial.println("ERR: Sensor is offline"); break;
      case 2: Serial.println("ERR: CRC validation failed."); break;
    }    
  }
}

double SoilHumidityRead(void)
{
  int sensorValue = 0;
  double calculation = 0;

  sensorValue = analogRead(SOILPIN);

  calculation = (1023 - sensorValue) * 0.098;
  
  return calculation;
}

double TemperatureRead(void)
{
  double temperature = 0;
  
  Temperature.requestTemperatures(); 
  
  temperature = Temperature.getTempCByIndex(0);
  
  return temperature;
}

저번에 설명되었던 것이고

방수된 온도 센서 같은경우 라이브러리 이다보니

#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2 

OneWire oneWire(ONE_WIRE_BUS); 
DallasTemperature Temperature(&oneWire);

void TemperatureInit(void)
{
  Temperature.begin(); 
}

double TemperatureRead(void)
{
  double temperature = 0;
  
  Temperature.requestTemperatures(); 
  
  temperature = Temperature.getTempCByIndex(0);
  
  return temperature;
}

이렇게만 사용하시면 문제없이 사용할수 있습니다.

물론 저번에 설명드린것 같지만 이부분은 제가 까먹고 못한 부분이 있어 다시 글을 쓴점 양해 부탁드립니다.

자 이렇게 센서를 읽었으면 이제 블루투스를 통해서 보내야 합니다.

void SensorDataSend(void)
{
//  Serial.println("data start");       // 디버깅 코드
  BTSerial.print((int)temperature);
  BTSerial.print(",");
  BTSerial.print((int)humidity);
  BTSerial.print(",");
  BTSerial.print((int)lux);
  BTSerial.print(",");
  BTSerial.print((int)soilTemperature);
  BTSerial.print(",");
  BTSerial.print((int)soilHumidity);
  BTSerial.println("~");
}

프로토콜을 전문적으로 하지않고 가라고 이런식으로 간단하게 만들었습니다.

각각 ',' 쉼표로 데이터를 구분하게 표현했으며 이것을 기준으로 파싱하는 방법과

마지막에는 '~' 물결표시를 넣어서 데이터가 끝났다고 표시해서 보내줍니다.

물론 모든데이터는 실수형태가 아닌 정수형태로 보내어지내요.

이렇게 되면 소수점 자리의 데이터는 없어지고 정수형태의 값들만 넘어가게 됩니다.

오늘도 글이 길어지는 바람에 여기까지 하겠습니다.

다들 좋으 하루 되세요.

극한의 아두이노 DIY생활 - 식물상태를 알려주는 기기1
극한의 아두이노 DIY생활 - 식물상태를 알려주는 기기2
극한의 아두이노 DIY생활 - 식물상태를 알려주는 기기3
극한의 아두이노 DIY생활 - 식물상태를 알려주는 기기4
극한의 아두이노 DIY생활 - 식물상태를 알려주는 기기5
극한의 아두이노 DIY생활 - 식물상태를 알려주는 기기6
극한의 아두이노 DIY생활 - 식물상태를 알려주는 기기7
극한의 아두이노 DIY생활 - 식물상태를 알려주는 기기8
극한의 아두이노 DIY생활 - 식물상태를 알려주는 기기9
극한의 아두이노 DIY생활 - 식물상태를 알려주는 기기10
극한의 아두이노 DIY생활 - 식물상태를 알려주는 기기11
극한의 아두이노 DIY생활 - 식물상태를 알려주는 기기12
극한의 아두이노 DIY생활 - 식물상태를 알려주는 기기13
극한의 아두이노 DIY생활 - 식물상태를 알려주는 기기14
극한의 아두이노 DIY생활 - 식물상태를 알려주는 기기15
극한의 아두이노 DIY생활 - 식물상태를 알려주는 기기16

Sort:  
 2 years ago 

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

Coin Marketplace

STEEM 0.18
TRX 0.14
JST 0.029
BTC 57899.47
ETH 3134.16
USDT 1.00
SBD 2.39