Modul Sistem Microprocessor
Modul Sistem Microprocessor
SISTEM MIKROPROSESSOR
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.
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
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?
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.
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.
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)
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
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.
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.
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
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.
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.
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
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.
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:
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
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
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
#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);
}
AnalogValue=0;
Void loop(){
Analogvalue = analogRead(0);
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);
}
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) ;
}
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
39 | S i s t e m M i k r o p r o s e s o r
continue;
}
}
thisByte++ ;
}
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.
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.
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:
45 | S i s t e m M i k r o p r o s e s o r
C. Rangkaian Percobaan
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:
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.
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.
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.
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>
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);
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:
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.
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.
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
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.
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
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.
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”:
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.
// 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";
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"]);
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
The above copyright notice and this permission notice shall be included in
all
copies or substantial portions of the Software.
-->
<?php
$servername = "localhost";
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";
// Create connection
$conn = new mysqli($servername, $username, $password,
$dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
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();
}
// 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();
}
// 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();
}
// 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();
}
?>
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 :
/**
Rui Santos
Complete project details at https://RandomNerdTutorials.com/cloud-weather-station-
esp32- esp8266/
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%;
}
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;
}
.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--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;
}
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%;
}
#tableReadings th {
border: 1px solid #ddd; padding:
10px;
}
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/
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"];
<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type"
content="text/html; charset=utf-8">
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'];
?> °C</td>
<td><?php echo $max_temp['max_amount'];
?> °C</td>
<td><?php echo
round($avg_temp['avg_amount'], 2); ?> °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>';
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;
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;
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.
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.
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)
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
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/
//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";
// 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());
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;
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);
// 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\"}");
94 | S i s t e m M i k r o p r o s e s o r
lastTime = millis();
}
}
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:
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:
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.
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
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);
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:
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.
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).
void setup() {
// initialize the pushbutton pin as an input pinMode(buttonPin, INPUT);
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);
}
}
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);
}
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);
}
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.
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.
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.
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.
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
// 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);
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);
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;
}
}
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.
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:
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.
void setup() {
Serial.begin(115200);
Serial.setTimeout(2000);
// 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");
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.
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);
// 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