Jumat, 03 November 2017

Send Data Sensor Arduino to URL Use Ethernet Shield RJ45 - Wireless

Misalkan kita sudah membuat penampungan data di thingspeak.com

dan kita uji simpan data via URL Berhasil:
https://api.thingspeak.com/update?api_key=RX25Q5K1OKOXXXXX&field1=34



LANJUT....
misalkan kita ada 8 sensor yang hendak di pantau:

Sensor Wind Direction: 35
Sensor Average Wind Speed (One Hour): 34.56m/s
Sensor Max Wind Speed (Five Minutes): 67.66m/s
Sensor Rain Fall (One Hour): 17.78mm
Sensor Rain Fall (24 Hour): 17.78mm
Sensor Temperature: 33.33C
Sensor Humidity: 61%
Sensor Barometric Pressure: 1510.00hPa

Sehingga jadinya adalah sebagai berikut:


Jika kita Uji menggunakan brower:

https://api.thingspeak.com/update?api_key=ZZ6YIIZXXVIXXXXXX&field1=0&field2=0.00&field3=0.00&field4=17.78&field5=17.78&field6=33.33&field7=61&field8=1510.00&ok=ok


Adapun code Uji Arduinonya adalah sbb:



#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] ="api.thingspeak.com";


IPAddress ip(192,168,1,212);//ip client sesuaikan dengan ip router
EthernetClient client;

void setup() {
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    Ethernet.begin(mac, ip);
  }
}

void loop(){
  while(true){
    if (client.connect(server, 80)) {
    Serial.println("connected");
    long randNumber = random(10, 75);
    long randNumber2 = random(10, 80);
    
    client.print("GET /update?api_key=BDA3EM7DMJFXXXXX&field1="+String(randNumber)+"&field2="+String(randNumber2)+"&ok=ok");
    Serial.println("https://api.thingspeak.com/update?api_key=BDA3EM7DMJFXXXXX&field1="+String(randNumber)+"&field2="+String(randNumber2)+"&ok=ok");
     
    //client.print("GET /insertdata.php?data="+String(randNumber)+"X");
    
    client.println("Connection: close");
    client.println();
    client.stop();
    delay(1000);
  }
  else {
    Serial.println("connection failed");
  }
  }

  if (!client.connected()) {
    Serial.println("disconnecting.");
    client.stop();
    while(true);
  }
}


+++++++++++++++++++++++++++
Sehingga code + sensornya :

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] ="api.thingspeak.com";

IPAddress ip(192,168,1,212);
EthernetClient client;

char                 databuffer[35];
double               temp;

void getBuffer() {
  int index;
  for (index = 0; index < 35; index ++)  {
     if (Serial.available())  {
         databuffer[index] = Serial.read();
     if (databuffer[0] != 'c'){
         index = -1; }    }
    else {
      index --;
    }
  }
}


int transCharToInt(char *_buffer, int _start, int _stop)  {  //char to int?
   int _index;
   int result = 0;
   int num = _stop - _start + 1;
   int _temp[num];
   for (_index = _start; _index <= _stop; _index ++)     {
        _temp[_index - _start] = _buffer[_index] - '0';
        result = 10 * result + _temp[_index - _start];   }
   return result;  }

int WindDirection()  {                                        //Wind Direction
   return transCharToInt(databuffer, 1, 3);   }

float WindSpeedAverage()    {                                //air Speed (1 minute)
    temp = 0.44704 * transCharToInt(databuffer, 5, 7);
    return temp;   }

float WindSpeedMax()   {                                     //Max air speed (5 minutes)
  temp = 0.44704 * transCharToInt(databuffer, 9, 11);
  return temp;   }

float Temperature()  {                                        //Temperature ("C")
   temp = (transCharToInt(databuffer, 13, 15) - 32.00) * 5.00 / 9.00;
  return temp;   }

float RainfallOneHour()  {                      //Rainfall (1 hour)
  temp = transCharToInt(databuffer, 17, 19) * 25.40 * 0.01;
  return temp;    }

float RainfallOneDay() {                            //Rainfall (24 hours)
  temp = transCharToInt(databuffer, 21, 23) * 25.40 * 0.01;
  return temp;  }

int Humidity()  {                                   //Humidity
  return transCharToInt(databuffer, 25, 26);  }

float BarPressure() { //Barometric Pressure
  temp = transCharToInt(databuffer, 28, 32);
  return temp / 10.00;  }

void setup() {
  Serial.begin(9600);   
    while (!Serial) {
      ; 
    }

 if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    Ethernet.begin(mac, ip);
  }
}

void loop() {

  while(true){
  getBuffer();  //Begin!
  Serial.print("Wind Direction: ");
  Serial.print(WindDirection());
  Serial.println("  ");
  Serial.print("Average Wind Speed (One Hour): ");
  Serial.print(WindSpeedAverage());
  Serial.println("m/s  ");
  Serial.print("Max Wind Speed (Five Minutes): ");
  Serial.print(WindSpeedMax());
  Serial.println("m/s");
  Serial.print("Rain Fall (One Hour): ");
  Serial.print(RainfallOneHour());
  Serial.println("mm  ");
  Serial.print("Rain Fall (24 Hour): ");
  Serial.print(RainfallOneDay());
  Serial.println("mm");
  Serial.print("Temperature: ");
  Serial.print(Temperature());
  Serial.println("C  ");
  Serial.print("Humidity: ");
  Serial.print(Humidity());
  Serial.println("%  ");
  Serial.print("Barometric Pressure: ");
  Serial.print(BarPressure());
  Serial.println("hPa");
  Serial.println("");
  Serial.println("");
  
    if (client.connect(server, 80)) {
    Serial.println("connected");
   
    String URL="GET /update?api_key=RX25Q5K1OKOXXXXX&field1="+String(WindDirection())+"&field2="+String(WindSpeedAverage())+"&field3="+String(WindSpeedMax())+"&field4="+String(RainfallOneHour())+"&field5="+String(RainfallOneDay())+"&field6="+String(Temperature())+"&field7="+String(Humidity())+"&field8="+String(BarPressure())+"&ok=ok";
    client.print(URL);
    Serial.println(URL);
     

    client.println("Connection: close");
    client.println();
    client.stop();
    
    delay(1000);
  }
  else {
    Serial.println("connection failed");
  }
  }

  if (!client.connected()) {
    Serial.println("disconnecting.");
    client.stop();
    while(true);
  }

  

}

OK teman teman.....mudah yaaaaaaaaaaaaaaaaaaaaaaaa....
Artinya kita bisa juga mengaplikasikan arduino + Ethernet shield tanpa menggunakan ESP8266

Ethernet Shieldnya di sambungkan ke router menggunakan kabel RJ-45.















Kamis, 19 Oktober 2017

Sebelas Protokol IOT

Banyak sekali teknologi komunikasi yang dikenal baik seperti WiFi, Bluetooth, 2G/3G/4G . Namun selain protokol tersebut, masih ada yang lain yang biasanya dipakain untuk Home Automation, metering dan lain lain. Mari kita bahas satu persatu komunikasi protokol dari yang sudah biasa terdengar sampai yang mungkin masih asing.


Bluetooth
Teknologi ini sudah sangat memasyarakat tentunya dikehidupan sehari hari. Pemakaian ada di Smartphone, Laptop, sampai speaker pun ada. Karena kemudahannya dan keamanannya karena dengan sistem pairing membuat teknologi ini berkembang pesat. Dan terakhir sekarang sedang dikeluarkan Bluetooth versi 5.0. Semenjak Bluetooth 4.0 di hadirkan dengan trademark BLE (Bluetooth Low Energy), konsumsi daya nya pun semakin hemat, sehingga cocok untuk aplikasi IOT yang membutuhkan power kecil untuk kebanyakan alat.
Namun adapula kelemahan bluetooth yaitu untuk transfer rate data yang kecil sehingga tidak cocok untuk transfer data dan jarak jangkauan sinyal nya yang terbatas. 

Standard: Bluetooth 4.2 Core
Frequency: 2.4Ghz
Range: 50-150m (Smart/BLE)
Data Rate: 1Mbps


ZigBee
ZigBee, seperti juga bluetooth, telah diinstall dalam penggunaan besar walaupun kebanyakan digunakan di kalangan industri.ZigBee PRO dan ZigBee Remote Control (RF4CE) telah berdasarkan IEEE802.15.4 protocol yang mana itu adalah standarnya teknologi wireless networking di 2.4GHz yang menyasar aplikasi data low rates seperti area terbatas, rumah dan gedung.
ZigBee/RF4CE mempunyai beberapa keuntungan yang signifikan di sistem yang kompleks menawarkan low power operation, sekurity yang tinggi, ketahanan, skala tinggi dengan  jumlah node yang tinggi sehingga itu menguntungkan untuk M2M (Machine to machine) dan IOT.

Standard Zigbee 3.0 based on IEEE802.15.4
Freq: 2.4 GHz
Range: 10-100m
Data Rates: 250 kbps



Z-Wave
Di design untuk low power, dengan sistem RF. Penggunaannya biasanya untuk home automation untuk produk seperti lampu yang bisa dikontrol dan sensor dan masih banyak lagi. Dengan data rates sbeesar 100 kbps, beroperasi di sub 1GHz, tahan terhadap interferensi WiFi dan teknlogi wireless lainnya dikarenakan perbedaan frekuensi. Mendukung jaringan Mesh tanpa memerlukan sebuah coordinator node dan skala bisa diperbesar, pengunaan sampai 232 device. Z-Wave menggunakan protokol yang simple daripada yang lain. 

Standard: Z-Wave Alliance ZAD12837/ITU-T G.9959
Frkuensi: 900MHz
Range: 30m
Data Rate: 9.6/40/100kps



6LoWPAN
Sebuah key IP yang berdasarkan teknologi adalah 6LowPAN (IPV6 Low Power Wireless Personal Area Network). Tidak seperti protokol aplikasi IOT seperti zigbee atau bluetooth, 6LowPAN adalah network protocol yang mendefinisikan enkapslasi dan header compression caranya. Standard mempunyai kebebasan memilih frequency band dan physical layer dan juga dapat digunakan silang multipele communication platfor, mencakup Ethernet, Wi-Fi, 802.15.4 dan sub 1GHz ISM. Kunci atributnya yaitu IPV6 dimana diperkenalkan beberapa tahun belakangan untuk IOT. IPV6 adalah suksesor dari IPV4  yang mana menawarka kira kira  5x10^28 addresses untuk setiap orang didunia.
Di desain untuk  mengirim paket IPV6 melalui IEEE802.15.4 dan mengimpleentasikan open IP Standard  termasuk TCP, UDP, HTTP, COAP, MQTT, dan websocket.

Standard: RFC6282
Frequency: (adapted and used over a variety of other networking media including Bluetooth Smart (2.4GHz) or ZigBee or low-power RF (sub-1GHz)
Range: N/A
Data Rates: N/A



Thread
Sebuah IP baru berdasarkan protokol jaringan IPV6 ditujukan untuk lingkungan home automation adalah Thread. Berdasarkan 6LowPAN, tidak menggunakan aplikasi protokol IOT tidak seperti  bluetooth dan zigbee. Bagaimanapun dari segi sudut pandang aplikasi, itu didesain untuk pelengkap WiFi.
Diluncurkan pertengahan 2014 oleh Thread Group,Royaltinya free protocol berdasarkan IEEE802.15.4. Thread mendukukung mesh networkdan bisa menangan 250 nodes.

Standard: Thread, based on IEEE802.15.4 and 6LowPAN
Frequency: 2.4GHz (ISM)
Range: N/A
Data Rates: N/A



WiFi
Adalah konektifitas yang paling sering di pilih oleh banyak developer, dikarenakan penyebarannya yang cepat dan lingkungannya bisa dissesuaikan dengan rumahan menggunakan LAN.
Untuk sekarang, kebanyakan WiFi standard yang digunakan di rumah dan banyak bisnis adalah 802.11n yang mana menawarkan data rates yg besar di ratusan MBps yang mana sangat baik untuk transfer file namun sangat banyak mengkonsumsi power untuk kebanyakan aplikasi IOT.

Standard: Based on 802.11n (most common usage in homes today)
Frequencies: 2.4GHz and 5GHz bands
Range: Approximately 50m
Data Rates: 600 Mbps maximum, but 150-200Mbps is more typical, depending on channel frequency used and number of antennas (latest 802.11-ac standard should offer 500Mbps to 1Gbps)



Celular
Aplikasi IOT yang membutuhkan jangkauan luas bisa menggunakan celular GSM. Dimana selular menggunakan data rate yang tinggi tentu ini mengkonsumsi power yang tinggi juga khususnya 4G. Tapi bisa menjadi idel bila menggunakan hanya dengan data rate yang rendah.


Standard: GSM/GPRS/EDGE (2G), UMTS/HSPA (3G), LTE (4G)
Frequencies: 900/1800/1900/2100MHz
Range: 35km max for GSM; 200km max for HSPA
Data Rates (typical download): 35-170kps (GPRS), 120-384kbps (EDGE), 384Kbps-2Mbps (UMTS), 600kbps-10Mbps (HSPA), 3-10Mbps (LTE)


NFC
Near Field Communcation adalah teknologi yang mengizinkan simpel dan aman untuk interaksi 2 arah antara electronic device dan khusunya penggunaan smartphone, misalnya penggunaan untuk membayar cash tanpa tunai. Penggunaan nya yang contact less mempunya jangkauan maksimal sampai 4cm.


Standard: ISO/IEC 18000-3
Frequency: 13.56MHz (ISM)
Range: 10cm
Data Rates: 100–420kbps



SigFox
Sebuah alternatif lain teknologi wide-range adalah sigfox. Menggunakan ISM bands yang mana bebas untuk digunakan tanpa membutuhkan lisensi untuk mengirimkan data. Ide sigfox dibangun yaitu untuk penggunaan M2M applications yang dapat berjalan di battery yang kecil dan hanya membutuhkan low rate data transfer. Sigfox menggunakan teknologi yang dikenal dengan mnama UNB (Ultra Narrow Band) dan hanya digunkan untuk menangani low data transfer dengan kecepatan 10-1000 bit per detik. Konsumsi dayanya hanya 50 microwatts dengan tipikal stby selam 20 tahun dan bandingkan dengan celular yang menghabiskan 5000 microwatts dengan jangka waktu 0.2 tahun dengan battery 2.5A.

Standard: Sigfox
Frequency: 900MHz
Range: 30-50km (rural environments), 3-10km (urban environments)
Data Rates: 10-1000bps



NEUL
Seperti konsep sigfox yang beroperasi di sub 1GHz band, Neul system berbasis Iceni Chip yang mana komunikasinya menggunakan white space radio untuk mengakses high quality UHF spectrum, sekarang tersedia dikarenakan adanya transisi digital TV. Komunikasinya dinamakan Weightless, yang mana sebuah wide-area wireless networking technology baru yang didesain untuk IOT yang mana berkompetisi dengan GPRS, 3G, CDMA dan LTE WAN solutions. Data rate dari beberapa bit per detik sampai 100kbps dengan melalui single link yang sama dan devices bisa mengkonsumsi sesedikit mungkin 20 sampai 30 mA dari 2xAA batteries yang artinya 10 sampai 15 tahun di lokasi.

Standard: Neul
Frequency: 900MHz (ISM), 458MHz (UK), 470-790MHz (White Space)
Range: 10km
Data Rates: Few bps up to 100kbps




LoraWAN
Seperti sigfox dan Neul, LoraWAN menargetkan untuk aplikasi area luas WAN dan di desain untuk low power dan  low-cost mobile secure bi-directional communication di IoT, M2M dab smart city dan aplikasi industrial.



Standard: LoRaWAN
Frequency: Various
Range: 2-5km (urban environment), 15km (suburban environment)
Data Rates: 0.3-50 kbps.



Referensi: 
http://project-iot.blogspot.co.id/2016/06/11-intrnet-of-things-iot-protocol-yang.html


Sim Aplikasi IOT 3 Sensor



1.Registrasi di https://thingspeak.com/
2.Membuat Channel


3.Dapatkan API KEY nya



CATATAN:

Kita memiliki 2 api key, api pertama u menulis /mengirim data ke server IOT, API kedua untuk membaca data IOT .

API Keys Settings

  • Write API Key: Use this key to write data to a channel. If you feel your key has been compromised, click Generate New Write API Key.
  • Read API Keys: Use this key to allow other people to view your private channel feeds and charts. Click Generate New Read API Key to generate an additional read key for the channel.
  • Note: Use this field to enter information about channel read keys. For example, add notes to keep track of users with access to your channel.

API Requests

Update a Channel Feed
GET https://api.thingspeak.com/update?api_key=RX25Q5K1OKO6XXXXX&field1=0
Get a Channel Feed
GET https://api.thingspeak.com/channels/349194/feeds.json?api_key=NRCQKD7BXADXXXXX&results=2
Get a Channel Field
GET https://api.thingspeak.com/channels/349194/fields/1.json?api_key=NRCQKD7BXADXXXXX&results=2
Get Channel Status Updates
GET https://api.thingspeak.com/channels/349194/status.json?api_key=NRCQKD7BXADXXXXX

API Endpoints



HTTP API Address

For nonsecure communication to ThingSpeak using HTTP, use the address:
http://api.thingspeak.com
For secure communication to ThingSpeak using HTTPS, use the address:
https://api.thingspeak.com

HTTP API Static IP Address

To communicate with the ThingSpeak HTTP server IP, use the address:
http://184.106.153.149

MQTT API Address

To communicate with the ThingSpeak MQTT broker at the port 1883, use the address:
mqtt.thingspeak.com

Cross-Domain XML

To post using cross-domain XML, use the address:
http://api.thingspeak.com/crossdomain.xml

Channel Access in MATLAB

To read data from a private channel in MATLAB, use the thingSpeakRead function:
thingSpeakRead(channelID,'ReadKey','Your.Read.API.Key.String');
To write data from MATLAB, use the thingSpeakWrite function:
thingSpeakWrite(channelId,data,thingSpeakWrite(17504,[2.3,1.2,3.2],'WriteKey','Your.Write.API.Key.String');

Adapun contoh code pada INO adalah sbb

KIta baca dahulu IP server  https://thingspeak.com/




#include <SoftwareSerial.h>
SoftwareSerial ESP8266(10, 11); //RX,TX

#define IP "34.230.96.113" // thingspeak.com IP address
String GET = "GET /update?api_key=RX25Q5K1OKO6XXXXX"; // API key

void setup() {
  Serial.begin(9600); // Hardware serial (serial monitor)
  ESP8266.begin(9600); // Software serial (komunikasi dengan ESP8266)
  ESP8266.println("AT+RST"); // Reset ESP8266
  delay(2000);
  ESP8266.println("AT");
  delay(5000);
  if (ESP8266.find("OK")) {
    Serial.println("Connected to ESP8266");
  }
  else {
    Serial.println("Not connected to ESP8266");
  }
}

void loop() {
  delay(2000);
  ESP8266.println("AT+RST"); // Reset setiap akan mengirim data
  delay(7000);

  String cmd = "AT+CIPSTART=\"TCP\",\"";
  cmd += IP;
  cmd += "\",80";

  ESP8266.println(cmd);
  delay(5000);

  if (ESP8266.find("Error")) {
    Serial.println("AT+CIPSTART Error");
    return;
  }
  else {
    Serial.println("AT+CIPSTART Success");
  }
  cmd = GET;
  cmd += "&c1=";
  cmd += random(300);
  cmd += "&c2=";
  cmd += random(300);
  cmd += "&c3=";
  cmd += random(300);
  cmd += "\r\n\r\n";
  ESP8266.print("AT+CIPSEND=");
  ESP8266.println(cmd.length());
  delay(10000);

  if (ESP8266.find(">")) { // Perintah AT+CIPSEND akan menampilkan prompt ">"
    ESP8266.print(cmd);
    Serial.println("Data sent");
  }
  else
  {
    Serial.println("AT+CIPSEND error");
  }
}



HASIL:




NB Teman2 sebelum praktek menggunakan sensor bisa juga kita uji IOT kita ini menggunakan code php sbb:

<?php
//https://thingspeak.com/channels/349194/api_keys

//RX25Q5K1OK212411
//https://api.thingspeak.com/update?api_key=RX25Q5K1OK212411&field1=0

//NRCQKD7BXAD81ID7
//https://api.thingspeak.com/channels/349194/feeds.json?api_key=NRCQKD7BXAD81ID7&results=2
//https://api.thingspeak.com/channels/349194/fields/1.json?api_key=NRCQKD7BXAD81ID7&results=2
//https://api.thingspeak.com/channels/349194/status.json?api_key=NRCQKD7BXAD81ID7


//https://api.thingspeak.com/update?api_key=RX25Q5K1OK212411&field1=122&field2=126&field3=129

$r1=rand(200,300);
$r2=rand(200,300);
$r3=rand(200,300);

?>

<form action="https://api.thingspeak.com/update?" method="get">

SUHU1:<input type="text" name="field1" value="<?php echo $r1;?>"><br>
SUHU2:<input type="text" name="field2" value="<?php echo $r2;?>"><br>
SUHU3:<input type="text" name="field3" value="<?php echo $r3;?>"><br>
<input type="Submit" value="Kirim">
<input type="hidden" name="api_key" value="RX25Q5K1OK212411">
</form>

<?php

$homepage = file_get_contents('https://api.thingspeak.com/channels/349194/feeds.json?api_key=NRCQKD7BXAD81ID7&results=2');
echo $homepage;
echo"<hr>";


$homepage = file_get_contents('https://api.thingspeak.com/channels/349194/fields/1.json?api_key=NRCQKD7BXAD81ID7&results=2');
echo $homepage;
echo"<hr>";


$homepage = file_get_contents('https://api.thingspeak.com/channels/349194/status.json?api_key=NRCQKD7BXAD81ID7');
echo $homepage;
echo"<hr>";

?>

NB API KEY DIGANTI SESUAI API KEY MASING2 YAAA>...Lalu simpan di C:\XAMPP\HTDOCS\Thingspeak\

DAN JALANKAN:



HASILNYA:

OK MUDAH KAN...........
jika sudah selesai baru mainkan menggunakan arduino +sensor2