EBOOK Tutorial ESP8266 Modul IOT PDF
EBOOK Tutorial ESP8266 Modul IOT PDF
COM 1
Daftar Isi
WWW.ANAKKENDALI.COM 2
Program Mengirim Data ke Thingspeak ESP8266 ESP-01 ....................................................................... 36
Program Mengirim Data ke Database MySQL ESP8266 ESP-01 ............................................................. 39
Kontrol Relay/LED Arduino Uno dan ESP8266 ESP-01 Alikasi Android................................................... 56
Kontrol Relay/LED Arduino Uno dan ESP8266 ESP-01 dengan Telegram ............................................... 60
Menghubungkan ESP8266 ESP-01 ke Cayenne ...................................................................................... 65
Program NodeMCU / Wemos D1 Mini Kirim Data DHT11 ke Thingspeak .............................................. 69
Program NodeMCU / Wemos D1 Mini Kirim Data DHT11 ke Database MySQL ..................................... 71
Program NodeMCU / Wemos D1 Kontrol LED Aplikasi Android ............................................................. 75
Program NodeMCU / Wemos D1 Kontrol LED dengan Cayenne ............................................................ 77
WWW.ANAKKENDALI.COM 3
Terimakasih Kepada...
- ALLAH SWT. Alhamdulillah segala puji bagi tuhan semesta alam, ALLAH
Subhanahu Wata’ala, yang telah memberikan kita nikmat serta kesempatan
untuk memepelajari Ciptaanya. Sehingga dapat lebih bersyukur atas apa yang
sudah kita terima.
karena rahmatnya lah kita memiliki apa yang ada sekarang, dan sejatinya
hanya miliknya semua yang ada di dunia dan seisinya. Tidak cukup dengan
perkataan terimakasih atas syukur yang telah tuhan berikan kepada kita.
Karena itu sebisa mungkin kita dapat memanfaatkan apa yang telah
diberikannya dengan cara menjadikan pemberianya bermanfaat bagi diri kita
maupun orang-orang sekitar.
- Nabi Muhammad SAW. Sholawat serta salam kepada Nabi Muhammad
Sollallahu Alaihi Wassallam, karenanya kita dapat mengenal tuhan dan
mengerti jalan yang baik dan jalan yang buruk.
- Kedua Orang Tua. Atas Izin Allah subhanahu wata’ala, orang tua menjadi
perantara saya terlahir didunia ini, serta yang selalu mendukung keinginan
saya untuk terus belajar sampai ke perguruan tinggi meskipun pekerjaan
sebagai seorang Petani.
- Pesantren Al-Ishlah AL-Ishlah Tajug Indramayu. Disinilah tempat saya dididik
karakter serta akhlak, semua yang telah saya lalui sewaktu belajar di tempat
ini menjadi bermanfaat setelah saya menjadi alumni dan menghadapi
kehidupan bermasyarakat.
- dan semua pihak yang berperan dalam kehidupan saya, yang tidak bisa saya
sebutkan satu persatu. Hanya dapat mendoakan semoga Allah membalas
semua jasa-jasanya.
saya memohon maaf bila di dalam ebook ini ada berupa kesalahan, baik
tulisan maupun program. Silahkan bisa di diskusikan dengan saya sendiri
melalui kontak yang sudah tertera pada halaman tentang penulis.
-
WWW.ANAKKENDALI.COM 4
Perkenalan
ESP8266 merupakan modul Wifi yang sangat familiar bagi pecinta mikrokontroller baik mereka yang
masih di tingkat dasar maupun tingkat lanjut, dengan modul ini kita dapat mengirim ataupun menerima
data melalui jaringan lokal wifi saja ataupun jaringan internet. Pada era revolusi Industri 4.0 keberadaan
modul ESP8266 sangatlah bermanfaat sebagai alat bantu untuk mewujudkan semua sistem agar dapat
terintregasi dengan Internet yang kita sebut sebagai Internet of Things, baik karena harganya yang
terjangkau juga kualitas nyasangat memadai dalam menyediakan layanan untuk kebutuhan user.
Modul ESP8266 banyak tipenya walupun semuanya bisa dikatakan sama, dan berikut adalah penjelasan
masing masing dari tipe modul ESP8266.
ESP8266 ESP-01
ESP-01 adalah modul ESP8266 yang bentuknya paling kecil diantara saudaranya yang lain. dan
juga hanya memiliki dua buah pin GPIO meskipun bisa langsung di isi program. namun dalam
buku ini hanya di jelaskan cara komunikasi ESP-01 dengan Arduino Uno sehingga Arduino Uno
dapat mengirim dan menerima data melalui jaringan Wifi Local ataupun Internet.
ESP8266 NodeMCU
NodeMCU adalah Modul ESP8266 yang paling familiar diantara saudaranya yang lain. pada
modul ini sudah terdapat IC CH340 sehingga sudah bisa langsung di isi program dari komputer
menggunakan Port Serial, didalam buku ini akan dijelaskan bagaimana cara memprogram modul
NodeMCU menggunakan bahasa pemograman Python (micropython) dasar, dan bahasa yang
digunakan oleh Arduino IDE.
WWW.ANAKKENDALI.COM 5
ESP8266 Wemos D1
Wemos D1 adalah bagian dari modul ESP8266 yang sama dengan NodeMCU bisa langsung di isi
program melalui komunikasi serial karena sudah terdapat IC CH340, dalam buku ini Wemos D1
akan di jelaskan Cara Program dengan Python (micropython) dan Arduino IDE.
Arduino IDE adalah Software yang sangat sering di gunakan untuk membuat sekaligus mendownload
program pada mikrokontroler. Karena selain untuk papan Arduino itu sendiri Arduino IDE bisa untuk
mendownload berbagai macam jenis mikrokontroler, seperti STM32 dan Modul ESP8266
Micropython adalah bahasa pemograman Python yang digunakan untuk memprogram Mikrokontroller.
Seperti halnya pada ESP8266, selain itu jika kita mengamati bagaimana Arduino IDE bisa men-Download
program pada modul ESP8266 karena terdapat Package ESP8266 yang terinstall di Software Arduino IDE
nya. Dan package ESP8266 ini dibuat dari Pemograman Python.
WWW.ANAKKENDALI.COM 6
BAB 1
Dasar Python
Jika tampilanya seperti gambar di atas berarti python telah berhasil di isntall
5. Setelah itu install beberapa library yang dibutuhkan dengan cara berikut :
python -m pip install numpy
python –m pip install esptool
6. Setelah itu ketikan perintah seperti berikut pada CMD:
cd documents
md python
7. Silahkan pergi ke directori :
C:\Users\asus\AppData\Local\Programs\Python\Python37\Lib\site-packages
Kemudian pindahkan file esptool.py ke C:\Users\asus\Documents\python
Ketikan perintah
cd python
python esptool.py –port COM2 erase_flash
*COM2 sesuaika dengan port com yang terdeteksi pada komputer
WWW.ANAKKENDALI.COM 7
8. Download firmware untuk ESP8266 di
http://micropython.org/resources/firmware/esp8266-20180718-v1.9.4-272-
g46091b8a.bin
9. Pindahkan file yang tadi di download ke C:\Users\asus\Documents\python
10. Ketikan perintah seperti berikut :
python esptool.py --port COM2 --baud 460800 write_flash --flash_size=detect 0
esp8266-20180511-v1.9.4.bin
11. Proses instalasi sudah selesai seakarang sudah bisa memprogram langsung
Modul ESP8266 menggunakan terminal yang terinstall pada windows, contohnya
bisa menggunakan Serial Monitor Arduino atau bisa menggunakan .
WWW.ANAKKENDALI.COM 8
Pilih Tool > Serial > pilih Port Com sesuai yang terdeteksi oleh komputer
3. Pilih File > New > setelah keluar jendela editor silahkan save terlebih dahulu,
dan berikan nama “blink.py”
WWW.ANAKKENDALI.COM 9
from time import sleep
while (True):
led.on()
sleep(1) #delay 1 detik
led.off()
sleep(1) #delay 1 detik
Demikian tutorial dasar cara memprogram ESP8266 [1] menggunakan MicroPython untuk selebihnya
bisa di kembangkan sendiri, karena dibuku ini lebih fokus pada tutorial Cara memprogram ESP8266
dengan Arduino IDE, karena menggunakan cara di atas program yang kita buat tidak di simpan pada
memori ESP8266 sehingga ketika kabel USB di cabut maka program akan hilang.
WWW.ANAKKENDALI.COM 10
BAB 2
Arduino IDE ESP8266
3. Jika sudah terinstall maka pada pilihan board akan tersedia pilihan untuk Board ESP8266
seperti gambar berikut :
WWW.ANAKKENDALI.COM 11
BAB 3
GPIO
Pada ESP8266 juga sudah terdapat pin GPIO yang bisa di fungsikan sebagai INPUT ataupun OUTPUT,
GPIO adalah singkatan dari General Purpose Input Output, fungsinya hampir sama dengan pin Digital IO
pada Arduino, tapi sebenarnya memiliki perbedaan anatara GPIO dan pin Digital IO.
Dimana letak perbedaan GPIO dan pin Digital IO?
jika diperhatikan mikrokontroler yang memiliki GPIO bekerja pada daerah tegangan 3.3V sedangkan
yang meemiliki pin Digital IO bekerja pada daerah tegangan 5V. Contoh yang memiliki GPIO antara lain,
Raspberry Pi, STM32, dan ESP8266 dan mereka bekerja pada tegangan 3.3V, sedangkan Arduino
menggunakan pin Digital IO dan bekerja pada tegangan 5V.
Berikut adalah tabel Pin GPIO pada ESP8266 Wemos D1 dan NodeMCU
TX TXD TXD
RX RXD RXD
D0 IO GPIO16
G Ground GND
5V 5V -
WWW.ANAKKENDALI.COM 12
Program Led Blink ESP8266 NodeMCU / Wemos D1
Buka Arduino IDE pilih Tools > Boards > NodeMCU V1.0 > Pilih Port COM yang terdeteksi
pada komputer
Berikut adalah program Led Blink dengan indikator Led bawaam modul ESP8266
void setup() {
// put your setup code here, to run once:
pinMode(2, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(2, 1);
delay(1000);
digitalWrite(2, 0);
delay(1000);
}
void setup() {
// put your setup code here, to run once:
pinMode(D4, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(D4, 1);
delay(1000);
digitalWrite(D4, 0);
WWW.ANAKKENDALI.COM 13
delay(1000);
}
int state=0;
void setup() {
// put your setup code here, to run once:
pinMode(D4, OUTPUT);
pinMode(D5, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
if (digitalRead(D5) == 0){
while (digitalRead(D5) == 0){}
state = !state;
Serial.println(state);
}
digitalWrite(D4, state);
}
uint8_t state=0;
void setup() {
// put your setup code here, to run once:
pinMode(D5, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
if (digitalRead(D5) == 0){
while (digitalRead(D5) == 0){}
state ++;
if(state == 255)state=0;
Serial.println(state);
}
analogWrite(D4, state);
}
Program diatas jika dijalankan hasilnya akan mengatur kecerahan cahaya LED
WWW.ANAKKENDALI.COM 14
BAB 4
I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup()
{
// initialize the LCD
lcd.begin();
// Wire.begin(D2, D1);
// Turn on the blacklight and print a message.
lcd.print("anakkendali.com");
}
void loop()
{
// Do nothing here...
}
WWW.ANAKKENDALI.COM 15
Program Mengakses LCD OLED dan RTC DS3231
Sebelum membuat program silahkan Download terlebih dahulu Library OLED di alamat berikut :
https://github.com/adafruit/Adafruit_SSD1306
dan library RTC DS3231
https://github.com/adafruit/RTClib
#define OLED_RESET 0
Adafruit_SSD1306 display(OLED_RESET);
#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH 16
static const unsigned char PROGMEM logo16_glcd_bmp[] =
{ B00000000, B11000000,
B00000001, B11000000,
WWW.ANAKKENDALI.COM 16
B00000001, B11000000,
B00000011, B11100000,
B11110011, B11100000,
B11111110, B11111000,
B01111110, B11111111,
B00110011, B10011111,
B00011111, B11111100,
B00001101, B01110000,
B00011011, B10100000,
B00111111, B11100000,
B00111111, B11110000,
B01111100, B11110000,
B01110000, B01110000,
B00000000, B00110000 };
void setup() {
Serial.begin(9600);
// by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
display.begin(SSD1306_SWITCHCAPVCC, 0x3D); // initialize with the I2C addr 0x3D
(for the 128x64)
// init done
WWW.ANAKKENDALI.COM 17
// draw rectangles
testdrawrect();
display.display();
delay(2000);
display.clearDisplay();
testdrawroundrect();
delay(2000);
display.clearDisplay();
testfillroundrect();
delay(2000);
display.clearDisplay();
testdrawtriangle();
delay(2000);
display.clearDisplay();
testfilltriangle();
delay(2000);
display.clearDisplay();
WWW.ANAKKENDALI.COM 18
// text display tests
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Hello, world!");
display.setTextColor(BLACK, WHITE); // 'inverted' text
display.println(3.141592);
display.setTextSize(2);
display.setTextColor(WHITE);
display.print("0x"); display.println(0xDEADBEEF, HEX);
display.display();
delay(2000);
display.clearDisplay();
void loop() {
// initialize
for (uint8_t f=0; f< NUMFLAKES; f++) {
icons[f][XPOS] = random(display.width());
icons[f][YPOS] = 0;
icons[f][DELTAY] = random(5) + 1;
Serial.print("x: ");
Serial.print(icons[f][XPOS], DEC);
Serial.print(" y: ");
Serial.print(icons[f][YPOS], DEC);
Serial.print(" dy: ");
Serial.println(icons[f][DELTAY], DEC);
WWW.ANAKKENDALI.COM 19
}
while (1) {
// draw each icon
for (uint8_t f=0; f< NUMFLAKES; f++) {
display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, WHITE);
}
display.display();
delay(200);
void testdrawchar(void) {
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
void testdrawcircle(void) {
for (int16_t i=0; i<display.height(); i+=2) {
display.drawCircle(display.width()/2, display.height()/2, i, WHITE);
display.display();
delay(1);
}
}
void testfillrect(void) {
uint8_t color = 1;
WWW.ANAKKENDALI.COM 20
for (int16_t i=0; i<display.height()/2; i+=3) {
// alternate colors
display.fillRect(i, i, display.width()-i*2, display.height()-i*2, color%2);
display.display();
delay(1);
color++;
}
}
void testdrawtriangle(void) {
for (int16_t i=0; i<min(display.width(),display.height())/2; i+=5) {
display.drawTriangle(display.width()/2, display.height()/2-i,
display.width()/2-i, display.height()/2+i,
display.width()/2+i, display.height()/2+i, WHITE);
display.display();
delay(1);
}
}
void testfilltriangle(void) {
uint8_t color = WHITE;
for (int16_t i=min(display.width(),display.height())/2; i>0; i-=5) {
display.fillTriangle(display.width()/2, display.height()/2-i,
display.width()/2-i, display.height()/2+i,
display.width()/2+i, display.height()/2+i, WHITE);
if (color == WHITE) color = BLACK;
else color = WHITE;
display.display();
delay(1);
}
}
void testdrawroundrect(void) {
for (int16_t i=0; i<display.height()/2-2; i+=2) {
display.drawRoundRect(i, i, display.width()-2*i, display.height()-2*i,
display.height()/4, WHITE);
display.display();
delay(1);
}
}
void testfillroundrect(void) {
uint8_t color = WHITE;
for (int16_t i=0; i<display.height()/2-2; i+=2) {
display.fillRoundRect(i, i, display.width()-2*i, display.height()-2*i,
display.height()/4, color);
if (color == WHITE) color = BLACK;
else color = WHITE;
display.display();
delay(1);
}
WWW.ANAKKENDALI.COM 21
}
void testdrawrect(void) {
for (int16_t i=0; i<display.height()/2; i+=2) {
display.drawRect(i, i, display.width()-2*i, display.height()-2*i, WHITE);
display.display();
delay(1);
}
}
void testdrawline() {
for (int16_t i=0; i<display.width(); i+=4) {
display.drawLine(0, 0, i, display.height()-1, WHITE);
display.display();
delay(1);
}
for (int16_t i=0; i<display.height(); i+=4) {
display.drawLine(0, 0, display.width()-1, i, WHITE);
display.display();
delay(1);
}
delay(250);
display.clearDisplay();
for (int16_t i=0; i<display.width(); i+=4) {
display.drawLine(0, display.height()-1, i, 0, WHITE);
display.display();
delay(1);
}
for (int16_t i=display.height()-1; i>=0; i-=4) {
display.drawLine(0, display.height()-1, display.width()-1, i, WHITE);
display.display();
delay(1);
}
delay(250);
display.clearDisplay();
for (int16_t i=display.width()-1; i>=0; i-=4) {
display.drawLine(display.width()-1, display.height()-1, i, 0, WHITE);
display.display();
delay(1);
}
for (int16_t i=display.height()-1; i>=0; i-=4) {
display.drawLine(display.width()-1, display.height()-1, 0, i, WHITE);
display.display();
delay(1);
}
delay(250);
display.clearDisplay();
for (int16_t i=0; i<display.height(); i+=4) {
WWW.ANAKKENDALI.COM 22
display.drawLine(display.width()-1, 0, 0, i, WHITE);
display.display();
delay(1);
}
for (int16_t i=0; i<display.width(); i+=4) {
display.drawLine(display.width()-1, 0, i, display.height()-1, WHITE);
display.display();
delay(1);
}
delay(250);
}
void testscrolltext(void) {
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(10,0);
display.clearDisplay();
display.println("scroll");
display.display();
delay(1);
display.startscrollright(0x00, 0x0F);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrollleft(0x00, 0x0F);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrolldiagright(0x00, 0x07);
delay(2000);
display.startscrolldiagleft(0x00, 0x07);
delay(2000);
display.stopscroll();
}
RTC_DS3231 rtc;
void setup () {
#ifndef ESP8266
while (!Serial); // for Leonardo/Micro/Zero
#endif
WWW.ANAKKENDALI.COM 23
Serial.begin(9600);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (rtc.lostPower()) {
Serial.println("RTC lost power, lets set the time!");
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}
}
void loop () {
DateTime now = rtc.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
WWW.ANAKKENDALI.COM 24
Serial.print('/');
Serial.print(future.day(), DEC);
Serial.print(' ');
Serial.print(future.hour(), DEC);
Serial.print(':');
Serial.print(future.minute(), DEC);
Serial.print(':');
Serial.print(future.second(), DEC);
Serial.println();
Serial.println();
delay(3000);
}
#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH 16
#include <Wire.h>
#include "RTClib.h"
RTC_DS3231 rtc;
#define detik now.second()
#define menit now.minute()
#define jam now.hour()
#define tangal now.day()
#define hari daysOfTheWeek[now.dayOfTheWeek()]
#define bulan now.month()
#define tahun now.year()
char daysOfTheWeek[7][12] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jum'at",
"Saturday"};
char buff[10];
#if (SSD1306_LCDHEIGHT != 64)
//#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
WWW.ANAKKENDALI.COM 25
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (rtc.lostPower()) {
Serial.println("RTC lost power, lets set the time!");
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}
}
void loop() {
// put your main code here, to run repeatedly:
DateTime now = rtc.now();
if (jam <10 && menit <10){
sprintf (buff, "%s 0%d:0%d", hari,jam,menit);
}
else if (jam <10 && menit >= 10){
sprintf (buff, "%s 0%d:%d", hari,jam,menit);
}
else if (jam >=10 && menit <10){
sprintf (buff, "%s %d:0%d", hari,jam,menit);
}
else if (jam >=10 && menit >=10){
sprintf (buff, "%s %d:%d", hari,jam,menit);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println(buff);
display.display();
delay(2000);
}
WWW.ANAKKENDALI.COM 26
BAB 5
SPI
#include <SPI.h>
#include <bitBangedSPI.h>
#include <MAX7219_Dot_Matrix.h>
const byte chips = 4;
WWW.ANAKKENDALI.COM 27
char message []= "www.anakkendali.com";
void setup ()
{
display.begin ();
} // end of setup
void updateDisplay ()
{
display.sendSmooth (message, messageOffset);
void loop ()
{
} // end of loop
Untuk lebih jelasnya silahkan lihat gambar skema wiring berikut ini :
WWW.ANAKKENDALI.COM 28
Gambar 12. Rangkaian NodeMCU dan RFID RC522
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 4
#define RST_PIN 5
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
Serial.println("I am waiting for card...");
}
void loop() {
// put your main code here, to run repeatedly:
if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial())
WWW.ANAKKENDALI.COM 29
return;
strID.toUpperCase();
Serial.print("Tap card key: ");
Serial.println(strID);
delay(1000);
}
WWW.ANAKKENDALI.COM 30
BAB 6
SERIAL
#include <SoftwareSerial.h>
SoftwareSerial serial(D4, D3); // Rx,Tx
WWW.ANAKKENDALI.COM 31
String data;
void setup() {
// put your setup code here, to run once:
serial.begin(9600);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
while (serial.available()>0){
delay(10);
char c = serial.read();
data+=c;
}
if (data.length()>0){
Serial.println(data);
data="";
}
}
WWW.ANAKKENDALI.COM 32
String data;
void setup() {
// put your setup code here, to run once:
serial.begin(9600);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
while (serial.available()>0){
delay(10);
char c = serial.read();
data+=c;
}
if (data.length()>0){
Serial.println(data);
data="";
}
}
#include <SoftwareSerial.h>
SoftwareSerial serial(2, 3); // Rx,Tx
String data;
void setup() {
// put your setup code here, to run once:
serial.begin(9600);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
serial.print("Hello ESP8266");
delay(2000);
}
Program diatas jika dijalankan maka NodemCU akan menerima data dari Arduino Uno (“Hello
ESP8266”) dan ditampilkan pada Serial Monitor ESP8266.
WWW.ANAKKENDALI.COM 33
BAB 7
Wifi
void loop() {
// put your main code here, to run repeatedly:
Sebelum upload jangan lupa untuk melepas kabel TX dan RX yang terhubung ke ESP8266 ESP-
01. Karena jika terpasang maka komunikasi antar Arduino Uno dan Komputer terganggu
sehingga tidak bisa meng-Upload program.
Setelah selesai upload kirim perintah AT melalui Serial Monitor, jika keluar respon Ok maka
komunikasi antar Arduino Uno dan ESP8266 ESP-01 berhasil, selanjutnya bisa mengirim
perintah AT-Command lainya.
WWW.ANAKKENDALI.COM 34
Perintah AT-Command Respon Fungsi
AT Ok Test AT-Command
Ok
ets Jan 8 2013,r
st cause:4, boot
mode:(3,7)
wdt reset
load 0x40100000,
len 24444, room 1
6
tail 12
chksum 0xe0
ho 0 tail 12 room
AT+RST 4 Reset Modul ESP8266
load 0x3ffe8000,
len 3168, room 12
tail 4
chksum 0x93
load 0x3ffe8c60,
len 4956, room 4
tail 8
chksum 0xbd
csum 0xbd
ready
Ok
AT+GMR Versi Firmware
00160901
AT+CWMODE=? +CWMODE:(1-3) Mengecek List Valid
Mengecek ESP dalam Mode
apa
AT+CWMODE? +CWMODE:1
1. STA (Client)
2. AP (Acces Point)
3. STA + AP
Menentukan Mode ESP
AT+CWMODE= nomer 1-3 Ok
(Silahkan gunakan mode 1)
Wifi yang tersedia Mengecek Wifi yang
AT+CWLAP
Ok Tersedia
Wifi Connected Menghubungkan ESP ke
AT+CWJAP=”ssid”,”pswd”
Wifi Got Ip Wifi yang tersedia
AT+UART=9600,8,1,0,0 Ok Merubah BaudRate ke 9600
Tabel 2. AT-Command dasar
WWW.ANAKKENDALI.COM 35
Program Mengirim Data ke Thingspeak ESP8266 ESP-01
Setelah mengikuti langkah konfigurasi ESP8266 ESP-01 dengan Arduino kita mencoba mengirim
data Sensor ke Website thingspeak.com
Silahkan kunjungi web thingspeak.com dan buat chanel untuk menerima data yang dikirim dari
Arduino dan ESP8266 kemudian catat Api Key nya dan masukan ke dalam program Arduino.
Sebelum itu buat terlebih dahulu skema wiring Arduino Uno dan ESP8266 ESP-01
3.3V Arduino --------- VCC ESP8266
GND Arduino --------- GND ESP8266
10 Arduino ----------- TX ESP8266
11 Arduino ----------- RX ESP8266
3.3V Arduino --------- EN ESP8266
WWW.ANAKKENDALI.COM 36
Gambar 17. Rangkaian ESP8266 ESP-01, Arduino Uno Potensiometer
Berikut adalah Program Arduino Uno dan ESP8266 kirim data ke thingspeak.com
void setup()
{
wifi.begin(9600);
wifi.setTimeout(5000);
Serial.begin(9600);
Serial.println("ESP8266 Client Demo");
delay(1000);
// periksa apakah modul ESP8266 aktif
wifi.println("AT+RST");
delay(1000);
if(wifi.find("OK"))
{
Serial.println("Modul siap");
}
else
WWW.ANAKKENDALI.COM 37
{
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);
void loop()
{
String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += DestinationIP ;
cmd += "\",80";
wifi.println(cmd);
Serial.println(cmd);
if(wifi.find("Error"))
{
Serial.println("Koneksi error.");
return;
}
WWW.ANAKKENDALI.COM 38
else
{
wifi.println("AT+CIPCLOSE");
Serial.println("koneksi timeout");
delay(1000);
return;
}
wifi.print(cmd);
delay(2000);
while (wifi.available())
{
char c = wifi.read();
Serial.write(c);
if(c=='\r') Serial.print('\n');
}
Serial.println("------end");
delay(10000);
}
void connect_to_WiFi()
{
wifi.println("AT+CWMODE=1");
String cmd="AT+CWJAP=\"";
cmd+=WiFiSSID;
cmd+="\",\"";
cmd+=WiFiPassword;
cmd+="\"";
wifi.println(cmd);
Serial.println(cmd);
if(wifi.find("OK"))
{
Serial.println("Sukses, terkoneksi ke WiFi.");
connected= true;
}
else
{
Serial.println("Tidak dapat terkoneksi ke WiFi. ");
connected= false;
}
}
WWW.ANAKKENDALI.COM 39
Gambar 16. Chanel thingspeak.com
WWW.ANAKKENDALI.COM 40
Buat database dan tabelnya pada halaman phpMyAdmin
Buat folder baru bernama esp8266 pada directori C:\xampp\htdocs. kemudian buat Program PHP
dengan nama koneksi.php dan simpan didalam folder esp8266
<?php
$servername = "localhost";
$username = "root";
$password = "";
$database = "ebook";
function query($query){
global $conn;
$hasil = mysqli_query($conn, $query);
$rows = [];
while( $row = mysqli_fetch_assoc($hasil)){
$rows[] = $row;
}
return $rows;
WWW.ANAKKENDALI.COM 41
}
function hapus($no){
global $conn;
mysqli_query($conn, "DELETE FROM rfid WHERE no = $no");
return mysqli_affected_rows($conn);
}
function tambah($data){
global $conn;
$idcard = htmlspecialchars($data["idcard"]);
$value = htmlspecialchars($data["val"]);
$now = new DateTime();
$datenow = $now->format("Y-m-d H:i:s");
$query = "INSERT INTO rfid VALUES('','$datenow','$idcard', '$value')";
mysqli_query($conn, $query);
return mysqli_affected_rows($conn);
}
function ubah($data){
global $conn;
$no = $data["no"];
$idcard = htmlspecialchars($data["idcard"]);
$value = htmlspecialchars($data["val"]);
$query = "UPDATE rfid SET idcard = '$idcard', val = '$value' WHERE no = $no ";
mysqli_query($conn, $query);
return mysqli_affected_rows($conn);
}
function registrasi($data){
global $conn;
if (mysqli_fetch_assoc ($result) ){
echo "
<script>
alert('Username sudah Terdaftar');
WWW.ANAKKENDALI.COM 42
</script>
";
return false;
}
return false;
}
return mysqli_affected_rows($conn);
}
function readrfid($query){
global $conn;
$hasil = mysqli_query($conn, $query);
$rows = [];
while( $row = mysqli_fetch_assoc($hasil)){
$rows[] = $row;
}
return $rows;
}
?>
Buat program PHP dengan nama index.php kemudian simpan didalam folder esp8266
<?php
session_start();
if (!isset($_SESSION["login"])){
header("Location: login.php");
exit;
}
require 'koneksi.php';
WWW.ANAKKENDALI.COM 43
?>
<!DOCTYPE html>
<html>
<head>
<title>Halaman Admin</title>
</head>
<body>
<a href="logout.php">Logout</a>
<h1>Daftar ID Card</h1>
<a href="tambah.php">Tambah ID Kartu Manual</a>
<tr>
<th>No</th>
<th>Date</th>
<th>Id Card</th>
<th>Saldo</th>
<th>Aksi</th>
</tr>
<?php $i = 1; ?>
<?php foreach ( $kartu as $data ) :{
} ?>
<tr>
<td><?= $i; ?></td>
<td><?= $data["date"]; ?></td>
<td><?= $data["idcard"]; ?></td>
<td><?= $data["val"]; ?></td>
<td>
<a href="ubah.php?no=<?= $data["no"]; ?>">Edit</a> |
<a href="hapus.php?no=<?= $data["no"]; ?>">Hapus</a>
</td>
</tr>
</table>
</body>
</html>
Buat program PHP dengan nama tambah.php kemudian simpan didalam folder esp8266
<?php
WWW.ANAKKENDALI.COM 44
session_start();
if (!isset($_SESSION["login"])){
header("Location: login.php");
exit;
}
require 'koneksi.php';
if (isset($_POST["submit"]))
{
if (tambah ($_POST) > 0)
{
echo "
<script>
alert('Kartu Berhasil di Tambahkan');
document.location.href = 'index.php';
</script>
";
} else
{
echo "
<script>
alert('Kartu Gagal DI Tambahkan');
document.location.href = 'tambah.php';
</script>
";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Tambah Kartu ID</title>
<style>
label{
display: block;
}
</style>
</head>
<body>
<h1>Tambah ID Kartu</h1>
WWW.ANAKKENDALI.COM 45
<label for ="idcard">ID Card</label>
<input type ="text" name="idcard" id="idcard" required="">
</li>
<li>
<label for ="val">Value</label>
<input type="Text" name="val" id="val" required="">
</li>
<li>
<button type="submit" name="submit">Tambah
Kartu</button>
</li>
</ul>
</form>
</body>
</html>
Buat program PHP dengan nama ubah.php kemudian simpan didalam folder esp8266
<?php
session_start();
if (!isset($_SESSION["login"])){
header("Location: login.php");
exit;
}
require 'koneksi.php';
$no = $_GET["no"];
if (isset($_POST["submit"]))
{
if (ubah ($_POST) > 0)
{
echo "
<script>
alert('Kartu Berhasil di Ubah');
document.location.href = 'index.php';
</script>
";
WWW.ANAKKENDALI.COM 46
} else
{
echo "
<script>
alert('Kartu Gagal DI Ubah');
document.location.href = 'ubah.php';
</script>
";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Ubah Kartu ID</title>
<style>
label{
display: block;
}
</style>
</head>
<body>
<h1>Ubah ID Kartu</h1>
<li>
<label for ="val">Value</label>
<input type="Text" name="val" id="val" required=""
value="<?= $krt["val"]; ?>">
</li>
<li>
<button type="submit" name="submit">Ubah
Kartu</button> <input type="button" value="Cancel"
onclick="window.location.href='index.php'" />
</li>
</ul>
</form>
WWW.ANAKKENDALI.COM 47
</body>
</html>
Buat program PHP dengan nama hapus.php kemudian simpan didalam folder esp8266
<?php
session_start();
if (!isset($_SESSION["login"])){
header("Location: login.php");
exit;
}
require 'koneksi.php';
if ( hapus($no)> 0){
echo "
<script>
alert('Kartu Berhasil di Hapus');
document.location.href = 'index.php';
</script>
";
} else {
echo "
<script>
alert('Kartu Gagal di Hapus');
document.location.href = 'index.php';
</script>
";
}
?>
Buat program PHP dengan nama login.php kemudian simpan didalam folder esp8266
<?php
session_start();
if (isset($_SESSION["login"])){
header("Location: index.php");
exit;
}
WWW.ANAKKENDALI.COM 48
require 'koneksi.php';
if (isset($_POST["login"])){
$username = $_POST["username"];
$password = $_POST["password"];
if (mysqli_num_rows($hasil) === 1 ){
$row = mysqli_fetch_assoc($hasil);
if (password_verify($password, $row["password"]) ){
$_SESSION["login"] = true;
header("Location: index.php");
exit;
}
}
$error = true;
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Halaman Login</title>
<style>
label{
display: block;
}
</style>
</head>
<body>
<h1>Halaman Login</h1>
<ul>
<li>
WWW.ANAKKENDALI.COM 49
<label for="username">Username</label>
<input type="text" name="username" id="username" required="">
</li>
<li>
<label for="password">Password</label>
<input type="password" name="password" id="password"
required="">
</li>
</form>
</body>
</html>
Buat program PHP dengan nama registrasi.php kemudian simpan didalam folder esp8266
<?php
require 'koneksi.php';
if (isset($_POST["register"])) {
if (registrasi($_POST) > 0) {
echo "
<script>
alert('User Baru Berhasil di Tambahkan');
</script>
";
} else
{
echo mysqli_error($conn);
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Halaman Registrasi</title>
<style>
WWW.ANAKKENDALI.COM 50
label{
display: block;
}
</style>
</head>
<body>
<ul>
<li>
<label for="username">Username :</label>
<input type="text" name="username" id="username" required="">
</li>
<li>
<label for="password">Password :</label>
<input type="password" name="password" id="password"
required="">
</li>
<li>
<label for="password2">Konfirmasi Password</label>
<input type="password" name="password2" id="password2"
required="">
</li>
<li>
<button type="submit" name="register">Register</button>
<input type="button" value="Login"
onclick="window.location.href='login.php'" />
</li>
</ul>
</form>
</body>
</html>
Buat program PHP dengan nama logout.php kemudian simpan didalam folder esp8266
<?php
session_start();
$_SESSION = [];
WWW.ANAKKENDALI.COM 51
session_unset();
session_destroy();
header("Location: login.php");
exit;
?>
Buat program PHP dengan nama rfidadd.php kemudian simpan didalam folder esp8266
<?php
require 'koneksi.php';
$rfid = $_GET['idcard'];
$value = $_GET['val'];
Buat program PHP dengan nama rfidread.php kemudian simpan didalam folder esp8266
<?php
require 'koneksi.php';
$idcard = $_GET["idcard"];
$row = mysqli_fetch_array($hasil);
?>
WWW.ANAKKENDALI.COM 52
Program Arduino Uno, RFID dan ESP8266 ESP-01 Kirim data RFID ke Database
/*
* visit www.anakkendali.com
* 2018
*
*/
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
boolean connected=false;
void setup()
{
wifi.begin(9600);
wifi.setTimeout(5000);
Serial.begin(9600);
Serial.println("ESP8266 Client Demo");
delay(1000);
// periksa apakah modul ESP8266 aktif
wifi.println("AT+RST");
delay(1000);
if(wifi.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)
{
WWW.ANAKKENDALI.COM 53
break;
}
}
if (!connected){
while(1);
}
delay(5000);
SPI.begin();
rfid.PCD_Init();
Serial.println("I am waiting for card...");
}
void loop()
{
if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial())
return;
strID.toUpperCase();
Serial.print("Tap card key: ");
Serial.println(strID);
String Val = "5000"; // misalkan nilai val constant
kirim_data(strID, Val);
delay(1000);
}
WWW.ANAKKENDALI.COM 54
void kirim_data(String a, String b){
while (wifi.available())
{
char c = wifi.read();
Serial.write(c);
if(c=='\r') Serial.print('\n');
}
Serial.println("------end");
delay(10000);
}
void connect_to_WiFi()
{
wifi.println("AT+CWMODE=1");
String cmd="AT+CWJAP=\"";
cmd+=WiFiSSID;
cmd+="\",\"";
cmd+=WiFiPassword;
cmd+="\"";
WWW.ANAKKENDALI.COM 55
wifi.println(cmd);
Serial.println(cmd);
if(wifi.find("OK"))
{
Serial.println("Sukses, terkoneksi ke WiFi.");
connected= true;
}
else
{
Serial.println("Tidak dapat terkoneksi ke WiFi. ");
connected= false;
}
}
Berikut adalah contoh aplikasi Android yang di buat dengan app inventor, project nya juga bisa di
download pada alamat http://safelinku.net/2jyAz93N4
WWW.ANAKKENDALI.COM 56
Dari contoh aplikasi di atas silahkan untuk di kembangkan sendiri, karena buku ini tidak
membahas lebih lanjut mengenai pembuatan aplikasi android.
Berikut program Arduino Uno + ESP8266 ESP-01 Kontrol Relay Aplikasi Android
/*
*
* www.anakkendali.com
*
* 2018 Indonesia
*/
void konek_ke_wifi(){
String data="AT+CWJAP=\"";
data+=SSID_WIFI;
data+="\",\"";
data+=PASSWORD_WIFI;
data+="\"";
kirimPerintah(data,10000, DEBUG);
}
WWW.ANAKKENDALI.COM 57
void setup() {
// put your setup code here, to run once:
Serial1.begin(9600);
Serial.begin(9600);
kirimPerintah("AT+RST\r\n", 2000, DEBUG);
kirimPerintah("AT+CWMODE=1\r\n", 1000, DEBUG); // Set ke AP / Client
konek_ke_wifi();
kirimPerintah("AT+CIFSR\r\n", 500, DEBUG);
kirimPerintah("AT+CIPMUX=1\r\n", 500, DEBUG);
kirimPerintah("AT+CIPSERVER=1,80\r\n", 500, DEBUG);
Serial.println("Arduino Kontrol Wifi SIAP !!");
pinMode(13, OUTPUT);
}
if (debug){
Serial.print(respon);
}
return respon;
}
String data;
void loop() {
// put your main code here, to run repeatedly:
while (Serial1.available()>0){
delay(10);
char c = Serial1.read();
data+=c;
}
if (data.length()>0){
// Serial.println(data);
index1 = data.indexOf('/');
index2 = data.indexOf(' ', index1+1);
WWW.ANAKKENDALI.COM 58
// firstdata = data.substring(index1);
seconddata = data.substring(index1+1, index2);
data="";
}
}
Program di atas jika di lihat pada Serial Monitor Arduino hasilnya seperti gambar berikut :
WWW.ANAKKENDALI.COM 59
Kontrol Relay/LED Arduino Uno dan ESP8266 ESP-01 dengan Telegram
Pada tutorial ini akan membuat masing-masing program untuk Arduino Uno dan juga ESP8266
ESP-01, jadi yang dihubungkan dengan Telegram adalah ESP-01 kemudian dari ESP-01 mengirim
data ke Arduino Uno untuk melakukan suatu perintah tertentu (mengontrol LED pada pin 13).
WWW.ANAKKENDALI.COM 60
Jika tampil seperti gambar berikut berarti ESP8266 berhasil di program, dan kita bisa mengisi
proram pada ESP-01 menggunakan Arduino Uno.
Jika gagal atau muncul failed, cobalah untuk mencabut USB Arduino kemudian
menghubungkanya kembali.
Mengisi Firmware tujuanya untuk mereset Konfigurasi ESP-01, dan jika belum bisa juga untuk
reFlash ESP8266 silahkan coba masuk ke mode AT-Command seperti tutorial Sebelumnya dan
berikan perintah
“AT+RESTORE”
Berikut Library Telegram ESP8266 yang perlu di pasang pada Arduino IDE
ArduinoJson : http://idsly.bid/TZ8I
Universal Telegram Both : http://idsly.bid/LcNxWs
Pasanglah kedua library yang sudah di download kemudian rubahlah pilihan board pada tool
arduino menjadi Generic ESP8266 lihat gambar berikut :
WWW.ANAKKENDALI.COM 61
Kemudian silahkan upload program untuk menghubungkan esp8266 dengan TelegramBot :
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);
WWW.ANAKKENDALI.COM 62
for (int i=0; i<numNewMessages; i++) {
String chat_id = String(bot.messages[i].chat_id);
String text = bot.messages[i].text;
void setup() {
Serial.begin(9600);
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
void loop() {
if (millis() > Bot_lasttime + Bot_mtbs) {
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
while(numNewMessages) {
handleNewMessages(numNewMessages);
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
}
Bot_lasttime = millis();
}
}
WWW.ANAKKENDALI.COM 63
Selanjutnya kita akan mengisi program pada Arduino Uno itu sendiri, dan rubahlah Sekma wiring
nya menjadi seperti pada gambar Arduino Uno membaca data ESP-01
Kemudian upload program berikut ke arduino Uno untuk membaca data yang masuk dari
Telegram ke ESP-01 kemudian di Arduino Uno kita bisa membuat perintah seperti menyalakan
LED atau menyalakan Relay dari data tersebut
#include <SoftwareSerial.h>
SoftwareSerial serial(2,3);
String data;
char c;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
while (serial.available()>0){
delay(10);
c =serial.read();
data+=c;
}
if (data.length()>0){
Serial.println(data);
WWW.ANAKKENDALI.COM 64
if (data=="13 on"){
digitalWrite(13, 1);
}
else if (data=="13 off"){
digitalWrite(13, 0);
}
data="";
}
}
karena menggunakan ESP8266 mode program dan Arduino Uno sebagai Programmer nya maka
rangkaianya seperti pada gambar dibawah ini. Dan jangan lupa Arduino Uno tidak boleh
menyimpan program (Kosong). Lihat tutorial sebelumnya.
WWW.ANAKKENDALI.COM 65
Setelah itu silahkan Download librarynya Disini!
install library Cayene ESP8266 ke Arduino IDE kemudian buka File - Example – Cayenne MQTT
ESP – ESP8266
akan tampak program seperti pada gambar di bawah ini
Pada halaman web Cayenne silahakn buat project kemudian pilih Board mikrokonroler Generic
ESP8266
seperti terlihat pada gambar berikut
WWW.ANAKKENDALI.COM 66
Silahkan isi Username, password dan clientID seperti yang disediakan oleh Cayenne, berikut
adalah contoh
selanjutnya kita akan mencoba mengirim data random dari ESP8266-01 ke cayenne. Berikut
program lengkapnya.
//#define CAYENNE_DEBUG
#define CAYENNE_PRINT Serial
#include <CayenneMQTTESP8266.h>
// Cayenne authentication info. This should be obtained from the Cayenne Dashboard.
char username[] = "ccaaaaf0-0d81-11e9-898f-c12a468aadce";
char password[] = "f252edfa0e10fab2b5d8e5d1d21824f826ccf740";
char clientID[] = "0fedefb0-0dc9-11e9-809d-0f8fe4c30267";
WWW.ANAKKENDALI.COM 67
unsigned long lastMillis = 0;
void setup() {
Serial.begin(9600);
Cayenne.begin(username, password, clientID, ssid, wifiPassword);
}
unsigned long waktulama=0;
void loop() {
Cayenne.loop();
Cayenne.celsiusWrite(0, data);
}
}
selain versi Web Dekstor Cayenne juga menyediakan versi aplikasi Android yang dapat di
download pada Playstore.
tutorial dengan menggunakan ESP8266 – 01 dicukupkan sampai sini, dan mengenai Cayenne
akan di lengkapi pada tutorial dengan NodeMCU/Wemos D1 mini.
WWW.ANAKKENDALI.COM 68
Program NodeMCU / Wemos D1 Mini Kirim Data DHT11 ke Thingspeak
Tutorial ini adalah monitoriang data Suhu dan Kelembaban menggunakan sensor DHT11 dan
NodeMCU / Wemos D1 Mini ESP8266.
Terlebih dahulu buatlah Chanel yang berisi dua Field, masing masing untuk data Suhu dan data
Kelembaban.
untuk rangkaian NodeMCU dan sensor DHT11 seperti pada gambar di bawah ini.
Tidak perlu cemas jika sensor DHT11 hanya memiliki 3 kaki karena sensor sudah di buatkan PCB
dengan tambahan resistor.
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include "DHT.h"
#define DHTPIN D2
#define DHTTYPE DHT11
WiFiClient client;
HTTPClient http;
DHT dht(DHTPIN, DHTTYPE);
WWW.ANAKKENDALI.COM 69
void setup()
{
Serial.begin(9600);
WiFi.disconnect();
WiFi.begin("anakkendali.com", "chibakutensei");
while ((!(WiFi.status() == WL_CONNECTED))) {
delay(300);
Serial.print(".");
}
Serial.println("");
Serial.println("Connected");
dht.begin();
}
void loop()
{
delay(2000);
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
kirim_thingspeak(t, h);
}
WWW.ANAKKENDALI.COM 70
}
}
Untuk hasil pada field1 dan field2 terlihat seperti gambar berikut
Untuk rangkaian DHT11 dan Nodemcu kirim data ke Database MySQL terlihat seperti gambar
dibawah ini.
WWW.ANAKKENDALI.COM 71
kemudian buatlah dua program PHP sebagai jembatan antara Database dengan NodeMCU.
yang pertama silahkan beri nama “koneksi.php” dan di simpan dalam folder
htdocs/monitordht11 (monitordht11 adalah folder buatan kita sendiri)
<?php
$servername = "localhost";
$database = "ebook";
$username = "root";
$password = "";
if ($konek!=false){
echo "berhasil";
} else {
echo "gagal";}
?>
Yang kedua silahkan beri nama “index.php” dan disimpan pada folder yang sama seperti file
“koneksi.php”
<?php
include ("koneksi.php");
WWW.ANAKKENDALI.COM 72
$datenow = $now->format("Y-m-d H:i:s");
?>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
WiFiClient client;
#include "DHT.h"
#define DHTPIN D2
#define DHTTYPE DHT11
String request_string;
const char* host = "192.168.1.6";
HTTPClient http;
DHT dht(DHTPIN, DHTTYPE);
void setup()
{
Serial.begin(9600);
WiFi.disconnect();
WiFi.begin("anakkendali.com", "chibakutensei");
while ((!(WiFi.status() == WL_CONNECTED))) {
delay(300);
Serial.print(".");
}
Serial.println("");
Serial.println("Connected");
dht.begin();
}
void loop()
{
delay(2000);
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
if (!client.connect(host,80)) {
Serial.println("Gagal Konek");
WWW.ANAKKENDALI.COM 73
return;
}
request_string = "/monitordht11/index.php?suhu=";
request_string += t;
request_string += "&hum=";
request_string += h;
hasil yang diterima oleh database seperti pada gambar di bawah ini.
tanggal otomatis berdasarkan waktu saat data dikirim. Sedangkan ID nilainya akan bertambah
ketika ada data baru yang masuk.
WWW.ANAKKENDALI.COM 74
Program NodeMCU / Wemos D1 Kontrol LED Aplikasi Android
Pada tutorial kali ini juga akan menggunakan server Thingspeak sebagai jembatan pengirim dan
penerima data. Karena prinsip kerjanya, dari aplikasi android mengirim data ke thingspeak kemudian
esp8266 membaca data yang di terima oleh thingspeak untuk melakukan perintah menyalakan dan
mematikan LED, LED dapat di ganti dengan Relay, Motor atau aktuator lainya.
pertama buat terlebih dahulu aplikasi Android dengan menggunakan App Inventor. Disini akan
disediakan file mentah yang bisa di upload ke App Inventor kemudian bisa di build menjadi aplikasi
android.
Download Aplikasi Android Kontrol Led Internet (APK) Disini!
Download Aplikasi Android Kontrol Led Internet (aia) Disini!
chanelID
Api Key Read
Api Key Write
selanjutnya buatlah dua buah field untuk data monitoring dan untuk kontrol LED. Pada aplikasi
tersebut terdapat label “Data” dan empat buah tombol. Label data berisi Null karena tidak ada
nilai pada field1. Aplikasi ini menyediakan fitur tersebut untuk mencoba jika ingin menggunakan
aplikasi android sebagai monitor data, seperti data suhu atau data sensor lainya.
untuk menggunakan fitur monitor aplikasi ini, bisa mengikuti tutorial kirim data ESP8266
NodeMCU ke thingspeak pada bab sebelumnya.
WWW.ANAKKENDALI.COM 75
berikut adalah program ESP8266 NodeMCU untuk kontrol LED melalui aplikasi Android berbasis
Internet
#include <ESP8266WiFi.h>
#include <ThingSpeak.h>
#include <ESP8266HTTPClient.h>
WiFiClient client;
HTTPClient http;
void setup()
{
Serial.begin(9600);
ThingSpeak.begin(client);
WiFi.disconnect();
delay(3000);
WiFi.begin("anakkendali.com","chibakutensei");
while ((!(WiFi.status() == WL_CONNECTED))){
Serial.print(".");
delay(300);
}
Serial.println("connected!");
pinMode(D4, OUTPUT);
pinMode(D5, OUTPUT);
pinMode(D6, OUTPUT);
pinMode(D7, OUTPUT);
}
WWW.ANAKKENDALI.COM 76
unsigned long waktulama=0;
void loop()
{
if (val == 1){
digitalWrite(D4, 1);
}
else if (val == 0){
digitalWrite(D4, 0);
}
else if (val == 3){
digitalWrite(D5, 1);
}
else if (val == 4){
digitalWrite(D5, 0);
}
else if (val == 5){
digitalWrite(D6, 1);
}
else if (val == 6){
digitalWrite(D6, 0);
}
else if (val == 7){
digitalWrite(D7, 1);
}
else if (val == 8){
digitalWrite(D7, 0);
}
Serial.println(val);
}
kelemahan menggunakan server thingspeak adalah data yang dikirim maupun yang diterima
sangat lama, sehingga saat melakukan perintah harus menunggu data sebelumnya selesai di
proses.
WWW.ANAKKENDALI.COM 77
Selanjutnya silahkan klik Add Widget. Dan akan mencul chanel0 sebagai Button untuk
menyelakan LED pada pin D4 NodeMCU
selanjutnya silahakn buka software Arduino IDE dan upload program berikut pada board
NodeMCU ESP8266
WWW.ANAKKENDALI.COM 78
//#define CAYENNE_DEBUG
#define CAYENNE_PRINT Serial
#include <CayenneMQTTESP8266.h>
// Cayenne authentication info. This should be obtained from the Cayenne Dashboard.
char username[] = "ccaaaaf0-0d81-11e9-898f-c12a468aadce";
char password[] = "f252edfa0e10fab2b5d8e5d1d21824f826ccf740";
char clientID[] = "0fedefb0-0dc9-11e9-809d-0f8fe4c30267";
void setup() {
Serial.begin(9600);
Cayenne.begin(username, password, clientID, ssid, wifiPassword);
pinMode (D4, OUTPUT);
}
unsigned long waktulama = 0;
void loop() {
Cayenne.loop();
}
CAYENNE_IN_DEFAULT()
{
CAYENNE_LOG("Channel %u, value %d", request.channel, getValue.asInt());
digitalWrite(D4, getValue.asInt());
}
Tutorial ini menutup materi pada EBOOK ESP8266 dan mungkin akan ada ebook bagian ke 2 nya
yang akan melanjutkan berbagai tutorial mengenai IOT, tidak hanya Board ESP8266, namun juga
akan di bahas mengenai IOT dnegan GSM maupun ETHERNET.
WWW.ANAKKENDALI.COM 79
Tentang Penulis
Chaerul Anam. Lahir 01 Desember 1996 di Indramayu, Jawa Barat. Pernah sekolah
di Pesantren Al – Ishlah Tajug Sudimampir Indramayu. Dan sekarang sedang
menjalani studi Teknik Elektro di Universitas Islam Indonesia. Mengambil
Konsentrasi Kendali menjadi pilihan untuk mempalajari bidang Mikrokontroler
Seperti Atmega, Arduino, STM32, NodeMCU, PLC, Labview. Selain belajar
pemograman hardware penulis juga sangat suka dengan dunia Blogging.
WA : 083862832235
Email : [email protected]
WWW.ANAKKENDALI.COM 80
Referensi
[1] “Getting Started with MicroPython on ESP32 and ESP8266 | Random Nerd Tutorials.” [Online].
Available: https://randomnerdtutorials.com/getting-started-micropython-esp32-esp8266/.
[Accessed: 22-Oct-2018].
[2] “D1 mini [WEMOS Electronics].” [Online]. Available: https://wiki.wemos.cc/products:d1:d1_mini.
[Accessed: 23-Oct-2018].
[3] “Belajar PHP untuk PEMULA : Intro - YouTube.” [Online]. Available:
https://www.youtube.com/watch?v=l1W2OwV5rgY&list=PLFIM0718LjIUqXfmEIBE3-
uzERZPh3vp6. [Accessed: 25-Oct-2018].
[4] “Cayenne Docs.” [Online]. Available: https://mydevices.com/cayenne/docs/getting-
started/#getting-started-esp8266-get-started-in-minutes. [Accessed: 01-Jan-2019].
[5] “ESP8266-ESP-01-ESP8266-WIFI-module-Serial-Wi-Fi-Wireless-Transceiver-Module-for-
Arduino.jpg_640x640.jpg (640×640).” [Online]. Available:
https://ae01.alicdn.com/kf/HTB1mwr2NFXXXXc4XpXXq6xXFXXXn/ESP8266-ESP-01-ESP8266-
WIFI-module-Serial-Wi-Fi-Wireless-Transceiver-Module-for-Arduino.jpg_640x640.jpg. [Accessed:
21-Oct-2018].
[6] “1501699031787010991.jpg (400×400).” [Online]. Available: https://gloimg.gbtcdn.com/gb/pdm-
product-pic/Electronic/2017/06/13/goods-img/1501699031787010991.jpg. [Accessed: 21-Oct-
2018].
[7] “F7FIBJYIMTE8XJB.LARGE.jpg (535×404).” [Online]. Available:
https://cdn.instructables.com/F7F/IBJY/IMTE8XJB/F7FIBJYIMTE8XJB.LARGE.jpg. [Accessed: 21-
Oct-2018].
[8] “df713b06-d98b-4e7e-bff4-274b5d3fe3bf.JPG (600×600).” [Online]. Available:
https://img.banggood.com/images/oaupload/banggood/images/29/9F/df713b06-d98b-4e7e-
bff4-274b5d3fe3bf.JPG. [Accessed: 21-Oct-2018].
WWW.ANAKKENDALI.COM 81