#include <UUID.h>
#include <EEPROM.h>
#include <ArduinoJson.h>
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
#include "WiFi.h"
#include <HTTPClient.h>
//library oled display
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH110X.h>
//library sensor
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const uint8_t ROWS = 4;
const uint8_t COLS = 4;
char keys[ROWS][COLS] = {
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
};
uint8_t colPins[COLS] = { 26, 25, 33, 32 };
uint8_t rowPins[ROWS] = { 13, 12, 14, 27 };
LiquidCrystal_I2C lcd (0x27,20,4);
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS );
char MenuUtama[][20] = {
"KTN-IoT-0.1.1 ",
"1 Status ",
"2 Setting ",
"3 Sensor Data ",
};
char MenuStatus[][20] = {
"Status IOT",
"Wifi:",
"|SVR:",
"senMode:",
"Tekan C utk kembali",
};
char MenuSetting[][20] = {
"Setting ",
"1 Mode Sensor ",
"2 Kode Proyek ",
"Tekan C utk kembali",
};
char MenuDataSensor[][20] = {
"Data Sensor ",
"Tekan C utk kembali",
};
char ModeSensor[][20] = {
"Mode Sensor: ",
"1 Isi Mode Sensor ",
"2 Cek Mode Sensor ",
"Tekan C utk kembali",
};
char KodeProyek[][20] = {
"Kode Proyek:",
"1 Isi Kode Proyek ",
"2 Cek Kode Proyek ",
"Tekan C utk kembali",
};
char EntryModeSensor[][20] = {
"Isi Mode Sensor: ",
" ",
"Tekan # utk selesai",
"Tekan C utk kembali",
};
char CheckModeSensor[][20] = {
"Mode Sensor: ",
" ",
" ",
"Tekan C utk kembali",
};
char EntryKodeProyek[][20] = {
"Isi Kode Proyek: ",
" ",
"Tekan # utk selesai",
"Tekan C utk kembali",
};
char CheckKodeProyek[][20] = {
"Kode Proyek:",
" ",
" ",
"Tekan C utk kembali",
};
int8_t indexMenu = -1;
byte menuLevel = -1;
byte menuLevelSebelumnya = -1;
byte indexHalaman = 0;
byte indexHalamanSebelumnya = -1;
byte lcdEntriPos;
bool entriNilai;
enum ModeMenu {
modeMenuStatus,
modeMenuSetting,
modeMenuDataSensor,
modeMenuModeSensor,
modeMenuKodeProyek,
modeMenuEntryModeSensor,
modeMenuEntryKodeProyek,
modeMenuCheckModeSensor,
modeMenuCheckKodeProyek,
};
ModeMenu modeMenu;
ModeMenu modeMenuSebelumnya;
#define standarWaktuTampil 1000L
#define LihatWaktuTampil 5000L
uint16_t waktuTampil;
unsigned long millisMulai;
String menuEntriNilai;
char kpd;
uint16_t sensor_mode;
String kode_proyek;
//variabel sensor
//EEPROM
String str_uuid_r = "9b469727-f49d-4a3e-8c3d-5028e25e1afc", str_did_r ="00001", str_did_w="", str_uuid_w="";
String payload, msg_server, inet_code;
//variabel status
int svr_code;
static int8_t
highlight = 0;
void setup()
{
Serial.begin(115200);
lcd.backlight();
delay(2000);
millisMulai = millis();
//uuid init
EEPROM.begin(41);
delay(8000);
/*
//UUID Init Function
for (int i = 36; i <= 40; i++){
int j = i-36;
str_did_r.concat((char)EEPROM.read(i));
}
Serial.println(str_did_r);
// read EEPROM 0 to 35 into uuid_r
for (int i = 0; i <= 35; i++){
str_uuid_r.concat((char)EEPROM.read(i));
}
Serial.println(str_uuid_r);
*/
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.print("OK! IP=");
Serial.println(WiFi.localIP());
//uuid dan did default
if ((EEPROM.read(0) == 0) || (str_uuid_r == "e3ba4698-d64b-447e-81f5-0bf0e09700eb")){
Serial.println("uuid default");
DynamicJsonDocument jsonDoc(128);
jsonDoc["uuid"] = "e3ba4698-d64b-447e-81f5-0bf0e09700eb";
jsonDoc["did"] = "00000";
String serializedData;
serializeJson(jsonDoc, serializedData);
String strReq = serializedData;
Serial.println(strReq);
//testPing
msg_server = kirim_data(strReq, "/echo");
//msg_server = "{\"code\": 200, \"msg\": \"OK\", \"data\": {\"uuid\": \"04913d02-1046-41d9-b3d8-55277297a8cf\", \"did\": \"00007\"}}";
Serial.println(msg_server);
//replace uuid
DynamicJsonDocument doc(512);
DeserializationError error = deserializeJson(doc, msg_server);
if (error) {
Serial.print("Parsing failed: ");
Serial.println(error.c_str());
//return;
}
// Accessing UUID & DID
svr_code = doc["code"];
const char* str_uuid_w = doc["data"]["uuid"];
const char* str_did_w = doc["data"]["did"];
Serial.println("Replace UUID dan DID");
Serial.print("Code: ");
Serial.println(svr_code);
Serial.print("UUID: ");
Serial.println(str_uuid_w);
Serial.print("DID: ");
Serial.println(str_did_w);
delay(5000);
for (int i = 0; i < 36; i++){
EEPROM.write(i,str_uuid_w[i]);
if (i < 5){
//did 36-40
EEPROM.write(i+36,str_did_w[i]);
}
}
EEPROM.commit();
Serial.println("Berhasil terhubung ke server");
}
//uuid dan did yang sudah diperbarui
else{
Serial.println("uuid terbaru");
DynamicJsonDocument jsonDoc(128);
jsonDoc["uuid"] = str_uuid_r;
jsonDoc["did"] = str_did_r;
String serializedData;
serializeJson(jsonDoc, serializedData);
String strReq = serializedData;
msg_server = kirim_data(strReq, "/echo");
//msg_server = "{\"code\": 200, \"msg\": \"OK\", \"data\": {\"uuid\": \"04913d02-1046-41d9-b3d8-55277297a8cf\", \"did\": \"00007\"}}";
Serial.println(msg_server);
//replace uuid
DynamicJsonDocument doc(512);
DeserializationError error = deserializeJson(doc, msg_server);
if (error) {
Serial.print("Parsing failed: ");
Serial.println(error.c_str());
//return;
}
svr_code = doc["code"];
const char* str_uuid_w = doc["data"]["uuid"];
const char* str_did_w = doc["data"]["did"];
Serial.println("Berhasil terhubung ke server");
delay(5000);
}
menuIdle();
}
void menuIdle()
{
lcd.clear();
lcd.setCursor(3, 1);
lcd.print("Tekan * untuk");
lcd.setCursor(3, 2);
lcd.print("Masuk ke menu");
}
void loop()
{
char key = keypad.getKey();
//cek wifi
if (WiFi.status() != WL_CONNECTED) {
inet_code = "ERR";
} else if (WiFi.status() == WL_CONNECTED){
inet_code = "OK";
}
if (key) {
//Serial.println(key);
if(entriNilai)
{
if((key >= '0') && (key <= '9') ){
if (menuLevel == 3 && indexHalaman == 1){
menuEntriNilai = key;
kpd = key;
lcdEntriPos=0;
lcd.setCursor(lcdEntriPos++, 1);
lcd.print(kpd);
}
if (menuLevel == 3 && indexHalaman == 2){
menuEntriNilai += key;
kpd = key;
lcd.setCursor(lcdEntriPos++, 1);
lcd.print(kpd);
}
}
}
switch (key)
{
//Atas
case 'A':
if (menuLevel == 0){
lcd.setCursor( 0, highlight + 1);
lcd.print( F(" ") );
highlight--;
if( highlight < 0 )
highlight = 2;
lcd.setCursor( 0, highlight + 1 );
lcd.print( F(">") );
}
else if (menuLevel >= 1){
lcd.setCursor( 0, highlight + 1);
lcd.print( F(" ") );
highlight--;
if( highlight < 0 )
highlight = 1;
lcd.setCursor( 0, highlight + 1 );
lcd.print( F(">") );
}
break;
//bawah
case 'B':
if (menuLevel == 0){
lcd.setCursor( 0, highlight + 1);
lcd.print( F(" ") );
highlight++;
if( highlight == 3 )
highlight = 0;
lcd.setCursor( 0, highlight + 1 );
lcd.print( F(">") );
}
else if (menuLevel >= 1){
lcd.setCursor( 0, highlight + 1);
lcd.print( F(" ") );
highlight++;
if( highlight == 2 )
highlight = 0;
lcd.setCursor( 0, highlight + 1 );
lcd.print( F(">") );
}
break;
//back
case 'C':
resetPilihan();
lcd.clear();
entriNilai = false;
if (menuLevel == 3){
if (indexHalaman == 1){
menuLevel = 2;
indexMenu = 1;
indexHalaman = 1;
modeMenu = modeMenuModeSensor;
break;
}
if (indexHalaman == 2){
menuLevel = 2;
indexMenu = 2;
indexHalaman = 2;
modeMenu = modeMenuKodeProyek;
break;
}
}
else if(menuLevel == 2){
menuLevel = 1;
indexMenu = -1;
indexHalaman = 0;
modeMenu = modeMenuSetting;
break;
}
else if(menuLevel == 1){
menuLevel = 0;
indexMenu = -1;
indexHalaman = 0;
modeMenu = modeMenuSetting;
break;
}
updateMenu();
break;
//Delete
case 'D':
if (entriNilai){
lcdEntriPos--;
if (lcdEntriPos > 0){
kpd = NULL;
lcd.setCursor(lcdEntriPos, 1);
lcd.print(kpd);
} else if (lcdEntriPos == 0){
kpd = NULL;
lcd.setCursor(lcdEntriPos, 1);
lcd.print(kpd);
}
menuEntriNilai.remove(menuEntriNilai.length() - 1);
}
break;
//home screen
case '*':
resetPilihan();
entriNilai = false;
menuLevel = 0;
indexMenu = -1;
updateMenu();
break;
//enter
case '#':
lcd.clear();
if (entriNilai)
{
if (menuLevel == 3 && indexHalaman == 1){
sensor_mode = menuEntriNilai.toInt();
lcd.print("Sensor Mode");
lcd.setCursor(0,1);
lcd.print("Berhasil Di Simpan");
delay(2000);
menuLevel = 2;
indexMenu = 1;
indexHalaman = 1;
modeMenu = modeMenuModeSensor;
} else if (menuLevel == 3 && indexHalaman == 2){
kode_proyek = menuEntriNilai;
lcd.print("Kode Proyek");
lcd.setCursor(0,1);
lcd.print("Berhasil Di Simpan");
delay(2000);
menuLevel = 2;
indexMenu = 2;
indexHalaman = 2;
modeMenu = modeMenuKodeProyek;
String k_did, k_uuid;
for (int i = 36; i <= 40; i++){
int j = i-36;
k_uuid.concat((char)EEPROM.read(i));
}
Serial.println(str_did_r);
// read EEPROM 0 to 35 into uuid_r
for (int i = 0; i <= 35; i++){
k_did.concat((char)EEPROM.read(i));
}
Serial.println(str_uuid_r);
DynamicJsonDocument jsonDoc(128);
jsonDoc["uuid"] = str_uuid_r;
jsonDoc["did"] = str_did_r;
jsonDoc["pc"] = kode_proyek;
String serializedData;
serializeJson(jsonDoc, serializedData);
String strReq = serializedData;
Serial.println(strReq);
delay(5000);
msg_server = kirim_data(strReq, "/project");
//msg_server = "{\"code\": 200, \"msg\": \"OK\", \"data\": {\"pn\": \"Bawang Merah 12\", \"fn\": \"Ahmad Soekarno\"}}";
Serial.println(msg_server);
//kirim kode proyek ke server
DynamicJsonDocument doc(512);
DeserializationError error = deserializeJson(doc, msg_server);
if (error) {
Serial.print("Parsing failed: ");
Serial.println(error.c_str());
return;
}
// Accessing JSON values
svr_code = doc["code"];
const char* pn = doc["data"]["pn"];
const char* fn = doc["data"]["fn"];
Serial.print("Code: ");
Serial.println(svr_code);
Serial.print("Project: ");
Serial.println(pn);
Serial.print("Farmer: ");
Serial.println(fn);
delay(10000);
}
lcd.clear();
entriNilai = false;
menuEntriNilai = "";
lcdEntriPos = 0;
updateMenu();
break;
}
//Status
else if (menuLevel == 0){
if (highlight == 0){
menuLevel = 1;
indexMenu = -1;
indexHalaman = 0;
modeMenu = modeMenuStatus;
break;
}
//Setting
else if (highlight == 1){
menuLevel = 1;
indexMenu = -1;
indexHalaman = 0;
modeMenu = modeMenuSetting;
break;
}
//Sensor
else if (highlight == 2){
menuLevel = 1;
indexMenu = -1;
indexHalaman = 0;
modeMenu = modeMenuDataSensor;
break;
}
}
if (menuLevel == 1){
//mode sensor
if (highlight == 0){
menuLevel = 2;
indexHalaman = 1;
indexMenu = -1;
modeMenu = modeMenuModeSensor;
break;
}
//Kode Proyek
else if (highlight == 1){
menuLevel = 2;
indexMenu = -1;
indexHalaman = 2;
modeMenu = modeMenuKodeProyek;
break;
}
}
//mode sensor
if (menuLevel == 2 && indexHalaman == 1){
//Entry
if (highlight == 0){
lcd.clear();
menuLevel = 3;
indexMenu = -1;
indexHalaman = 1;
modeMenu = modeMenuEntryModeSensor;
entriNilai = true;
break;
}
//Check
else if (highlight == 1){
menuLevel = 3;
indexMenu = -1;
modeMenu = modeMenuCheckModeSensor;
break;
}
}
//Project Code
if (menuLevel == 2 && indexHalaman == 2){
//Entry
if (highlight == 0){
lcd.clear();
menuLevel = 3;
indexMenu = -1;
indexHalaman == 2;
modeMenu = modeMenuEntryKodeProyek;
entriNilai = true;
break;
}
//Check
else if (highlight == 1){
menuLevel = 3;
indexMenu = -1;
modeMenu = modeMenuCheckKodeProyek;
break;
}
}
}
}
if (millis() - millisMulai > waktuTampil)
{
millisMulai = millis();
waktuTampil = standarWaktuTampil;
indexMenu++;
updateMenu();
menuLevelSebelumnya = menuLevel;
}
}
void updateMenu()
{
if (menuLevel <= 0)
{
if (indexMenu == sizeof(MenuUtama) / sizeof(MenuUtama[0]))
{
indexMenu = 0;
}
if (menuLevelSebelumnya != menuLevel)
{
lcd.clear();
//lcd.print("KTN-IoT-0.1.1");
}
tampilMenuUtama(indexMenu);
}
else if(menuLevel == 1){
if (modeMenu == modeMenuStatus)
{
tampilMenuStatus(indexMenu);
}
else if (modeMenu == modeMenuSetting)
{
tampilMenuSetting(indexMenu);
}
else if (modeMenu == modeMenuDataSensor)
{
tampilMenuDataSensor(indexMenu);
}
}
else if(menuLevel == 2){
if (modeMenu == modeMenuModeSensor)
{
tampilMenuModeSensor(indexMenu);
}
else if (modeMenu == modeMenuKodeProyek)
{
tampilMenuKodeProyek(indexMenu);
}
}
else if(menuLevel == 3){
if (modeMenu == modeMenuModeSensor)
{
tampilMenuModeSensor(indexMenu);
}
else if (modeMenu == modeMenuKodeProyek)
{
tampilMenuKodeProyek(indexMenu);
}
else if (modeMenu == modeMenuEntryModeSensor)
{
tampilMenuEntryModeSensor(indexMenu);
}
else if (modeMenu == modeMenuEntryKodeProyek)
{
tampilMenuEntryKodeProyek(indexMenu);
}
else if (modeMenu == modeMenuCheckModeSensor)
{
tampilMenuCheckModeSensor(indexMenu);
}
else if (modeMenu == modeMenuCheckKodeProyek)
{
tampilMenuCheckKodeProyek(indexMenu);
}
}
}
void resetPilihan()
{
}
//menampikan menu
void tampilMenuUtama(byte index)
{
lcd.setCursor(0, 0);
lcd.print(MenuUtama[0]);
lcd.setCursor(1, 1);
lcd.print(MenuUtama[1]);
lcd.setCursor(1, 2);
lcd.print(MenuUtama[2]);
lcd.setCursor(1, 3);
lcd.print(MenuUtama[3]);
lcd.setCursor( 0, highlight + 1 );
lcd.print( F(">") );
}
void tampilMenuStatus(byte index)
{
String svr_ket;
//cek wifi, server
if (svr_code == 200){
svr_ket = "OK";
} else{
svr_ket = "ERR";
}
lcd.setCursor(0, 0);
lcd.print(MenuStatus[0]);
lcd.setCursor(12,0);
lcd.print(str_did_r);
lcd.setCursor(0, 1);
lcd.print(MenuStatus[1]);
lcd.print(inet_code);
lcd.setCursor(9, 1);
lcd.print(MenuStatus[2]);
lcd.print(svr_ket);
lcd.setCursor(0, 2);
lcd.print(MenuStatus[3]);
lcd.setCursor(9, 2);
lcd.print(sensor_mode);
lcd.setCursor(0, 3);
lcd.print(MenuStatus[4]);
}
void tampilMenuSetting(byte index)
{
lcd.setCursor(0, 0);
lcd.print(MenuSetting[0]);
lcd.setCursor(1, 1);
lcd.print(MenuSetting[1]);
lcd.setCursor(1, 2);
lcd.print(MenuSetting[2]);
lcd.setCursor(0, 3);
lcd.print(MenuSetting[3]);
lcd.setCursor( 0, highlight + 1 );
lcd.print( F(">") );
}
void tampilMenuDataSensor(byte index){
if (sensor_mode == 0 && kode_proyek == ""){
lcd.setCursor(0, 0);
lcd.print(" Mode Sensor dan");
lcd.setCursor(0, 1);
lcd.print("Kode Proyek Belum");
lcd.setCursor(0, 2);
lcd.print(" Ditambahkan");
lcd.setCursor(0, 3);
lcd.print(CheckKodeProyek[3]);
}
else if (sensor_mode == 0){
lcd.setCursor(0, 0);
lcd.print(" Mode Sensor");
lcd.setCursor(0, 1);
lcd.print(" Belum Ditambahkan");
lcd.setCursor(0, 2);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print(CheckKodeProyek[3]);
}
else if (kode_proyek == ""){
lcd.setCursor(0, 0);
lcd.print(" Kode Proyek");
lcd.setCursor(1, 1);
lcd.print("Belum Ditambahkan");
lcd.setCursor(0, 2);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print(CheckKodeProyek[3]);
}
else if (sensor_mode != 0 && kode_proyek != ""){
String s_did, s_uuid;
for (int i = 36; i <= 40; i++){
int j = i-36;
s_uuid.concat((char)EEPROM.read(i));
}
// read EEPROM 0 to 35 into uuid_r
for (int i = 0; i <= 35; i++){
s_did.concat((char)EEPROM.read(i));
}
s_uuid = str_uuid_r;
s_did = str_did_r;
if (sensor_mode == 1){
//Air temp and Air Hum
float a_temp = readDHT22(1);
float a_hum = readDHT22(2);
lcd.setCursor(0, 0);
lcd.print(MenuDataSensor[0]);
lcd.print(sensor_mode);
//baris 1
lcd.setCursor(0,1);
lcd.print("Air Temp: ");
lcd.print(a_temp);
lcd.print("*C");
//baris 2
lcd.setCursor(0,2);
lcd.print("Air Hum: ");
lcd.print(a_hum);
lcd.print("%");
lcd.setCursor(0, 3);
lcd.print(MenuDataSensor[1]);
DynamicJsonDocument jsonDocDi(512);
jsonDocDi["uuid"] = s_uuid;
jsonDocDi["did"] = s_did;
jsonDocDi["pc"] = kode_proyek;
jsonDocDi["mode"] = sensor_mode;
JsonObject val = jsonDocDi.createNestedObject("data");
val["air_tmp"] = a_temp;
val["air_hmd"] = a_hum;
String serializedData;
serializeJson(jsonDocDi, serializedData);
String strReq = serializedData;
Serial.println(strReq);
delay(5000);
msg_server = kirim_data(strReq,"/data");
} else if (sensor_mode == 2){
//soil temp and soil hum
float s_temp = readDS18B20();
float s_hum = readSoilHum();
lcd.setCursor(0, 0);
lcd.print(MenuDataSensor[0]);
lcd.print(sensor_mode);
//baris 1
lcd.setCursor(0,1);
lcd.print("Soil Temp: ");
lcd.print(s_temp);
lcd.print("*C");
//baris 2
lcd.setCursor(0,2);
lcd.print("Soil Hum: ");
lcd.print(s_hum);
lcd.print("%");
lcd.setCursor(0, 3);
lcd.print(MenuDataSensor[1]);
DynamicJsonDocument jsonDocDi(512);
jsonDocDi["uuid"] = s_uuid;
jsonDocDi["did"] = s_did;
jsonDocDi["pc"] = kode_proyek;
jsonDocDi["mode"] = sensor_mode;
JsonObject val = jsonDocDi.createNestedObject("data");
val["soil_tmp"] = s_temp;
val["soil_hmd"] = s_hum;
String serializedData;
serializeJson(jsonDocDi, serializedData);
String strReq = serializedData;
Serial.println(strReq);
msg_server = kirim_data(strReq, "/data");
} else if (sensor_mode == 3){
//soil hum
float s_hum = readSoilHum();
lcd.setCursor(0, 0);
lcd.print(MenuDataSensor[0]);
lcd.print(sensor_mode);
//baris 1
lcd.setCursor(0,1);
lcd.print("Soil Hum: ");
lcd.print(s_hum);
lcd.print("%");
//baris 2
lcd.setCursor(0,2);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print(MenuDataSensor[1]);
DynamicJsonDocument jsonDoc(512);
jsonDoc["uuid"] = s_uuid;
jsonDoc["did"] = s_did;
jsonDoc["pc"] = kode_proyek;
jsonDoc["mode"] = sensor_mode;
JsonObject val = jsonDoc.createNestedObject("data");
val["dev_v"] = s_hum;
String serializedData;
serializeJson(jsonDoc, serializedData);
String strReq = serializedData;
Serial.println(strReq);
msg_server = kirim_data(strReq, "/data");
} else if (sensor_mode == 4){
//soil ph
float PHSens = readPHSens();
lcd.setCursor(0, 0);
lcd.print(MenuDataSensor[0]);
lcd.print(sensor_mode);
//baris 1
lcd.setCursor(0,1);
lcd.print("PH: ");
lcd.print(PHSens);
lcd.print("");
//baris 2
lcd.setCursor(0,2);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print(MenuDataSensor[1]);
DynamicJsonDocument jsonDoc(512);
jsonDoc["uuid"] = s_uuid;
jsonDoc["did"] = s_did;
jsonDoc["pc"] = kode_proyek;
jsonDoc["mode"] = sensor_mode;
JsonObject val = jsonDoc.createNestedObject("data");
val["dev_v"] = PHSens;
String serializedData;
serializeJson(jsonDoc, serializedData);
String strReq = serializedData;
Serial.println(strReq);
msg_server = kirim_data(strReq, "/data");
} else if (sensor_mode == 5){
//soil NPK
int soil_nitro = readNPKSens(1);
int soil_phos = readNPKSens(2);
int soil_pota = readNPKSens(3);
lcd.setCursor(0, 0);
lcd.print(MenuDataSensor[0]);
lcd.print(sensor_mode);
//baris 1
lcd.setCursor(0,1);
lcd.print("nitro");
lcd.print(soil_nitro);
lcd.print("mg/kg");
//baris 2
lcd.setCursor(0,2);
lcd.print("phos: ");
lcd.print(soil_phos);
lcd.print("mg/kg");
lcd.setCursor(0, 3);
lcd.print(MenuDataSensor[1]);
DynamicJsonDocument jsonDocDi(512);
jsonDocDi["uuid"] = s_uuid;
jsonDocDi["did"] = s_did;
jsonDocDi["pc"] = kode_proyek;
jsonDocDi["mode"] = sensor_mode;
JsonObject val = jsonDocDi.createNestedObject("data");
val["soil_n"] = soil_nitro;
val["soil_p"] = soil_phos;
val["soil_k"] = soil_pota;
String serializedData;
serializeJson(jsonDocDi, serializedData);
String strReq = serializedData;
Serial.println(strReq);
msg_server = kirim_data(strReq, "/data");
} else{
lcd.setCursor(0, 0);
lcd.print(" mode Sensor :");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.print(sensor_mode);
lcd.setCursor(0, 2);
lcd.print(" salah ");
lcd.setCursor(0, 3);
lcd.print(CheckKodeProyek[3]);
}
}
}
String kirim_data(String url_submit, String endPoint){
//cek koneksi
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.print("OK! IP=");
Serial.println(WiFi.localIP());
//cek Server
String strReq;
const String base = "https://talent-workspace.kitani.co:11101";
const String url = base + endPoint;
Serial.println(url);
Serial.print("Fetching " + url + "... ");
//strReq = "{ \"uuid\" : \"9b469727-f49d-4a3e-8c3d-5028e25e1afc\", \"did\" : \"00001\" }";
strReq = url_submit;
Serial.println(strReq);
HTTPClient http;
http.begin(url);
http.addHeader("Content-Type", "application/json");
http.addHeader("x-api-key", "abcd-1234-efgh");
int httpResponseCode = http.POST(strReq);
if (httpResponseCode > 0) {
Serial.print("HTTP ");
Serial.println(httpResponseCode);
String payload = http.getString();
Serial.println();
Serial.println(payload);
}
else {
Serial.print("Error code: ");
Serial.println(httpResponseCode);
Serial.println(":-(");
}
return payload;
//balikan pesan payload
}
void tampilMenuModeSensor(byte index)
{
lcd.setCursor(0, 0);
lcd.print(ModeSensor[0]);
lcd.print(sensor_mode);
lcd.setCursor(1, 1);
lcd.print(ModeSensor[1]);
lcd.setCursor(1, 2);
lcd.print(ModeSensor[2]);
lcd.setCursor(0, 3);
lcd.print(ModeSensor[3]);
lcd.setCursor( 0, highlight + 1 );
lcd.print( F(">") );
}
void tampilMenuKodeProyek(byte index)
{
lcd.setCursor(0, 0);
lcd.print(KodeProyek[0]);
lcd.print(kode_proyek);
lcd.setCursor(1, 1);
lcd.print(KodeProyek[1]);
lcd.setCursor(1, 2);
lcd.print(KodeProyek[2]);
lcd.setCursor(0, 3);
lcd.print(KodeProyek[3]);
lcd.setCursor( 0, highlight + 1 );
lcd.print( F(">") );
}
void tampilMenuEntryModeSensor(byte index)
{
lcd.setCursor(0, 0);
lcd.print(EntryModeSensor[0]);
lcd.setCursor(0, 2);
lcd.print(EntryModeSensor[2]);
lcd.setCursor(0, 3);
lcd.print(EntryModeSensor[3]);
}
void tampilMenuEntryKodeProyek(byte index)
{
lcd.setCursor(0, 0);
lcd.print(EntryKodeProyek[0]);
lcd.setCursor(1, 2);
lcd.print(EntryKodeProyek[2]);
lcd.setCursor(0, 3);
lcd.print(EntryKodeProyek[3]);
}
void tampilMenuCheckModeSensor(byte index)
{
// Setting mode sensor
String JenisSensor;
if (sensor_mode == 0){
//belum diisi
String JenisSensor = "Belum Diisi";
//KetSensor.replace("", jenisSensor);
} else if (sensor_mode == 1){
//dht22
} else if (sensor_mode == 2){
//DSB18B20
} else if (sensor_mode == 3){
//Moisture Sensor
} else if (sensor_mode == 4){
//PH
} else if (sensor_mode == 5){
//NPK
} else {
//tidak ditemukan
}
lcd.setCursor(0, 0);
lcd.print(CheckModeSensor[0]);
lcd.setCursor(0, 1);
lcd.print(sensor_mode);
lcd.setCursor(2, 1);
lcd.print(JenisSensor);
lcd.setCursor(0, 2);
lcd.print(CheckModeSensor[2]);
lcd.setCursor(0, 3);
lcd.print(CheckModeSensor[3]);
}
void tampilMenuCheckKodeProyek(byte index)
{
//ambil project name dan farmer name
lcd.setCursor(0, 0);
lcd.print(CheckKodeProyek[0]);
lcd.setCursor(0, 1);
lcd.print(kode_proyek);
lcd.print(CheckKodeProyek[1]);
lcd.setCursor(0, 2);
lcd.print(CheckKodeProyek[2]);
lcd.setCursor(0, 3);
lcd.print(CheckKodeProyek[3]);
}
int readNPKSens(float jns){
int nit = random(0, 30);
int pos = random(0, 30);
int pot = random(0, 160);
if (jns == 1){
return nit;
} else if (jns == 2){
return pos;
} else if (jns == 3){
return pot;
}
}
float readDHT22(float jns){
//digital
float temperature = random(28.02,37.44);
float humidity = random(60.04, 90.22);
if (jns == 1){
return temperature;
} else if (jns == 2){
return humidity;
}
}
float readPHSens(){
//Analog
float voltage = random(3.00,3.94);
return voltage;
delay(1000);
}
float readDS18B20(){
//Digital
float temperature = random(28.02,37.44);
return temperature;
}
float readSoilHum(){
//Analog
float soilprcnt = random(0.02,99.44);
return soilprcnt;
}