0% menganggap dokumen ini bermanfaat (0 suara)
197 tayangan

Modul Sistem Microprocessor

Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
197 tayangan

Modul Sistem Microprocessor

Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 137

MODUL

SISTEM MIKROPROSESSOR

2022 | Pendidikan Teknik Informatika Dan Komputer Universitas Negeri

Makassar

1|SistemMikroprosesor
KATA PENGANTAR

Puji syukur penulis panjatkan atas kehadirat Allah SWT, atas limpahan rahmat dan hidayah-Nya,
sehingga penulis dapat menyelesaikan modul yang berjudul “Modul Sistem Mikroprosessor” dengan
lancar.
Penulis menyadari bahwa terlaksananya ini tidak lepas dari bantuan dan bimbingan dari berbagai
pihak. Oleh karena itu, penulis mengucapkan terimamksih kepada orang tua, keluarga, teman-teman,
dan dosen pembimbing bapak Dr. Satria Gunawan, S.Pd., M.T.dan ibu Ninik Rahayu Ashadi, S.Pd.,
M.Pd., beserta dosen penguji dan seluruh validator yang telah memberikan saran dan masukan yang
sangat berguna dalam penulisan modul ini.

Penulis memahami bahwa apa yang telah di dapatkan selama pembuatan modul ini jauh dari kata
sempurna, oleh karena itu saran dan kritik yang bersifat membangun sangat penting dan sangat penulis
harapkan demim kesempurnaan modul ini.

Penulis berharap modul ini dapat memberikan manfaat bagi penulis sendiri khususnya, dan bagi para
pembaca.

Makassar, November 2022

Penulis

2|SistemMikroprosesor
DAFTAR ISI

KATA PENGANTAR...............................................................................................................................2
DAFTAR ISI.............................................................................................................................................3
PETUNJUK PENGGUNAAN MODUL..................................................................................................6
PERISTILAHAN / GLOSARIUM...........................................................................................................7
PENDAHULUAN.....................................................................................................................................8
1. PENGENALAN ARDUINO
A. Tujuan Pembelajaran.......................................................................................................................9
B. Teori Dasar......................................................................................................................................9
C. Latihan..........................................................................................................................................21
2. KOMUNIKASI SERIAL
A. Tujuan Pembelajaran.....................................................................................................................22
B. Teori Dasar....................................................................................................................................22
C. Rangkaian Percobaan....................................................................................................................27
D. Rangkaian Pelaksanaan.................................................................................................................28
E. Langkah Kerja...............................................................................................................................28
F. Hasil Percobaan.............................................................................................................................29
G. Kesimpulan................................................................................................................................... 29
3. Analog Digital Converter (ADC)
A. Tujuan Pembelajaran :...................................................................................................................30
B. Teori Dasar :..................................................................................................................................30
C. Rangkaian Percobaan....................................................................................................................33
D. Rangkaian Pelaksanaan.................................................................................................................34
E. Alat dan Bahan..............................................................................................................................34
F. Langkah Kerja...............................................................................................................................34
G. Hasil Percobaan.............................................................................................................................41
H. Analisis Rangkaian........................................................................................................................42
I. Kesimpulan................................................................................................................................... 42
4. Pulse Wide Modulation (PWM)
A. Tujuan Pembelajaran.....................................................................................................................43
B. Teori Dasar :..................................................................................................................................43
C. Rangkaian Percobaan....................................................................................................................46
D. Rangkaian Pelaksanaan.................................................................................................................46
E. Alat dan Bahan..............................................................................................................................47

3|SistemMikroprosesor
F. Langkah Kerja...............................................................................................................................47
G. Hasil Percobaan.............................................................................................................................48
H. Analisis Percobaan........................................................................................................................48
I. Kesimpulan................................................................................................................................... 49
5. Inter Integrated Circuit (i2C)
A. Tujuan Pembelajaran.....................................................................................................................50
B. Teori Dasar....................................................................................................................................50
C. Rangkaian percobaan.....................................................................................................................52
D. Rangkaian Pelaksanaan.................................................................................................................52
E. Alat dan bahan...............................................................................................................................53
F. Langkah Kerja...............................................................................................................................53
G. Hasil Percobaan.............................................................................................................................55
H. Analisis Percobaan........................................................................................................................55
I. Kesimpulan................................................................................................................................... 56
6. Serial Peripheral Interface (SPI)
A. Tujuan Pembelajaran.....................................................................................................................57
B. Teori Dasar....................................................................................................................................57
C. Rangkaian Percobaan....................................................................................................................60
D. Rangkaian Percobaan....................................................................................................................60
E. Alat dan bahan...............................................................................................................................61
F. Langkah Kerja...............................................................................................................................61
7. ESP32
A. Tujuan Pembelajaran.....................................................................................................................62
B. Teori Dasar....................................................................................................................................62
C. Alat dan Bahan.............................................................................................................................63
D. Prosedur Percobaan.......................................................................................................................63
E. Hasil Percobaan...........................................................................................................................101
F. Analisis Percobaan......................................................................................................................102
G. Kesimpulan.................................................................................................................................102
8. ESP 8266
A. Tujuan Pembelajaran...................................................................................................................103
B. Teori Dasar..................................................................................................................................103
C. Praktikum 1.................................................................................................................................112
D. Praktikum 2.................................................................................................................................116
E. Praktikum 3.................................................................................................................................120

4|SistemMikroprosesor
F. Praktikum 4.................................................................................................................................123
G. Praktikum 5.................................................................................................................................128
H. Hasil Praktikum...........................................................................................................................135
I. Analisis Praktikum......................................................................................................................135
J. Kesimpulan.................................................................................................................................136

5|SistemMikroprosesor
PETUNJUK PENGGUNAAN MODUL

1. Petunjuk Bagi Mahasiswa


Bagi mahasiswa agar memperoleh hasil belajar yang maksimal, maka dalam menggunakan
modul ini langkah-langkah yang dilaksanakan antara lain:
a. Bacalah dan pahami dengan saksama uraian-uraian materi yang telah disajikan serta
apabila ada materi yang kurang jelas, peserta didik dapat bertanya kepada dosen
pengampu mata kuliah.
b. Terdapat 7 materi pembelajaran pada modul ini yaitu:
 Pengenalan Arduino
 Komunikasi Serial
 Analog Digital Converter ( ADC)
 Pulse Wide Modulation (PWM)
 Inter Integrated Circuit ( i2C)
 Serial Peripheral Interface ( SPI)
 ESP32
 ESP8266
c. Kerjakan latihan percobaan pada modul ini untuk mengetahui seberapa besar
pemahaman yang dimiliki terhadap materi yang telah dipelajari sebelumnya.
2. Petunjuk Bagi Dosen
Bagi dosen agar mahasiswa memperoleh hasil belajar yang maksimal, maka dosen berperan
untuk:
a. Membantu mahasiswa memahami tentang materi yang terdapat pada modul.
b. Memberikan pengarahan kepada mahasiswa terkait materi yang ada pada modul.
c. Memberikan pendampingan kepada mahasiswa saat melakukan praktikum pada materi
yang di dalamnya memerlulakn praktikum.
d. Memberikan pengarahan agar mahasiswa mampu mengerjakan soal latihan dengan baik
dan benar.

6|SistemMikroprosesor
PERISTILAHAN / GLOSARIUM

7|SistemMikroprosesor
PENDAHULUAN

8|SistemMikroprosesor
1 Pengenalan Arduino

A. Tujuan Pembelajaran
a. Mahasiswa mampu mengetahui sejarah perkembangan platform arduino
b. Mahasiswa mampu membedakan antara microcontroller dan microprocessor
c. Mahasiswa mampu mengetahui bagian-bagian dari Arduino Uno dan aplikasi yang
digunakan.
d. Mahasiswa mampu memahami tentang library serial Arduino
e. Mahasiswa mampu memahami bentuk skematik rangkaian

B. Teori Dasar
Sebelum membahas sejarah tentang Arduino ada baiknya kita memahami terlebih
dahulu apa yang dimaksud dengan mikrokontroler dan mikroprosesor. Apakah mikrokontroler
dan mikroprosesor dan itu?
1. Apa itu Mikrokontroler?

Mikrokontroler adalah sebuah komputer kecil di dalam sebuah integrated circuit


(IC) yang berisi sebuah inti prosesor, memori, dan perangkat input/output yang dapat di
program. Sebagai alat pemrosesan, mikrokontroler dapat digunakan untuk mengambil
keputusan, melakukan hal-hal yang bersifat berulang, dan dapat berinteraksi dengan piranti-
piranti luar, seperti sensor ultrasonik untuk mengukur jarak terhadap suatu objek, penerima
GPS untuk memperolah data posisi kebumian dari setelit, dan interaksi dengan perangkat
lainnya. Mikrokontroler juga biasa disingkat dengan MCU atau uC. Perusahaan yang
terkenal sebagai pembuat mikrokontroler antara lain adalah Atmel, Cypress Semiconductor,
Microchip, dan Silicon Laboratories. Berikut nama-nama microcontroller beserta
vendornya sebagai berikut.
Nama Vendor Microcontroller
Atmel AVR (8bit), AVR (32bit), AT91SAM
(32bit)
Cypress Semiconductor M8C Core
Microchip PIC

9|SistemMikroprosesor
Silicon Laboratories 8051
Tabel 1.1 Nama microcontroller beserta vendornya
Mikrokontroler didesain untuk aplikasi tertanam (embedded applications), aplikasi
dengan tugas-tugas tertentu (specific tasks) dengan tujuan tertentu yang dikerjakan secara
berulang-ulang, sangat berbeda dengan mikroprosesor yang digunakan pada aplikasi yang
memiliki tujuan yang umum.
1. Apa itu microprocessor ?
Mikroprosesor adalah prosesor komputer yang menggabungkan fungsi central
processing unit (CPU) pada satu sirkuit terpadu (IC). Sebuah mikroprosesor dirancang
untuk melakukan operasi aritmatika dan logika. Contohnya adalah melakukan operasi
menambah, mengurangi, dan membandingkan. Operasi ini adalah hasil dari satu set
instruksi yang merupakan bagian dari desain mikroprosesor. Contoh mikroprosesor adalah
Intel Pentium 1,2,3,4, core 2 duo, i3, i5 dan lain-lain. Seorang desainer sistem harus
menambahkan sendiri perangkat luar yang dibutuhkan agar sebuah sistem dapat dibangun
seperti ROM, RAM, memori, perangkat input output dan perangkat lainnya. Aplikasi
mikroprosesor meliputi Desktop PC, Laptop dan mungkin masih terdapat aplikasi lain yang
belum admin ketahui. Untuk membedakan antara mikrokontroler dan mikroprosesor cukup
mudah, perhatikan tabel dibawah ini :

Microcontroller Microprocessor
Terdapat CPU, ROM, RAM Hanya terdapat CPU saja, perangkat
perangkat input /output dalam satu seperti ROM, RAM dan lainnya perlu
chip ditambahkan sebagai perangkat luar
Saat ini yang admin ketahui Kecepatan diatas 1GHz
kecepatan mikrokontroler masih
dalam satuan MHz
Harga lebih murah Harga lebih mahal
Penanganan lebih murah Penanganan lebih sulit
Dapat berdiri sendiri Perlu penambahan perangkat luar agar
suatu sistem dapat dibangun
Tabel 1.2 perbedaan microcontroller dan microprocessor
2. Bagaimana dengan Arduino ?
Arduino adalah sebuah open-source prototyping platform yang didasarkan pada
easy-to-use hardware and software. Secara perangkat keras Arduino adalah jenis suatu
papan (board) yang berisi mikrokontroler atau dapat disebut sebagai sebuah papan
mikrokontroler. Didalam board ini sudah termasuk pin sebagai masukan dan keluaran baik
yang bersifat digital maupun analog. Arduino

10 | S i s t e m M i k r o p r o s e s o r
berlandaskan open source pada perangkat keras - Open Source HardWare (OSHW) dan
perangkat lunak - Free and Open Source Software (F/OSS atau FOSS). Arduino memiliki
harga yang cukup terjangkau dengan fasilitas yang ditawarkan. Atau jika ingin membuat
sendiri board Arduino berikut dengan source code-nya maka skematik dan firmware-nya
tersedia secara gratis dan bebas di internet.

Gambar 1.1 Logo Arduino


Dengan Arduino kita dapat menghubungkan berbagai jenis sensor untuk membuat
sebuah proyek yang sederhana sampai yang cukup kompleks. Saat ini Arduino sangat
popular di lingkungan penggemar / hobi elektronika sebagai perangkat pengendali berbagai
proyek termasuk robotik. Arduino telah memiliki komunitas serta forum yang luas di
internet untuk membantu para pemula untuk belajar atau sekedar untuk mebagikan source
code yang anda buat kepada semua pengguna Arduino di seluruh dunia.
3. Sejarah Nama Arduino
Semuanya berawal di Ivrea, itally. Nama Arduino mungkin terdengar cukup berbeda
dengan perangkat elektronik yang pernah ada selama ini, seperti LED (led emitting diode),
atau resistor atau transistor bahkan mikrokontroler seperti AVR atau PIC atau yang lainnya.
Pemilihan nama Arduino ini ternyata memiliki kaitan yang erat dengan sejarah
perkembangannya. Salah satu pengembang inti Arduino adalah bernama Massimo Banzi
yang juga merupakan pemberi nama dari Arduino tersebut. Ivrea merupakan sebuah kota di
Italia Utara dan cukup terkenal dengan sejarah kerajaannya serta seorang raja yang pernah
memerintah di negara bagian tersebut. Pada tahun 1002 Masehi, seorang raja bernama
Arduin memerintah di negara tersebut. Yang 2 tahun kemudian keberadaannya digantikan
oleh raja Henry II dari jerman. Di kota Ivrea terdapat sebuah bar dengan nama “‘Bar Di Re
Arduino” atau yang berarti ”Bar Raja Arduino” yang diambil dari nama raja “Arduin”
dengan maksud untuk mengenang beliau. Bar ini kemudian merupakan tempat yang sering
dikunjungi oleh Massimo Banzi dan beberapa rekannya untuk bertemu, yang kemudian
nama Arduino ia berikan ke perangkat yang ia kembangkan sebagai rasa

11 | S i s t e m M i k r o p r o s e s o r
hormatnya kepada tempat ini. Adapun merupakan anggota inti dari tim pengembang Arduino
seperti pada gambar di bawah ini.

Gambar 1.2 Massimo Banzi , David Cuartielles, Tom Igoe , Gianluca Martino, dan
David Mellis.
Banzi merupakan seorang arsitek perangkat lunak yang direkrut oleh Interactive
Design Institute Ivrea (IDII) sebagai profesor dalam rangka untuk mempromosikan cara-
cara baru dalam melakukan desain interaktif atau dengan kata lain komputasi fisik.
Meskipun dia memiliki ide yang baik namun memiliki waktu yang sangat terbatas ditambah
lagi dengan anggaran yang terus berkurang. Seperti rekan-rekannya yang lain ia pun harus
bergantung dengan BASIC Stamp, sebuah mikrokontroler yang dikembangkan oleh
Parallax (sebuah perusahaan yang berada di California) untuk mengerjakan proyek-proyek
miliknya. Sebagian mungkin pernah mendengar perusahaan Parallax dengan produknya
seperti servo atau servo controller. Para Insinyur saat itu mungkin telah menggunakan
BASIC Stamp hampir dalam kurung waktu satu dekade. BASIC Stamp di program dengan
bahasa pemrograman basic. Secara fisik BASIC Stamp merupakan sebuah papan sirkuit
yang dikemas secara rapi dengan beberapa kelangkapan seperti power supply,
microcontroller, memory, dan port input/output yang dapat digunakan untuk antarmuka ke
perangkat luar.
Namun BASIC Stamp memiliki dua masalah menurut Massimo Banzi. Yang
pertama BASIC Stamp ternyata untuk beberapa proyek mahasiswanya tidak memiliki daya
komputasi yang cukup. Serta masalah yang kedua adalah BASIC Stamp besutan Parallax ini
memiliki harga yang terlalu mahal. Faktanya harga sebuah BASIC Stamp dengan peralatan
dasar adalah US $100, tentunya ini merupakan harga yang sangat tinggi. Selain itu BASIC
Stamp tidak men-support cross platform, yang mana sebagian besar desainer di IDII kala
itu menggunakan

12 | S i s t e m M i k r o p r o s e s o r
operating system macintosh. Sementara itu sebuah konsep “friendly programming
language” yang bernama “processing” berhasil dikembangkan oleh teman Banzi yakni
Casey Reas di MIT. Processing berkembang dengan pesat dan mendapatkan popularitas
yang sangat baik. Seorang amatir bahkan dapat membuat visualisasi data yang kompleks
dengan tampilan yang baik dan menarik. Hal ini merupakan terobosan besar dalam
kemudahan penggunaan bagi sebuah Integrated Development Environment (IDE). Banzi
sangat menyukai konsep ini dan berharap untuk membuat software serupa untuk
memprogram mikrokontroler dengan sebuah tampilan grafis pada sebuah layar.
Salah satu mahasiswa Banzi, Hernando Barragan mengambil langkah awal dalam
arah untuk menciptakan perangkat lunak yang mirip dengan processing. Dia
mengembangkan sebuah platform prototype yang dikenal dengan nama “wiring”. Platform
Wiring mencakup sebuah IDE sebagai perangkat lunak untuk memprogram yang
didalamnya sudah terdapat library functions untuk memudahkan pemrograman
mikrokontroler dan sebuah papan sirkuit yang siap digunakan dengan menggunakan
mikrokontroler Atmega 128 sebagai pemrosesnya. Platform prototype ini merupakan thesis
dari Hernando Barragan dengan pembimbingnya
Massimo Banzi dan Casey Reas pada tahun 2004 dengan judul “Arduino – La rivoluzione
dell’open hardware” (“Arduino – The Revolution of Open Hardware”). Konsep dari proyek
ini ternyata menjanjikan sebuah keberhasilan bahkan sampai dengan saat ini. Namun Banzi
ternyata memiliki mimpi yang lebih besar. Ia berharap untuk membuat sebuah platform
yang lebih murah, sederhana dan lebih mudah digunakan.
Pada tahun 2005, Massimo Banzi bersama dengan David Mellis (mahasiswa IDII
pada saat itu) dan David Cuartielles, menambahkan dukungan mikrokontroler ATmega 8
untuk Wiring. Namun mereka tidak melanjutkan pengembangan Wiring melainkan mereka
menyalin kode sumber Wiring dan mulai mengembangkannya sebagai proyek yang
terpisah, yang kemudian disebut Arduino.
Banzi dan rekan-rekannya sangat percaya dengan kekuatan dari open source.
Mereka pikir akan lebih baik untuk membuka platform tersebut agar dapat diakses orang
sebanyak-banyaknya sehingga pengembangan platform dapat dilakukan secara cepat.
Faktor lain yang menentukan keputusan Banzi untuk membuka platformnya secara open
source adalah bahwa setelah beroperasi hampir selama 5 tahun, IDII tidak memiliki dana
yang cukup lagi untuk mendukung proyek ini bahkan terancam untuk menghentikan
pendanaan. Semua anggota fakultas takut proyek ini tidak dapat bertahan atau bahkan akan
digelapkan. Sehingga Banzi membuat keputusan besar dengan menjadikan platform ini
sebagai open source.
Singkat cerita, Arduino ternyata telah menciptakan sendiri industri rumahan dengan
kategori DIY. Ada lebih dari 200 distributor produk Arduino di seluruh

13 | S i s t e m M i k r o p r o s e s o r
dunia, termasuk perusahaan besar seperti SparkFun Electronics. Bahkan kabarnya seorang
pria di Portugal berhenti dari pekerjaannya di perusahaan telepon untuk menjual produk
Arduino dari rumahnya. Gianluca Martino, salah satu anggota tim inti yang mengawasi
produksi dan distribusi, mengatakan bahwa mereka sedang bekerja keras untuk mencapai
pasar negara berkembang seperti China, India, dan Amerika Selatan. Menurutnya sekitar 80
persen dari pengguna Arduino dibagi antara Amerika Serikat dan Eropa, dan sisanya
tersebar di seluruh dunia. Jaminan mutu yang baik merupakan sebuah tantangan yang besar
ketika berbicara tentang penanganan produksi dari ribuan unit board Arduino. Tim Arduino
memproduksi sekitar 100 sampai 3000 board Arduino dalam waktu satu hari. Tim
menggunakan “custom system” untuk mengujicoba pin input / output pada setiap papan
sirkuit agar terjamin kualitasnya. Tim juga memberikan jaminan penggantian board
Arduino yang tidak dapat bekerja dengan semestinya. Menurut Gianluca Martino, dengan
sistem yang diterapkan saat ini tingkat kegagalan produksi dari Arduino berada dibawah
1persen, sehingga jaminan kualitas board Arduino yang dipasarkan dapat tetap terjaga. Saat
ini tim Arduino telah memiliki penghasilan yang cukup untuk membayar para karyawannya
serta siap untuk membiayai pendanaan guna pengembangan papan Arduino dengan fasilitas
yang baru dan tentunya yang lebih baik. Pada bulan september, pada sebuah acara “maker
fair” tim Arduino memperkenalkan varian baru dari Arduino board dengan chip prosesor
ARM 32 bit. Hal ini merupakan komitmen dari tim Arduino untuk memberikan varian
Arduino board dengan komputasi yang lebih tinggi. Salah satu proyek yang pernah dibuat
adalah kit printer 3D dengan menggunakan Arduino 8-bit, tentunya dengan kekuatan
prosesor ARM 32-bit ini diharapkan dapat mengerjakan tugas-tugas yang lebih rumit lagi.
Arduino kembali mendapatkan support yang luar biasa ketika google meliris
sebuah papan pengembang berbasiskan Arduino yang support untuk sistem Android.
Google Android ADK (Accessory Development Kit), adalah platform yang memungkinkan
ponsel Android berinteraksi dengan motor, sensor, dan perangkat lainnya. Anda dapat
membangun sebuah aplikasi Android menggunakan kamera ponsel, sensor gerak, layar
sentuh, dan konektivitas internet untuk mengontrol sebuah robot atau sebuah sistem.
Dengan adanya hal ini tentunya proyek yang dapat dibangun dengan perangkat Arduino
menjadi lebih luas lagi. Tantangan demi tantangan terus berdatangan bagi tim Arduino,
salah satunya untuk mengakomodasikan hal berbeda yang orang inginkan namun tetap
dapat dilakukan dengan platform ini, namun tetap memberikan kemudahan kepada
pengguna terutama bagi seorang pemula. Sementara itu di lain hal para fans Arduino
berdatangan ke “Bar Di Re Arduino” di Ivrea untuk sekedar melihat-lihat bar ini atau untuk
minum-minum. Kenyatannya para pekerja bar bahkan tidak mengetahui

14 | S i s t e m M i k r o p r o s e s o r
bahwa yang membawa mereka kesana adalah platform Arduino yang sekarang menjadi
perbincangan di seluruh dunia.
4. Arduino Uno
Arduino Uno adalah board mikrokontroler berbasis ATmega328 (datasheet).
Memiliki 14 pin input dari output digital dimana 6 pin input tersebut dapat digunakan
sebagai output PWM dan 6 pin input analog, 16 MHz osilator kristal, koneksi USB, jack
power, ICSP header, dan tombol reset. Untuk mendukung mikrokontroler agar dapat
digunakan, cukup hanya menghubungkan Board Arduino Uno ke komputer dengan
menggunakan kabel USB atau listrik dengan AC yang-ke adaptor-DC atau baterai untuk
menjalankannya. Uno berbeda dengan semua board sebelumnya dalam hal koneksi USB to-
serial yaitu menggunakan fitur Atmega8U2 yang diprogram sebagai konverter USB to-
serial berbeda dengan board sebelumnya yang menggunakan chip FTDI driver USBto-
serial. Nama “Uno” berarti satu dalam bahasa Italia, untuk menandai peluncuran Arduino
1.0. Uno dan versi 1.0 akan menjadi versi referensi dari Arduino. Uno adalah yang terbaru
dalam serangkaian board USB Arduino, dan sebagai model referensi untuk platform
Arduino, untuk perbandingan dengan versi sebelumnya, lihat indeks board Arduino.

Gambar 1.3 Arduino UNO R3 Atmega328


Arduino Uno adalah papan sirkuit berbasis mikrokontroler ATmega328. IC
(integrated circuit) ini memiliki 14 input/output digital (6 output untuk PWM), 6 analog
input, resonator kristal keramik 16 MHz, Koneksi USB, soket adaptor, pin header ICSP,
dan tombol reset. Hal inilah yang dibutuhkan untuk mensupport mikrokontrol secara mudah
terhubung dengan kabel power USB atau kabel power supply adaptor AC ke DC atau juga
battery.

15 | S i s t e m M i k r o p r o s e s o r
Microcontroller ATmega328

5V
Operating Voltage

7-12V
Input Voltage (recommended)

6-20V
Input Voltage (limits)

14 (of which 6 provide PWM output)


Digital I/O Pins

6
Analog Input Pins

40 mA
DC Current per I/O Pin

50 mA
DC Current for 3.3V Pin
32 KB (ATmega328) of which 0.5 KB
Flash Memory used by bootloader

2 KB (ATmega328)
SRAM

1 KB (ATmega328)
EEPROM

Clock Speed 16 MHz

68.6 mm
Length

53.4 mm
Width

25 g
Weight
Tabel 1.3 Identitas Arduino Uno
Arduino Uno dapat disupply langsung ke USB atau power supply tambahan yang
pilihan power secara otomatis berfungsi tanpa saklar. Kabel external (nonUSB) seperti
menggunakan adaptor AC ke DC atau baterai dengan konektor plug ukuran 2,1mm
polaritas positif di tengah ke jack power di board. Jika

16 | S i s t e m M i k r o p r o s e s o r
menggunakan baterai dapat disematkan pada pin GND dan Vin di bagian Power konektor.

Gambar 1.4 Power Supply Arduino Port


Papan Arduino ini dapat disupplai tegangan kerja antara 6 sampai 20 volt, jika catu
daya di bawah tengan standart 5V board akan tidak stabil, jika dipaksakan ke tegangan
regulator 12 Volt mungkin board arduino cepat panas (overheat) dan merusak board.
Sangat direkomendasikan tegangannya 7-12 volt.
Penjelasan Power Pin :

1. Vin – Input voltase board saat anda menggunakan sumber catu daya luar (adaptor USB
5 Volt atau adaptor yang lainnya 7-12 volt), Anda bisa menghubungkannya dengan pin
VIN ini atau langsung ke jack power 5V. DC power jack (7-12V), Kabel konektor
USB (5V) atau catu daya lainnya (7-12V). Menghubungkan secara langsung power
supply luar (7-12V) ke pin 5V atau pin 3.3V dapat merusak rangkaian Arduino ini.
2. 3V3 - Pin tegangan 3.3 volt catu daya umum langsung ke board. Maksimal arus yang
diperbolehkan adalah 50 mA.
3. Gnd – Pin Ground.
4. IOREF – Pin ini penyedia referensi tegangan agar microcontroller beroperasi dengan
baik. Memilih sumber daya yang tepat atau mengaktifkan penerjemah tegangan pada
output untuk bekerja dengan 5V atau 3.3V.

17 | S i s t e m M i k r o p r o s e s o r
5. Memory
ATmega328 memiliki memory 32 Kb (dengan 0.5 Kb digunakan sebagai bootloader).
Memiliki SRAM (Static Random Access Memory) sebesar 2KB dan Memiliki EEPROM
(Electrically Erasable Programmable Read Only Memory) sebesar 1KB sebagai tempat
penyimpanan data semi permanent karena EEPROM tetap dapat menyimpan data
meskipun catu daya dimatikan.

Gambar 1.5 Peta Memory pada ATmega328


6. Communication
Arduino Uno memiliki fasilitas nomer untuk komunikasi dengan komputer atau
hardware Arduino lainya, atau dengan mikrokontroler. Pada ATmega328 menerjemahkan
serial komunikasi UART TTL (5V) pada pin 0 (RX) dan 1 (TX). Pada ATmega16U2
serial komunikasinya dengan USB dan port virtual pada software di komputer. Perangkat
lunak (firmware) 16U2 menggunakan driver standart USB COM dan tidak membutuhkan
driver luar lainnya. Bagaimanapun pada OS Windows file ekstensi .inf sangar diperlukan.
Software Arduino bawaan telah menyertakan serial monitor yang sangat mudah membaca
dan mengirim data dari dan ke Arduino.
LED indikator TX dan RX akan kedip ketika data telah terkirim via koneksi USB -
to - serial dengan USB pada komputer (tetapi tidak pada serial com di pin 0 dan pin 1)
SoftwareSerial library membolehkan banyak pin serial communication pada Uno.
ATmega328 juga support I2C (TWI) dan SPI communication. Software Arduino terbenam
di dalamnya Wire library untuk memudahkan penggunaan bus I2C.
Uno Arduino memiliki sejumlah fasilitas untuk berkomunikasi dengan komputer,
Arduino lain, atau mikrokontroler lainnya. ATmega328 menyediakan UART TTL (5V)
untuk komunikasi serial, yang tersedia di pin digital 0 (RX) dan

18 | S i s t e m M i k r o p r o s e s o r
1 (TX). Sebuah ATmega8U2 sebagai saluran komunikasi serial melalui USB dan sebagai
port virtual com untuk perangkat lunak pada komputer. Firmware ’8 U2 menggunakan
driver USB standar COM, dan tidak ada driver eksternal yang diperlukan. Namun, pada
Windows diperlukan, sebuah file inf. Perangkat lunak Arduino terdapat monitor serial
yang memungkinkan digunakan memonitor data tekstual sederhana yang akan dikirim ke
atau dari board Arduino. LED RX dan TX di papan tulis akan berkedip ketika data sedang
dikirim melalui chip USB-to- serial dengan koneksi USB ke komputer (tetapi tidak untuk
komunikasi serial pada pin 0 dan 1).
Sebuah SoftwareSerial library memungkinkan untuk berkomunikasi secara serial pada
salah satu pin digital pada board Uno’s. ATmega328 juga mendukung I2C (TWI) dan
komunikasi SPI. Perangkat lunak Arduino termasuk perpustakaan Kawat untuk
menyederhanakan penggunaan bus I2C, lihat dokumentasi untuk rincian. Untuk
komunikasi SPI, menggunakan library SPI.

7. Programming
Arduino UNO dapat di program dengan software Arduino. Pilih "Arduino Uno dari Tools
> Board menu (akan terlacak microcontroller pada board). Microcontroller ATmega328
pada Arduino Uno dapat preburned dengan bootloader yang dapat anda upload kode baru
tanpa menggunakan programmer perangkat lainnya.Komunikasi menggunakan protokol
original STK500.

Anda dapat pula langsung bootloader dan program pada microcontroller melalui ICSP
(In-Circuit Serial Programming) menggunakan Arduino ISP atau yang semisalnya. Pada
ATmega16U2 (atau 8U2 di rev1 dan rev2 board) dapat melihat firmware source code.
Pada ATmega16U2/ 8U2 load-nya dengan DFU bootloader, yang dapat diaktifkan di
antaranya:

• On Rev1 boards : menyambung jumper solder di balik board dan kemudian mereset
8U2.
• On Rev2 or later boards : Resistor suntikan pada 8U2/16U2 HWB ke jalur ground,
hal ini dapat membuat mudah masuk ke mode DFU.
Automatic (Software) Reset Agak dibutuhkan tekan tombol reset sebelum upload, sebab
Arduino Uno dirancang reset dulu oleh software ketika terhubung dengan komputer. Satu
komponen jalur kontrol aliran (DTR) dari ATmega8U2/16U2 yang terhubung di reset
seperti halnya ATmega328 dengan 100 nanofarad kapasitor. Software upload kode ini
dapat mengupload secara mudah tanpa kehilangan waktu lama saat di tekan start
uploadnya.

19 | S i s t e m M i k r o p r o s e s o r
USB Overcurrent Protection Arduino Uno memiliki fungsi resettable polyfuse untuk
memproteksi dari port USB komputer akibat hubung singkat atau kelebihan arus. Jika arus
yang melebihi 500mA dari port USB maka fuse secara otomatis putus koneksi hingga
short atau overload dilepaskan dari board ini.
Karakteristik Fisik Panjang PCB Uno 2.7 dan lebar maksimal 2.1 inchi dengan konektor
USB dan power jack diluar hitungan. Lengkap dengan empat lubang skrup di setiap pojok
untuk dipasang. Catatan, jarak antara tiap pin 7 dan 8.
Input dan Output
Masing-masing dari 14 pin digital di Uno dapat digunakan sebagai input atau output,
dengan menggunakan fungsi pinMode(), digitalWrite(), dan digitalRead(), beroperasi
dengan daya 5 volt. Setiap pin dapat memberikan atau menerima maksimum 40 mA dan
memiliki internal pull-up resistor (secara default terputus) dari 20-50 kOhms. Selain itu,
beberapa pin memiliki fungsi-fungsi khusus:

• Serial: 0 (RX) dan 1 (TX). Digunakan untuk menerima (RX) dan memancarkan (TX)
serial data TTL (Transistor-Transistor Logic). Kedua pin ini dihubungkan ke pin-pin
yang sesuai dari chip Serial Atmega8U2 USB- keTTL.
• External Interrupts: 2 dan 3. Pin-pin ini dapat dikonfigurasikan untuk dipicu sebuah
interrupt (gangguan) pada sebuah nilai rendah, suatu kenaikan atau penurunan yang
besar, atau suatu perubahan nilai. Lihat fungsi attachInterrupt() untuk lebih jelasnya.
• PWM: 3, 5, 6, 9, 10, dan 11. Memberikan 8-bit PWM output dengan fungsi
analogWrite().
• SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Pin-pin ini mensupport komunikasi
SPI menggunakan SPI library.
• LED: 13. Ada sebuah LED yang terpasang, terhubung ke pin digital 13. Ketika pin
bernilai HIGH LED menyala, ketika pin bernilai LOW LED mati.
Arduino UNO mempunyai 6 input analog, diberi label A0 sampai A5, setiapnya
memberikan 10 bit resolusi (contohnya 1024 nilai yang berbeda). Secara default, 6 input
analog tersebut mengukur dari ground sampai tegangan 5 Volt, dengan itu mungkin untuk
mengganti batas atas dari rangenya dengan menggunakan pin AREF dan fungsi
analogReference(). Di sisi lain, beberapa pin mempunyai fungsi spesial: TWI: pin A4
atau SDA dan pin A5 atau SCL. Mensupport komunikasi TWI dengan menggunakan
Wire library. Adapun sepasang pin lainnya pada board Arduino Uno:

20 | S i s t e m M i k r o p r o s e s o r
• AREF. Referensi tegangan untuk input analog. Digunakan dengan analogReference().
• Reset. Membawa saluran ini LOW untuk mereset mikrokontroler. Secara khusus,
digunakan untuk menambahkan sebuah tombol reset untuk melindungi yang
memblock sesuatu pada board.
8. Software pada Arduino
Adapun dalam memprogram Arduino telah disedikan software editor tersendiri yang
mendukung, yaitu:
Arduino IDE
Arduino IDE (Integrated Development Environment) adalah software yang di gunakan
untuk memprogram di arduino, dengan kata lain Arduino IDE sebagai media untuk
memprogram board Arduino. Arduino IDE bisa di download secara gratis di website resmi
Arduino IDE.
Arduino IDE ini berguna sebagai text editor untuk membuat, mengedit, dan juga
mevalidasi kode program. bisa juga digunakan untuk meng-upload ke board Arduino.
Kode program yang digunakan pada Arduino disebut dengan istilah
Arduino “sketch” atau disebut juga source code arduino, dengan ekstensi file source code
.ino

Gambar 1.6 Arduino IDE


C. Latihan
Buatlah rangkuman cara penggunaan aplikasi Arduino IDE dan cara mengkoneksikannya dengan
Arduino Uno!!

21 | S i s t e m M i k r o p r o s e s o r
2 Komunikasi Serial

A. Tujuan Pembelajaran
a. Mahasiswa mampu mengetahui tentang apa itu komunikasi serial
b. Mahasiswa mampu mengetahui bentuk-bentuk komunikasi serial
c. Mahasiswa mampu mengetahui bentuk komunikasi data melalui RS232
d. Mahasiswa mampu memahami tentang library serial Arduino
e. Mahasiswa mampu memahami bentuk skematik rangkaian

B. Teori Dasar
1. Komunikasi Serial
Komunikasi serial ialah pengiriman data secara serial (data terkirim satu persatu secara
berurutan). Pada prinsipnya komunikasi serial merupakan komunikasi dimana pengiriman
data dilakukan per bit, sehingga lebih lambat dibandingkan komunikasi data dengan hanya
satu bit data yang dikirimkan melalui seuntai kabel pada suatu waktu tertentu. Komunikasi
serial dapat juga digunakan untuk menggantikan komunikasi parallel jalur data 8-bit
dengan baik. Komunikasi ini mempunyai suatu kelebihan yaitu hanya membutuhkan satu
jalur dan kabel yang sedikit dibandingkan dengan komunikasi paralel.

Gambar 2.1 Diagram Komunikasi Serial

Komunikasi serial terdiri dari dua macam, yaitu:


a. Synchronous Serial
Synchronous serial adalah komunikasi dimana hanya ada satu pihak (pengirim atau
enerima) yang menghasilkan clock dan mengirimkan clock tersebut bersama-sama
dengan data. Contoh penggunaan synchronous serial terdapat pada transmisi data
keyboard.

22 | S i s t e m M i k r o p r o s e s o
r
Gambar 2.2 Diagram Komunikasi Synchronous Serial
b. Asynchronous Serial
Asynchronous serial adalah komunikasi dimana kedua pihak (pengirim dan penerima)
masing-masing menghasilkan clock namun hanya data yang ditransmisikan, tanpa
clock. Agar data yang dikirim sama dengan data yang diterima, maka kedua frekuensi
clock harus sama dan harus terdapat sinkronisasi. Setelah adanya sinkronisasi, pengirim
akan mengirimkan datanya sesuai dengan frekuensi clock pengirim dan penerima akan
membaca data sesuai dengan frekuensi clock penerima. Contoh penggunaan
asynchronous serial adalah pada Universal Asynchronous Receiver Transmitter
(UART) yang digunakan pada serial port (COM) komputer.

Gambar 2.3 Diagram Komunikasi Asynchronous Serial


c. Data Transfer Rate
Kecepatan transfer data pada komunikasi data serial diukur dalam satuan BPS (bits
persecond). Sebutan terkenal lainnya adalah baud rate. Namun Baud dan bps tidak
serta merta adalah sama. Hal ini mengacu kepada fakta bahwa baud rate adalah
terminology modem dan diartikan sebagai perubahan signal dalam satuan bit signal
setiap detik. Sedang data transfer rate penamaannya mengacu pada jumlah bit dari byte
data yang ditransfer setiap detik.
Baud rate mengidikasikan seberapa cepat data dikirim melalui komunikasi serial. Baud
rate biasanya diberi satuan bit-per-second (bps), walaupun untuk kasus-kasus khusus
(misalnya untuk komunikasi paralel), nilai bps dapat berbeda dengan nilai baud rate.
Asumsi-asumsi saat ini kita fokus pada komunikasi serial, dimana setiap detak
menyatakan transisi satu bit keadaan. Jika hal ini dipenuhi, maka nilai baud rate akan
sama dengan nilai bit-per-second (bps). Bit per detik ini mengartikan bahwa berapa bit
data dapat ditransfer setiap detiknya. Jika kita mengiverskan nilai bps ini, kita dapat
23 | S i s t e m M i k r o p r o s e s o
r
memperoleh keterangan berapa lama waktu yang dibutuhkan untuk mengirim 1 bit.
Nilai baud rate dapat diatur dengan menggunakan standar kecepatan yang disediakan.
Contoh modem dengan transmisi adalah 9.600 bps. Data yang dikirim dengan
kecepatan 9600 bit/detik, maka setiap bitnya memerlukan waktu selama 1/9600 = 104
mikrodetik/bit. Satu paket data untuk satu karakter terdiri dari 10 bit (8-bit data, 1-bit
start dan 1-bit stop). Dengan demikian, pengiriman satu karakter (yang terdiri dari 10-
bit) akan membutuhkan waktu selama 10 x 104 mikrodetik =1.040 mikrodetik = 1,04
milidetik.
Pada system yang sangat mementingkan integritas data yang disimpan, maka
ditambahkanlah bit paritas kepada bingkai data tersebut. Maksudnya untuk setiap
karakter 8-bit kita masih menambahkan bit paritas disamping bit start dan bit stop.
Adapun bit paritas adalah bit yang menunjukkan bahwa data yang dimaksud adalah
memiliki jumlah bit 1s (high) ganjil atau genap. Bit paritas adalah bit di luar data yang
bersangkutan atau merupakan tambahan.

d. Komunikasi Data Melalui RS232


RS232 adalah suatu standar komunikasi serial transmisi data antar dua peralatan
elektonik. RS232 dibuat pada tahun 1962 oleh Electronic Industry Association and
Telecomunication Industry Association dan ada dua hal pokok yang diatur oleh RS232,
yaitu bentuk signal dan level tegangan yang dipakai. Selain digunakan pada peralatan
PLC, sebenarnya sistem RS232 ini sering berhubungan dengan kita pada kehidupan
sehari-hari, antara lain komunikasi PC komputer dengan mouse, keyboard, atau
scanner. Satu hal yang jelas adalah RS232 ini akan diaplikasikan pada semua sistem
peralatan yang berbasis komputer atau mikrokontroler.
Komunikasi data secara serial dilakukan dengan metode pengiriman data secara bit per
bit atau satu per satu secara berurutan dan itu berbeda dengan sistem paralel yang
mengirim data secara serentak. Kecepatan transfer data RS232 cukup rendah,
kecepatan maksimal hal 19200 bits/sekon. Pengiriman data bisa dilakukan secara satu
arah atau dua arah. Jika hanya membutuhkan kamunikasi satu arah mak cukup
menggunakan dua kabel yaitu kabel “Tx” sebagai pengirim data dan kabel “Rx”
sebagai penerim data. Sedangkan, untuk membuat sistem komunikasi dua arah maka
kabel yang dibutuhkan adalah 3 unit kabel, yaitu kabel Tx, Rx dan GND (ground).
Standar ini menggunakan beberapa piranti dalam implementasinya.
Paling umum yang dipakai adalah plug/konektor DB9 atau DB25.

24 | S i s t e m M i k r o p r o s e s o
r
e. Prinsip Kerja RS232
Komunikasi data secara serial dilakukan dengan metode untuk mengirimkan data dari
sebuah pengirim secara bit per bit dnegan kecepatan tertentu (bit per detik/bps), dan
pengiriman dilakukan melalui jalur satu kawat (Tx) dan diterima oleh sebuah penerima
(Rx) dalam waktu tertentu. Oleh karena komputer penerima dapat berfungsi sebagai
pengirim begitu juga pengirim dapat berfungsi sebagai penerima, maka komunikasi
dapat dilakukan dalam dua arah. Seperti yang ditunjukan pada gambar 2.1.
f. Konektor RS232
Konektor DB9 atau DB25 digunakan sebagai penghubung antar devais, RS232 dengan
konektor DB9 dipakai untuk mouse, modem dan lain-lain. Sedang konektor DB25
dipakai untuk joystick game. Serial port RS232 dengan konektor DB9 memiliki 9 buah
pin dan pada konektor DB25 memiliki pin 25 buah.
Sedangkan fungsi masing-masing pin pada konektor dapat dilihat pada tabel berikut:
Pin DB25 Pin DB9 Singkatan Keterangan

Pin 3 TD Transmit Data


Pin 2

Pin 2 RD Receive Data


Pin 3

Pin 7 RTS Request To Send


Pin 4

Pin 8 CTS Clear To Send


Pin 5

Pin 6 DSR Data Set Ready


Pin 6

Pin 5 SG Signal Ground


Pin 7

Pin 1 CD Carrier Detect


Pin 8
Data Terminal
Pin 4 DTR
Pin 20 Ready

Pin 9 RI Ring Indikator


Pin 22
Tabel 2.1 Fungsi pin konektor DB25 dan DB9

Fungsi pin berdasarkan tabel di atas dapat dijelaskan sebagai berikut:


a. Signal Ground (SG) berfungsi untuk memberikan masa (ground) pada setiap sinyal
secara bersama (common signal ground).

25 | S i s t e m M i k r o p r o s e s o
r
b. Transmit Data (TX) berfungsi sebagai saluran keluarnya data dari UART atau sebagai
pengirim data ke device secara serial.
c. Receiver Data (RX) berfungsi sebagai saluran masuknya data ke UART atau sebagai
penerima data dari device secara serial.
d. Data Terminal Ready (DTR) berfungsi sebagai pemberi informasi status ke device
terkoneksi bahwa UART telah siap. Saat terkoneksi dan berkomunikasi dengan device
siap untuk diakses oleh komputer melalui UART.
e. Data Set Ready (DSR) berfungsi untuk menerima informasi status device
bahwa device siap untuk diakses oleh komputer melalui UART.
f. Request To Send (RTS) berfungsi sebagai isyarat permintaan UART ke device
untuk memfasilitasi bahwa UART akan mengirimkan data ke device.
g. Clear to Send (CTS) berfungsi sebagai penerima jawaba atas pengiriman isyarat RTS
bila modem/ piranti telah menerima data.
h. Data Carrier Detect (DCD) berfungsi sebagai penerima isyarat agar komputer bersedia
menerima data pada waktu tertentu.
i. Ring Indikator (RI) berfungsi menerima isyarat dari modem bahwa ada device
(eksternal) yang membutuhkan koneksi dalam rangka pengiriman atau permintaan data.

Gambar 2.4 RS232 pin out (DB9)

26 | S i s t e m M i k r o p r o s e s o r
C. Rangkaian Percobaan
Berikut rangkaian percobaan sebagai berikut:

 Kode program pada aplikasi arduino.exe:

27 | S i s t e m M i k r o p r o s e s o r
D. Rangkaian Pelaksanaan

E. Langkah Kerja
 Hubungkan kabel Arduino dengan PCB ke port USB PC
 Buka Arduino IDE
 Ketikkan Code Program Percobaan
 Upload code program ke Arduino
 Amati hasil percobaannya
Catatan :
 Jangan menghubungkan VCC dan Ground
 Jangan tempatkan Board Arduino pada lempeng besi atau kondutor yang bisa membuat
hubung singkat board Arduino
 Pastikan rangkaiannya terhubung dengan baik sebelum menyolokkan kabel USB ke PC

F. Hasil Percobaan

28 | S i s t e m M i k r o p r o s e s o r
G. Kesimpulan

3
Analog Digital Converter
(ADC)
A. Tujuan Pembelajaran :
a. Mahasiswa mampu mengetahui tentang Analog Digital Converter (ADC)
b. Mahasiswa mampu mengetahui cara kerja dari Analog Digital Converter (ADC)
c. Mahasiswa mampu mempraktekkan Analog Digital Converter (ADC) pada
mikrokontroller.

B. Teori Dasar :
a. Konverter
Alat bantu digital yang paling penting untuk teknologi kontrol proses adalah yang
29 | S i s t e m M i k r o p r o s e s o r
menerjemahkan informasi digital ke bentuk analog dan juga sebaliknya. Sebagian besar
pengukuran variabel-variabel dinamik dilakukan oleh piranti ini yang menerjemahkan
informasi mengenai vaiabel ke bentuk sinyal listrik analog. Untuk menghubungkan sinyal
ini dengan sebuah komputer atau rangkaian logika digital, sangat perlu untuk terlebih
dahulu melakukan konversi analog ke digital (A/D). Hal-hal mengenai konversi ini harus
diketahui sehingga ada keunikan, hubungan khusus antara sinyal analog dan digital.
b. Konverter Analog Digital Converter (ADC)
Analog To Digital Converter (ADC) adalah pengubah input analog menjadi kode –
kode digital. ADC banyak digunakan sebagai pengatur proses industri, komunikasi digital
dan rangkaian pengukuran/pengujian. Umumnya ADC digunakan sebagai perantara antara
sensor yang kebanyakan analog dengan sistim komputer seperti sensor suhu, cahaya,
tekanan/berat, aliran dan sebagainya kemudian diukur dengan menggunakan sistim digital
(komputer).
ADC (Analog to Digital Converter) memiliki 2 karakter prinsip, yaitu kecepatan
sampling dan resolusi. Kecepatan sampling suatu ADC menyatakan seberapa sering
sinyal analog dikonversikan ke bentuk sinyal digital pada selang waktu tertentu. Kecepatan
sampling biasanya dinyatakan dalam sample per second (SPS).

30 | S i s t e m M i k r o p r o s e s o r
Gambar 4.1 ADC dengan kecepatan sampling rendah dan kecepatan sampling tinggi

Resolusi ADC menentukan ketelitian nilai hasil konversi ADC. Sebagai contoh: ADC 8
bit akan memiliki output 8 bit data digital, ini berarti sinyal input dapat dinyatakan dalam
255 (2n –1) nilai diskrit. ADC 12 bit memiliki 12 bit output data digital, ini berarti sinyal
input dapat dinyatakan dalam 4096 nilai diskrit. Dari contoh diatas ADC 12 bit akan
memberikan ketelitian nilai hasil konversi yang jauh lebih baik daripada ADC 8 bit.
Prinsip kerja ADC adalah mengkonversi sinyal analog ke dalam bentuk besaran yang
merupakan rasio perbandingan sinyal input dan tegangan referensi. Sebagai contoh, bila
tegangan referensi 5 volt, tegangan input 3 volt, rasio input terhadap referensi adalah 60%.
Jadi, jika menggunakan ADC 8 bit dengan skala maksimum 255, akan didapatkan sinyal
digital sebesar 60% x 255 = 153 (bentuk decimal) atau 10011001 (bentuk biner).
signal = (sample/max_value) * reference_voltage
= (153/255) * 5
= 3 Volts
c. Komparator
Bentuk komunikasi yang paling mendasar antara wujud digital dan analog adalah
piranti (biasanya berupa IC) disebut komparator. Piranti ini, yang diperlihatkan secara
skematik dalam Gambar 4.2, secara sederhana membandingkan dua tegangan pada kedua
terminal inputnya. Bergantung pada tegangan mana yang lebih besar, outputnya akan
berupa sinyal digital 1 (high) atau 0 (low). Komparator ini digunakan secara luas untuk
sinyal alarm ke komputer atau sistem pemroses digital. Elemen ini juga merupakan satu
bagian dengan konverter analog ke digital dan digital ke analog yang akan didiskusikan
nanti.

31 | S i s t e m M i k r o p r o s e s o r
Gambar 4.2 Sebuah komparator merubah keadaan logika output sesuai fungsi tegangan input analog
d. ADC Simultan
ADC Simultan atau biasa disebut flash converter atau parallel converter. Input analog Vi
yang akan diubah ke bentuk digital diberikan secara simultan pada sisi
+ pada komparator tersebut, dan input pada sisi – tergantung pada ukuran bit converter.
Ketika Vi melebihi tegangan input – dari suatu komparator, maka output

komparator adalah high, sebaliknya akan memberikan output low.


Gambar 4.3 ADC Simultan
Bila Vref diset pada nilai 5 Volt, maka dari gambar 3 dapat didapatkan : V(-)
untuk C7 = Vref * (13/14) = 4,64
V(-) untuk C6 = Vref * (11/14) = 3,93 V(-)
untuk C5 = Vref * (9/14) = 3,21 V(-) untuk C4
= Vref * (7/14) = 2,5 V(-) untuk C3 = Vref *
(5/14) = 1,78 V(-) untuk C2 = Vref * (3/14) =
1,07

32 | S i s t e m M i k r o p r o s e s o r
V(-) untuk C1 = Vref * (1/14) = 0,36 Misal:
Vin diberi sinyal analog 3 Volt, maka output dari C7=0, C6=0, C5=0, C4=1,
C3=1, C2=1, C1=1, sehingga didapatkan output ADC yaitu 100 biner.

C. Rangkaian Percobaan
Berikut rangkaian percobaan sebagai berikut:

33 | S i s t e m M i k r o p r o s e s o r
D. Rangkaian Pelaksanaan

E. Alat dan Bahan


Berikut alat dan bahan antara lain:
• Alat
- Laptop / PC 1 Buah
• Bahan
- Arduino Uno R3 1 Buah
- Kabel Jumber Secukupnya
- Breadboard 1 buah
- Photensiometer 10K 1 buah
- LCD 16x2 I2C 1 buah
- LED 1 buah
- LDR 1 buah
- Resistor 1 buah
- PortUSB 1 buah

F. Langkah Kerja
 Siapkan alat dan bahan.
 Buatlah rangkaian seperti gambar rangkaian percobaan yang telah kalian buat.
 Setelah rangkaian selesai dibuat, kemudian buat program pada aplikasi arduino.exe
seperti dibawah ini.

34 | S i s t e m M i k r o p r o s e s o r
a. Percobaan Komunikasi Serial

 Kode program pada aplikasi arduino.exe:

#int analogValue = 0;

void setup() {
Serial.begin(9600);
pinMode(12, OUTPUT;
}

void loop() {
analogValue = analogRead (0);

Serial.println (analogvalue);
if (analogValue < 250) {
digitalwrite (12, HIGH);
} else {
Digitalwrite (12, LOW) ;
}
// serial.println(analogvalue, DEC) ;
// serial.println(analogvalue, HEX) ;
// serial.println(analogvalue, OCT) ;
// serial.println(analogvalue, BIN) ;

35 | S i s t e m M i k r o p r o s e s o r
delay (10);
}

b. Percobaan Komunikasi Serial menggunakan LED dan LDR

 Kode program pada aplikasi arduino.exe:

AnalogValue=0;

Void setup() { serial begin(9600); pinMode(12, OUTPUT);


}

Void loop(){
Analogvalue = analogRead(0);

Serial.println(analogValue); if (analogValue>250){ digitalWrite(12,1);


}else{ digitalWrite(12,0);
}
// Serial.println(analogValue, DEC); //
// Serial.println(analogValue, HEX);

36 | S i s t e m M i k r o p r o s e s o r
// Serial.println(analogValue, OCT);
// Serial.println(analogValue, BIN);

Delay(10);
}

d. Percobaan mengirim data serial menggunakan perintah Serial.write dan perintah


Serial.print

 Kode program pada aplikasi arduino.exe:

int a = 49; void setup () {


// put your setup code here, to run once: Serial.begin(9600);
}

void loop () { serial.write (a) ; serial.print(“ “); serial.println(a); a++;


if (a>123) { a = 49;

37 | S i s t e m M i k r o p r o s e s o r
label: goto label;
}

Delay (500) ;
}

e. Percobaan Baca Data Serial

 Kode program pada aplikasi arduino.exe:


void setup () {
// put your setup code here, to run once: serial.begin (9600) ;
}

void loop () {
// put your main code here, to run repeatedly:
// perintah untuk mengirimkan karakter a secara terus menerus if (serial.available ()>0) {
char a = serial.read () ;
serial.print (“Anda mengrimkan karakter = “) ; serial.println (a) ;
}
}

38 | S i s t e m M i k r o p r o s e s o r
f. Percobaan Mengirim Data Simbol dan Kode Asci

 Kode program pada aplikasi arduino.exe:


void setup() {
//lnitialize serial and wait for port to open:
serial.begin (9600):
}
int thisByte = 33;
// anda juga dapat menuliskan dalam karakter tunggal seperti “!” yang memiliki arti sama deng
// int thisByte = ‘!’ ; void loop () {
serial.write (thisByte) :
serial.print (“, dec: “) ;
// mengirim nilai string sebagai karakter decimal ASCII (basis 10). Serial.print (thisByte) ;
Serial.print (“, hex: “) ; Serial.print (thisByte, HEX) ; Serial.print (“, bin: “) ; Serial.print (thisBy
If (thisByte == 126) { // you could also use if (thisByte == ‘~’) { while (true) {

39 | S i s t e m M i k r o p r o s e s o r
continue;
}
}
thisByte++ ;
}

g. Percobaan mengirim Data Serial dengan Header

a. Kode program pada aplikasi arduino.exe:


Void setup(){
// put your setup code here, to run once: Serial.begin(9600);
}

Void loop() {
// put your main code here, to run repeatedly:
Int dataValue1 =100;int dataValue2 =80; char header1 =’%’; char header2 =
‘!’; Seriall.print(header1); Seriall.print(dataValue1); Seriall.print(header2); Seriall.print(dataV

40 | S i s t e m M i k r o p r o s e s o r
Seriall.println(“ “); delay(1);
}

Note :
• Jangan menghubungkan VCC dan Ground
• Jangan menempatkan Board Arduino pada lempeng besi atau konduktor yang
bisa membuat hubung singkat board Arduino
• Hubungkan port arduino PC/Laptop, dan sesuaikan portnya.
• Compile program untuk mengecek kesalahan atau error, lalu upload.
• Analisis rangkaian dan buat kesimpulan percobaan ini.

G. Hasil Percobaan

41 | S i s t e m M i k r o p r o s e s o r
H. Analisis Rangkaian

I. Kesimpulan

42 | S i s t e m M i k r o p r o s e s o r
4
Pulse Wide
Modulation (PWM)

A. Tujuan Pembelajaran
a. Mahasiswa mampu mengetahui tentang Pulse Wide Modulation (PWM)
b. Mahasiswa mampu mengetahui siklus kerja PWM
c. Mahasiswa mampu mengetahui penggunaan PWM dalam kendali motor DC

B. Teori Dasar :
1. Pengertian Pulse Wide Mudulation (PWM)
PWM adalah kepanjangan dari Pulse Width Modulation atau dalam bahasa Indonesia
dapat diterjemahkan menjadi Modulasi Lebar Pulsa. Jadi pada dasarnya, PWM adalah
suatu teknik modulasi yang mengubah lebar pulsa (pulse width) dengan nilai frekuensi dan
amplitudo yang tetap. PWM dapat dianggap sebagai kebalikan dari ADC (Analog to
Digital Converter) yang mengkonversi sinyal Analog ke Digital, PWM atau Pulse Width
Modulation ini digunakan menghasilkan sinyal analog dari perangkat Digital (contohnya
dari Mikrokontroller).
Untuk lebih memahami apa yang dimaksud dengan PWM atau Pulse Width Modulation
ini. Kita coba melihat contoh dari sinyal yang dihasilkan oleh Mikrokontroler atau IC 555.
Sinyal yang dihasilkan oleh Mikrokontrol atau IC555 ini adalah sinyal pulsa yang
umumnya berbentuk gelombang segiempat. Gelombang yang dihasilkan ini akan tinggi
atau rendah pada waktu tertentu. Misalnya gelombang tinggi di 5V dan paling rendah di
0V. Durasi atau lamanya waktu dimana sinyal tetap berada di posisi tinggi disebut dengan
“ON Time” atau “Waktu ON” sedangkan sinyal tetap berada di posisi rendah atau 0V
disebut dengan “OFF Time” atau “Waktu OFF”. Untuk sinyal PWM, kita perlu melihat
dua parameter penting yang terkait dengannya yaitu Siklus Kerja PWM (PWM Duty
Cycle) dan Frekuensi PWM (PWM Frequency).
2. Siklus Kerja PWM
Seperti yang disebutkan diatas, Sinyal PWM akan tetap ON untuk waktu tertentu dan
kemudian terhenti atau OFF selama sisa periodenya. Yang membuat PWM ini istimewa
dan lebih bermanfaat adalah kita dapat menetapkan berapa lama kondisi ON harus
bertahan dengan cara mengendalikan siklus kerja atau Duty Cycle PWM.

43 | S i s t e m M i k r o p r o s e s o r
Persentase waktu di mana sinyal PWM tetap pada kondisi TINGGI (ON Time) disebut
dengan “siklus kerja” atau “Duty Cycle”. Kondisi yang sinyalnya selalu dalam kondisi ON
disebut sebagai 100% Duty Cycle (Siklus Kerja 100%), sedangkan kondisi yang sinyalnya
selalu dalam kondisi OFF (mati) disebut dengan 0% Duty Cycle (Siklus Kerja 0%).
Rumus untuk menghitung siklus kerja atau duty cycle dapat ditunjukkan seperti persamaan
di bawah ini.

Duty Cycle = tON / (tON + tOFF) Atau

Duty Cycle = tON / ttotal

Dimana :

tON = Waktu ON atau Waktu dimana tegangan keluaran berada pada posisi tinggi (high atau
1)
tOFF = Waktu OFF atau Waktu dimana tegangan keluaran berada pada posisi rendah
(low atau 0)
ttotal = Waktu satu siklus atau penjumlahan antara tON dengan tOFF atau disebut juga
dengan “periode satu gelombang”
Siklus Kerja = Waktu ON / (Waktu ON + Waktu OFF)

Gambar berikut ini mewakili sinyal PWM dengan siklus kerja 60%. Seperti yang kita
lihat, dengan mempertimbangkan seluruh periode waktu (ON time + OFF time), sinyal
PWM hanya ON untuk 60% dari suatu periode waktu.

Gambar 4.1 Sinyal Pulse Wide Modulation (PWM)

44 | S i s t e m M i k r o p r o s e s o r
3. Motor Arus Searah (Motor DC)
Motor DC adalah motor listrik yang bergerak pada direct current (DC) electricity
atau listrik-arus-searah Jenis motor DC dapat dibagi menjadi dua: 1. Motor DC
Bersikat atau Brushed DC Motor, 2. Motor DC Tanpa-sikat atau Brushless DC Motor.
Persamaan dan perbedaan jenis Motor DC:
• Persamaan dari kedua jenis motor DC tersebut adalah memiliki dua bagian utama:
Rotor yaitu bagian yang berputar, dan stator yang diam.
• Sedangkan perbedaan-nya adalah, pada jenis motor DC bersikat rotor-nya bersifat
elektro-magnetik dan bagian stator-nya bersifat magnet-alami, sedangkan pada
motor DC tanpa sikat hal tersebut berkebalikan.
Adapun bagian-bagian dari Motor DC, yaitu:

Gambar 4.2 bagian-bagian Motor DC

• Stator merupakan tempat kumparan medan (field winding)


• rotor merupakan tempat rangkaian jangkar (armature winding)

45 | S i s t e m M i k r o p r o s e s o r
C. Rangkaian Percobaan

Berikut rangkaian percobaan sebagai berikut:

D. Rangkaian Pelaksanaan

46 | S i s t e m M i k r o p r o s e s o r
E. Alat dan Bahan
Alat dan bahan dalam praktikum pulse wide Modulation antara lain:
• Alat:
- Komputer/PC
- Arduino IDE
• Bahan:

- Arduino Uno R3 1 Buah


- Breadboard 1 buah
- Kabel Jumper secukupnya
- Transistor BC557 2 buah
- Transistor BC547 2 buah
- Resistor 100 Ohm 5 buah
- Dioda 1N4002 4 buah
- Button 1 buah

F. Langkah Kerja
• Siapkan alat dan bahan.
• Buatlah rangkaian seperti gambar rangkaian percobaan yang telah kalian buat.
• Setelah rangkaian selesai dibuat, kemudian buat program pada aplikasi arduino.exe
seperti dibawah ini.
#define dir1 7
#define dir2 8 int
in1 = 2;

void setup() {
Serial.begin(9600);
pinMode(dir1, OUTPUT);
pinMode(dir2, OUTPUT);
pinMode(in1, INPUT);
}
void loop() {
int nilai = digitalRead(in1) == HIGH) {
digitalWrite(dir1, HIGH);
digitalWrite(dir2, LOW);
} else {
digitalWrite(dir1, LOW);
digitalWrite(dir2, HIGH);
}
}

47 | S i s t e m M i k r o p r o s e s o r
• Hubungkan port arduino PC/Laptop, dan sesuaikan portnya.
• Compile program untuk mengecek kesalahan atau error, lalu upload.
• Analisis rangkaian dan buat kesimpulan percobaan ini.

G. Hasil Percobaan

H. Analisis Percobaan

48 | S i s t e m M i k r o p r o s e s o r
I. Kesimpulan

49 | S i s t e m M i k r o p r o s e s o r
5 Inter Integrated Circuit
(i2C)
A. Tujuan Pembelajaran
a. Mahasiswa mampu mengetahui bagaimana komunikasi i2c bekerja
b. Mahasiswa mampu mengetahui Protokol i2c
c. Mahasiswa mampu memahami tentang library serial Arduino
d. Mahasiswa mampu memahami bentuk skematik rangkaian

B. Teori Dasar
1. Pengertian Inter Integrated Circuit ( I2C )
Bus komunikasi I2C sangat populer dan digunakan secara luas oleh banyak perangkat
elektronik karena dapat dengan mudah diimplementasikan dalam banyak desain elektronik
yang memerlukan komunikasi antara perangkat master dan beberapa slave atau bahkan
beberapa perangkat master. Implementasi yang mudah dilengkapi dengan fakta bahwa
hanya dua kabel yang diperlukan untuk komunikasi antara hingga hampir 128 (112)
perangkat saat menggunakan pengalamatan 7 bit dan hingga hampir 1024 (1008) perangkat
saat menggunakan pengalamatan 10 bit.

2. Siklus Kerja I2C


setiap perangkat memiliki ID preset atau alamat perangkat yang unik sehingga master
dapat memilih dengan perangkat mana yang akan berkomunikasi. Dua kabel, atau garis
disebut Serial Clock (atau SCL) dan Serial Data (atau SDA). Garis SCL adalah sinyal clock
yang menyinkronkan transfer data antara perangkat di bus I2C dan itu dihasilkan oleh
perangkat master. Jalur lainnya adalah jalur SDA yang membawa data.
Kedua jalur tersebut adalah “open-drain” yang berarti resistor pull-up harus dipasang pada
keduanya sehingga jalur menjadi tinggi karena perangkat pada bus I2C aktif rendah. Nilai
yang umum digunakan untuk resistor adalah dari 2K untuk kecepatan yang lebih tinggi
pada sekitar 400 kbps, hingga 10K untuk kecepatan yang lebih rendah pada sekitar 100
kbps.

50 | S i s t e m M i k r o p r o s e s o r
Gambar 5.1 Komunikasi Inter Integrated Circuit ( I2C )

3. Protokol I2C
Sinyal data ditransfer dalam urutan 8 bit. Jadi setelah kondisi start khusus terjadi,
munculah urutan 8 bit pertama yang menunjukkan alamat dari slave yang menjadi tujuan
pengiriman data. Setelah setiap urutan 8 bit mengikuti sedikit yang disebut
Acknowledge. Setelah bit Acknowledge pertama dalam banyak kasus muncul urutan
pengalamatan lain tetapi kali ini untuk register internal perangkat slave. Tepat setelah
urutan pengalamatan mengikuti urutan data sebanyak-banyaknya sampai data benar-benar
terkirim dan diakhiri dengan kondisi stop khusus.

Gambar 5.2 Sinyal data ditransfer dalam urutan 8 bit


Kondisi awal terjadi ketika jalur data turun rendah sementara jalur jam masih
tinggi. Setelah ini jam dimulai dan setiap bit data ditransfer selama setiap pulsa
jam.Perangkat pengalamatan urutan bintang dengan bit paling signifikan (MSB) pertama
dan diakhiri dengan bit paling tidak signifikan (LSB) dan itu sebenarnya terdiri dari 7 bit
karena bit ke-8 digunakan untuk menunjukkan apakah master akan menulis ke budak (logika
rendah) atau membaca darinya (logika tinggi).

Gambar 5.3 Jalur data logika rendah I2C


Bit berikutnya AKC/ NACK digunakan oleh perangkat slave untuk menunjukkan
apakah ia telah berhasil menerima urutan bit sebelumnya. Jadi pada saat ini perangkat
master menyerahkan kendali jalur SDA ke perangkat slave dan jika perangkat slave telah
berhasil menerima urutan sebelumnya maka akan menarik jalur SDA ke bawah ke kondisi
yang disebut Acknowledge. Jika slave tidak menarik garis SDA ke bawah, kondisi ini
disebut Not Acknowledge, artinya tidak berhasil menerima urutan sebelumnya yang dapat
disebabkan oleh beberapa hal. Misalnya, budak mungkin sibuk, mungkin tidak memahami
data atau perintah yang diterima, tidak dapat menerima data lagi dan sebagainya. Dalam

51 | S i s t e m M i k r o p r o s e s o r
kasus seperti itu, perangkat master memutuskan bagaimana ia akan melanjutkan.

Gambar 5.4 Jalur data logika tinggi I2C


Berikutnya adalah pengalamatan register internal. Register internal adalah lokasi dalam
memori slave yang berisi berbagai informasi atau data. Misalnya Accelerometer ADX345
memiliki alamat perangkat yang unik dan tambahan alamat register internal untuk sumbu
X, Y dan Z. Jadi jika kita ingin membaca data sumbu X, pertama kita perlu mengirim
alamat perangkat dan kemudian alamat register internal khusus untuk sumbu X. Alamat ini
dapat ditemukan dari datasheet sensor.

C. Rangkaian percobaan

D. Rangkaian Pelaksanaan

52 | S i s t e m M i k r o p r o s e s o r
E. Alat dan bahan
Alat dan bahan antara lain:
• Alat:
- Komputer/PC
- Arduino IDE
• Bahan:
- Arduino Uno R3 1 Buah
- Breadboard 1 buah
- Kabel Jumper secukupnya
- Transistor BC557 2 buah
- Transistor BC547 2 buah
- Resistor 100 Ohm 5 buah
- Dioda 1N4002 4 buah
- Button 1 buah

F. Langkah Kerja
• Siapkan alat dan bahan.
• Buatlah rangkaian seperti gambar rangkaian percobaan yang telah kalian buat.
• Setelah rangkaian selesai dibuat, kemudian buat program pada aplikasi arduino.exe
seperti dibawah ini.

53 | S i s t e m M i k r o p r o s e s o r
#include <Wire.h>

int ADXLAddress = 0x53; // Device address in which is also included the


8th bit for selecting the mode, read in this case.
#define X_Axis_Register_DATAX0 0x32 // Hexadecima address for
the DATAX0 internal register.
#define X_Axis_Register_DATAX1 0x33 // Hexadecima address for
the DATAX1 internal register.
#define Power_Register 0x2D // Power Control Register
int X0,X1,X_out;
void setup() {
Wire.begin(); // Initiate the Wire library
Serial.begin(9600);
delay(100);
// Enable measurement
Wire.beginTransmission(ADXLAddress);
Wire.write(Power_Register);
// Bit D3 High for measuring enable (0000 1000)
Wire.write(8);
Wire.endTransmission();
}

void loop() {
Wire.beginTransmission(ADXLAddress); // Begin transmission to the Sensor
//Ask the particular registers for data
Wire.write(X_Axis_Register_DATAX0);
Wire.write(X_Axis_Register_DATAX1);

Wire.endTransmission(); // Ends the transmission and transmits the data from


the two registers
Wire.requestFrom(ADXLAddress,2); // Request the transmitted two bytes from
the two registers

if(Wire.available()<=2) { //
X0 = Wire.read(); // Reads the data from the register
X1 = Wire.read();
}
Serial.print("X0= ");
Serial.print(X0);
Serial.print(" X1= ");
Serial.println(X1);
}

54 | S i s t e m M i k r o p r o s e s o r
G. Hasil Percobaan

H. Analisis Percobaan

55 | S i s t e m M i k r o p r o s e s o r
I. Kesimpulan

56 | S i s t e m M i k r o p r o s e s o r
6 Serial Peripheral Interface
(SPI)
A. Tujuan Pembelajaran
a. Mahasiswa mampu mengetahui apa itu SPI
b. Mahasiswa mampu mengetahui siklus kerja SPI
c. Mahasiswa mampu memahami tentang library serial Arduino
d. Mahasiswa mampu memahami bentuk skematik rangkaian

B. Teori Dasar
1. Pengertian Serial Peripheral Interface (SPI)
SPI (Serial Peripheral Interface) adalah protokol komunikasi serial. Antarmuka SPI
ditemukan oleh Motorola pada tahun 1970. SPI memiliki koneksi full-duplex, yang berarti bahwa data
dikirim dan diterima secara bersamaan. Artinya master bisa mengirim data ke slave dan slave bisa
mengirim data ke master secara bersamaan. SPI adalah komunikasi serial sinkron berarti jam diperlukan
untuk tujuan komunikasi. SPI memiliki komunikasi master/Slave dengan menggunakan empat jalur.
SPI hanya dapat memiliki satu master dan dapat memiliki banyak budak. Master biasanya
mikrokontroler dan slave bisa berupa mikrokontroler, sensor, ADC, DAC, LCD dll.
Di bawah ini adalah representasi diagram blok SPI Master dengan Single Slave:

Gambar 6.1 Representasi diagram blok SPI Master

57 | S i s t e m M i k r o p r o s e s o r
SPI memiliki empat baris yaitu:
a. MISO ( Master in Slave Out)- jalur Slave untuk mengirim data ke master.
b. MOSI ( Master Out Slave In ) – jalur Master untuk mengirim data ke peripheral.
c. SCK (Serial Clock) – Pulsa clock yang menyinkronkkan transmisi data yang dihasilkan oleh
master.
d. SS (Slave Select) – Master dapat menggunakan pin ini untuk mengaktifkan dan menonaktifkan
perangkat tertentu.

2. SPI Master dengan Multiple Slaves

Gambar 6.2 Master dengan Multiple Slaves


Untuk memulai komunikasi antara master dan slave, perlu menyetel pin Slave Select (SS)
perangkat yang diperlukan ke LOW, sehingga dapat berkomunikasi dengan master. Ketika tinggi, ia
mengabaikan tuannya. Beberapa perangkat SPI yang berbagai garis master MISO, MOSI, dan CLK
yang sama. Seperti yang pada gambar diatas ada empat budak dimana SCLK, MISO, MOSI umumnya
terhubung ke master dan SS masing-masing slave terhubung secara terpisah ke masing-masing pin SS
(SS1, SS2, dan SS3) master. Dengan menyetel pin SS yang diperlukan LOW, master dapat
berkomunikasi dengan slave.

 Pin SPI di Arduino UNO


Gambar dibawah ini menunjukkan pin SPI yang ada pasa Arduino UNO ( dalam kotak merah).

Gambar 6.3 Pin SPI


58 | S i s t e m M i k r o p r o s e s o r
Jalur SPI Pin di Arduino
MOSI 11 or ICSP-4
MISO 12 or ICSP-1
SCK 13 or ICSP-3
SS 10
3. Cara menggunakan Protokol SPI di Arduino
Sebelum memulai pemrograman untuk komunikasi SPI antara dua Arduino. Kita perlu mempelajari
library Arduino SPI yang digunakan pada Arduino IDE. The library <SPI.h> disertakan dalam
program untuk menggunakan fungsi berikut untuk komunikasi SPI.
a. SPI.begin()
Penggunaan: Untuk menginisialisasi bus SPI dengan mengatur SCK, MOSI, dan SS ke output,
menarik SCK dan MOSI rendah, dan SS tinggi.
b. SPI.setClockDivider(divider)
Penggunaan: Untuk mengatur pembagian jam SPI relative terhadap jam sistem. Pembagian yang
tersedia adalah 2,4,8,16,32,64 atau 128.
Jangka pembagian garis:
SPI_CLOCK_DIV2
SPI_CLOCK_DIV4
SPI_CLOCK_DIV8
SPI_CLOCK_DIV16
SPI_CLOCK_DIV32
SPI_CLOCK_DIV64
SPI_CLOCK_DIV128
c. SPI.attachInterrupt(handler)
Penggunaan: Fungsi ini dipanggil Ketika perangkat slave menerima data dari master.
d. SPI.transfer(val)
Penggunaan: Fungsi ini digunakan untuk mengirim dan menerima data secara simultan antara
master dan slave.

59 | S i s t e m M i k r o p r o s e s o r
C. Rangkaian Percobaan

D. Rangkaian Percobaan

60 | S i s t e m M i k r o p r o s e s o r
E. Alat dan bahan
Berikut alat dan bahan antara lain:
• Alat
- Laptop / PC 1 Buah
• Bahan
- Arduino Uno R3 2 Buah
- Kabel Jumber Secukupnya
- Breadboard 1 buah
- Push Button 2 buah
- Resistor 10K 2 buah
- LED 1 buah
- Resistor 2.2K 2 buah
- Connecting Wires 1 buah

F. Langkah Kerja
 Siapkan alat dan bahan.
 Buatlah rangkaian seperti gambar rangkaian percobaan yang telah kalian buat.
 Setelah rangkaian selesai dibuat, kemudian buat program pada aplikasi arduino.exe seperti
dibawah ini.

61 | S i s t e m M i k r o p r o s e s o r
7
Esp32

A. Tujuan Pembelajaran
a. Mahasiswa mampu menggunakan ESP32 untuk membangun aplikasi berbasi CLOUD
b. Mahasiswa dapat membangun weather stasiun berbasis ESP32
c. Mahasiswa dapar menggunakan esp32 untuk koneksi dengan MySQL
d. Mahasiswa dapat menggunakan esp32 untuk koneksi dengan PHP email
e. Mahsiswa dapat membuat aplikasi kontrol dan monitoring real time menggunakan koneksi
database real time Firebase
f. Mahasiswa dapat membangun koneksi database berbasis firebase web APP

B. Teori Dasar
ESP32 adalah serangkaian mikrokontroler System on a Chip (SoC) berbiaya rendah dan
berdaya rendah yang dikembangkan oleh Espressif yang mencangkup kemampuan nirkabel
WI-FI dan Bluetooth serta prosesor dual-core. Jika terbiasa ESP8266, ESP32 adalah
penerusnya yang sarat dengan banyak fitur baru. ESP32 adalah papan pengembangan yang
menggabungkan kemampuan nirkabel Wi-Fi dan Bluetooth, dan merupakan inti
ganda. Mendukung berbagai macam periferal seperti: sentuh kapasitif, ADC, DAC, I2C, SPI,
UART, I2S, PWM dan banyak lagi.

Gambar
Papan Pengembang ESP32 digunakan untuk merujuk pada papan pengembangan ESP32.
Dengan menggunakan chip telanjang ESP32 tidaklah mudah atau praktis, terutama saat belajar,
menguji, dan membuat prototipe. Papan pengembangan ini dilengkapi dengan semua sirkuit
62 | S i s t e m M i k r o p r o s e s o r
yang diperlukan untuk memberi daya dan memprogram chip, menghubungkan ke komputer,
pin untuk menghubungkan peripheral, LED daya dan control bawaan, antenna untuk sinyal wi-
fi, dan fitur berguna lainnya.
1. Cara memilih papan pengembangan ESP32
Setelah anda memulai mencari papan ESP32 online, anda akan menemukan berbagai
macam papan dari vendor yang berbeda. Meskipun semuanya bekerja dengan cara yang sama,
beberapa papan mungkin lebih cocok untuk beberapa proyek dari pada yang lain. Saat mencari
papan pengembangan ESP32, ada beberapa aspek yang perlu diperhitungkan:
 Antarmuka USB-ke-UART dan rangkaian pengatur tegangan
Sebagaian papan pengembangan berfitur lengkap memiliki dua fitur ini. Penting untuk
menghubungkan ESP32 dengan mudah ke komputer anda untuk mengunggah dan
menerapkan daya.
 Tombol BOOT dan RESET/EN
Untuk menempatkan board dalam mode flashing atau mengatur ulang (restart) board.
Beberapa papan tidak memiliki tombol BOOT. Biasanya, papan ini masuk ke mode
berkedip secara otomatis.
 Konfigurasi pin dan jumlah pin
Untuk menggunakan ESP32 dengan benar dalam proyek, anda harus memiliki akses ke
papan pinout (seperti peta yang menunjukkan pin mana yang sesuai dengan GPIO mana
dan fitur-fiturnya). Jadi pastikan untuk memiliki akses pinout papan yang di dapatkan. Jika
tidak, anda mungkin salah menggunakan ESP32.
 Konektor antenna
Kebanyakan papan datang dengan antenna onboard untuk sinyal WI-FI. Beberapa papan
dilengkapi dengan konektor antenna untuk menyambungkan antena eskternal secara
opsional. Menambahkan antenna eksternal meningkatkan jangkauan WI-FI.
 Konektor baterai
Jika ingin memberi daya pada ESP32 menggunkan baterai, ada papan pengembangan yang
dilengkapi dengan konektor untuk baterai L.

C. Alat dan Bahan


Berikut alat dan bahan untuk membuat Weather Station dengan modul
ESP32/ESP8266 (Database MySQL dan PHP) :
1. ESP32 atau ESP8266
2. Software Arduino IDE
3. Server hosting dan nama domain
4. Skrip PHP untuk memasukkan data ke MySQL dan menampilkannya di halaman
web
5. Database MySQL untuk menyimpan bacaan
6. Sensor BME280

D. Prosedur Percobaan
1. Unduh Kode Sumber
Untuk proyek ini, Anda memerlukan file-file ini:
a. Kueri SQL untuk membuat tabel Anda:
63 | S i s t e m M i k r o p r o s e s o r
https://github.com/RuiSantosdotme/Cloud-Weather-Station-ESP32-
ESP8266/blob/master/code/SensorData_Table.sql

b. Masukkan dan akses bacaan database:


https://github.com/RuiSantosdotme/Cloud-Weather-Station-ESP32-
ESP8266/blob/master/code/esp-database.php

c. Menangani permintaan Posting HTTP:


https://github.com/RuiSantosdotme/Cloud-Weather-Station-ESP32-
ESP8266/blob/master/code/esp-post-data.php

d. File CSS untuk menata halaman web Anda:


https://github.com/RuiSantosdotme/Cloud-Weather-Station-ESP32-
ESP8266/blob/master/code/esp-style.css

e. Tampilkan pembacaan sensor Anda:


https://github.com/RuiSantosdotme/Cloud-Weather-Station-ESP32-
ESP8266/blob/master/code/esp-weather-station.php

f. Sketsa Arduino untuk ESP32/ESP8266:


https://github.com/RuiSantosdotme/Cloud-Weather-Station-ESP32-ESP8266/blob/master/
code/ESP_HTTP_POST_MySQL.ino

2. Hosting Aplikasi PHP dan Database MySQL Anda


Tujuan dari proyek ini adalah untuk memiliki nama domain dan akun hosting Anda
sendiri yang memungkinkan Anda untuk menyimpan pembacaan sensor dari ESP32
atau ESP8266. Anda dapat memvisualisasikan bacaan dari mana saja di dunia dengan
mengakses domain server Anda sendiri.
Berikut adalah ikhtisar tingkat tinggi tentang cara kerja proyek:

64 | S i s t e m M i k r o p r o s e s o r
a. Anda memiliki ESP32 atau ESP8266 yang mengirimkan pembacaan sensor ke server
Anda sendiri. Untuk ini, Anda memiliki papan Anda terhubung ke router Anda;
b. Di server Anda, ada skrip php yang memungkinkan Anda menyimpan bacaan
Anda di database MySQL;
c. Kemudian, skrip php lain akan menampilkan halaman web dengan pengukur,
tabel, dan semua informasi lainnya;
d. Terakhir, Anda dapat memvisualisasikan bacaan dari mana saja di dunia dengan
mengakses nama domain Anda sendiri.

3. Layanan Hosting

Saya sarankan menggunakan salah satu layanan hosting berikut yang dapat menangani
semua persyaratan proyek:
a. Bluehost (mudah digunakan dengan cPanel) : nama domain gratis saat Anda
mendaftar untuk paket 3 tahun. Saya sarankan memilih opsi situs web tak terbatas;
b. Digital Ocean : Server Linux yang Anda kelola melalui baris perintah. Saya hanya
merekomendasikan opsi ini untuk pengguna tingkat lanjut.
Kedua layanan tersebut adalah yang saya gunakan dan rekomendasikan secara pribadi,
tetapi Anda dapat menggunakan layanan hosting lainnya. Setiap layanan hosting yang
menawarkan PHP dan MySQL akan bekerja dengan tutorial ini. Jika Anda tidak
memiliki akun hosting, saya sarankan untuk mendaftar ke Bluehost .
Saat membeli akun hosting, Anda juga harus membeli nama domain. Inilah yang
membuat proyek ini menarik: Anda dapat membuka nama domain Anda
(http://example.com) dan melihat pembacaan ESP Anda.

4. Mempersiapkan Database MySQL Anda

Setelah mendaftar untuk akun hosting dan menyiapkan nama domain , Anda dapat
masuk ke cPanel atau dasbor serupa. Setelah itu, ikuti langkah selanjutnya untuk
membuat database, nama pengguna, kata sandi, dan tabel SQL Anda.
5. Membuat database dan pengguna

a. Buka tab “ Lanjutan ”:

65 | S i s t e m M i k r o p r o s e s o r
b. Ketik "database" di bilah pencarian dan pilih "MySQL Database Wizard".

66 | S i s t e m M i k r o p r o s e s o r
c. Masukkan nama Database yang Anda inginkan. Dalam kasus saya, nama
databasenya adalah esp_data. Kemudian, tekan tombol "Langkah Berikutnya":

Catatan: nanti Anda harus menggunakan nama basis data dengan awalan yang
diberikan oleh host Anda (awalan basis data saya pada tangkapan layar di
atas kabur).

d. Ketik nama pengguna Database Anda dan atur kata sandi. Anda harus menyimpan
semua detail itu, karena Anda akan membutuhkannya nanti untuk membuat
koneksi database dengan kode PHP Anda.

67 | S i s t e m M i k r o p r o s e s o r
Database dan pengguna baru Anda berhasil dibuat. Sekarang, simpan semua detail
Anda karena Anda akan membutuhkannya nanti:
1) Nama basis data : example_esp_data
2) Nama pengguna : example_esp_board
3) Kata sandi : kata sandi Anda
6. Membuat tabel SQL
a. Setelah membuat database dan pengguna Anda, kembali ke dashboard Panel dan
cari “phpMyAdmin”.

b. Di bilah sisi kiri, pilih nama basis data Andacontoh_esp_datadan buka tab "SQL".

68 | S i s t e m M i k r o p r o s e s o r
Penting: pastikan Anda telah membukacontoh_esp_databasis data. Kemudian, klik tab
SQL. Jika Anda tidak mengikuti langkah- langkah tepat ini dan menjalankan kueri SQL, Anda
mungkin membuat tabel di database yang salah.

c. Salin kueri SQL dalam cuplikan berikut:


CREATE TABLE SensorData (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
sensor VARCHAR(30) NOT NULL,
location VARCHAR(30) NOT NULL, value1
VARCHAR(10),
value2 VARCHAR(10),
value3 VARCHAR(10),
reading_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON
UPDATE CURRENT_TIMESTAMP
)

d. Rekatkan di bidang kueri SQL (disorot dengan persegi panjang merah) dan tekan
tombol "Go" untuk membuat tabel Anda:

e. Setelah itu, Anda akan melihat tabel yang baru dibuat bernamaSensorData dalam
contoh_esp_datadatabase seperti pada gambar di bawah ini:

69 | S i s t e m M i k r o p r o s e s o r
7. PHP Script HTTP POST – Menerima dan Memasukkan Data ke Database
MySQL
Di bagian ini, kita akan membuat skrip PHP yang bertanggung jawab untuk
menerima permintaan masuk dari ESP32 atau ESP8266 dan memasukkan data ke
dalam database MySQL.
a. Jika Anda menggunakan penyedia hosting dengan cPanel, Anda dapat
mencari “File Manager”:

b. Kemudian, pilih opsi public_html dan tekan tombol “+ File” untuk


membuat file .php baru.

70 | S i s t e m M i k r o p r o s e s o r
c. Buat file baru di /public_html dengan nama dan ekstensi persis seperti ini:
esp-post-data.php

d. Edit file yang baru dibuat ( esp-post-data.php ) dan salin cuplikan berikut:
<!--
Rui Santos
Complete project details at https://RandomNerdTutorials.com/cloud-weather-
station-esp32- esp8266/
Permission is hereby granted, free of charge, to any person
obtaining a copy
of this software and associated documentation files.

The above copyright notice and this permission notice shall be


included in all
copies or substantial portions of the Software.
-->
<?php
include_once('esp-database.php');

// Keep this API Key value to be compatible with the ESP code provided
in the project page. If you change this value, the ESP sketch needs to match
$api_key_value = "tPmAT5Ab3j7F9";

$api_key= $sensor = $location = $value1 = $value2 =


$value3 = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
$api_key = test_input($_POST["api_key"]);
if($api_key == $api_key_value) {
$sensor = test_input($_POST["sensor"]);
$location = test_input($_POST["location"]);
$value1 = test_input($_POST["value1"]);
$value2 = test_input($_POST["value2"]);

71 | S i s t e m M i k r o p r o s e s o r
$value3 = test_input($_POST["value3"]);

$result = insertReading($sensor, $location, $value1,


$value2, $value3);
echo $result;
}
else {
echo "Wrong API Key provided.";
}
}
else {
echo "No data posted with HTTP POST.";
}

function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}

72 | S i s t e m M i k r o p r o s e s o r
8. Skrip PHP untuk Fungsi Basis Data

a. Buat file baru di /public_html yang bertanggung jawab untuk memasukkan


dan mengakses data di database Anda. Beri nama file Anda: esp-database.php

b. Salin skrip PHP itu:


<!--
Rui Santos
Complete project details at https://RandomNerdTutorials.com/cloud-weather-station-
esp32- esp8266/

Permission is hereby granted, free of charge, to any person obtaining a copy


of this software and associated documentation files.

The above copyright notice and this permission notice shall be included in
all
copies or substantial portions of the Software.
-->
<?php
$servername = "localhost";

// REPLACE with your Database name


$dbname = "REPLACE_WITH_YOUR_DATABASE_NAME";
// REPLACE with Database user

73 | S i s t e m M i k r o p r o s e s o r
$username = "REPLACE_WITH_YOUR_USERNAME";
// REPLACE with Database user password
$password = "REPLACE_WITH_YOUR_PASSWORD";

function insertReading($sensor, $location, $value1,


$value2, $value3) {
global $servername, $username, $password, $dbname;

// Create connection
$conn = new mysqli($servername, $username, $password,
$dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

$sql = "INSERT INTO SensorData (sensor, location, value1, value2,


value3)
VALUES ('" . $sensor . "', '" . $location . "', '" .
$value1 . "', '" . $value2 . "', '" . $value3 . "')";

if ($conn->query($sql) === TRUE) {


return "New record created successfully";
}
else {
return "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
}

function getAllReadings($limit) {
global $servername, $username, $password, $dbname;

// Create connection
$conn = new mysqli($servername, $username, $password,
$dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT id, sensor, location, value1, value2, value3, reading_time FROM
SensorData order by reading_time desc limit " . $limit;

74 | S i s t e m M i k r o p r o s e s o r
if ($result = $conn->query($sql)) { return $result;
}
else {
return false;
}
$conn->close();
}
function getLastReadings() {
global $servername, $username, $password, $dbname;

// Create connection
$conn = new mysqli($servername, $username, $password,
$dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT id, sensor, location, value1, value2, value3, reading_time FROM
SensorData order by reading_time desc limit 1" ;
if ($result = $conn->query($sql)) { return $result-
>fetch_assoc();
}
else {
return false;
}
$conn->close();
}

function minReading($limit, $value) {


global $servername, $username, $password, $dbname;

// Create connection
$conn = new mysqli($servername, $username, $password,
$dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

75 | S i s t e m M i k r o p r o s e s o r
$sql = "SELECT MIN(" . $value . ") AS min_amount FROM (SELECT " . $value . "
FROM SensorData order by reading_time desc limit " . $limit . ") AS min";
if ($result = $conn->query($sql)) { return $result-
>fetch_assoc();
}
else {
return false;
}
$conn->close();
}

function maxReading($limit, $value) {


global $servername, $username, $password, $dbname;

// Create connection
$conn = new mysqli($servername, $username, $password,
$dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT MAX(" . $value . ") AS max_amount FROM (SELECT " . $value . "
FROM SensorData order by reading_time desc limit " . $limit . ") AS max";
if ($result = $conn->query($sql)) { return $result-
>fetch_assoc();
}
else {
return false;
}
$conn->close();
}

function avgReading($limit, $value) {


global $servername, $username, $password, $dbname;

// Create connection
$conn = new mysqli($servername, $username, $password,
$dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);

76 | S i s t e m M i k r o p r o s e s o r
}

$sql = "SELECT AVG(" . $value . ") AS avg_amount FROM (SELECT " . $value . "
FROM SensorData order by reading_time desc limit " . $limit . ") AS avg";
if ($result = $conn->query($sql)) { return $result-
>fetch_assoc();
}
else {
return false;
}
$conn->close();
}
?>

c. Sebelum menyimpan file, Anda perlu memodifikasi$dbname,$nama


penggunadan$kata sandivariabel dengan detail unik Anda:

// Your Database name


$dbname = "example_esp_data";
// Your Database user
$username = "example_esp_board";
// Your Database user password
$password = "YOUR_USER_PASSWORD";

d. Setelah menambahkan nama database, username dan password, simpan file dan
lanjutkan dengan tutorial ini. Jika Anda mencoba mengakses nama domain Anda di
jalur URL berikutnya, Anda akan melihat yang berikut:
http://example.com/esp-post-data.php

77 | S i s t e m M i k r o p r o s e s o r
9. Skrip PHP – Menampilkan Pembacaan Basis Data pada Pengukur dan
Tabel
a. Anda juga perlu menambahkan file CSS untuk menata dasbor Anda, beri
nama: esp-style.css :

b. Salin CSS itu ke file Anda dan simpan:

/**
Rui Santos
Complete project details at https://RandomNerdTutorials.com/cloud-weather-station-
esp32- esp8266/

Permission is hereby granted, free of charge, to any person obtaining a copy


of this software and associated documentation files.

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
**/
body {
width: 60%;
margin: auto;
text-align: center; font-
family: Arial; top: 50%;
left: 50%;
}

@media screen and (max-width: 800px) { body {


width: 100%;

78 | S i s t e m M i k r o p r o s e s o r
}
}

table {
margin-left: auto; margin-
right: auto;
}

div {
margin-left: auto; margin-
right: auto;
}

h2 { font-size: 2.5rem; }

.header {
padding: 1rem; margin: 0 0
2rem 0; background: #f2f2f2;
}

h1 {
font-size: 2rem;
font-family: Arial, sans-serif; text-align: center;
text-transform: uppercase;
}

.content {
display: flex;
}

@media screen and (max-width: 500px) /* Mobile */ {


.content {
flex-direction: column;
}
}

.mask {
position: relative; overflow:
hidden; display: block;
width: 12.5rem; height:
6.25rem;

79 | S i s t e m M i k r o p r o s e s o r
margin: 1.25rem;
}

.semi-circle { position: relative;


display: block; width:
12.5rem; height: 6.25rem;
background: linear-gradient(to right, #3498db 0%, #05b027 33%, #f1c40f
70%, #c0392b 100%);
border-radius: 50% 50% 50% 50% / 100% 100% 0% 0%;
}

.semi-circle::before { content: "";


position: absolute; bottom: 0;
left: 50%;
z-index: 2; display: block;
width: 8.75rem; height:
4.375rem;
margin-left: -4.375rem;
background: #fff;
border-radius: 50% 50% 50% 50% / 100% 100% 0% 0%;
}

.semi-circle--mask { position:
absolute; top: 0;
left: 0;
width: 12.5rem; height:
12.5rem;
background: transparent;
transform: rotate(120deg) translate3d(0, 0, 0); transform-origin: center
center;
backface-visibility: hidden; transition: all 0.3s
ease-in-out;
}

.semi-circle--mask::before { content: "";


position: absolute; top: 0;

80 | S i s t e m M i k r o p r o s e s o r
left: 0%;
z-index: 2; display: block;
width: 12.625rem; height:
6.375rem;
margin: -1px 0 0 -1px;
background: #f2f2f2;
border-radius: 50% 50% 50% 50% / 100% 100% 0% 0%;
}

.gauge--2 .semi-circle { background: #3498db; }

.gauge--2 .semi-circle--mask { transform: rotate(20deg) translate3d(0, 0, 0); }

#tableReadings { border-collapse: collapse; } #tableReadings td,

#tableReadings th {
border: 1px solid #ddd; padding:
10px;
}

#tableReadings tr:nth-child(even){ background-color: #f2f2f2; }

#tableReadings tr:hover { background-color: #ddd; } #tableReadings th {


padding: 10px;
background-color: #2f4468; color:
white;
}

c. Terakhir, buat file PHP lain di direktori /public_html yang akan menampilkan
semua konten database di halaman web. Beri nama file baru Anda: esp-weather-

station.php
81 | S i s t e m M i k r o p r o s e s o r
d. Edit file yang baru dibuat ( esp-weather-station.php ) dan salin kode berikut:

<!--
Rui Santos
Complete project details at https://RandomNerdTutorials.com/cloud-weather-station-
esp32- esp8266/

Permission is hereby granted, free of charge, to any person obtaining a copy


of this software and associated documentation files.

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
-->
<?php
include_once('esp-database.php'); if
($_GET["readingsCount"]){
$data = $_GET["readingsCount"];
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
$readings_count = $_GET["readingsCount"];
}
// default readings count set to 20 else {
$readings_count = 20;
}

82 | S i s t e m M i k r o p r o s e s o r
$last_reading = getLastReadings();
$last_reading_temp = $last_reading["value1"];
$last_reading_humi = $last_reading["value2"];
$last_reading_time = $last_reading["reading_time"];

// Uncomment to set timezone to - 1 hour (you can change


1 to any number)
//$last_reading_time = date("Y-m-d H:i:s",
strtotime("$last_reading_time - 1 hours"));
// Uncomment to set timezone to + 7 hours (you can change 7 to any
number)
//$last_reading_time = date("Y-m-d H:i:s",
strtotime("$last_reading_time + 7 hours"));

$min_temp = minReading($readings_count, 'value1');


$max_temp = maxReading($readings_count, 'value1');
$avg_temp = avgReading($readings_count, 'value1');

$min_humi = minReading($readings_count, 'value2');


$max_humi = maxReading($readings_count, 'value2');
$avg_humi = avgReading($readings_count, 'value2');
?>

<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type"
content="text/html; charset=utf-8">

<link rel="stylesheet" type="text/css" href="esp- style.css">


<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jque
ry.min.js"></script>
</head>
<header class="header">
<h1> ESP Weather Station</h1>
<form method="get">
<input type="number" name="readingsCount" min="1"
placeholder="Number of readings (<?php echo
$readings_count; ?>)">
<input type="submit" value="UPDATE">

83 | S i s t e m M i k r o p r o s e s o r
</form>
</header>
<body>
<p>Last reading: <?php echo $last_reading_time; ?></p>
<section class="content">
<div class="box gauge--1">
<h3>TEMPERATURE</h3>
<div class="mask">
<div class="semi-circle"></div>
<div class="semi-circle--mask"></div>
</div>
<p style="font-size: 30px;" id="temp">--</p>
<table cellspacing="5" cellpadding="5">
<tr>
<th colspan="3">Temperature <?php echo
$readings_count; ?> readings</th>
</tr>
<tr>
<td>Min</td>
<td>Max</td>
<td>Average</td>
</tr>
<tr>
<td><?php echo $min_temp['min_amount'];
?> &deg;C</td>
<td><?php echo $max_temp['max_amount'];
?> &deg;C</td>
<td><?php echo
round($avg_temp['avg_amount'], 2); ?> &deg;C</td>
</tr>
</table>
</div>
<div class="box gauge--2">
<h3>HUMIDITY</h3>
<div class="mask">
<div class="semi-circle"></div>
<div class="semi-circle--mask"></div>
</div>
<p style="font-size: 30px;" id="humi">--</p>
<table cellspacing="5" cellpadding="5">
<tr>
<th colspan="3">Humidity <?php echo
$readings_count; ?> readings</th>
</tr>

84 | S i s t e m M i k r o p r o s e s o r
<tr>
<td>Min</td>
<td>Max</td>
<td>Average</td>
</tr>
<tr>
<td><?php echo $min_humi['min_amount'];
?> %</td> <td><?php echo $max_humi['max_amount'];
?> %</td> <td><?php echo
round($avg_humi['avg_amount'], 2); ?> %</td>
</tr>
</table>
</div>
</section>
<?php
echo '<h2> View Latest ' . $readings_count . ' Readings</h2>
<table cellspacing="5" cellpadding="5"
id="tableReadings">
<tr>
<th>ID</th>
<th>Sensor</th>
<th>Location</th>
<th>Value 1</th>
<th>Value 2</th>
<th>Value 3</th>
<th>Timestamp</th>
</tr>';

$result = getAllReadings($readings_count); if ($result) {


while ($row = $result->fetch_assoc()) {
$row_id = $row["id"];
$row_sensor = $row["sensor"];
$row_location = $row["location"];
$row_value1 = $row["value1"];
$row_value2 = $row["value2"];
$row_value3 = $row["value3"];
$row_reading_time = $row["reading_time"];
// Uncomment to set timezone to - 1 hour (you can change 1 to any
number)

85 | S i s t e m M i k r o p r o s e s o r
//$row_reading_time = date("Y-m-d H:i:s",
strtotime("$row_reading_time - 1 hours"));
// Uncomment to set timezone to + 7 hours (you can change 7 to any
number)
//$row_reading_time = date("Y-m-d H:i:s",
strtotime("$row_reading_time + 7 hours"));

echo '<tr>
<td>' . $row_id . '</td>
<td>' . $row_sensor . '</td>
<td>' . $row_location . '</td>
<td>' . $row_value1 . '</td>
<td>' . $row_value2 . '</td>
<td>' . $row_value3 . '</td>
<td>' . $row_reading_time . '</td>
</tr>';
}
echo '</table>';
$result->free();
}
?>

<script>
var value1 = <?php echo $last_reading_temp; ?>; var value2 = <?php
echo $last_reading_humi; ?>; setTemperature(value1);
setHumidity(value2);

function setTemperature(curVal){
//set range for Temperature in Celsius -5 Celsius to
38 Celsius
var minTemp = -5.0; var
maxTemp = 38.0;
//set range for Temperature in Fahrenheit 23 Fahrenheit to 100
Fahrenheit
//var minTemp = 23;
//var maxTemp = 100;

var newVal = scaleValue(curVal, [minTemp, maxTemp], [0, 180]);


$('.gauge--1 .semi-circle--mask').attr({
style: '-webkit-transform: rotate(' + newVal +
'deg);' +
'-moz-transform: rotate(' + newVal + 'deg);' +

86 | S i s t e m M i k r o p r o s e s o r
'transform: rotate(' + newVal + 'deg);'
});
$("#temp").text(curVal + ' ºC');
}

function setHumidity(curVal){
//set range for Humidity percentage 0 % to 100 % var minHumi = 0;
var maxHumi = 100;

var newVal = scaleValue(curVal, [minHumi, maxHumi], [0, 180]);


$('.gauge--2 .semi-circle--mask').attr({
style: '-webkit-transform: rotate(' + newVal +
'deg);' +
'-moz-transform: rotate(' + newVal + 'deg);' + 'transform: rotate(' +
newVal + 'deg);'
});
$("#humi").text(curVal + ' %');
}

function scaleValue(value, from, to) {


var scale = (to[1] - to[0]) / (from[1] - from[0]); var capped =
Math.min(from[1], Math.max(from[0],
value)) - from[0];
return ~~(capped * scale + to[0]);
}
</script>
</body>
</html>

e. Jika Anda mencoba mengakses nama domain Anda di jalur URL berikut, Anda
akan melihat yang berikut:
http://example.com/esp-weather-station.php

87 | S i s t e m M i k r o p r o s e s o r
f. Jika Anda melihat halaman web dengan nilai kosong di browser Anda, itu berarti
semuanya sudah siap. Di bagian berikutnya, Anda akan mempelajari cara
memasukkan data dari ESP32 atau ESP8266 ke dalam database.

88 | S i s t e m M i k r o p r o s e s o r
10. Mempersiapkan ESP32 atau ESP8266 Anda
Proyek ini kompatibel dengan papan ESP32 dan ESP8266. Anda hanya perlu merakit
sirkuit sederhana dan mengunggah sketsa yang disediakan untuk memasukkan suhu,
kelembapan, tekanan, dan lainnya ke dalam basis data Anda setiap 10 menit.

a. Bagian yang Diperlukan


Untuk contoh ini kita akan mendapatkan pembacaan sensor dari sensor BME280.
Berikut daftar bagian yang Anda butuhkan untuk membangun sirkuit untuk proyek ini:

1) ESP32 / ESP8266
2) Sensor BME280
3) Kabel jumper
4) Breadboard

b. skema
Modul sensor BME280 yang kami gunakan berkomunikasi melalui protokol
komunikasi I2C, jadi Anda perlu menghubungkannya ke pin ESP32 atau ESP8266 I2C.

Kabel BME280 ke ESP32


Pin ESP32 I2C adalah:
 GPIO 22: SCL (SCK)
 GPIO 21: SDA (SDI)
Jadi, merakit sirkuit Anda seperti yang ditunjukkan pada diagram skema berikut
(Panduan untuk ESP32 dengan BME280 dan ESP32 BME280 Web Server ).
Pinout ESP32 : https://randomnerdtutorials.com/esp32-pinout-
reference-gpios/

89 | S i s t e m M i k r o p r o s e s o r
Kabel BME280 ke ESP8266
Pin ESP8266 I2C adalah:
 GPIO 5 (D1): SCL (SCK)
 GPIO 4 (D2): SDA (SDI)

Pinout ESP8266 : https://randomnerdtutorials.com/esp8266-bme280-


arduino-ide/

1) Rakit sirkuit Anda seperti pada diagram skema berikutnya jika Anda
menggunakan papan ESP8266 ( baca Panduan untuk ESP8266 dengan
BME280 ).

90 | S i s t e m M i k r o p r o s e s o r
c. Kode ESP32/ESP8266

Kami akan memprogram ESP32/ESP8266 menggunakan Arduino IDE, jadi Anda


harus menginstal add-on ESP di Arduino IDE Anda.

1) Ikuti salah satu tutorial berikutnya tergantung pada papan yang Anda gunakan
2) Instal Papan ESP32 di Arduino IDE
(https://randomnerdtutorials.com/installing -the-esp32-board-in-arduino-ide-
windows-instructions/ )
3) Anda juga perlu menginstal Perpustakaan BME280 dan perpustakaan Adafruit_Sensor
(https://randomnerdtutorials.com/esp32-bme280-arduino-ide- pressure-temperature-
humidity/ )
4) Instal Board ESP8266 di Arduino IDE
(https://randomnerdtutorials.com/how-to-install-esp8266-board- arduino-ide/)
5) Anda juga perlu menginstal Library BME280 dan library Adafruit_Sensor
(https://randomnerdtutorials.com/esp8266-bme280- arduino-ide/ )
6) Setelah menginstal add-on dan pustaka papan yang diperlukan, salin kode
berikut ke Arduino IDE Anda, tetapi jangan mengunggahnya dulu. Anda perlu
membuat beberapa perubahan untuk membuatnya bekerja untuk Anda.

/*
Rui Santos
Complete project details at Complete project details at
91 | S i s t e m M i k r o p r o s e s o r
https://RandomNerdTutorials.com/cloud-weather-station-esp32- esp8266/

Permission is hereby granted, free of charge, to any person obtaining a copy


of this software and associated documentation files.
#include <Adafruit_BME280.h>

const char* ssid = "REPLACE_WITH_YOUR_SSID";


const char* password = "REPLACE_WITH_YOUR_PASSWORD";

//Your Domain name with URL path or IP address with path const char* serverName
= "http://example.com/esp-post- data.php";

// Keep this API Key value to be compatible with the PHP code provided in the
project page.
// If you change the apiKeyValue value, the PHP file /esp- post-data.php also needs to
have the same key
String apiKeyValue = "tPmAT5Ab3j7F9"; String
sensorName = "BME280";
String sensorLocation = "Office";

/*#include <SPI.h> #define


BME_SCK 18
#define BME_MISO 19
#define BME_MOSI 23 #define
BME_CS 5*/

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme; // I2C


//Adafruit_BME280 bme(BME_CS); // hardware SPI
//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK);
// software SPI

// the following variables are unsigned longs because the time, measured in
// milliseconds, will quickly become a bigger number than can be stored in an int.
unsigned long lastTime = 0;
// Timer set to 10 minutes (600000)
//unsigned long timerDelay = 600000;
// Set timer to 30 seconds (30000) unsigned long
timerDelay = 30000;

void setup() {
Serial.begin(115200);

WiFi.begin(ssid, password);

92 | S i s t e m M i k r o p r o s e s o r
Serial.println("Connecting"); while(WiFi.status() !=
WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to WiFi network with IP Address: ");
Serial.println(WiFi.localIP());

// (you can also pass in a Wire library object like &Wire2)


bool status = bme.begin(0x76); if (!status) {
Serial.println("Could not find a valid BME280 sensor, check wiring or change
I2C address!");
while (1);
}

Serial.println("Timer set to 30 seconds (timerDelay variable), it will take 30


seconds before publishing the first reading.");
}

void loop() {
//Send an HTTP POST request every 10 minutes if ((millis() -
lastTime) > timerDelay) {
//Check WiFi connection status if(WiFi.status()==
WL_CONNECTED){
WiFiClient client;
HTTPClient http;

// Your Domain name with URL path or IP address with http.begin(client,


path
serverName);

// Specify content-type header http.addHeader("Content-Type",


"application/x-www-
form-urlencoded");

// Prepare your HTTP POST request data


String httpRequestData = "api_key=" + apiKeyValue + "&sensor=" +
sensorName

93 | S i s t e m M i k r o p r o s e s o r
+ "&location=" + sensorLocation
+ "&value1=" + String(bme.readTemperature())
+ "&value2=" +
String(bme.readHumidity()) + "&value3=" +
String(bme.readPressure()/100.0F) + "";
Serial.print("httpRequestData: ");
Serial.println(httpRequestData);

// You can comment the httpRequestData variable above


// then, use the httpRequestData variable below (for testing purposes without the
BME280 sensor)
//String httpRequestData =
"api_key=tPmAT5Ab3j7F9&sensor=BME280&location=Office&value1=
24.75&value2=49.54&value3=1005.14";

// Send HTTP POST request


int httpResponseCode = http.POST(httpRequestData);

// If you need an HTTP request with a content type: text/plain


//http.addHeader("Content-Type", "text/plain");
//int httpResponseCode = http.POST("Hello, World!");

// If you need an HTTP request with a content type: application/json, use the
following:
//http.addHeader("Content-Type", "application/json");
//int httpResponseCode =
http.POST("{\"value1\":\"19\",\"value2\":\"67\",\"value3\":\ "78\"}");

if (httpResponseCode>0) { Serial.print("HTTP Response


code: "); Serial.println(httpResponseCode);
}
else {
Serial.print("Error code: ");
Serial.println(httpResponseCode);
}
// Free resources
http.end();
}
else {
Serial.println("WiFi Disconnected");
}

94 | S i s t e m M i k r o p r o s e s o r
lastTime = millis();
}
}

11. Mengatur kredensial jaringan Anda

Anda perlu mengubah baris berikut dengan kredensial jaringan Anda: SSID dan
kata sandi. Kode dikomentari dengan baik di mana Anda harus membuat
perubahan.
// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

95 | S i s t e m M i k r o p r o s e s o r
12. Menyetel nama server Anda

Anda juga perlu mengetikkan nama domain Anda, sehingga ESP menerbitkan
bacaan ke server Anda sendiri.
const char* serverName = "http://example.com/esp-post- data.php";
Sekarang, Anda dapat mengunggah kode ke papan Anda. Ini harus bekerja
langsung baik di papan ESP32 atau ESP8266. Jika Anda ingin mempelajari cara
kerja kode, baca bagian selanjutnya.
Cara kerja kode

Proyek ini sudah cukup lama, jadi kami tidak akan membahas secara detail cara kerja
kode, tetapi inilah ringkasan singkatnya:
a. Impor semua perpustakaan untuk membuatnya berfungsi (itu akan mengimpor
perpustakaan ESP32 atau ESP8266 berdasarkan papan yang dipilih di Arduino
IDE Anda)
b. Setel variabel yang mungkin ingin Anda ubah (apiKeyValue,
sensorName, sensorLocation)
c. Itu apiKeyValue hanyalah string acak yang dapat Anda modifikasi. Ini
digunakan untuk alasan keamanan, jadi hanya siapa saja yang mengetahui
kunci API Anda yang dapat memublikasikan data ke database Anda
d. Inisialisasi komunikasi serial untuk keperluan debugging
e. Buat koneksi Wi-Fi dengan router Anda
f. Inisialisasi BME280 untuk mendapatkan bacaan
g. Kemudian, loop()adalah tempat Anda benar-benar membuat permintaan
HTTP POST setiap 10 menit dengan pembacaan BME280 terbaru:

// Your Domain name with URL path or IP address with path


http.begin(serverName);

// Specify content-type header


http.addHeader("Content-Type", "application/x-www-form- urlencoded");

// Prepare your HTTP POST request data


String httpRequestData = "api_key=" + apiKeyValue +
"&sensor=" + sensorName + "&location="
+ sensorLocation + "&value1=" +
String(bme.readTemperature()) +
"&value2=" + String(bme.readHumidity()) + "&value3=" +
String(bme.readPressure()/100.0F) + "";

int httpResponseCode = http.POST(httpRequestData);

96 | S i s t e m M i k r o p r o s e s o r
h. Anda bisa berkomentarhttpRequestDatavariabel di atas yang menggabungkan
semua pembacaan BME280 dan menggunakanhttpRequestDatavariabel di
bawah ini untuk tujuan pengujian:
String httpRequestData =
"api_key=tPmAT5Ab3j7F9&sensor=BME280&location=Office&value1=
24.75&value2=49.54&value3=1005.14";

Demonstrasi
1) Setelah menyelesaikan semua langkah, biarkan papan ESP Anda
mengumpulkan beberapa bacaan dan mempublikasikannya ke server Anda.
Jika semuanya benar, inilah yang akan Anda lihat di Serial Monitor Arduino
IDE Anda:

2) Jika Anda membuka nama domain Anda di jalur URL


ini: http://example.com/esp-weather-station.php
3) Anda akan melihat 20 bacaan terbaru yang tersimpan di database Anda. Ada
dua pengukur yang menunjukkan pembacaan suhu dan kelembaban terbaru,
dan stempel waktu.
4) Refresh halaman web untuk melihat bacaan terbaru:

97 | S i s t e m M i k r o p r o s e s o r
5) Ada bidang tempat Anda dapat mengetikkan jumlah bacaan untuk
divisualisasikan, serta jumlah bacaan untuk statistik ini: minimum, maksimum,
dan rata-rata. Secara default diatur ke 20. Misalnya, jika Anda mengetik 30 dan
menekan tombol perbarui, Anda akan melihat bahwa halaman web Anda
memperbarui dan menghitung ulang semua nilai.

6) Halaman web juga responsif seluler, sehingga Anda dapat menggunakan


perangkat apa pun untuk mengakses:

98 | S i s t e m M i k r o p r o s e s o r
99 | S i s t e m M i k r o p r o s e s o r
7) Anda juga dapat membuka phpMyAdmin untuk mengelola data yang tersimpan
diSensorDatameja. Anda dapat menghapusnya, mengedit, dll ...

E. Hasil Percobaan

100 | S i s t e m M i k r o p r o s e s o r
F. Analisis Percobaan

G. Kesimpulan

101 | S i s t e m M i k r o p r o s e s o r
8
Esp8266

A. Tujuan Pembelajaran
a. Mahasiswa mampu memahami dasar-dasar tentang ESP8266
b. Mahasiswa mampu membaca input digital seperti sakelar tombol dan mengontrol output
digital seperti LED menggunakan papan NodeMCU ESP8266 dengan Arduino IDE.
c. Mahasiswa mampu menghasilkan sinyal PWM dengan ESP8266 NodeMCU menggunakan
Arduino IDE. Sebagai contoh, kita akan meredupkan kecerahan LED dengan mengubah
siklus kerja dari waktu ke waktu.
d. Mahasiswa mampu melakukan pembacaan analog dengan ESP8266 menggunakan Arduino
IDE.
e. Mahasiswa mampu menggunakan interupsi dan timer dengan ESP8266 NodeMCU
menggunakan Arduino IDE.
f. Mahasiswa mampu menggunakan ESP8266 mode Deep Sleep dengan ArduinoIDE
(NodeMCU)

B. Teori Dasar
Sebelum melakukan pemrograman pada ESP8266 menggunakan ArduinoIIDE. Maka pastikan
anda telah menginstall add-on papan ESP8266 sebelum melanjutkan chapter ini.
1. ESP8266 NodeMCU Kontrol Output Digital

 Pertama, Anda perlu mengatur GPIO yang ingin Anda kontrol sebagai KELUARAN.
Menggunakan pinMode() fungsi sebagai berikut:

pinMode(GPIO, OUTPUT);

 Untuk mengontrol output digital, Anda hanya perlu menggunakan digitalWrite() fungsi, yang
menerima sebagai argumen, GPIO (nomor int) yang Anda maksud, dan statusnya HIGH atau
LOW.

digitalWrite(GPIO, STATE);

102 | S i s t e m M i k r o p r o s e s o r
2. ESP8266 NodeMCU Baca Input Digital

 Pertama, atur GPIO yang ingin Anda baca sebagaiMEMASUKKAN, menggunakan


pinMode() fungsi sebagai berikut:

pinMode(GPIO, INPUT);

3. ESP8266 NodeMCU PWM dengan Arduino IDE – LED Redup (Output Analog)
GPIO ESP8266 dapat diatur untuk menghasilkan 0V atau 3.3V, tetapi mereka tidak dapat
mengeluarkan tegangan apa pun di antaranya. Namun, Anda dapat mengeluarkan tegangan
tingkat menengah "palsu" menggunakan modulasi lebar-pulsa (PWM), yang merupakan cara
Jika Anda mengganti tegangan LED antara TINGGI dan RENDAH dengan sangat cepat, mata
Anda tidak dapat mengikuti kecepatan saat LED menyala dan mati; Anda hanya akan melihat
beberapa gradasi dalam kecerahan.

Pada dasarnya itulah cara kerja PWM — dengan menghasilkan output yang berubah antara
TINGGI dan RENDAH pada frekuensi yang sangat tinggi. Siklus tugas adalah bagian dari
periode waktu di mana LED diatur ke TINGGI. Gambar berikut mengilustrasikan cara kerja
PWM.

103 | S i s t e m M i k r o p r o s e s o r
Siklus tugas 50 persen menghasilkan kecerahan LED 50 persen, siklus tugas 0 berarti LED mati
sepenuhnya, dan siklus tugas 100 berarti LED menyala penuh. Mengubah siklus tugas adalah
cara Anda menghasilkan tingkat kecerahan yang berbeda.
analogWrite()

Untuk menghasilkan sinyal PWM pada pin yang diberikan, Anda menggunakan fungsi berikut:

analogWrite(pin, value);
Keterangan :
 pin: PWM dapat digunakan pada pin 0 hingga 16
 nilai: harus dalam kisaran dari 0 hingga PWMRANGE, yaitu 255 secara default. Ketika
nilainya 0, PWM dinonaktifkan pada pin itu. Nilai 255 sesuai dengan siklus tugas 100%
Anda dapat mengubah rentang PWM dengan memanggil:

analogWriteRange(new_range);

Secara default, frekuensi PWM ESP8266 adalah 1kHz. Anda dapat mengubah frekuensi
PWM dengan:
analogWriteFreq(new_frequency);

Nilai yang valid adalah dari 100Hz hingga 40000Hz.

4. ESP8266 ADC – Membaca Nilai Analog dengan Arduino IDE

Spesifikasi ESP8266 ADC


Saat mengacu pada pin ADC ESP8266 Anda akan sering mendengar istilah yang berbeda ini
secara bergantian:
 ADC (Analog-to-digital Converter)
 MENGINTIP
 pin6
 A0
 Pin Analog 0
Semua istilah ini mengacu pada pin yang sama di ESP8266 yang disorot di bagian berikutnya.
a) ESP8266 ADC Resolution, Pin ADC memiliki resolusi 10-bit, yang berarti Anda akan
mendapatkan nilai antara 0 dan 1023.
b) ESP8266 Input Voltage Range, Rentang tegangan input pin ADC ESP8266 adalah 0 hingga
1V jika Anda menggunakan chip kosong. Namun, sebagian besar papan pengembangan
ESP8266 dilengkapi dengan pembagi tegangan internal, sehingga rentang input adalah 0
104 | S i s t e m M i k r o p r o s e s o r
hingga 3.3V. Jadi, ringkasan:
 Rentang tegangan ADC di papan pengembangan ESP8266: 0 hingga 3.3V (misalnya:
ESP8266 12-E NodeMCU Kit , WeMos D1 Mini , ...)
 Rentang Tegangan ADC dalam chip ESP8266: 0 hingga 1V (misalnya: chip ESP- 07 ,
chip ESP-12E , ...)

Pin Analog ESP8266


Dengan kit ESP8266 12-E NodeMCU dan papan pengembangan ESP8266 lainnya, sangat
mudah untuk mengakses A0, Anda cukup menghubungkan kabel jumper ke pin (lihat gambar di
bawah).

Jika Anda menggunakan chip ESP8266, seperti ESP8266-07, Anda perlu menyolder kabel ke
pin tersebut.

105 | S i s t e m M i k r o p r o s e s o r
106 | S i s t e m M i k r o p r o s e s o r
5. ESP8266 Interupsi dan Timer menggunakan Arduino IDE (NodeMCU)
Interupsi berguna untuk membuat sesuatu terjadi secara otomatis dalam program
mikrokontroler dan dapat membantu memecahkan masalah waktu. Dengan interupsi Anda tidak
perlu terus-menerus memeriksa nilai pin saat ini. Ketika perubahan terdeteksi, sebuah peristiwa
dipicu - sebuah fungsi dipanggil. Fungsi ini disebut Interrupt Service Routine (ISR).

Ini sangat berguna untuk memicu tindakan setiap kali gerakan terdeteksi atau setiap kali
tombol ditekan tanpa perlu terus-menerus memeriksa statusnya.

attachInterrupt() Fungsi

Untuk mengatur interupsi di Arduino IDE, Anda menggunakan attachInterrupt() fungsi, yang
menerima sebagai argumen: pin interupsi GPIO, nama fungsi yang akan dieksekusi, dan mode:

attachInterrupt(digitalPinToInterrupt(GPIO), ISR, mode);

Pin interupsi GPIO


Argumen pertama adalah interupsi GPIO. Kamu harus menggunaka ndigitalPinToInterrupt
(GPIO) untuk mengatur GPIO aktual sebagai pin interupsi. Misalnya, jika Anda ingin
menggunakan GPIO 14 sebagai interupsi, gunakan:

digitalPinToInterrupt(14)
ESP8266 mendukung interupsi di GPIO apa pun, kecuali GPIO16.

107 | S i s t e m M i k r o p r o s e s o r
ISR
Argumen kedua darilampirkanInterrupt()fungsi adalah nama fungsi yang akan dipanggil
setiap kali interupsi dipicu - Interrupt Service Routine (ISR). Fungsi ISR harus sesederhana
mungkin, sehingga prosesor kembali ke eksekusi program utama dengan cepat. Pendekatan terbaik
adalah memberi sinyal pada kode utama bahwa interupsi telah terjadi dengan menggunakan
variabel global dan di dalamlingkaran()periksa dan hapus bendera itu, dan jalankan kode. ISR
harus memiliki ICACHE_RAM_ATTR sebelum definisi fungsi untuk menjalankan kode interupsi
di RAM.

Mode interupsi
Argumen ketiga adalah mode dan ada 3 mode berbeda:
 CHANGE: untuk memicu interupsi setiap kali pin mengubah nilai – misalnya dari HIGH ke
LOW atau LOW ke HIGH;
 FALLING: ketika pin berubah dari HIGH ke LOW;
 RISING: untuk memicu ketika pin beralih dari LOW ke HIGH.
Untuk contoh kita, akan menggunakan mode RISING, karena ketika sensor gerak PIR mendeteksi
gerakan, GPIO yang terhubung akan beralih dari LOW ke HIGH.

Timer ESP8266
Untuk chapter ini, kita akan menggunakan timer. Kami ingin LED tetap menyala selama beberapa
detik yang telah ditentukan setelah gerakan terdeteksi. Alih-alih menggunakan delay() fungsi
yang memblokir kode Anda dan tidak memungkinkan Anda melakukan hal lain selama beberapa
detik yang ditentukan, kami akan menggunakan pengatur waktu.

delay() vs millis ()
delay() fungsi menerima nomor int tunggal sebagai argumen. Angka ini menunjukkan waktu
dalam milidetik program harus menunggu sampai pindah ke baris kode berikutnya.
delay(time in milliseconds);
Ketika Anda menggunakan delay(1000) program Anda berhenti pada baris itu selama 1
detik.delay() adalah fungsi pemblokiran. Fungsi pemblokiran mencegah program melakukan hal
lain hingga tugas tertentu selesai. Jika Anda membutuhkan banyak tugas untuk dilakukan secara
bersamaan, Anda tidak dapat menggunakanmenunda(). Untuk sebagian besar proyek, Anda harus
menghindari penggunaan penundaan dan menggunakan pengatur waktu sebagai gantinya.

Menggunakan fungsi yang disebut millis() Anda dapat mengembalikan jumlah milidetik yang
telah berlalu sejak program pertama kali dimulai.
millis();
Mengapa fungsi itu berguna? Karena dengan menggunakan beberapa matematika, Anda dapat
dengan mudah memverifikasi berapa banyak waktu yang telah berlalu tanpa memblokir kode
108 | S i s t e m M i k r o p r o s e s o r
Anda.

6. ESP8266 Deep Sleep dengan ArduioIDE (NodeMCU)

Dalam chapter ini akan membahas deep sleep dengan penghitung waktu bangun dan tidur
nyenyak dengan bangun eksternal menggunakan pin reset (RST).

Untuk menempatkan ESP8266 dalam mode tidur nyenyak, gunakan ESP.deepSleep(AS) dan
lulus sebagai argumen waktu tidur dalam mikrodetik. GPIO 16 harus disambungkan ke pin reset
(RST) agar ESP8266 bisa bangun. Untuk menempatkan ESP8266 dalam mode tidur nyenyak
untuk jangka waktu yang tidak terbatas, gunakan ESP.Tidur nyenyak(0) . ESP8266 akan bangun
ketika pin RST menerima sinyal LOW.

Jika Anda telah membuat proyek dengan papan ESP8266 yang bertenaga baterai, atau jika Anda
baru saja menghubungkan papan NodeMCU ESP8266 Anda ke bank daya. Setelah
menjalankannya beberapa saat, Anda menyadari bahwa baterai tidak bertahan lama, terutama
jika Anda menggunakan Wi-Fi.

109 | S i s t e m M i k r o p r o s e s o r
Jika anda menempatkan ESP8266 dalam moode deep sleep, hal ini akan mengurangi
komsumsi daya dan baterai akan bertahan lama. Memiliki ESP8266 dalam mode deep sleep
berarti menghentikan aktivitas yang mengkomsumsi lebih banyak daya saat beroperasi
(seperti WiFi), tetapi sisakan aktivitas yang cukup untuk bangun prosesor Ketika sesuatu yang
menarik terjadi.

Jenis-jenis Sleep
Ada tiga jenis sleep berbeda : mode modem sleep, light sleep, dan deep sleep. Tabrl
dibawah ini menunjukkan perbedaan antara setiap mode (informasi dari lembar fata ESP
83266).
Barang Mode-Sleep Light-Sleep Deep- sleep
Wi-Fi OFF OFF OFF
System Clock ON OFF OFF
RTC ON ON ON
CPU ON ON ON
Substrate current ON Pending OFF
Averge curret (DTIM = 1) 15 mA 0.4 mA ~20 uA
Averge curret (DTIM = 3) 16.2 mA 1.8 mA
Averge curret (DTIM = 10) 15.2 mA 0.9 mA -

Catatan: komsumsi daya di atas meja mengacu pada ESP8266 sebagai chip yang berdiri sendiri.
Jika anda menggunakan papan pengembangan, mereka memiliki pasif komponen yang
menggunakan lebih banyak arus. Mereka semua memiliki tujuan yang berbeda dan mereka
harus digunakan dalam aplikasi yang berbeda. Pada chapter ini , kita akan membahas mode
deep sleep. Semuanya selalu mati, kecuali Real Time Clock (RTC), begitulah cara ESP 8266
melacak waktu.

Ini adalah opsi yang paling hemat daya dan chip ESP hanya menarik 20uA. Namun, jika
anda menggunakan papan pengembang berfitur dengan pemrograman bawaan, LED dan
sebagainya. Anda tidak akan mencapai status daya rendah seperti itu.

110 | S i s t e m M i k r o p r o s e s o r
Sketsa Deep Sleep
Dengan deep sleep contoh aplikasi terlihat seperti ini :
1. ESP8266 terhubung ke Wi-Fi
2. ESP8266 melakukan tugas (membaca sensor, menerbitkan pesan MQTT, dll)
3. Sleep untuk jangka waktu telah ditentukan
4. ESP8266 bangun
5. Proses ini berulang-ulang

Bangun Sumber
Setelah menempatkan ESP8266 dalam mode deep sleep ada berbagai cara untuk
membangunkannya
 #1 timer bangun: ESP8266 bangun sendiri setelah jangka waktu yang te;ah ditentukan
 #2 eksternal bangun: ESP8266 bangun Ketika anda menekan tombol RST (ESP8266
restart)
Untuk proyek berdaya rendah anda dapat mempertimbangkan untuk menggunakan apapan
ESP8266 yang menawarkan lebih banyak.

111 | S i s t e m M i k r o p r o s e s o r
C. Praktikum 1
ESP8266 NodeMCU Input Digital dan Output Digital (Arduino IDE)
1. Alat dan Bahan
a. ESP8266
b. LED 5mm
c. 330 Ohm resistor
d. Tekan tombol
e. Resistor 10k Ohm
f. Papan tempat memotong roti
g. Kabel jumper

2. Prosedur Percobaan
 Untuk menunjukkan cara menggunakan input digital dan output digital, kami akan membuat
contoh proyek sederhana dengan tombol tekan dan LED. Kami akan membaca status tombol
dan menyalakan LED sesuai dengan yang diilustrasikan pada gambar berikut.

 Sebelum melanjutkan, Anda perlu merakit sirkuit dengan LED dan tombol tekan, dengan
menghubungkan LED ke GPIO 5(D1) dan tombol tekan untuk GPIO 4(D2).

 Salin kode berikut ke Arduino IDE Anda.

// Complete Instructions: https://RandomNerdTutorials.com/esp8266-nodemcu-digital-


112 | S i s t e m M i k r o p r o s e s o r
inputs-outputs-arduino/

// set pin numbers


const int buttonPin = 4;// the number of the pushbutton pin const int ledPin = 5;// the
number of the LED pin
// variable for storing the pushbutton status int buttonState = 0;

void setup() {
// initialize the pushbutton pin as an input pinMode(buttonPin, INPUT);

// initialize the LED pin as an output pinMode(ledPin, OUTPUT);


}

void loop() {
// read the state of the pushbutton value buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH if (buttonState == HIGH) {
// turn LED on digitalWrite(ledPin, HIGH);
} else {
// turn LED off digitalWrite(ledPin, LOW);
}
}

3. Cara Kerja Kode


 Dalam dua baris berikut, Anda membuat variabel untuk menetapkan pin:

const int buttonPin = 4;


const int ledPin = 5;

 Tombol terhubung ke GPIO 4dan LED terhubung ke GPIO 5. Saat menggunakan Arduino IDE
dengan ESP8266, 4 sesuai dengan GPIO 4dan 5 sesuai dengan GPIO 5.
 Selanjutnya, Anda membuat variabel untuk menahan status tombol. Secara default, itu 0 (tidak
ditekan).

= int buttonState 0;
 Dalam mempersiapkan(), Anda menginisialisasi tombol sebagai MEMASUKKAN, dan LED sebagai
KELUARAN. Untuk itu, Anda menggunakan pinMode() fungsi yang menerima pin yang Anda maksud,
dan modenya: MEMASUKKAN atau KELUARAN.

pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);

 Dalam loop() adalah tempat Anda membaca status tombol dan mengatur LED yang
sesuai. Di baris berikutnya, Anda membaca status tombol dan menyimpannya di
buttonState variabel. Seperti yang telah kita lihat sebelumnya, Anda menggunakan
digitalRead() fungsi.
buttonState= digitalRead(buttonPin);

113 | S i s t e m M i k r o p r o s e s o r
Pernyataan if berikut, memeriksa apakah status tombol adalah HIGH. Jika ya, itu menyalakan LED
menggunakan digitalWrite() fungsi yang menerima sebagai argumen pin led, dan state HIGH.

if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
}

 Jika status tombol tidak HIGH, Anda mematikan LED. Setel saja LOW sebagai argumen kedua
dalam digitalWrite() fungsi.

else {
digitalWrite(ledPin, LOW);
}

 Langkah selanjutnya ialah mengunggah kode ke ESP8266.


 Sebelum mengklik tombol unggah, buka Alat > Papan , dan pilih papan yang Anda gunakan.
Dalam kasus saya, ini adalah NodeMCU 1.0 (ESP-12 E Module) . Jika Anda tidak tahu model
ESP8266 Anda, Anda dapat memilih "Modul ESP8266 Generik".
 Buka Alat > Port dan pilih port COM yang terhubung dengan ESP8266. Kemudian, tekan
tombol unggah dan tunggu pesan “ Selesai mengunggah ”.
 Setelah mengunggah kode, uji sirkuit Anda. LED Anda akan menyala saat Anda menekan tombol:

114 | S i s t e m M i k r o p r o s e s o r
D. Praktikum 2
ESP8266 NodeMCU PWM dengan Arduino IDE – LED Redup (Output Analog)
1. Alat dan Bahan
a. ESP8266
b. LED 5mm
c. 330 Ohm resistor
d. Papan tempat memotong roti
e. Kabel jumper
f. Osiloskop Opsional

2. Prosedur Percobaan

Berikut contoh sederhana yang meredupkan LED sehingga Anda dapat melihat cara
menggunakan PWM :
a. Siapkan alat dan bahan
b. sambungkan LED ke ESP8266 Anda seperti yang ditunjukkan pada diagram skema
berikut. Kami menghubungkan LED ke GPIO 2, tetapi Anda dapat menggunakan GPIO
lain yang sesuai.

115 | S i s t e m M i k r o p r o s e s o r
c. Salin kode berikut ke aplikasi Arduino IDE Anda dan unggah ke ESP8266 Anda.
const int ledPin = 2;

void setup() {

void loop() {
// increase the LED brightness
for(int dutyCycle = 0; dutyCycle < 255; dutyCycle++){
// changing the LED brightness with PWM
analogWrite(ledPin, dutyCycle);
delay(1);
}

// decrease the LED brightness


for(int dutyCycle = 255; dutyCycle > 0; dutyCycle--){
// changing the LED brightness with PWM
analogWrite(ledPin, dutyCycle);
delay(1);
}
}

3. Cara kerja kode:

a. Mulailah dengan menentukan pin LED yang terpasang. Dalam hal ini, LED terpasang ke
GPIO 2 (D4).
const int ledPin = 2;

Dalam loop(), Anda memvariasikan siklus tugas antara 0 dan 255 untuk meningkatkan
kecerahan LED.

for(int dutyCycle = 0; dutyCycle < 255; dutyCycle++){


// changing the LED brightness with PWM
analogWrite(ledPin, dutyCycle);
delay(1);
}

116 | S i s t e m M i k r o p r o s e s o r
b. Dan kemudian, antara 255 dan 0 untuk mengurangi kecerahan.

for(int dutyCycle = 255; dutyCycle > 0; dutyCycle--){


// changing the LED brightness with PWM analogWrite(ledPin,
dutyCycle); delay(1);
}

c. Untuk mengatur kecerahan LED, Anda perlu menggunakan analogWrite() fungsi yang
menerima sebagai argumen GPIO di mana Anda ingin mendapatkan sinyal PWM dan nilai
antara 0 dan 255 untuk mengatur siklus kerja.
d. Arduino IDE Anda, buka Tools > Board dan pilih model ESP8266 Anda (Jika Anda
menggunakan ESP-01, pilih “Generic ESP8266 Module”) .
e. Buka Alat > Port dan pilih port COM yang terhubung dengan ESP8266.
f. Jika Anda menggunakan ESP-01, Anda memerlukan pemrogram FTDI atau Adaptor
Serial untuk mengunggah kode. Berikut adalah koneksi yang perlu Anda buat:

117 | S i s t e m M i k r o p r o s e s o r
g. Setelah mengunggah sketsa Anda, LED terhubung ke GPIO 2 harus menambah dan
mengurangi kecerahannya dari waktu ke waktu.

h. Anda dapat terhubung GPIO 2 ke osiloskop untuk melihat bagaimana sinyal PWM
berubah dari waktu ke waktu.

i. Selain mengontrol kecerahan LED, PWM juga dapat digunakan untuk mengontrol
kecepatan motor DC.
118 | S i s t e m M i k r o p r o s e s o r
E. Praktikum 3
ESP8266 ADC – Membaca Nilai Analog dengan Arduino IDE
1. Alat dan bahan
a. Direkomendasikan: ESP8266-12E NodeMCU Kit
b. Alternatif: 1x ESP8266-07 chip atau 1x ESP8266-12E chip + FTDI Programmer
c. Resistor 100 Ohm (diperlukan jika Anda menggunakan chip kosong)
d. 220 Ohm Resistor (diperlukan jika Anda menggunakan chip kosong)
e. Potensiometer 1k Ohm
f. Papan tempat memotong roti
g. Kabel jumper

2. Prosedur Percobaan
a. Jika Anda menggunakan papan pengembangan ESP8266, ikuti diagram skematik berikut
ini.

b. Jika Anda menggunakan chip ESP8266 dengan rentang tegangan input 0V hingga 1V,
Anda perlu memastikan bahwa tegangan input pada pin A0 tidak melebihi 1V. Jadi, Anda
memerlukan rangkaian pembagi tegangan, seperti gambar di bawah ini.

119 | S i s t e m M i k r o p r o s e s o r
c. Kami menggunakan resistor 100 Ohm dan 220 Ohm, sehingga Vout adalah 1V.

d. Sebelum menyalik kode pastikan anda telah menginstal add-on ESP8266 terlebih dahulu.
e. Salin kode berikut ke Arduino IDE Anda.

const int analogInPin = A0; // ESP8266 Analog Pin ADC0 = A0


int sensorValue = 0; // value read from the pot
void setup() {
// initialize serial communication at 115200
Serial.begin(115200);
}
void loop() {
// read the analog in value
sensorValue = analogRead(analogInPin);

// print the readings in the Serial Monitor


Serial.print("sensor = ");
Serial.print(sensorValue);

delay(1000);
}
f. Upload kode sebelumnya ke ESP8266. Pastikan Anda memilih papan dan port COM yang
tepat. Buka Tools> Board dan pilih model ESP8266 yang Anda gunakan. Dalam kasus kami,
kami menggunakan Kit NodeMCU ESP8266 12-E.

120 | S i s t e m M i k r o p r o s e s o r
g. Buka Alat > Port dan pilih port COM yang terhubung dengan ESP8266.
h. Tekan tombol unggah Arduino IDE.
i. Setelah mengupload kode, buka Serial Monitor pada baud rate 115200. Pembacaan analog
akan ditampilkan.

j. Putar potensiometer dan lihat nilainya naik atau turun.

121 | S i s t e m M i k r o p r o s e s o r
F. Praktikum 4
ESP8266 Interupsi dan Timer menggunakan Arduino IDE (NodeMCU)
1. Alat dan Bahan
a. ESP8266 (baca papan pengembangan ESP8266 Terbaik )
b. Sensor gerak PIR (AM312)
c. LED 5mm
d. 330 Ohm resistor
e. Papan tempat memotong roti
f. Kabel jumper

2. Prosedur Percobaan
a. Pasang sensor gerak PIR dan LED ke ESP8266 Anda. Kami akan menghubungkan LED
keGPIO 12(D6) dan pin data sensor gerak PIR keGPIO 14(D5). Seperti gambar skematik
dibawah ini

b. Penting: Sensor Gerak Mini AM312 PIR yang digunakan dalam proyek ini beroperasi pada 3.3V.
Namun, jika Anda menggunakan sensor gerak PIR lain seperti HC-SR501, ia beroperasi pada 5V.
Anda dapat memodifikasinya untuk beroperasi pada 3.3V atau cukup menyalakannya menggunakan
pin Vin.

122 | S i s t e m M i k r o p r o s e s o r
c. Gambar berikut menunjukkan pinout sensor gerak AM312 PIR.

d. Setelah memasang rangkaian seperti yang ditunjukkan pada diagram skematik, salin kode
yang diberikan ke Arduino IDE Anda. (Anda dapat mengunggah kode apa adanya, atau
Anda dapat mengubah jumlah detik LED menyala setelah mendeteksi gerakan. Cukup ubah
timeSeconds variabel dengan jumlah detik yang Anda inginkan.)
#define timeSeconds 10

// Set GPIOs for LED and PIR Motion


Sensor const int led = 12;
const int motionSensor = 14;
// Timer: Auxiliary variables unsigned long now = millis(); unsigned long lastTrigger = 0;
boolean startTimer = false;

// Checks if motion was detected, sets LED HIGH and starts a timer
ICACHE_RAM_ATTRvoid detectsMovement()
{ Serial.println("MOTION
DETECTED!!!"); digitalWrite(led,
HIGH);
startTimer = true;
lastTrigger =
millis();
}

void setup() {
// Serial port for debugging purposes
Serial.begin(115200);

// PIR Motion Sensor mode


INPUT_PULLUP pinMode(motionSensor,
INPUT_PULLUP);

123 | S i s t e m M i k r o p r o s e s o r
// Set motionSensor pin as interrupt, assign interrupt
function and set RISING mode
attachInterrupt(digitalPinToInterrupt(motionSensor),
detectsMovement, RISING);

// Set LED to LOW


pinMode(led, OUTPUT);
digitalWrite(led, LOW);
}

void loop() {
// Current time
now = millis();
// Turn off the LED after the number of seconds defined in
the timeSeconds variable
if(startTimer && (now - lastTrigger > (timeSeconds*1000))) {
Serial.println("Motion stopped..."); digitalWrite(led,
LOW);
startTimer = false;
}
}

e. Cara kerja kode:


 Mulai dengan menetapkan dua pin GPIO ke led dan motionSensor variabel.

const int led = 12;


const int motionSensor = 14;
 Kemudian, buat variabel yang memungkinkan Anda mengatur timer untuk mematikan
LED setelah gerakan terdeteksi.

unsigned long now = millis();


unsigned long lastTrigger = 0;
boolean startTimer = false;
 Variable now memegang waktu saat ini. Variabel lastTrigger menahan waktu ketika
sensor PIR mendeteksi gerakan. startTimer adalah variabel boolean yang memulai timer
ketika gerakan terdeteksi.
 Dalam fungsi setup(), dimulai dengan menginisialisasi port serial pada 115200 baud rate.

Serial.begin(115200);
 Atur sensor Gerak PIR sebagai INPUT_PULLUP.

pinMode(motionSensor, INPUT_PULLUP);
124 | S i s t e m M i k r o p r o s e s o r
 Untuk mengatur pin sensor PIR sebagai interupsi, gunakan: attachInterrupt() fungsi
seperti yang dijelaskan sebelumnya.

attachInterrupt(digitalPinToInterrupt(motionSensor),
detectsMovement, RISING);
 Pin yang akan mendeteksi gerakan adalahGPIO 14dan itu akan memanggil fungsi
detectMovement() pada RISING mode.
 LED adalah KELUARAN yang state bagiannya dimulai dari RENDAH.

pinMode(led, OUTPUT);
digitalWrite(led, LOW);
 loop() fungsi yang akan terus berjalan berulang-ulang. Dalam setiap loop, variabel now
diperbarui dengan waktu saat ini.

now = millis();
 Tidak ada lagi yang dilakukan loop(). Tapi, ketika gerakan terdeteksi,
detectsMovement() fungsi dipanggil karena kami telah mengatur interupsi sebelumnya
setup().
 Fungsi detectsMovement() mencetak pesan di Serial Monitor, menyalakan LED, menyetel
startTimer variabel boolean menjadi true dan memperbarui lastTrigger variabel dengan
waktu sekarang.

ICACHE_RAM_ATTR void detectsMovement() {


Serial.println("MOTION DETECTED!!!");
digitalWrite(led, HIGH);
startTimer = true;
lastTrigger = millis();
}
 Setelah langkah ini, kode kembali loop(). Kali ini,startTimer variabel adalah benar.
Jadi, ketika waktu yang ditentukan dalam detik telah berlalu (sejak gerakan terdeteksi),
pernyataan if berikut akan benar.

if(startTimer && (now - lastTrigger >


(timeSeconds*1000))) {
Serial.println("Motion stopped…");
digitalWrite(led, LOW);
startTimer = false;
}
 Pesan “Motion stopped...” akan tercetak di Serial Monitor, LED dimatikan, dan
startTimer variabel disetel ke false.

125 | S i s t e m M i k r o p r o s e s o r
f. Unggah kode ke ESP8266 Anda. Pastikan Anda memilih papan dan port COM yang tepat.
g. Buka Serial Monitor pada baud rate 115200.

h. Gerakkan tangan Anda di depan sensor PIR. LED akan menyala, dan sebuah pesan tercetak di
Serial Monitor yang mengatakan “MOTION DETECTED!!! ”. Setelah 10 detik, LED akan
mati.

i. Interupsi berguna untuk mendeteksi perubahan dalam status GPIO dan langsung memicu
suatu fungsi. Anda juga telah belajar bahwa Anda harus menggunakan pengatur waktu untuk
menulis kode yang tidak memblokir.

126 | S i s t e m M i k r o p r o s e s o r
G. Praktikum 5
ESP8266 Deep Sleep dengan ArduioIDE (NodeMCU)
1. Alat dan Bahan
 ESP8266
 Software Arduino IDE
 Papan project board
 Kabel Jumper

2. Prosedur Percobaan
#1 ESP8266 Deep Dleep dengan Timer Bangun
 Untuk menggunakan timer bangun dengan ESP8266, anda perlu menghubungkan pin
RST ke GPIO 16 yang berlabel D0, di papan NodeMCU. Cukup ikuti diagram skema
berikut:

 Hubungkan pin RST ke GPIO 16 hanya setelah mengupload kode.

127 | S i s t e m M i k r o p r o s e s o r
 Jika anda melihat pinout NodeMCU, anda dapat melihat bahwa GPIO 16 adalah pin
khusus dan memiliki fitur WAKE.

 Pin RST pada ESP8266 selalu high saat ESP8266 berjalan. Namun Ketika pin RST
menerima sinyal LOW, maka mikrokontroler restart.

 Jika anda mengatur timer deep sleep dengan ESP8266, setelah timer berakhir , GPIO
16 mengirimkan sinyal LOW. Itu berarti bahwa GPIO 16, Ketika terhubung ke pin
RST, dapat membangunkan ESP8266 setelah jangka waktu tertentu.

a. Sketsa Timer Bangun ESP8266 NodeMCU


 Setelah add-on ESP8266 untuk ArduinoIDE terinstall, buka Alat da pilih
“NodeMCU(Modul ESP-12E)”
 Berikut kode yang perlu anda unggah ke ESP anda:
/*
* ESP8266 Deep sleep mode example
* Rui Santos
* Complete Project Details http://randomnerdtutorials.com
*/

void setup() {
Serial.begin(115200);
Serial.setTimeout(2000);

// Wait for serial to initialize.


while(!Serial) { }

// Deep sleep mode for 30 seconds, the ESP8266 wakes up by itself when GPIO 16 (D0 in
NodeMCU board) is connected to the RESET pin
Serial.println("I'm awake, but I'm going into deep sleep mode for 30 seconds");
ESP.deepSleep(30e6);

// Deep sleep mode until RESET pin is connected to a LOW signal (for example
pushbutton or magnetic reed switch)
//Serial.println("I'm awake, but I'm going into deep sleep mode until RESET pin is
connected to a LOW signal");
//ESP.deepSleep(0);
}

void loop() {
}

128 | S i s t e m M i k r o p r o s e s o r
 Dalam contoh ini, kami mencetak pesan di Serial Monitor:
Serial.println("I'm awake, but I'm going into deep sleep mode until RESET pin is
connected to a LOW signal");

 Setelah itu, ESP8266 tertidur selama 30 detik.


ESP.deepSleep(30e6);

 Untuk membuat ESP8266 tertidur lelap, Anda menggunakan ESP.deepsleep(AS) dan


berikan sebagai argumen waktu tidur dalam mikrodetik.

 Dalam hal ini, 30e6 sama dengan 30000000 mikrodetik yang sama dengan 30 detik.

 Setelah mengupload kode, tekan tombol RST untuk mulai menjalankan kode, lalu
sambungkan RST ke GPIO 16. ESP8266 akan aktif setiap 30 detik dan mencetak pesan di
Serial Monitor seperti yang ditunjukkan di bawah ini.

 Contoh ini hanya mencetak pesan di Serial Monitor, tetapi dalam aplikasi dunia nyata,
Anda akan melakukan tugas yang berguna seperti membuat permintaan, menerbitkan
pembacaan sensor, dll.

129 | S i s t e m M i k r o p r o s e s o r
b. Sirkuit Pengatur Waktu ESP-01
 Jika Anda ingin membuat pengaturan serupa dengan papan ESP-01, Anda perlu
menyolder kabel seperti yang ditunjukkan di bawah ini. Pin kecil itu adalah GPIO 16 dan
perlu dihubungkan ke pin RST.

 Namun, pinnya sangat kecil sehingga sangat sulit untuk menyolder kabel seperti itu ke
GPIO 16 pada ESP-01. Jadi, untuk mode bangun ini Anda harus menggunakan papan
NodeMCU atau chip ESP12-E kosong .

130 | S i s t e m M i k r o p r o s e s o r
#2 ESP8266 Deep Sleep dengan Eksternal Wake Up
 Anda juga dapat mengaktifkan ESP8266 dengan pengaktifan eksternal, seperti menekan
tombol Anda hanya perlu menempatkan ESP8266 dalam mode deep sleep untuk jangka
waktu yang tidak ditentukan, lalu setel pin RST ke LOW untuk membangunkannya.
 Untuk menguji pengaturan ini, sambungkan tombol tekan ke papan ESP8266 Anda seperti
yang ditunjukkan pada diagram skematik berikut. Saat Anda menekan tombol, pin RST
menjadi LOW.

 Jika Anda menggsunakan ESP-01 , ikuti diagram berikutnya.

131 | S i s t e m M i k r o p r o s e s o r
 Kemudian, unggah kode berikut ke papan ESP8266 Anda.
/*
* ESP8266 Deep sleep mode example
* Rui Santos
* Complete Project Details http://randomnerdtutorials.com
*/

void setup() {
Serial.begin(115200);
Serial.setTimeout(2000);

// Wait for serial to initialize.


while(!Serial) { }

// Deep sleep mode for 30 seconds, the ESP8266 wakes up by itself when GPIO 16 (D0 in
NodeMCU board) is connected to the RESET pin
//Serial.println("I'm awake, but I'm going into deep sleep mode for 30 seconds");
//ESP.deepSleep(30e6);

// Deep sleep mode until RESET pin is connected to a LOW signal (for example
pushbutton or magnetic reed switch)
Serial.println("I'm awake, but I'm going into deep sleep mode until RESET pin is
connected to a LOW signal");
ESP.deepSleep(0);
}

void loop() {
}
 Kode ini menempatkan ESP8266 dalam mode tidur nyenyak untuk jangka waktu yang tidak
terbatas. Untuk itu, Anda hanya perlu memberikan 0 sebagai argumen deepsleep() fungsi:
ESP.deepSleep(0);

 ESP hanya akan bangun ketika ada yang mengatur ulang papan. Dalam hal ini, penekanan
tombol tekan yang menarik pin RST ke GND.
 Ketika Anda menekan tombol, ESP8266 bangun, melakukan tugas yang diprogram dan
kembali tidur sampai acara reset baru dipicu.

132 | S i s t e m M i k r o p r o s e s o r
#3Mengukur arus
 Saat papan dalam mode tidur nyenyak, ukur konsumsi saat ini dengan multimeter untuk
melihat berapa banyak daya yang terkuras.
 Berikut cara Anda harus menempatkan probe multimeter Anda.

 Saat ESP-01 dalam mode deep sleep hanya menggunakan 0.3mA yaitu sekitar 300uA.

 Perlu diingat bahwa selama penggunaan normal dengan Wi-Fi, ESP8266 dapat
mengkonsumsi antara 50mA dan 170mA.
133 | S i s t e m M i k r o p r o s e s o r
134 | S i s t e m M i k r o p r o s e s o r
H. Hasil Praktikum

I. Analisis Praktikum

J. Kesimpulan

135 | S i s t e m M i k r o p r o s e s o r
136 | S i s t e m M i k r o p r o s e s o r

Anda mungkin juga menyukai