ប្រព័ន្ធគ្រប់គ្រងវារីវប្បកម្ម Aquaculture Management System

 Code:

       
#include WiFi.h     //add < before ----.h >
#include "time.h"
#include FirebaseESP32.h
#include addons/TokenHelper.h
#include addons/RTDBHelper.h
//watertemperature----------------------------------------------------

#include OneWire.h
#include DallasTemperature.h
#define ONE_WIRE_BUS 23
OneWire oneWire(ONE_WIRE_BUS); 
DallasTemperature sensors(&oneWire);

//RTC DS1302----------------------------------------------------------------------
#include LiquidCrystal_I2C.h
 LiquidCrystal_I2C lcd(0x27, 20, 4);
//servo moter---------------------------------------------
#include ESP32Servo.h
Servo myservo;
const int OffHour1 = 11;
const int OffMin1 = 40;
const int OffSec1 = 30;
const int OnHour = 17;
const int OnMin = 41;
const int OnSec = 01;
const int OffHour = 17;
const int OffMin = 41;
const int OffSec = 11;
//-----------------------------------------------------------
FirebaseData firebaseData;

#define ssid "OPPOA54"  //WiFi SSID
#define password "200031911"  //WiFi Password
#define API_KEY "-------------------------"
#define FIREBASE_URL "---------------.firebaseio.com" //Your Firebase Project URL goes here without "http:" , "\" and "/"
#define FIREBASE_AUTH "-----------------------" //Your Firebase Auth Token

FirebaseData fbdo;
FirebaseAuth auth;
FirebaseConfig config;

unsigned long sendDataPrevMillis = 0;
bool signupOK = false;
unsigned long count = 0;

// define the GPIO connected with RELAYs and switches
 
#define RELAY1_PIN 32 //GPIO 16
#define RELAY2_PIN 33 //GPIO 5
#define RELAY3_PIN 25 //GPIO 4
#define RELAY4_PIN 26 //GPIO 0

#define servo_PIN 18

#define ButtonF 15 

int cooler = 0, heater = 0, air = 0, waterp= 0 , feed= 0 ;
int val1=1,val2=1,val3=1,val4=1,valf=1;
int old_val1,old_val2,old_val3,old_val4,old_valf;
int state1 = LOW,state2 = LOW,state3 = LOW,state4 = LOW,statef = LOW;

const char* ntpServer = "kh.pool.ntp.org";
const long  gmtOffset_sec = 0;
const int   daylightOffset_sec = 25200;//GMT+7

void setup() {
  Serial.begin(115200);
  //servo-----------------------------------------------------------------
  myservo.attach(servo_PIN);
  //---------------------------------------------------------------------

WiFi.begin (ssid, password);
Serial.print("Connecting to Wi-Fi");
  while(WiFi.status() != WL_CONNECTED){
    Serial.print("."); delay(300);
  }
  Serial.println();
  Serial.print("Connected with IP: ");
  Serial.println(WiFi.localIP());
  Serial.println();
  
  Serial.printf("Firebase Client v%s\n\n", FIREBASE_CLIENT_VERSION);
  
  config.api_key = API_KEY;
  config.database_url = FIREBASE_URL;
  if(Firebase.signUp(&config, &auth, "", "")){
    Serial.println("signUp OK");
    signupOK = true;
  }else{
    Serial.printf("%s\n", config.signer.signupError.message.c_str());
  }

  config.token_status_callback = tokenStatusCallback; 
  Firebase.begin(&config, &auth);
  Firebase.reconnectWiFi(true);
  //Firebase.setDoubRELAYigits(5);
  
  pinMode(RELAY1_PIN, OUTPUT); digitalWrite(RELAY1_PIN, LOW);  
  pinMode(RELAY2_PIN, OUTPUT); digitalWrite(RELAY2_PIN, LOW);
  pinMode(RELAY3_PIN, OUTPUT); digitalWrite(RELAY3_PIN, HIGH);
  pinMode(RELAY4_PIN, OUTPUT); digitalWrite(RELAY4_PIN, HIGH);

  pinMode(ButtonF, INPUT_PULLUP);  

  configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
  //printLocalTime();
  //WiFi.disconnect(true);
  //WiFi.mode(WIFI_OFF);
  
  }

void loop() {
//waterTemperature--------------------------------------------
  Serial.print("Requesting temperatures...");
  sensors.requestTemperatures(); // Send the command to get temperatures
  Serial.println("DONE");
  float datatempC = sensors.getTempCByIndex(0);
  
  if(datatempC != DEVICE_DISCONNECTED_C){
    Firebase.RTDB.setFloat(&firebaseData, "tempC_data", datatempC);
    Serial.print("Temperature for the device 1 (index 0) is: ");
    Serial.println(datatempC);
    lcd.setCursor(0, 1);
    lcd.print(datatempC);
  } 
  else
  {
    Serial.println("Error: Could not read temperature data");
  }
//relay--------------------------------------------------------------
 if(Firebase.RTDB.getString(&firebaseData,"/C1")){
  if (firebaseData.dataType() == "string") {
      cooler = firebaseData.stringData().toInt();
    }
  }
  if(datatempC >= 32){
    digitalWrite(RELAY1_PIN, LOW);
  }else if(cooler == 1){
    digitalWrite(RELAY1_PIN, HIGH);
  }else{
    digitalWrite(RELAY1_PIN, LOW);
  }

  if(Firebase.RTDB.getString(&firebaseData,"/H1")){
  if (firebaseData.dataType() == "string") {
      heater = firebaseData.stringData().toInt();
    }
  }
  if(datatempC < 30){
    digitalWrite(RELAY2_PIN, LOW);
  }else if(heater == 1){
    digitalWrite(RELAY2_PIN, HIGH);
  }else{
    digitalWrite(RELAY2_PIN, LOW);
  }

  if(Firebase.RTDB.getString(&firebaseData,"/A1")){
  if (firebaseData.dataType() == "string") {
      air = firebaseData.stringData().toInt();
    }
  }
  //Serial.printf("%d", cooler);
  if(air == 1){
    digitalWrite(RELAY3_PIN, HIGH);
    
  }else{
    digitalWrite(RELAY3_PIN, LOW);
  }
  if(Firebase.RTDB.getString(&firebaseData,"/W1")){
  if (firebaseData.dataType() == "string") {
      waterp = firebaseData.stringData().toInt();
    }
  }
  if(waterp == 1){
    digitalWrite(RELAY4_PIN, HIGH);
    
  }else{
    digitalWrite(RELAY4_PIN, LOW);
  }
  lcd.init();
  lcd.backlight();
 //delay(1000);
 printLocalTime();     
}
 void printLocalTime(){
  struct tm timeinfo;
  if(!getLocalTime(&timeinfo)){
    Serial.println("Failed to obtain time");
    return;
  }
  Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
  
  lcd.setCursor(6, 1);
  lcd.print(&timeinfo,"%H:%M:%S");
  char timeHour[3];
  char timeMinutes[3];
  char timeSeconds[3];
  const int OffHour1 = 11;
  const int OffMin1 = 40;
  const int OffSec1 = 30;
  const int OnHour = 17;
  const int OnMin = 41;
  const int OnSec = 01;
  const int OffHour = 17;
  const int OffMin = 41;
  const int OffSec = 11;
  
  strftime(timeHour,3,"%H",&timeinfo);
  strftime(timeMinutes,3,"%M",&timeinfo);
  strftime(timeSeconds,3,"%S",&timeinfo);
  int h = atoi(timeHour);
  int m = atoi(timeMinutes);
  int s = atoi(timeSeconds);
  if(Firebase.RTDB.getString(&firebaseData,"/F1")){
  if (firebaseData.dataType() == "string") {
      feed = firebaseData.stringData().toInt();
    }
  }
  
  int state = digitalRead(ButtonF);

  if(feed == 0 ||  state == LOW)
    {
      myservo.write(165);
    }else{
      myservo.write(15);
    }

  if(h == OffHour1 && m == OffMin1 && s == OffSec1)
    {
      myservo.write(15);
    }
   else if(h == OnHour && m == OnMin && s == OnSec)
    {
       myservo.write(165); 
    }
   else if(h == OffHour && m == OffMin && s == OffSec)
   {
      myservo.write(15);
   }
  Serial.print(h);Serial.print(":"); Serial.print(m);Serial.print(":");Serial.println(s);
}
       
 

Post a Comment

2 Comments