Kita dapat menghubungkan sebuah mikrokontroler ke jaringan internet dengan bantuan WiFi-Serial module.  Melalui modul ini, sebuah mikrokontroler dapat melakukan transfer data dengan perantara jaringan WiFi.  Kali ini kita akan coba menghubungkan Arduino Mega2560 dengan sebuah modul ESP8266. Ada beberapa skenario yang dapat diterapkan oleh modul WiFi-Serial ini, yaitu sebagai client ataupun server.

 

Berikut ini adalah contoh aplikasi Arduino dan ESP8266 sebagai data logger, misalnya untuk mengirim data temperatur ke server melalui jaringan internet.  Selanutnya data ini bisa diakses melalui browser baik PC, laptop maupun smartphone.  Anda bisa menggunakan aplikasi yang disediakan oleh website ThingSpeak (www.thingspeak.com) sebagai server yang biasa digunakan dalam bidang Internet of Things (IoT). Dalam hal ini sebaiknya silakan mendaftar dulu jika belum memiliki akun.  Selanjutnya akan disediakan channel baru sebagai saluran data Anda yang bisa langsung menyimpan nilai dari sensor yang Anda inginkan sekaligus menyimpan waktu saat data tersebut masuk. Cara memasukkan data adalah dengan sebuah URL yang berisi API key unik (yang hanya Anda sendiri yang sebaiknya tahu) serta sebuah atau beberapa data field.

Lebih jelasnya bisa dilihat formatnya sebagai berikut:

https://api.thingspeak.com/update?key=KEY&field1=VALUE

isilah KEY sesuai dengan API key yang disediakan untuk Anda dan isilah VALUE sesuai dengan data sensor (misalnya dari input analog di Arduino).

Arduino Mega to ESP8266 pinout

Sebelum membuat program, perhatikan koneksi kabel antara modul WiFi-serial dengan Arduino.  Perlu diperhatikan bahwa modul ESP8266 bekerja dengan tegangan maksimal 3,6V. Hubungkan Vcc modul WiFi ke pin 3.3V pada Arduino. (Jangan yang ke 5V).  Lebih jelasnya silakan lihat gambar di atas.  Jika sudah mendapat tegangan, modul WiFi akan menyala merah, dan sekali-kali akan berkedip warna biru.

Arduino Mega to ESP8266 connection

 

ESP8266 to Arduino Mega connection

ThingSpeak data logger

 

Sekarang kita lihat bagian pemrograman Arduino terutama masalah antarmuka dengan ESP8266. Modul ini menggunakan format perintah AT (AT Command) melalui serial port antara Arduino dan ESP8266.

 

 

#define WiFiSSID "XXXXX" // nama SSID WiFi router Anda yg terkoneksi internet
#define WiFiPassword "YYYYY" // password router
#define DestinationIP "184.106.153.149" // website thingspeak.com
#define TS_Key "ZZZZZ" // key yang dihasilkan dari website thingspeak.com

int SENSOR_VALUE=0;
boolean connected=false;

void setup()
{
// Inisialisasi komunikasi serial ada dua yaitu
// 1. Serial1 untuk modul WiFi-Serial
// 2. Serial  untuk debugging (Arduino USB-Serial)
Serial1.begin(9600);
Serial1.setTimeout(5000);
Serial.begin(9600);
Serial.println("ESP8266 Client Demo");
delay(1000);
//  periksa apakah modul ESP8266 aktif
Serial1.println("AT+RST");
delay(1000);
if(Serial1.find("ready"))
{
Serial.println("Modul siap");
}
else
{
Serial.println("Tidak ada respon dari modul");
while(1);
}
delay(1000);
//setelah modul siap, kita coba koneksi sebanyak 5 kali

for(int i=0;i<5;i++)
{
connect_to_WiFi();
if (connected)
{
break;
}
}
if (!connected){
while(1);
}
delay(5000);

// set the single connection mode
Serial1.println("AT+CIPMUX=0");
delay(1000);
}

void loop()
{
String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += DestinationIP ;
cmd += "\",80";
Serial1.println(cmd);
Serial.println(cmd);
if(Serial1.find("Error"))
{
Serial.println("Koneksi error.");
return;
}

SENSOR_VALUE=random(1,10);  // Anda bisa menggantinya dengan nilai analog.
// dalam contoh ini, kita menggunakan nilai random 1...10
cmd = "GET /update?key=";
cmd += TS_Key;
cmd +="&field1=";
cmd += SENSOR_VALUE;
cmd += "\r\n";        // jangan lupa, setiap perintah selalu diakhiri dengan CR+LF
Serial1.print("AT+CIPSEND=");
Serial1.println(cmd.length());
if(Serial1.find(">"))
{
Serial.print(">");
}
else
{
Serial1.println("AT+CIPCLOSE");
Serial.println("koneksi timeout");
delay(1000);
return;
}
Serial1.print(cmd);
delay(2000);

while (Serial1.available())
{
char c = Serial1.read();
Serial.write(c);
if(c=='\r') Serial.print('\n');
}
Serial.println("------end");
delay(10000);
}

void connect_to_WiFi()
{
Serial1.println("AT+CWMODE=1");
String cmd="AT+CWJAP=\"";
cmd+=WiFiSSID;
cmd+="\",\"";
cmd+=WiFiPassword;
cmd+="\"";
Serial.println(cmd);
Serial1.println(cmd);
delay(2000);
if(Serial1.find("OK"))
{
Serial.println("Sukses, terkoneksi ke WiFi.");
connected= true;
}
else
{
Serial.println("Tidak dapat terkoneksi ke WiFi. ");
connected= false;
}
}