01 - Berkenalan dengan ESP 32 - LED berkedip Memulai proyek pemrograman mikrokontroler ESP-32 dengan menyiapkan pengaturan komputer untuk membuat environment pemrograman dengan Arduino IDE. A. Berkenalan dengan ESP32 Memahami sedikit seluk beluk apa itu ESP32 Salam kenal, aku ESP 32 dibuat untuk tugas mata kuliah EL5057 Sistem Penginderaan Halo teman-teman, mari berkenalan dengan mikrokontroler ESP32 . jadi, apasih sebenarnya ESP32? ESP 32 adalah mikrokontroler serbaguna yang memiliki dua inti prosesor untuk kinerja yang cepat dan efisien. Dengan kemampuan WiFi dan Bluetooth terintegrasi, ESP32 memungkinkan pengembang untuk membuat proyek-proyek IoT yang terhubung ke internet tanpa perlu tambahan perangkat keras. Kelebihan ESP32 terletak pada fleksibilitasnya; dapat diprogram menggunakan Arduino IDE, MicroPython, atau bahasa pemrograman lainnya. Dengan dukungan sensor yang beragam, ESP32 memungkinkan pembuatan proyek-proyek yang mencakup pengukuran suhu, kendali perangkat, dan pengiriman data ke cloud. Kesederhanaan penggunaan dan ukurannya yang kecil membuat ESP32 menjadi pilihan populer untuk berbagai aplikasi, mulai dari perangkat pintar hingga robotika, memberikan para pengembang alat yang kuat untuk mewujudkan ide-ide kreatif mereka dengan mudah. Jadi, bayangkan ESP32 seperti otak kecil yang super pintar untuk proyek-proyek elektronik kamu. Ini adalah mikrokontroler canggih yang bisa melakukan banyak hal seru. Jadi, apa yang bikin ESP32 istimewa? Dua dalam Satu: ESP32 sebenarnya seperti paket hemat, karena seolah-olah kamu mendapatkan dua mikrokontroler dalam satu! Ada dua inti prosesor di dalamnya, yang artinya ESP32 bisa melakukan beberapa tugas sekaligus tanpa jadi lelet. WiFi dan Bluetooth: Nah, ESP32 juga punya kemampuan WiFi dan Bluetooth bawaan. Bayangkan kamu bisa membuat gadget yang bisa terhubung ke internet tanpa perlu mikrokontroler ekstra. Seru, kan? Luar Biasa Ringkas: Meskipun kecil, ESP32 itu luar biasa hebat. Kamu bisa pakai ini untuk buat perangkat pintar, seperti sensor suhu yang bisa dikontrol dari jauh, atau mungkin robot mini yang bisa diarahkan pakai smartphone. Sahabat Programmer: ESP32 juga sangat ramah buat para programmer. Kamu bisa pakai Arduino IDE atau bahkan MicroPython untuk membuat programnya. Jadi, meskipun kamu bukan ahli, kamu bisa tetap membuat proyek seru dengan ESP32. Banyak Fitur Keren: Sensor, koneksi ke internet, kemampuan pengolahannya, semuanya lengkap di ESP32. Kamu bisa mengukur suhu, mengontrol perangkat, bahkan memonitor data dan mengirimnya ke cloud. Gila, kan? Jadi, singkatnya, ESP32 itu seperti sihir untuk dunia elektronik. Kamu bisa berkreasi tanpa batas dan membuat proyek-proyek seru dengan mudah. Nah, biasanya ESP32 yang dijual di pasaran sudah termasuk dengan development board nya agar kita bisa langsung pakai untuk pemrograman. Contoh dev-board nya adalah sebagai berikut. Spesifikasi ESP32 dibuat untuk tugas mata kuliah EL5057 Sistem Penginderaan Mari mengenal lebih detail ESP32 ini, dari namanya sih sepertinya singkatan dari nama perusahaan yang membungkus chipset ini kedalam satu chip yaitu ESPRESSIF. Espressif Systems adalah perusahaan semikonduktor yang berkantor pusat di Tiongkok, yang terkenal dengan pengembangan mikrokontroler, khususnya seri ESP8266 dan ESP32 yang sangat populer di komunitas elektronika dan  Internet of Things (IoT). Didirikan pada tahun 2008, Espressif fokus pada inovasi dalam desain chip nirkabel dan sistem chip terintegrasi untuk aplikasi WiFi dan Bluetooth. Produk unggulan mereka, seperti ESP8266 dan ESP32, telah memainkan peran penting dalam mendorong pertumbuhan ekosistem IoT dan DIY ( Do It Yourself ). Berdasarkan data dari laman resmi Espressif System tentang chipset ESP32 ( https://esp32.net ), berikut adalah blok fungsi ( function block ) lengkap dari ESP32 yang akan kita gunakan untuk belajar pemrograman mikrokontroler.  Nah, terlihat sangat lengkap sekali bukan, walaupun ukurannya sekecil kotak penghapus, ternyata kelengkapannya sangat mirip dengan personal computer yang kita punya. Berikut adalah fitur-fitur tambahan dari ESP32 yang sudah tertanam dalam SoC ( System on Chip ). Wi-Fi 802.11b/g/n  802.11n (2.4 GHz), up to 150 Mbps  WMM  TX/RX A-MPDU, RX A-MSDU  Immediate Block ACK   Defragmentation Automatic Beacon monitoring (hardware TSF)  4 × virtual Wi-Fi interfaces  Simultaneous support for Infrastructure Station, SoftAP, and Promiscuous modes Note that when ESP32 is in Station mode, performing a scan, the SoftAP channel will be changed.  Antenna diversity Bluetooth ® Compliant with Bluetooth v4.2 BR/EDR and Bluetooth LE specifications  Class-1, class-2 and class-3 transmitter without external power amplifier  Enhanced Power Control  +9 dBm transmitting power  NZIF receiver with –94 dBm Bluetooth LE sensitivity  Adaptive Frequency Hopping (AFH)  Standard HCI based on SDIO/SPI/UART  High-speed UART HCI, up to 4 Mbps  Bluetooth 4.2 BR/EDR and Bluetooth LE dual mode controller  Synchronous Connection-Oriented/Extended (SCO/eSCO)  CVSD and SBC for audio codec  Bluetooth Piconet and Scatternet  Multi-connections in Classic Bluetooth and Bluetooth LE  Simultaneous advertising and scanning CPU and Memory Xtensa® single-/dual-core 32-bit LX6 microprocessor(s) CoreMark® score: 1 core at 240 MHz: 504.85 CoreMark; 2.10 CoreMark/MHz 2 cores at 240 MHz: 994.26 CoreMark; 4.14 CoreMark/MHz  448 KB ROM 520 KB SRAM 16 KB SRAM in RTC QSPI supports multiple flash/SRAM chips Clocks and Timers Internal 8 MHz oscillator with calibration Internal RC oscillator with calibration External 2 MHz ~ 60 MHz crystal oscillator (40 MHz only for Wi-Fi/Bluetooth functionality) External 32 kHz crystal oscillator for RTC with calibration Two timer groups, including 2 × 64-bit timers and 1 × main watchdog in each group One RTC timer RTC watchdog Advanced Peripheral Interfaces 34 × programmable GPIOs 5 strapping GPIOs 6 input-only GPIOs 6 GPIOs needed for in-package flash/PSRAM (ESP32-D0WDR2-V3, ESP32-U4WDH) 12-bit SAR ADC up to 18 channels 2 × 8-bit DAC • 10 × touch sensors 4 × SPI 2 × I2S 2 × I2C 3 × UART 1 host (SD/eMMC/SDIO) 1 slave (SDIO/SPI) Ethernet MAC interface with dedicated DMA and IEEE 1588 support TWAI®, compatible with ISO 11898-1 (CAN Specification 2.0) RMT (TX/RX) Motor PWM LED PWM up to 16 channels Power Management Fine-resolution power control through a selection of clock frequency, duty cycle, Wi-Fi operating modes, and individual power control of internal components Five power modes designed for typical scenarios: Active, Modem-sleep, Light-sleep, Deep-sleep, Hibernation Power consumption in Deep-sleep mode is 10 µA Ultra-Low-Power (ULP) coprocessors RTC memory remains powered on in Deep-sleep mode Nah, satu lagi saya tambahkan disini adalah data konsumsi daya dari ESP32 . Kenapa konsumsi daya penting? , karena sistem IoT yang dipasang di lapangan biasanya menggunakan baterai sehingga dengan mendesain ESP32 agar irit daya, menjadikan alat IoT kita tahan lama. Berikut adalah tabel konsumsi daya dari ESP32.  ESP 32 pinout ESP-32 Devkit V1 Pinout 30 Pin ESP-32 Devkit V1 Pinout 38 Pin B. Menginstall IDE ESP32 dibuat dalam rangka tugas mata kuliah EL5057 Sistem Penginderaan Sebelum kita bermain-main membuat beberapa program sederhana dengan ESP32 , terlebih dahulu harus kita siapkan suatu lingkungan ( environment ) pemrograman yang akan kita gunakan, atau istilah kerennya IDE ( Integrated Development Environment ) atau dalam bahasa artinya sebuah lingkungan pengembangan terpadu. Biasanya kita dapat menggunakan beberapa IDE, namun yang umumnya orang gunakan adalah Arduino IDE , kenapa menggunakan Arduino IDE? ya simpel saja sih, banyak tutorial yang tersedia, jadi ketika mengalami error, dapat mencari solusinya dengan mudah. dan juga Arduino ini kan berasal dari suatu komunitas, nah biasanya kalau berbasis komunitas pengembangannya lebih cepat dan troubleshooting- nya juga banyak. Apa itu Arduino IDE? Arduino IDE adalah IDE yang dikembangkan oleh komunitas Arduino untuk mendukung pengembangan perangkat lunak pada platform Arduino. Arduino sendiri adalah platform perangkat keras terbuka yang digunakan untuk membuat berbagai proyek elektronika. Arduino IDE menyediakan antarmuka yang ramah pengguna dan mudah digunakan, cocok untuk pemula maupun pengembang berpengalaman. Dengan Arduino IDE, pengguna dapat menulis kode, menguploadnya ke papan Arduino mereka, dan menjalankan program dengan mudah. Selain itu, Arduino IDE mendukung berbagai papan Arduino yang berbeda, membuatnya menjadi pilihan populer di kalangan hobiis dan pengembang DIY. apakah bisa menggunakan Arduino IDE untuk ESP32? jawabannya adalah bisa,  karena Arduino IDE hanya sebagai compiler yang akan mengubah baris kode kita kedalam bahasa mesin, nah proses compiler dalam melakukan tugasnya dikelola oleh suatu fungsi yang di desain untuk chipset ESP32. atau gampangannya, Arduino IDE hanya pabriknya saja, sementara mesin di dalamnya diganti untuk memproduksi program ESP32. Menginstal Arduino IDE Sebelum melakukan instalasi Arduino IDE ke dalam komputer kita, ada beberapa yang harus disiapkan, atau bahasa kerennya ada minimum requirement yang harus dipenuhi seperti ditampilkan pada tabel berikut. Requirement Keterangan Komputer/ Laptop/ PC   Periksa, jenis operating system yang digunakan dan arsitektur komputer yang digunakan Koneksi internet   Karena kita harus mengunduh installer dari laman Arduino, maka dibutuhkan koneksi internet yang stabil. disini saya menggunakan laptop Macbook Air dengan opearting system MacOs Sonoma versi 14.2.1 bagi teman-teman yang menggunakan operating lainnya, akan dijelaskan di laman selanjutnya Langkah 1  | Download aplikasi Arduin IDE, dengan mengakses laman berikut. Alamat url : https://www.arduino.cc/en/software   Pilih operating system yang digunakan, jika menggunkan Macbook, maka pilih macOS, karena saya menggunakan Macbook Air dengan prosesor Intel, maka saya pilih pada bagian yang ditandai merah diatas. Langkah 2 | Instalasi Arduino IDE ke komputer kita. File installer versi MacOs File installer versi MacOS, menggunakan file yang berekstensi *.dmg, untuk membukanya cukup melakukan klik dua kali pada file yang dimaksud, dan ikuti langkah-langkah selanjutnya. File Arduino IDE versi 2.3.2 memiliki ukuran 182MB, sehingga pastikan kuota internet anda cukup. Install dengan melakukan drag icon Arduino IDE.app ke folder Applications. Langkah 3 |  Inisialisasi awal aplikasi  Arduino IDE. Proses ini bertujuan untuk memasukan repositori ESP32 kedalam IDE. Secara lengkap prosesnya adalah sebagai berikut: diatas adalah antarmuka aplikasi Arduino IDE, untuk menggunakannya sebagai IDE ESP32 perlu beberapa konfigurasi, seperti memasukan repositori ESP32 dan mendownload compiler boardnya, agar Arduino IDE faham jika akan digunakan untuk programming pada mikrokontroler ESP32. 1. Buka menu pengaturan pada aplikasi Arduino IDE, dengan cara menekan top menu  Arduino IDE > Settings.. 2. Memasukan link repositori kedalam parameter pengaturan Additional board manager URLs di laman dialog Arduino IDE, dengan cara copy-paste link berikut kedalam form pengaturan. https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json, http://arduino.esp8266.com/stable/package_esp8266com_index.json 3. Mengunduh board ESP32 , dengan cara buka top-menu tools > board > boards manager. Setelah tampil laman dialog, kemudian ketik ESP32 pada  field BOARDS MANAGER untuk mencari repositori board ESP32, setelah ketemu kemudian klik download untuk mengunduh ke dalam Arduino IDE.  Sebelum memulai pemrograman, pastikan terlebih dahulu untuk mengecek kesamaan board di IDE dan dev-board ESP32 yang kita gunakan. saya menggunakan dev-board ESP-32 versi 1, sehingga board IDE yang digunakan adalah DOIT ESP32 DEVKIT V1 Cara untuk mengecek kesesuaian board IDE adalah dengan cara menekan dropdown menu bertuliskan Select Board, kemudian pada kotak dialog Board cari dengan mengetikan DOIT , kemudian pilih DOIT ESP32 DEVKIT V1. Langkah 4 | Mendownload driver USB ke UART. Seperti kita ketahui sebelumnya, bahwa ESP32 berkomunikasi dengan beberapa cara, namun untuk kepentingan upload binary file ke register diperlukan antarmuka UART. Disebabkan, sebagian besar komputer yang ada dipasaran menggunakan protokol komunikasi USB ( Universal Serial Bus ), maka diperlukan konverter USB to UART. Nah, untungnya sebagian besar dev-board sudah dilengkapi dengan konverter USB-UART yang dihandle oleh chipset, biasanya berjenis CP2101 or CH340.  CP2102 https://www.silabs.com/interface/usb-bridges/classic/device.cp2101?tab=specs   CH340 https://sparks.gogo.co.nz/ch340.html   Kode ESP 32 - SIMS Kode Untuk Water Quality Sensor (Edited 09 Juli 2024 - 21:41) /* Prgrammed for ESP32 Modul Kontroller Power */ /* Edited 9 Juli 2024 21:24 */ /* Kaki RTC Default : SCL RTC -> 22 SDA RTC -> 21 */ #include "RTClib.h" RTC_DS3231 rtc; const int relayPin = 18; // Pin relay on di kaki 18 const int mpin = 5; // pin untuk maintenance const int buzerPin = 2; // pin buzzer ada di kaki nomor 2 int relayState = 0; int btnState = 0; int maintenanceState = 0; void setup() { Serial.begin(115200); delay(5000); if (! rtc.begin()) { Serial.println("Tidak tersambung di RTC"); Serial.flush(); while (1) delay(10); } if (rtc.lostPower()) { Serial.println("Konfigurasi ulang timer"); rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); } pinMode(relayPin, OUTPUT); pinMode(buzerPin, OUTPUT); pinMode(mpin, INPUT); // Inisiasi pin maintennance ke high digitalWrite(relayPin, HIGH); } /* ---------- Deklarasi fungsi - fungsi ------------------- */ void printWaktu(int dt){ // Fungsi cetak waktu untuk mengepring time dari DS3231 DateTime now = rtc.now(); Serial.println(); Serial.print(now.hour(), DEC); Serial.print(":"); Serial.print(now.minute(), DEC); Serial.print(":"); Serial.print(now.second(), DEC); Serial.print(":"); Serial.print(" "); Serial.print(now.day(), DEC); Serial.print("/"); Serial.print(now.month(), DEC); Serial.print("/"); Serial.print(now.year(), DEC); delay(dt); } void beep_buz(int t, int lama) { // Funsi untuk menyalakan beep for (int i = 1 ; i <= t ; ++i) { digitalWrite(buzerPin, HIGH); delay(lama); digitalWrite(buzerPin, LOW); delay(lama); } } void relayOn(int set) { // Fungsi untuk menyalakan relay delay(1000); beep_buz(2,100); digitalWrite(relayPin, LOW); delay(set); digitalWrite(relayPin, HIGH); beep_buz(1,1500); delay(1000); } void cekWaktu(int waktu){ // Fungsi timer untuk otomatisasi Serial.println("Proses Cek waktu"); DateTime now = rtc.now(); Serial.print("Menit menunjukan nilai : "); Serial.println(now.minute()); switch (now.minute()) { case 30: Serial.println("Perintah relay ON"); relayOn(waktu); case 0: Serial.println("Perintah relay ON"); relayOn(waktu); break; } Serial.println(); } void isMaintennance() { // Disable maintenance mode if (maintenanceState == 1) { Serial.println("Kode ini harusnya tidak ter-eksekusi"); Serial.println("Maintenance mode"); digitalWrite(relayPin, LOW); } else { printWaktu(1000); cekWaktu(300000); } } /* Eksekusi program utama */ void loop(){ isMaintennance(); } C. Membuat internal LED ESP32 berkedip (blinking) Proyek kali ini kita akan coba membuat LED internal ESP32 berkedip ( blinking ) berdasarkan interval waktu yang akan kita set dalam script di Arduino IDE. weekly project 01 - EL5057 Sensing System | Sandi Wibowo - Smart X  Pendahuluan Dalam praktik pemrograman ESP32 untuk membuat LED internal berkedip, kita akan belajar memahami konsep dasar mikrokontroler, penggunaan Integrated Development Environment (IDE) seperti Arduino IDE, dan konfigurasi pin pada ESP32. Proses ini melibatkan penyiapan proyek, pengaturan pin, dan penulisan kode sederhana untuk mengontrol LED internal. Melalui langkah-langkah di dalam blog ini, kita bersama-sama akan belajar memahami tentang siklus looping program pada mikrokontroler void loop() {...} , memberikan dasar yang kuat untuk pengembangan proyek IoT lebih lanjut dengan ESP32. Kebutuhan ( requirements ) Kebutuhan perangkat keras yang harus disiapkan adalah seperti yang disajikan dalam tabel berikut. Komputer Komputer digunakan untuk membuat script code Arduino IDE yang akan diupload ke dalam Mikrokontroller ESP 32     Dev-board ESP3 Digunakan sebagai chipset yang akan diprogram. Kabel data (micro usb) Kabel micro usb digunakan untuk interface dari komputer ke dev-board. USB Hub to type-c Karena kita menggunakan MacBook Air dengan interface usb type-c, maka dibutuhkan USB untuk meaghubungkan Mikrokontroler denga laptop. Wiring diagram Wiring diagram untuk proyek kita kali ini cukup mudah, yaitu hanya mengkoneksikan port micro usb di dev-board ke komputer atau laptop melalui usb port. Coding (menyiapkan program) Buka aplikasi Android IDE, pilih board DOIT ESP32 DEVKIT V1 , dan pilot port usb yang terkoneksi dengan dev-board ESP32, untuk kasus saya alamat yang terdeteksi adalah /dev/cu.usbserial-001 Serial Port (USB) . Secara lengkap seperti ditunjukan pada gambar berikut. Kebetulan untuk proyek kita kali ini programnya sudah disediakan di menu example Arduino IDE, jadi tinggal buka code dengan mengklik menu File > Examples > 01.Basics > Blink . Setelah kode program terbuka di halaman utama, klik tombol centang untuk melakukan proses compile . Proses compile hanya memverifiksi kode program terhadap chipset yang dipilih kemudian mengubahnya kedalam binary, namun belum menuliskannya ke dalam register chipset . Sedangkan untuk proses menulis hasil compiler,  gunakan tombol upload yang berbentuk anak panah ke kanan, proses ini akan langsung mengcompile program dan menuliskannya ke dalam chipset ESP 32. Berikut adalah kode program, dari basics example yang ada di Arduino IDE: void setup() { // melakukan inisialisasi LED_BUILTIN sebagai output pinMode(LED_BUILTIN, OUTPUT); } // fungsi untuk looping void loop() { digitalWrite(LED_BUILTIN, HIGH); // menyalakan LED delay(1000); // menunggu 1000 milisecond digitalWrite(LED_BUILTIN, LOW); // memattikan LED delay(1000); // menunggu 1000 milisecond } The result Setelah proses compile selesai ditunjukan dengan notifikasi done , pada pojok kanan bawah. Kemudian tekan tombol EN pada dev-board ESP32 untuk me- reset agar program dieksekusi dari awal. Penjelasan kode ( how the code works ) Development board ESP32 berhasil menyala dan mati dalam interval 1 detik, mari kita pahami baris demi baris kode LED blink diatas. Terdapat dua klaster fungsi pada program diatas yaitu fungsi  void setup() {...} dan  void loop(){...} , void setup digunakan untuk melakukan inisiasi program pertama kali, dan dieksekusi sekali dalam siklus program berjalan, dan program didalam bracket ini akan dieksekusi lagi setelah user menghidupan ulang atau mengklik tombol EN/RESET pada dev-board. Sedangkan fungsi  loop() merupkan fungsi yang akan diulang-ulang dalam siklus program berjalan, biasanya program utama akan diletakan didalam fungsi loop ini. void setup() { // melakukan inisialisasi LED_BUILTIN sebagai output pinMode(LED_BUILTIN, OUTPUT); } Baris kode dari 1 sampai 4 berada dalam klaster fungsi  void setup() yang berarti baris ini diekseskusi satu kali saat pertama chipset dinyalakan. Kode  pinMode(LED_BUILTIN, OUTPUT); berarti program menginisiasi bahwa variabel  LED_BUILTIN di assign sebagai  OUTPUT atau yang akan diekseskusi sebagai keluaran dari program.  LED_BUILTIN adalah variabel default yang merupakan alias dari salah satu GPIO yang terkoneksi dengan internal LED di development board versi 1. void loop() { digitalWrite(LED_BUILTIN, HIGH); // menyalakan LED delay(1000); // menunggu 1000 milisecond digitalWrite(LED_BUILTIN, LOW); // memattikan LED delay(1000); // menunggu 1000 milisecond } Baris kode 1 sampai 6, berada dalam klaster fungsi  void loop() yang menunjukan program ini akan diulang-ulang secara berurutatn dari baris kode 2, 3, 4 dan 5. Baris kode 2,  digitalWrite(LED_BUILTIN, HIGH); memerintahkan kepada mikrokontroller untuk memberikan daya  HIGH kepada GPIO yang terpasang LED, dengan perintah ini maka  LED_BUILTIN akan diberi daya sampai perintah selanjutnya dieksekusi. Baris kode ke 3,  delay(1000) memberikan instruksi kepada kontroler untuk menahan ekseksui perintah selanjutnya selama 1000 milisecond atau 1 detik. Baris kode ke 4,  digitalWrite(LED_BUILTIN, LOW); menginstruksikan kepada kontroler untuk memutus daya listrik di pin  LED_BUILTIN sehingga LED akan mati. Baris kode ke 5, sama seperti baris kode nomor 3. Troubleshooting Permasalahan yang terjadi pada saat running program ini biasanya terkait dengan ketidaksesuian antara board di IDE dengan development-board ESP32, Namun demikian ada beberapa troubleshooting yang bisa teman-teman lakukan jika mengalami kendala. Jika port usb tidak terdeteksi di board managment , biasanya terjadi karena ketidaksesuaian antara chipset yang digunakan di dev-board dengan driver yang diinstal. Bagi pengguna Macbook untuk mengecek usb mana yang terkoneksi dengan laptop kita bisa menggunakan perintah berikut: $sudo ls -lah /dev/ | grep usb Dari data diatas, dapat kita ketahui bahwa laptop tersebut terkoneksi dengan usb serial yaitu cu.usbserial-0001 dan tty.usbserial-0001.