SOURCE CODE PROGRAM SMART AGRICULTURE

 Hari ini saya mencari contoh source code program smart agriculture

 config

#include "config.h"


//callback notifying us of the need to save config

void saveConfigCallback () {

  Serial.println("Should save config");

  shouldSaveConfig = true;

}


void ReadConfigFile()

{

    //read configuration from FS json

  Serial.println("mounting FS...");


  if (SPIFFS.begin()) {

    Serial.println("mounted file system");

    if (SPIFFS.exists("/config.json")) {

      //SPIFFS.remove("/config.json");

      //file exists, reading and loading

      Serial.println("reading config file");

      File configFile = SPIFFS.open("/config.json", "r");

      if (configFile) {

        Serial.println("opened config file");

        size_t size = configFile.size();

        // Allocate a buffer to store contents of the file.

        std::unique_ptr<char[]> buf(new char[size]);


        configFile.readBytes(buf.get(), size);

        DynamicJsonBuffer jsonBuffer;

        JsonObject& json = jsonBuffer.parseObject(buf.get());

        json.printTo(Serial);

        if (json.success()) {

          Serial.println("\nparsed json");


          strcpy(mqtt_server, json["mqtt_server"]);

          String port = json["mqtt_port"];

          mqtt_port = port.toInt();

          strcpy(mqtt_user, json["mqtt_user"]);

          strcpy(mqtt_password, json["mqtt_password"]);

//          strcpy(mqtt_keywords1, json["mqtt_keywords1"]);

          //strcpy(mqtt_keywords2, json["mqtt_keywords2"]);



        } else {

          Serial.println("failed to load json config");

        }

      }

    }

  } else {

    Serial.println("failed to mount FS");

  }

  //end read

}


String IpAddress2String(const IPAddress& ipAddress)

{

  return String(ipAddress[0]) + String(".") +\

  String(ipAddress[1]) + String(".") +\

  String(ipAddress[2]) + String(".") +\

  String(ipAddress[3])  ; 

}


void SaveConfigFile()

{

  

  //save the custom parameters to FS

  if (shouldSaveConfig) {

    Serial.println("saving config");

    DynamicJsonBuffer jsonBuffer;

    JsonObject& json = jsonBuffer.createObject();

    json["mqtt_server"] = mqtt_server;

    json["mqtt_port"] = String(mqtt_port);

    json["mqtt_user"] = mqtt_user;

    json["mqtt_password"] = mqtt_password;

    json["mqtt_keywords1"] = "";

   // json["mqtt_keywords2"] = mqtt_keywords2;

    

    File configFile = SPIFFS.open("/config.json", "w");

    if (!configFile) {

      Serial.println("failed to open config file for writing");

    }


    json.printTo(Serial);

    json.printTo(configFile);

    configFile.close();

    //end save

  }

}


void ResetSettings()

{

        WiFiManager wifiManager;

        wifiManager.resetSettings();

        delay(2000);

        ESP.restart();

}


RMQ with control relay

/*

    Develop by      : 

    Email           :

    Project         : 

    Version         :

*/

//library

/*

   Library

   Version:

   <ESP8266WiFi.h> 1.0.0

   <DNSServer.h> 1.1.0

   <ESP8266WebServer.h> 1.0.0

   <WiFiManager.h> 0.12.0

   <ArduinoJson.h> 5.13.2

   <PubSubClient.h> 2.6.0

*/

#include <FS.h> //this needs to be first, or it all crashes and burns...

#include <Ticker.h>


#include <ESP8266WiFi.h>

#include <DNSServer.h>

#include <ESP8266WebServer.h>

#include <WiFiManager.h>

#include <ArduinoJson.h>



//#include <SPI.h>

//#include "MFRC522.h"

#include <PubSubClient.h>

#include "config.h"

#include <EEPROM.h>

StaticJsonBuffer<200> jsonBuffer;

void writeString(char add,String data);

String read_String(char add);

//const char* id_user,aktif;


//var temp untuk menampung data json dari payload

char payloadTemp[200];


//var untuk PIN sensor

int soilSensor = A0;

int powerPin = 15;


//char devicename[40]="";

char registerstatus[40]="";

char aktivasistatus[40]="";

//var untuk userID

String commandMessage1 = "1"; //message pesan subscribe

String commandMessage2 = "2"; //message pesan publish

String typeDevice = "Soil Sensor";

char routingkey2[40] ="publish";

int relay1 = D1 ;

int relay2 = D2 ;

int relay3 = D3 ;

int relay4 = D4 ;

void setup_wifi() {

  WiFi.macAddress(MAC_array);

  for (int i = 0; i < sizeof(MAC_array) - 1; ++i) {

    sprintf(MAC_char, "%s%02x:", MAC_char, MAC_array[i]);

  }

  sprintf(MAC_char, "%s%02x", MAC_char, MAC_array[sizeof(MAC_array) - 1]);

  WiFiManagerParameter custom_mqtt_server("server", "mqtt server", mqtt_server, 40);

  String(mqtt_port).toCharArray(smqtt_port, 5);

  WiFiManagerParameter custom_mqtt_port("port", "mqtt port", smqtt_port, 5);

  WiFiManagerParameter custom_mqtt_user("user", "mqtt user", mqtt_user, 40);

  WiFiManagerParameter custom_mqtt_password("password", "mqtt password", mqtt_password, 40);

  WiFiManagerParameter custom_mqtt_keywords1("keyword1", "mqtt keyword1", MAC_char, 40);

  //WiFiManagerParameter custom_mqtt_keywords2("keyword2", "mqtt keyword2", mqtt_keywords2, 40);

  WiFiManager wifiManager;

  wifiManager.setSaveConfigCallback(saveConfigCallback);

  wifiManager.addParameter( & custom_mqtt_server);

  wifiManager.addParameter( & custom_mqtt_port);

  wifiManager.addParameter( & custom_mqtt_user);

  wifiManager.addParameter( & custom_mqtt_password);

  wifiManager.addParameter(&custom_mqtt_keywords1);

  if (!wifiManager.autoConnect(MAC_char, "password")) {

    Serial.println("failed to connect and hit timeout");

    delay(2000);

    //reset and try again, or maybe put it to deep sleep

    ESP.reset();

    delay(2000);

  }

  Serial.println("");

  Serial.println("WiFi connected");

  Serial.println("IP address: ");

  Serial.println(WiFi.localIP());

}




void callback(char * topic, byte * payload, unsigned int length) {

  char message [7] ;

  Serial.print("Message arrived [");

  Serial.print(topic);

  Serial.println("] ");

  for (int i = 0; i < length; i++) {

    message[i] = (char)payload[i];

  }

  String convertMsg = String(message) ;

  String data = convertMsg.substring(5);

  int timer = data.toInt();

  Serial.println(message);

     

  //relay 1

  if (message[0] == '1') {

    digitalWrite(relay1, HIGH);

    Serial.println("relay 1 mati");

  } else {

    digitalWrite(relay1, LOW);

    Serial.println("relay 1 idup");

  }

  //relay 2

  if (message[1] == '1') {

    digitalWrite(relay2, HIGH);

    Serial.println("relay 2 mati");

//    publish_ulang();

  } else {

    digitalWrite(relay2, LOW);

    Serial.println("relay 2 idup");

//    publish_ulang();

  }


  //relay 3

  if (message[2] == '1') {

    digitalWrite(relay3, HIGH);

    Serial.println("relay 3 mati");

//    publish_ulang();

  } else {

    digitalWrite(relay3, LOW);

    Serial.println("relay 3 idup");

//    publish_ulang();

  }


  //relay 4

  if (message[3] == '1') {

    digitalWrite(relay4, HIGH);

    Serial.println("relay 4 mati");

//    publish_ulang();

  } else {

    digitalWrite(relay4, LOW);

    Serial.println("relay 4 idup");

//    publish_ulang();

  }


  delay (timer);

  digitalWrite(relay1, HIGH);

  digitalWrite(relay2, HIGH);

  digitalWrite(relay3, HIGH);

  digitalWrite(relay4, HIGH);

  Serial.println("relay mati");

   //  publish_ulang();

if (message >=0){

      publish_ulang();

     }else{

      Serial.println("0");

      } 

  

 }

void reconnect() {

  // Loop until we're reconnected

  while (!client.connected()) {

    Serial.print("Attempting MQTT connection...%s");

    Serial.println(mqtt_server);

    // Attempt to connect

    if (client.connect(MAC_char, mqtt_user, mqtt_password)) {

      Serial.println("connected");

      Serial.println(MAC_char);

      client.subscribe(MAC_char);

     

    } else {

      Serial.print("failed, rc=");

      Serial.print(client.state());

      if (client.state() == 4) ESP.restart();

      else {

        Serial.println(" try again in 5 seconds");

        // Wait 5 seconds before retrying

        //delay(10000);

      }

    }

  }

}


void setup() {

  //setup pin mode

  //  pinMode(soilSensor, INPUT_PULLUP);

  pinMode(D1, OUTPUT);

  pinMode(D2, OUTPUT);

  pinMode(D3, OUTPUT);

  pinMode(D4, OUTPUT);

  pinMode(powerPin, OUTPUT);

  digitalWrite(D1, HIGH);

  digitalWrite(D2, HIGH);

  digitalWrite(D3, HIGH);

  digitalWrite(D4, HIGH);

  Serial.begin(115200);

  EEPROM.begin(512);

  Serial.println(F("Booting...."));

  //read config wifi,mqtt dan yang lain

  ReadConfigFile();

  setup_wifi();

  SaveConfigFile();

  client.setServer(mqtt_server, mqtt_port);

  client.setCallback(aktivasi);


  

}


void loop() {

  String  recivedData = read_String(10);

   Serial.println("Ini datanya:");

  Serial.println(recivedData);

  delay(1000);

//  int pesan=1;

  if(recivedData=="1"){

    client.setCallback(callback);

     client.loop(); 

  }else{

     client.setCallback(aktivasi);

     client.loop(); 

    Serial.println("Device Belum Teraktivasi");  

    }

     if (!client.connected()) {

    reconnect();

  }

}



void publish_ulang (){


//const char tambahan=MAC_char,"Ast";

  String berhasil = "berhasil";

  String pubmsg = "";

  StaticJsonBuffer<200> jsonBuffer;

  JsonObject& root = jsonBuffer.createObject();

  root["mac"] = MAC_char;

//  root["waktu siram"] =timer;

  root["pesan"] =berhasil;

  root.printTo(pubmsg);

  Serial.println(pubmsg);

  Serial.println(MAC_char);

  client.publish(routingkey2 ,pubmsg.c_str());

//client.publish(tambahan());

  delay(3000);

  }


  


//void publish_rmq(){

  //String pubmsg = "";

  //StaticJsonBuffer<200> jsonBuffer;

  //JsonObject& root = jsonBuffer.createObject();

  //root["mac_address"] = MAC_char;

  //root["namadevice"] =devicename;

  //root.printTo(pubmsg);

  //Serial.println(pubmsg);

  //Serial.println(MAC_char);

  //client.publish(routingkey2,pubmsg.c_str());

  //delay(3000);

  //}






void writeString(char add,String data){

  int _size = data.length();

  int i;

  for(i=0;i<_size;i++)

  {

    EEPROM.write(add+i,data[i]);

  }

  EEPROM.write(add+_size,'\0');   

  EEPROM.commit();

}

 

 

String read_String(char add){

  int i;

  char data[100]; 

  int len=0;

  unsigned char k;

  k=EEPROM.read(add);

  while(k != '\0' && len<500){    

    k=EEPROM.read(add+len);

    data[len]=k;

    len++;

  }

  data[len]='\0';

  return String(data);

}


void aktivasi(char * topic, byte * payload, unsigned int length) {

  String pesan;

  Serial.print("Message arrived [");

  Serial.print(topic);

  Serial.println("] ");

  for (int i = 0; i < length; i++) {

      pesan = (char)payload[i];

      Serial.print(pesan);

      writeString(10,pesan);   

  }

}


soil moisture shadoof

#include <PubSubClient.h>

#include <ESP8266WiFi.h>

#include <ArduinoJson.h>

#include <SoftwareSerial.h>

#include <EasyNTPClient.h>

#include <WiFiUdp.h>

//#include <NTPClient.h>

#include <FS.h> //this needs to be first, or it all crashes and burns...

#include <Ticker.h>

#include <ESP8266WiFi.h>

#include <DNSServer.h>

#include <ESP8266WebServer.h>

#include <WiFiManager.h>

#include <ArduinoJson.h>

#include <PubSubClient.h>

#include "config.h"

//WiFiClient espClient;

//PubSubClient client(espClient);

WiFiUDP udp;

EasyNTPClient ntpClient(udp, "pool.ntp.org", 25200); 

StaticJsonBuffer<200> jsonBuffer;

void writeString(char add,String data);

String read_String(char add);

char payloadTemp[200];

int soilSensor = A0;

int powerPin = 15;

String commandMessage1 = "1"; //message pesan subscribe

String commandMessage2 = "2"; //message pesan publish

String typeDevice = "Soil Sensor";

char routingkey2[40] ="soilsensor";

String waktu;

const int soil_sensor = A0;

const int LED = 13;

String Kondisi;

void setup_wifi() {

  WiFi.macAddress(MAC_array);

  for (int i = 0; i < sizeof(MAC_array) - 1; ++i) {

    sprintf(MAC_char, "%s%02x:", MAC_char, MAC_array[i]);

  }

  sprintf(MAC_char, "%s%02x", MAC_char, MAC_array[sizeof(MAC_array) - 1]);

  WiFiManagerParameter custom_mqtt_server("server", "mqtt server", mqtt_server, 40);

  String(mqtt_port).toCharArray(smqtt_port, 5);

  WiFiManagerParameter custom_mqtt_port("port", "mqtt port", smqtt_port, 5);

  WiFiManagerParameter custom_mqtt_user("user", "mqtt user", mqtt_user, 40);

  WiFiManagerParameter custom_mqtt_password("password", "mqtt password", mqtt_password, 40);

  WiFiManagerParameter custom_mqtt_keywords1("keyword1", "mqtt keyword1", MAC_char, 40);

  //WiFiManagerParameter custom_mqtt_keywords2("keyword2", "mqtt keyword2", mqtt_keywords2, 40);

  WiFiManager wifiManager;

  wifiManager.setSaveConfigCallback(saveConfigCallback);

  wifiManager.addParameter( & custom_mqtt_server);

  wifiManager.addParameter( & custom_mqtt_port);

  wifiManager.addParameter( & custom_mqtt_user);

  wifiManager.addParameter( & custom_mqtt_password);

  wifiManager.addParameter(&custom_mqtt_keywords1);

  if (!wifiManager.autoConnect(MAC_char, "password")) {

    Serial.println("failed to connect and hit timeout");

    delay(2000);

    //reset and try again, or maybe put it to deep sleep

    ESP.reset();

    delay(2000);

  }

  Serial.println("");

  Serial.println("WiFi connected");

  Serial.println("IP address: ");

  Serial.println(WiFi.localIP());

}

void callback(char* topic, byte* payload, unsigned int length) {

  Serial.print("Message arrived [");

  Serial.print(topic);

  Serial.print("] ");

  for (int i = 0; i < length; i++) {

    Serial.print((char)payload[i]);

  }

  Serial.println();

  // Switch on the LED if an 1 was received as first character

  if ((char)payload[0] == '1') {

    digitalWrite(LED, HIGH);   // Turn the LED on (Note that HIGH is the voltage level

  } else {

    digitalWrite(LED, LOW);  // Turn the LED off by making the voltage LOW

  }

}

void reconnect() {

  while (!client.connected()) {

    Serial.print("Attempting MQTT connection...%s");

    Serial.println(mqtt_server);

    if (client.connect(MAC_char, mqtt_user, mqtt_password)) {

      Serial.println("connected");

      Serial.println(MAC_char);

      client.subscribe(MAC_char);

     

    } else {

      Serial.print("failed, rc=");

      Serial.print(client.state());

      if (client.state() == 4) ESP.restart();

      else {

        Serial.println(" try again in 5 seconds");

      }

    }

  }

}


void setup() {

   pinMode(soil_sensor, INPUT);

  pinMode(LED, OUTPUT);

  Serial.begin(9600);

  setup_wifi();

  client.setServer(mqtt_server, 1883);

  client.setCallback(callback);

 

}


void loop() {

  String pubmsg = "";

  float speed;

  char time[32];

  char date[32];

  if (!client.connected()) {

    reconnect();

  }

  client.loop();

  

  int adc = analogRead(soil_sensor);     // read the value from the sensor

  float tegangan = adc * (5.0 / 1023.0);       // convertion formula to volt

  Serial.print("ADC:");

  Serial.print(adc);

  Serial.print(" | ");

  Serial.print("tegangan:");

  Serial.println(tegangan, 2);

  delay(1000);

  

  if (tegangan >= 3.7) {

    Serial.println("Kering");

    Kondisi="Kering";

  } else {

    Serial.println("Basah");

    Kondisi="Basah";

  }

   float unixtime = ntpClient.getUnixTime();

   Serial.println(unixtime);

  

  delay(20000); // wait for 20 seconds before refreshing.

  StaticJsonBuffer<200> jsonBuffer;

  JsonObject& root = jsonBuffer.createObject();

  root["MAC"] = MAC_char;

  root["Tegangan_Tanah"] =tegangan ;

  root["Kondisi_Tanah"] =Kondisi;

  JsonArray& data = root.createNestedArray("data");

  JsonArray& deviceId = root.createNestedArray("deviceId");

  data.add(adc);

  deviceId.add("Sensor_SOIL_003"); //device id Sensor Soil

  Serial.print("Publish message: ");

  root.printTo(pubmsg);

  String jenis_iot = "Sensor_Soil_001";

  String longitude = "0";

  String latitude = "0";

  String data_1 = MAC_char;

  float  data_2 = tegangan;

  String data_3 = "001";

  String data_4 = "0";

  float  timestamp_device = unixtime;

  String kode_device = "0";

    

  String publisheddata = "#" + jenis_iot + "#" + longitude + "#" + latitude + "#" + data_1 + "#" + data_2 + "#" + data_3 + "#" + data_4 + "#" + timestamp_device + "#" + kode_device;

  Serial.println(publisheddata);

  Serial.println(pubmsg);

  client.publish(routingkey2, pubmsg.c_str());

}


Water flow shadoof

#include <PubSubClient.h>

#include <ESP8266WiFi.h>

#include <ArduinoJson.h>

#include <SoftwareSerial.h>

#include <EasyNTPClient.h>

#include <WiFiUdp.h>

//#include <NTPClient.h>

#include <FS.h> //this needs to be first, or it all crashes and burns...

#include <Ticker.h>

#include <ESP8266WiFi.h>

#include <DNSServer.h>

#include <ESP8266WebServer.h>

#include <WiFiManager.h>

#include <ArduinoJson.h>

#include <PubSubClient.h>

#include "config.h"

#include <NTPClient.h>

//WiFiClient espClient;

//PubSubClient client(espClient);

WiFiUDP udp;

EasyNTPClient ntpClient(udp, "pool.ntp.org", 25200); 

StaticJsonBuffer<200> jsonBuffer;

void writeString(char add,String data);

String read_String(char add);

char payloadTemp[200];

int soilSensor = A0;

int powerPin = 15;

String commandMessage1 = "1"; //message pesan subscribe

String commandMessage2 = "2"; //message pesan publish

String typeDevice = "Soil Sensor";

const char* routingkey2 = "pubwaterflow";

WiFiUDP ntpUDP;

NTPClient timeClient(ntpUDP, "pool.ntp.org", 25200);


int TURBINE;      //pengukuran SINYAL data yang bersifat incremental

int waterflow = D3; //nama alias pada pin 2

int Calc;

const int LED = 13;


void setup_wifi() {

  WiFi.macAddress(MAC_array);

  for (int i = 0; i < sizeof(MAC_array) - 1; ++i) {

    sprintf(MAC_char, "%s%02x:", MAC_char, MAC_array[i]);

  }

  sprintf(MAC_char, "%s%02x", MAC_char, MAC_array[sizeof(MAC_array) - 1]);

  WiFiManagerParameter custom_mqtt_server("server", "mqtt server", mqtt_server, 40);

  String(mqtt_port).toCharArray(smqtt_port, 5);

  WiFiManagerParameter custom_mqtt_port("port", "mqtt port", smqtt_port, 5);

  WiFiManagerParameter custom_mqtt_user("user", "mqtt user", mqtt_user, 40);

  WiFiManagerParameter custom_mqtt_password("password", "mqtt password", mqtt_password, 40);

  WiFiManagerParameter custom_mqtt_keywords1("keyword1", "mqtt keyword1", MAC_char, 40);

  //WiFiManagerParameter custom_mqtt_keywords2("keyword2", "mqtt keyword2", mqtt_keywords2, 40);

  WiFiManager wifiManager;

  wifiManager.setSaveConfigCallback(saveConfigCallback);

  wifiManager.addParameter( & custom_mqtt_server);

  wifiManager.addParameter( & custom_mqtt_port);

  wifiManager.addParameter( & custom_mqtt_user);

  wifiManager.addParameter( & custom_mqtt_password);

  wifiManager.addParameter(&custom_mqtt_keywords1);

  if (!wifiManager.autoConnect(MAC_char, "password")) {

    Serial.println("failed to connect and hit timeout");

    delay(2000);

    //reset and try again, or maybe put it to deep sleep

    ESP.reset();

    delay(2000);

  }

  Serial.println("");

  Serial.println("WiFi connected");

  Serial.println("IP address: ");

  Serial.println(WiFi.localIP());

}

void callback(char* topic, byte* payload, unsigned int length) {

  Serial.print("Message arrived [");

  Serial.print(topic);

  Serial.print("] ");

  for (int i = 0; i < length; i++) {

    Serial.print((char)payload[i]);

  }

  Serial.println();

  // Switch on the LED if an 1 was received as first character

  if ((char)payload[0] == '1') {

    digitalWrite(LED, HIGH);   // Turn the LED on (Note that HIGH is the voltage level

  } else {

    digitalWrite(LED, LOW);  // Turn the LED off by making the voltage LOW

  }

}

void reconnect() {

  while (!client.connected()) {

    Serial.print("Attempting MQTT connection...%s");

    Serial.println(mqtt_server);

    if (client.connect(MAC_char, mqtt_user, mqtt_password)) {

      Serial.println("connected");

      Serial.println(MAC_char);

      client.subscribe(MAC_char);

     

    } else {

      Serial.print("failed, rc=");

      Serial.print(client.state());

      if (client.state() == 4) ESP.restart();

      else {

        Serial.println(" try again in 5 seconds");

      }

    }

  }

}

void speedrpm ()    //fungsi penghitungan dan interrupt

{

  TURBINE++; //bersifat incrementing (dengan mode falling edge)

}

  byte indikator = 13;

  byte sensorInt = 0;

  byte flowsensor = D3;


  float konstanta = 4.5; // konstanta flow meter

  volatile byte pulseCount;

  float debit;

  unsigned int flowmlt;

  unsigned long totalmlt;

  unsigned long oldTime;

void setup() {

  //Inisialisasi port serial

  Serial.begin(115200);


  pinMode(indikator, OUTPUT);

  digitalWrite(indikator, HIGH);


  pinMode(flowsensor,INPUT);

  digitalWrite(flowsensor, HIGH);

  setup_wifi();

//  printMACAddress();

  client.setServer(mqtt_server, 1883);

//  client.setCallback(callback);

  timeClient.begin();

  pulseCount = 0;

  debit = 0.0;

  flowmlt = 0;

  totalmlt = 0;

  oldTime = 0;


  attachInterrupt(sensorInt, pulseCounter, FALLING);

 

}


void loop() {

 

  if (!client.connected()){

    reconnect();}

//  client.loop();

  if((millis() - oldTime) > 1000){

    detachInterrupt(sensorInt);

    debit = ((1000.0 / (millis() - oldTime)) *pulseCount)/

    konstanta;

    oldTime = millis();

    flowmlt = (debit / 120) *1000;

    totalmlt += flowmlt;


    unsigned int frac;


    Serial.print("Debit air: ");

    Serial.print(int(debit));

    Serial.print("L/min");

    Serial.print("\t");


    Serial.print("Volume: ");

    Serial.print(totalmlt);

    Serial.println("mL");


    pulseCount = 0;

    attachInterrupt(sensorInt,pulseCounter,FALLING);

  }

    String pubmsg="";

  StaticJsonBuffer<200> jsonBuffer;

  JsonObject& root = jsonBuffer.createObject();

  root["MAC"] = MAC_char;

  root["Debit_air"] =debit ;

  root["Volume_air"]=totalmlt;

  Serial.print("Publish message: ");

  root.printTo(pubmsg);

  Serial.println(pubmsg);

  client.publish(routingkey2,(char*)pubmsg.c_str());

  delay (1000);

  

}

  void pulseCounter(){

   pulseCount++;

  

  }



Water level shadoof



/*

 * Edit By Asep Trisna Setiawan

 * Bandung 15 03 2020

 */



#include <PubSubClient.h>

#include <ESP8266WiFi.h>

#include <ArduinoJson.h>

#include <SoftwareSerial.h>

#include <EasyNTPClient.h>

#include <WiFiUdp.h>

#include <FS.h> //this needs to be first, or it all crashes and burns...

#include <Ticker.h>

#include <ESP8266WiFi.h>

#include <DNSServer.h>

#include <ESP8266WebServer.h>

#include <WiFiManager.h>

#include <ArduinoJson.h>

#include <PubSubClient.h>

#include "config.h"

//WiFiClient espClient;

//PubSubClient client(espClient);

#include <ArduinoJson.h>

#include <PubSubClient.h>

#include <ESP8266WiFi.h>

#include <ESP8266WebServer.h>

#include <WiFiManager.h>

int FloatSensor  = D1;

int FloatSensor2 = D2;

int FloatSensor3 = D3;

int Buzzer       = D4;

int buttonState  = 1;

int buttonState2 = 1;

int buttonState3 = 1;

const int LED = 13;

char routingkey2[40] ="waterlev";

byte   mac[6];

char   msg[50];

String Level;

void setup_wifi() {

  WiFi.macAddress(MAC_array);

  for (int i = 0; i < sizeof(MAC_array) - 1; ++i) {

    sprintf(MAC_char, "%s%02x:", MAC_char, MAC_array[i]);

  }

  sprintf(MAC_char, "%s%02x", MAC_char, MAC_array[sizeof(MAC_array) - 1]);

  WiFiManagerParameter custom_mqtt_server("server", "mqtt server", mqtt_server, 40);

  String(mqtt_port).toCharArray(smqtt_port, 5);

  WiFiManagerParameter custom_mqtt_port("port", "mqtt port", smqtt_port, 5);

  WiFiManagerParameter custom_mqtt_user("user", "mqtt user", mqtt_user, 40);

  WiFiManagerParameter custom_mqtt_password("password", "mqtt password", mqtt_password, 40);

  WiFiManagerParameter custom_mqtt_keywords1("keyword1", "mqtt keyword1", MAC_char, 40);

  //WiFiManagerParameter custom_mqtt_keywords2("keyword2", "mqtt keyword2", mqtt_keywords2, 40);

  WiFiManager wifiManager;

  wifiManager.setSaveConfigCallback(saveConfigCallback);

  wifiManager.addParameter( & custom_mqtt_server);

  wifiManager.addParameter( & custom_mqtt_port);

  wifiManager.addParameter( & custom_mqtt_user);

  wifiManager.addParameter( & custom_mqtt_password);

  wifiManager.addParameter(&custom_mqtt_keywords1);

  if (!wifiManager.autoConnect(MAC_char, "password")) {

    Serial.println("failed to connect and hit timeout");

    delay(2000);

    //reset and try again, or maybe put it to deep sleep

    ESP.reset();

    delay(2000);

  }

  Serial.println("");

  Serial.println("WiFi connected");

  Serial.println("IP address: ");

  Serial.println(WiFi.localIP());

}

void callback(char* topic, byte* payload, unsigned int length) {

  Serial.print("Message arrived [");

  Serial.print(topic);

  Serial.print("] ");

  for (int i = 0; i < length; i++) {

    Serial.print((char)payload[i]);

  }

  Serial.println();

  // Switch on the LED if an 1 was received as first character

  if ((char)payload[0] == '1') {

    digitalWrite(LED, HIGH);   // Turn the LED on (Note that HIGH is the voltage level

  } else {

    digitalWrite(LED, LOW);  // Turn the LED off by making the voltage LOW

  }

}

void reconnect() {

  while (!client.connected()) {

    Serial.print("Attempting MQTT connection...%s");

    Serial.println(mqtt_server);

    if (client.connect(MAC_char, mqtt_user, mqtt_password)) {

      Serial.println("connected");

      Serial.println(MAC_char);

      client.subscribe(MAC_char);

     

    } else {

      Serial.print("failed, rc=");

      Serial.print(client.state());

      if (client.state() == 4) ESP.restart();

      else {

        Serial.println(" try again in 5 seconds");

      }

    }

  }

}


void setup() {

  Serial.begin(115200);

  setup_wifi();

  client.setServer(mqtt_server, 1883);

  client.setCallback(callback);

  pinMode(FloatSensor,  INPUT_PULLUP);

  pinMode(FloatSensor2, INPUT_PULLUP);

  pinMode(FloatSensor3, INPUT_PULLUP);

  pinMode(Buzzer,   OUTPUT);

  digitalWrite(Buzzer,HIGH);

  delay(100);

  }

void loop(){

  if (!client.connected()) {

    reconnect();

  }

  String pubmsg = "";

  float speed;

  char time[32];

  char date[32];

  

  client.loop();

    // read the value from the sensor

  int value = digitalRead (buttonState);     

  int value2 = digitalRead (buttonState2); 

  int value3 = digitalRead (buttonState3); 

  Serial.println(value);

  delay(5000);

   buttonState  = digitalRead(FloatSensor);  // read the value of float sensor

   buttonState2 = digitalRead(FloatSensor2);  // read the value of float sensor

   buttonState3 = digitalRead(FloatSensor3);  // read the value of float sensor


  if ((buttonState == HIGH)&&(buttonState2 == HIGH)&&(buttonState3 == HIGH)){

    Level = "Empty";                                         

    Serial.println( "WATER LEVEL - LOW");

    digitalWrite(Buzzer, HIGH);

                

   

  }else if ((buttonState == HIGH)&&(buttonState2 == LOW)&&(buttonState3 == LOW)){

     Level = "Medium"; 

    Serial.println( "WATER LEVEL - MEDIUM" );                     

    digitalWrite(Buzzer, LOW);           

  

  }

  else if ((buttonState == LOW)&&(buttonState2 == LOW)&&(buttonState3 == LOW)){

    Level = "Full";

    Serial.println( "WATER LEVEL - HIGH" ); // if the value is LOW                       // the level is low

    digitalWrite(Buzzer, HIGH);     

    

  }

  StaticJsonBuffer<200> jsonBuffer;

  JsonObject& root = jsonBuffer.createObject();

  root["MAC"] = MAC_char;

  root["Level_Air"] = Level;


  JsonArray& data = root.createNestedArray("data");

  JsonArray& deviceId = root.createNestedArray("deviceId");

  data.add(value);

  data.add(value2);

  data.add(value3 );

  deviceId.add("Sensor_WATER_001"); //device id Sensor WATER LEVEL

  Serial.print("Publish message: ");

  root.printTo(pubmsg);

  String jenis_iot = "Sensor_Water_Level";

  String longitude = "0";

  String latitude = "0";

  String data_1 = MAC_char;

  int data_2 = value;

  int data_3 = value2;

  int data_4 = value3;

  String timestamp_device = "0";

  String kode_device = "0";

  String publisheddata = "#" + jenis_iot + "#" + longitude + "#" + latitude + "#" + data_1 + "#" + data_2 + "#" + data_3 + "#" + data_4 + "#" + timestamp_device + "#" + kode_device;

  Serial.println(publisheddata);

  Serial.println(pubmsg);

  client.publish(routingkey2,(char*) pubmsg.c_str());

  delay(10000);

}

Comments