fork download
  1. #include <SPI.h>
  2. #include <Ethernet.h>
  3. #include <PubSubClient.h>
  4.  
  5. //setting network
  6. byte mac[] = { 0x0A, 0x00, 0x27, 0x00, 0x00, 0x1B };
  7. byte ip[] = { 192, 168, 100, 2 };
  8. byte dns[] = {8,8,8,8};
  9. byte gateway[] = { 192, 168, 100, 1 };
  10.  
  11. int led = 13;
  12. int sensorPIR = A0;
  13. int sensorLDR = A1;
  14. int kondisiLDR = 0;
  15. String aksi;
  16. char perintah[200];
  17. char pengiriman[200];
  18. char* geeknesia_deviceid = "device-id";
  19. char* geeknesia_credential = "username:password";
  20. char* geeknesia_topic = "topic-publish";
  21.  
  22. EthernetClient ethClient;
  23.  
  24. //pubsubclient object
  25. PubSubClient client("geeknesia.com",1883, callback,ethClient);
  26.  
  27. //call back
  28.  
  29.  
  30.  
  31. void setup()
  32. {
  33. system("ifdown eth0");
  34. system("ifup eth0");
  35. delay(10000);
  36. Serial.begin(115200);
  37. pinMode(led,OUTPUT);
  38. pinMode(sensorPIR,INPUT);
  39. pinMode(sensorLDR,INPUT);
  40. digitalWrite(led,LOW);
  41. Serial.println("memulai untuk koneksi");
  42. //koneksi DHCP
  43. if(Ethernet.begin(mac) != 1)
  44. { // koneksi manual
  45. Ethernet.begin(mac, ip, dns, gateway);
  46. }
  47.  
  48. Serial.print("IP address : ");
  49. Serial.println(Ethernet.localIP());
  50. Serial.println("sudah konek gan");
  51.  
  52.  
  53. }
  54.  
  55. void loop()
  56. {
  57. if(!client.connected())
  58. {
  59. if(client.connect(geeknesia_deviceid,"iot/will",2,64,geeknesia_deviceid))
  60. {
  61. client.setCallback(callback);
  62. client.subscribe(geeknesia_topic);
  63. }
  64. }
  65.  
  66. String hasilLDR = pengukuranLDR();
  67. String hasilPIR = pembacaanPIR();
  68.  
  69. action(aksi);
  70.  
  71.  
  72. senddata(geeknesia_deviceid,geeknesia_credential,"P1",hasilPIR,"A1",hasilLDR);
  73.  
  74.  
  75. if(client.connected())
  76. client.loop();
  77.  
  78.  
  79. delay(2);
  80. }
  81.  
  82. void callback(char* topic,byte* payload, unsigned int length)
  83. {
  84. int i;
  85. for(i=0;i<length;i++)
  86. {
  87. perintah[i]=payload[i];
  88. }
  89. perintah[i]='\0';
  90. String kirim = String(perintah);
  91. Serial.println(kirim);
  92. aksi = kirim;
  93. }
  94.  
  95. void senddata(char* topic,char* credential,String variabel1,String nilai1,String variabel2,String nilai2)
  96. {
  97. String pubString = "{\"code\":\"";
  98. pubString += credential;
  99. pubString +="\",";
  100. pubString +="\"attributes\":{\"";
  101. pubString +=String(variabel1)+"\":\""+nilai1+"\",\"";
  102. pubString +=String(variabel2)+"\":\""+nilai2+"\"";
  103. pubString +="}}";
  104. char pengiriman[pubString.length()+1];
  105. pubString.toCharArray(pengiriman, pubString.length()+1);
  106. int panjang = strlen(pengiriman);
  107. Serial.print("panjang karakter : ");
  108. Serial.println(panjang);
  109. Serial.println(pengiriman);
  110. int hasilpublish = client.publish_P("iot/data",PROGMEM (byte*)pengiriman,panjang,true);
  111. Serial.print("hasil publish : ");
  112. Serial.println(hasilpublish);
  113. Serial.println("akhir dari pengiriman");
  114. }
  115.  
  116. void action(String perintah)
  117. {
  118. if(perintah.equals("on") || kondisiLDR == 1)
  119. {
  120. Serial.println("perintah lampu on");
  121. digitalWrite(led,HIGH);
  122. }
  123. else if(kondisiLDR == 0 && perintah!="on")
  124. {
  125. Serial.println("perintah lampu off");
  126. digitalWrite(led,LOW);
  127. }
  128. else if(perintah.equals("off") )
  129. {
  130. Serial.println("perintah lampu off");
  131. digitalWrite(led,LOW);
  132. }
  133.  
  134. }
  135.  
  136. String pengukuranLDR()
  137. {
  138. int bacaLDR = analogRead(sensorLDR);
  139. int hasilLDR = bacaLDR;
  140. hasilLDR = map(hasilLDR,0,1023,0,100);
  141.  
  142. if(hasilLDR > 50)
  143. kondisiLDR = 1;
  144. else
  145. kondisiLDR = 0;
  146.  
  147.  
  148. String strLDR = String(hasilLDR);
  149. return strLDR;
  150. }
  151.  
  152.  
  153.  
  154. String pembacaanPIR()
  155. {
  156. int bacaPIR = digitalRead(sensorPIR);
  157. if(bacaPIR == 1)
  158. {
  159. return "ada";
  160. }
  161. else if(bacaPIR == 0)
  162. {
  163. return "tidak";
  164. }
  165. }
Success #stdin #stdout 0.02s 52472KB
stdin
Standard input is empty
stdout
#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>

//setting network
byte mac[]         = { 0x0A, 0x00, 0x27, 0x00, 0x00, 0x1B };
byte ip[]          = { 192, 168, 100, 2 };
byte dns[]         = {8,8,8,8};
byte gateway[]     = { 192, 168, 100, 1 };
 
int led = 13;
int sensorPIR = A0;
int sensorLDR = A1;
int kondisiLDR = 0;
String aksi;
char perintah[200];
char pengiriman[200];
char* geeknesia_deviceid = "device-id";
char* geeknesia_credential = "username:password";
char* geeknesia_topic = "topic-publish";

EthernetClient ethClient;

//pubsubclient object
PubSubClient client("geeknesia.com",1883, callback,ethClient);

//call back



void setup()
{
  system("ifdown eth0");
  system("ifup eth0");
  delay(10000);
  Serial.begin(115200);
  pinMode(led,OUTPUT);
  pinMode(sensorPIR,INPUT);
  pinMode(sensorLDR,INPUT);
  digitalWrite(led,LOW);
  Serial.println("memulai untuk koneksi");
  //koneksi DHCP
  if(Ethernet.begin(mac) != 1)
  { // koneksi manual
    Ethernet.begin(mac, ip, dns, gateway);
  }
  
  Serial.print("IP address : ");
  Serial.println(Ethernet.localIP());
  Serial.println("sudah konek gan");
  

}

void loop()
{
  if(!client.connected())
  {
    if(client.connect(geeknesia_deviceid,"iot/will",2,64,geeknesia_deviceid))
    {
      client.setCallback(callback);
      client.subscribe(geeknesia_topic);
    }  
  }
  
  String hasilLDR = pengukuranLDR();
  String hasilPIR = pembacaanPIR();
  
  action(aksi);
 
  
  senddata(geeknesia_deviceid,geeknesia_credential,"P1",hasilPIR,"A1",hasilLDR);
  
  
  if(client.connected())
    client.loop();
   
  
  delay(2);
}

void callback(char* topic,byte* payload, unsigned int length)
{
  int i;
  for(i=0;i<length;i++)
  {
    perintah[i]=payload[i];
  }
  perintah[i]='\0';
  String kirim = String(perintah);
  Serial.println(kirim);
  aksi = kirim;
}

void senddata(char* topic,char* credential,String variabel1,String nilai1,String variabel2,String nilai2)
{
  String pubString = "{\"code\":\"";
  pubString += credential;
  pubString +="\",";
  pubString +="\"attributes\":{\"";
  pubString +=String(variabel1)+"\":\""+nilai1+"\",\""; 
  pubString +=String(variabel2)+"\":\""+nilai2+"\"";
  pubString +="}}";
  char pengiriman[pubString.length()+1];
  pubString.toCharArray(pengiriman, pubString.length()+1);
  int panjang = strlen(pengiriman);
  Serial.print("panjang karakter : ");
  Serial.println(panjang);
  Serial.println(pengiriman);
  int hasilpublish = client.publish_P("iot/data",PROGMEM (byte*)pengiriman,panjang,true);
  Serial.print("hasil publish : ");
  Serial.println(hasilpublish);
  Serial.println("akhir dari pengiriman");
}

void action(String perintah)
{
  if(perintah.equals("on") || kondisiLDR == 1)
  {
    Serial.println("perintah lampu on");
    digitalWrite(led,HIGH);
  }
  else if(kondisiLDR == 0 && perintah!="on")
  {
    Serial.println("perintah lampu off");
    digitalWrite(led,LOW);
  }
  else if(perintah.equals("off") )
  {
    Serial.println("perintah lampu off");
    digitalWrite(led,LOW);
  }
    
}

String pengukuranLDR()
{
  int bacaLDR = analogRead(sensorLDR);
  int hasilLDR = bacaLDR;
  hasilLDR = map(hasilLDR,0,1023,0,100);
  
  if(hasilLDR > 50)
    kondisiLDR = 1;
  else 
    kondisiLDR = 0;
  
 
  String strLDR = String(hasilLDR);
  return strLDR;
}



String pembacaanPIR()
{
  int bacaPIR = digitalRead(sensorPIR);
  if(bacaPIR == 1)
  {
    return "ada";
  }
  else if(bacaPIR == 0)
  {
   return "tidak";
  }
}