ESP32 Lolin32 Lite Dengan Display LCD 20×4 (serial I2C)

Berikut ini percobaan menghubungkan ESP32 Lolin32 Lite dengan display LCD 20×4. Antar muka menggunakan komunikasi serial I2C. LCD 20×4 menggunakan protokol serial, sehingga perlu modul I2C.  ESP32 menggunakan tegangan 3,3 volt, sedangkan LCD 20×4 menggunakan tegangan 5 volt, sehingga perlu level converter antara I2C di ESP32 dan I2C di modul PCF8752. Pada LCD 20×4 dipasang modul serial to paralel PCF8574 untuk menghubungkan protokol I2C ke paralel input/output pada LCD.

ESP32 Lolin-32 dari WEMOS
ESP32 Lolin-32 dari WEMOS

Berikut ini blok diagram sistem

Skema Rangkaian

Berikut ini skema rangkaian lengkap.

Skema rangkaian ESP32 Lolin32 Lite dengan LCD I2C
Skema rangkaian ESP32 Lolin32 Lite dengan LCD I2C

Arduino Nano pada rangkaian tersebut hanya berfungsi untuk memberikan tegangan 5 volt, karena pada ESP32 Lolin32 Lite tidak ada pin 5V. Jika menggunakan ESP32 Devkit mestinya lebih enak, karena di ESP32 Devkit  ada pin 5V. Tegangan 5V ini dapat diganti dengan regulator / adaptor 5V lain.

Komunikasi I2C

ESP32 tidak memiliki pin I2C yang spesifik, jadi kita dapat memilih pin mana yang dipakai sebagai pin untuk I2C (SDA dan SCL). Pada percobaan ini dipilih pin 15 untuk SDA dan pin 13 untuk SCL. Konfigurasi ini dimasukkan di software dalam bentuk parameter I2C_SDA dan I2C SCL yang didefinisikan di awal software.

Semua pin pada ESP32 termasuk pin I2C  menggunakan tegangan kerja 3 volt, sedangkan display menggunakan tegangan 5 volt. Untuk itu tegangan kerja PCF8574 disamakan dengan display LCD (5 volt), sedangkan tegangan I2C diubah dari 3 volt (di ESP32) menjadi 5 volt (di PCF8574). Komunikasi harus 2 arah, karena protokol I2C mensyaratkan slave menjawab setiap kali ada pengiriman data. Untuk itu pada jalur I2C digunakan  komponen ‘bi directional level converter‘.

Power Supply

Sumber daya ESP32 menggunakan USB charger 5 volt. Pada board ESP32 sudah ada regulator 3,3 volt yang mengubah tegangan supply USB 5 volt menjadi 3,3 volt.

Sumber daya 5 volt untuk LCD dan PCF8574 diberikan melalui sebuah modul Arduino Nano yang  dipakai. Seharusnya dapat menggunakan power supply 5 volt apa saja. Kebetulan saja yang tersedia saat ini adalah board Arduino Nano.

Software

Berikut ini software yang dipakai untuk menghasilkan tampilan.

// Demo LCD dengan ESP32 I2C
#include <LiquidCrystal_I2C.h>
// https://www.makerguides.com/character-i2c-lcd-arduino-tutorial/
// Include the libraries:
// LiquidCrystal_I2C.h: https://github.com/johnrickman/LiquidCrystal_I2C

#include <Wire.h> // Library for I2C communication
#include <LiquidCrystal_I2C.h> // Library for LCD

//LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 16, 2); // Change to (0x27,16,2) for 16x2 LCD.
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 20, 4); 

#define I2C_SDA 15
#define I2C_SCL 13
#define LED_BUILTIN 22 // LED built in pada ESP32 Lolin32 Lite

void setup() {
  Wire.begin(I2C_SDA, I2C_SCL);
  // Initiate the LCD:
  lcd.init();
  lcd.backlight();
  Serial.begin(115200);
  Serial.println("\nLCD Test");
  pinMode(LED_BUILTIN, OUTPUT);
}
int counter = 0;
void loop() {

  // Print 'Hello World!' on the first line of the LCD:

  lcd.setCursor(0, 0);
  lcd.print("Elektrologi");
  lcd.setCursor(0, 1);
  lcd.print("iptek.web.id");
  lcd.setCursor(0, 2);
  lcd.print("ESP32 Lolin32 Lite");
  lcd.setCursor(0, 3);
  lcd.print("31 Januari 2021");

  lcd.setCursor(12, 0); 
  lcd.print(counter);

  Serial.print("Send data: ");
  Serial.println(counter);
  delay(500);

  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(500);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);
  counter++;
}

Hasil

ESP32 dan LCD 20x4
ESP32 dan LCD 20×4

Referensi

ESP32 DevkitC Clone

Selama ini saya menggunakan ESP32 dari model Lolin32. Sebagai alternatif, saya mencari board ESP32 dengan ukuran mirip dengan Lolin32, supaya dapat dipasang juga di breadboard. Hal ini penting karena saya sering melakukan percobaan di atas breadboard, dan mesti siap-siap juga kalau-kalau Lolin32 tidak ada lagi. Lolin32 mini sudah tidak diproduksi lagi oleh Wemos, sehingga bisa saja suatu hari tidak ada lagi.

Setelah cari sana-sini, kandidat board yang cocok adalah ESP32 DevkitC clone, atau disebut juga di pasaran sebagai NodeMCU ESP32.

Penampakan

Berikut ini tampak atas dari ESP32 DevkitC.

ESP32 DevkitC Clone tampak atas
ESP32 DevkitC Clone tampak atas

Berikut ini tampak bawah dari ESP32 DevkitC

ESP32 DevkitC Clone tampak bawah
ESP32 DevkitC Clone tampak bawah

 

Berikut ini ESP32 DevkitC di atas breadboard.  ESP32 ini tidak terlalu lebar, sehingga cocok untuk percobaan dengan breadboard.

ESP32 DevkitC Clone  di breadboard
ESP32 DevkitC Clone di breadboard

Ukuran board ESP32 ini mirip sekali dengan Lolin32 (Wemos). Berikut ini perbandingan lebar antara DevkitC (kiri) dan Lolin32 Lite (kanan).

ESP32 DevkitC Clone dan Lolin32
ESP32 DevkitC Clone dan Lolin32

Berikut ini perbandingan panjang antara DevkitC (bawah) dan Lolin32 Lite (atas).

ESP32 Lolin32 Lite (atas) dan ESP32 DevkitC (bawah)
ESP32 Lolin32 Lite (atas) dan ESP32 DevkitC (bawah)

Pinout

Berikut ini daftar pin pada ESP32 DevkitC. Total ada 38 pin yang dikeluarkan dari ESP32, namun ada 8 pin yang sifatnya internal, jadi praktis tidak dapat dipakai untuk aplikasi normal.

NodeMCU ESP32 / ESP32 DevkitC
NodeMCU ESP32 / ESP32 DevkitC

sumber: https://esphome.io/devices/nodemcu_esp32.html

Pada waktu memasukkan program dari PC ke board ini, tombol ‘Boot’ harus ditekan. Posisi tombol ‘boot’ dapat dilihat pada gambar berikut.

ESP32 Devkit Original
ESP32 Devkit Original

sumber gambar: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/hw-reference/esp32/get-started-devkitc.html

Tombol ‘EN’ fungsinya adalah untuk reset.

Contoh Kode

Pada board ESP32 tersebut terdapat sebuah LED yang dapat dikendalikan melalui GPIO2. Berikut ini contoh membuat LED kedip dengan modifikasi software Blink.ino bawaan Arduino. Mesti ditambahkan baris ‘#define LED_BUILTIN 2’ supaya dapat mengakses pin GPIO yang benar.

#define LED_BUILTIN 2
void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

Pada board DevkitC yang asli tidak ada LED on board, sedangkan pada board clone ini ada LEDnya. Keberadaan LED ini cukup membantu untuk melakukan percobaan sederhana dan debugging sederhana.

Keuntungan DevkitC ini dibandingkan Lolin32 adalah tersedia tegangan 5 volt, tidak hanya 3 volt. Tegangan 5 volt ini perlu untuk beberapa sensor yang hanya dapat bekerja di tegangan 5 volt.

Referensi

Sekian

Percobaan Simulasi Sistem Kendali Dengan ESP32 dan op-amp LM358

Berikut ini percobaan melakukan simulasi sistem kendali dengan mikroprosesor ESP32 dan rangkaian op-amp.

Sistem yang dikendalikan adalah simulasi sistem kendali posisi. Kecepatan diasumsikan memiliki orde 1. Sistem disimulasikan dengan op-amp LM358.

Berikut ini baru foto-foto dan gambarnya saja. source code dan diagram detail masih dalam pembuatan.

Output dari port serial
Output dari port serial
Output di osiloskop
Output di osiloskop
Rangkaian kendali digital tampak atas di breadboard
Rangkaian kendali digital tampak atas
Rangkaian kendali digital dengan ESP32 dan op-amp LM358  tampak samping
Rangkaian tampak samping

Referensi

 

 

Digital to Analog Converter (DAC) pada ESP32

Berikut ini percobaan menggunakan DAC (Digital to Analog Converter) pada mikroprosesor ESP32. Modul yang digunakan adalah Lolin32 Lite dari Wemos.

Pemrograman dilakukan di Arduino, jadi sebelumnya harus melakukan instalasi library ESP32 untuk Arduino.

Program DAC yang dicoba adalah sebagai berikut.

#define DAC1 25
// output di pin 25 (DAC1)

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

}
int Value = 255; //255= 3.3V 128=1.65V

void loop() { // Generate a Sine wave
int i;
for (i = 0; i < 256; i++) {
dacWrite(DAC1, i);
}
for (i = 255; i >= 0; i--) {
dacWrite(DAC1, i);
}
}

 

Output diambil dari pin 25. Tampilan sinyal pada pin 25 adalah sebagai berikut:

 

Sinyal output dari DAC pada ESP32
Sinyal output dari DAC pada ESP32

Tegangan maksimum adalah 2,76 volt.

Tegangan minimum adalah -0,36 volt. Kurang jelas kenapa tegangan dapat menjadi negatif.

Frekuensi adalah 360,4 Hz. Perioda adalah 0.0027 detik.

Waktu untuk konversi 1 sampel adalah 5,42 ms.

Frekuensi DAC adalah 184525 Hz.

Perbedaan Utama Arduino Uno dan WEMOS

Perbedaan utama Arduino Uno dan WEMOS adalah Arduino menggunakan prosesor ATmega328, sedangkan WEMOS menggunakan prosesor ESP8266 dan ESP32

Arduino UNO

Arduino UNO R3
Arduino UNO R3

Wemos

Wemos memproduksi beberapa board, di antaranya:

  • Wemos D1 mini
  • Wemos D32
  • Wemos D1 mini shield
  • Wemos W600

Wemos D1 mini

Wemos D1 mini
Wemos D1 mini Pro
Wemos D1 mini Pro
Wemos D1 mini Pro

Wemos D1 mini lite

Wemos D1 mini Lite
Wemos D1 mini Lite

 

Wemos D32

Wemos D32
Wemos D32
Wemos D32 Pro
Wemos D32 Pro

Wemos W600

Wemos W600-PICO
Wemos W600-PICO

Referensi

Cara Membuat Smart Room

Smart Room dapat dibuat dengan menggunakan mikroprosesor. Berikut ini tahap-tahap pembuatan smart room tersebut.

Menentukan Tujuan Smart Room

Tahap pertama dari sebuah pekerjaan/proyek adalah menentukan tujuan utama pekerjaan tersebut.

Berikut ini  beberapa alternatif tujuan sebuah smart room

  • Meningkatkan kenyamanan ruangan, bisa dari sisi pencahayaan, temperatur, kelembaban
  • Menghemat pemakaian energi. Suatu ruangan memerlukan temperatur untuk penerangan dan pemanasan/pendinginan
  • Meningkatkan keamanan ruangan

Menentukan Spesifikasi Sistem

Setelah tujuan ditentukan,berikutnya adalah menentukan spesifikasi teknis dari ruangan tersebut.

Hal-hal yang perlu diperhatikan pada spesifikasi smart-room:

  • Apakah temperatur perlu diukur?
  • Apakah temperatur perlu dikendalikan?
  • Apakah kelembaban perlu diukur?
  • Apakah kelembaban perlu dikendalikan?
  • Apakah cahaya perlu diukur?
  • Apakah cahaya perlu dikendalikan?
  • Temperatur ruangan diukur dengan ketelitian tertentu, misal 1 derajat Celcius, 0,5 derajat Celcius dan sebagainya
  • Rentang temperatur ruangan ditentukan. Hal ini untuk menentukan rentang sensor temperatur yang diperlukan.
  • Target temperatur yang diinginkan
  • Ketelitian pengukuran kelembaban.
  • Rentang kelembaban ruangan yang perlu diukur
  • Target kelembaban yang diinginkan.

Membuat Perancangan Sistem Secara Keseluruhan

Pada tahap ini dibuat arsitektur sistem secara keseluruhan. Aliran data & informasi ditentukan.

Perancangan perangkat keras

Pada tahap ini dilakukan pembuatan rancangan perangkat keras.

Hal-hal yang perlu ditentukan:

  • Menentukan mikrokontroler yang dipakai , jika menggunakan mikroprosesor
  • Menentukan sensor-sensor yang dipakai
  • Menentukan aktuator-aktuator yang diperlukan
  • Menentukan catu daya (power supply) yang diperlukan
  • Kotak untuk menyimpan perangkat

Berikut ini contoh sistem smart room dengan sebuah mikrokontroler sebagai pengendali utama.

Blok Diagram Perangkat Keras Smart-Room
Blok Diagram Perangkat Keras Smart-Room

Contoh prosesor populer yang dapat dipakai di antaranya:

  • Arduino UNO (ATmega328)
  • Arduino Nano (ATmega328)
  • ESP32 (Espressif)
  • ESP8266

ESP32 dan ESP8266 dapat dipakai jika kita memerlukan WiFi atau Bluetooth. Jika tidak perlu komunikasi nirkabel, cukup menggunakan Arduino berbasis ATmega328.

Contoh sensor yang dapat dipakai

  • LM35: sensor temperatur analog
  • DS18S20: sensor temperatur digital
  • BMP280: sensor temperatur dan tekanan udara
  • BME280: sensor temperatur, kelembaban dan tekanan udara
  • LDR (Light Dependent Resistor): sensor cahaya
  • Photodiode : sensor cahaya

Contoh Display yang dapat dipakai:

  • LCD 16×2
  • LCD 20×4
  • LCD matrix

Perancangan perangkat lunak

Pada tahap ini dilakukan hal-hal sebagai berikut

  • menentukan apakah akan menggunakan sistem operasi. pada sistem seperti ini sering dipakai sistem operasi waktu nyata (Real Time Operating System /RTOS ). Salah satu RTOS yang sering dipakai adalah FreeRTOS (https://www.freertos.org/)
  • membuat model diagram alir (flow chart)
  • membuat model aliran data (data flow diagram)
  • membuat model FSM (finite state machine) jika pada sistem terdapat proses yang memerlukan FSM
  • membuat model pengolahan sinyal dengan DSP (Digital Signal Processing), jika terdapat pengolahan sinyal secara digital. Umumnya melibatkan filter digital , equalizer digital, perekaman data digital.

Implementasi Perangkat Keras

Pada tahap ini dibuat papan rangkaian dengan PCB (Printed Circuit Board)

Implementasi Perangkat Lunak

Pada tahap ini dilakukan proses pembuatan perangkat lunak untuk mikrokontroler

Pengujian sistem

Pada tahap ini dilakukan pengujian untuk membandingkan antara perilaku sistem dengan spesifikasi yang diinginkan. Untuk itu diperlukan pengukuran-pengukuran untuk kemudian dibandingkan dengan angka-angka yang diinginkan pada spesifikasi.

Pengujian ini biasanya dilakukan secara kuantitatif, sehingga cukup obyektif.

Perangkat yang diperlukan untuk pengujian sistem di antaranya

  • Termometer digital atau analog sesuai dengan rentang temperatur dan ketelitian yang diinginkan
  • Higrometer digital atau analog sesuai dengan rentang kelembaban dan ketelitian pengukuran kelembaban.
  • Light Meter untuk mengukur pencahayaan ruangan
  • Voltmeter / Wattmeter untuk mengukur unjuk kerja tegangan/ arus/ daya pada rangkaian.

Validasi Sistem

Pada tahap ini dilakukan perbandingan antara tujuan sistem dengan perilaku sistem. Jika sistem yang dibuat sudah dapat menyelesaikan permasalahan di tujuan, maka sistem dapat dikatakan sudah berhasil divalidasi.

Validasi ini biasanya dilakukan secara kualitatif sehinggak agak sedikit subyektif.

Sistem Pengendali Pompa versi 3

Sistem pengendali pompa versi 3 ini adalah lanjutan dari Sistem Pengendali Pompa versi 2 dan Pengendali Pompa versi 1.

Pengendali pompa versi 3
Pengendali pompa versi 3

Fitur utama:

  • Prosesor utama menggunakan ESP32
  • Prosesor display menggunakan ATmega328 (Arduino Nano)
  • Sistem operasi menggunakan FreeRTOS
  • Display menggunakan P10 dot matrix 32 x 16 pixel
  • Relay menggunakan solid state relay (SSR), sebelumnya menggunakan relay elektromekanik

Saat ini implementasi masih di breadboard, belum disolder padahal sudah mulai berdebu.

Fitur yang masih direncanakan namun belum sempat diimplementasikan:

  • Monitoring dengan IoT , artinya data sistem dikirim ke suatu server perekam data.
  • Deteksi ketinggian air dengan sensor ultrasonik

Display Untuk Mikroprosesor

Berikut ini beberapa jenis display yang sering dipakai untuk sistem mikroprosesor berbasis Arduino:

  • Dot matriks 16×2
  • Dot matriks 20×4
  • E Paper / E-Ink display
  • OLED
  • LCD TFT / IPS

Antar muka yang dipakai ke display antara lain:

  • komunikasi paralel
  • komunikasi serial I2C
  • komunikasi serial SPI

Komunikasi paralel menggunakan banyak pin, karena setiap bit menggunakan 1 jalur. Antar muka serial hanya memerlukan pin sedikit. Display keluaran baru umumnya sudah menggunakan komunikasi serial.

Berikut ini contoh antar muka ESP32 LOLIN32 Lite dengan display E-INK, menggunakan protokol SPI.

Antar muka LOLIN32 LITE dengan display E-INK Heltec
Antar muka LOLIN32 LITE dengan display E-INK Heltec

Literatur:

Berikut ini antar muka ESP32 Lolin32 Lite dengan display OLED 0.91″, menggunakan protokol I2C.

ESP32 Lolin32 Lite dengan OLED 91
ESP32 Lolin32 Lite dengan OLED 91

Referensi

  • https://github.com/adafruit/Adafruit_SSD1306/blob/master/examples/ssd1306_128x32_i2c/ssd1306_128x32_i2c.ino

 

 

Berikut ini ESP32 dengan display LCD TFT berbasis chip ST7789 dengan resolusi 240×240 RGB

ESP32 Dengan TFT ST7789
ESP32 Dengan TFT ST7789

Referensi

  • TFT ST7789 https://simple-circuit.com/arduino-st7789-ips-tft-display-example/

 

Enkripsi Data Antara ESP32 Dan Windows

Mikrokontroler ESP32 dapat berkirim data melalui jaringan dengan komputer lain. Untuk menjaga kerahasiaan data yang dikirim tersebut, maka perlu dilakukan enkripsi  data yang dikirim. Pada tulisan ringkas ini akan ditinjau library enkripsi data yang kompatibel antara ESP32 dan Windows, sehingga memungkinkan pertukaran data dengan enkripsi antara keduanya.

Contoh enkripsi data dengan AES-128 dapat diikuti di artikel berikut ini: https://everythingesp.com/esp32-arduino-tutorial-encryption-aes128-in-ecb-mode/

Enkripsi pada contoh tersebut sangat sederhana:

  • menggunakan AES-128 dengan mode ECB (Electronic Codebook). Seperti diketahui, mode ECB ini punya banyak kelemahan, sehingga kalau mau lebih profesional kita mesti menggunakan mode lain seperti CBC (Cipher Block Chaining).
  • ukuran data harus kelipatan 16 byte. Jika ukuran data lebih dari 16 byte, maka fungsi mesti dipanggil berulangkali, dan kalau ukuran data bukan kelipatan 16, perlu dilakukan padding (pengisian) supaya menjadi kelipatan 16.

Selanjutnya bagaimana supaya data yang dienkripsi di ESP32 dapat dibaca di Windows? Untuk itu perlu diinstall library yang sama / kompatibel di Windows. Untuk mudahnya, pada contoh ini akan digunakan library yang sama supaya tidak perlu mengubah source code.

Library yang dipakai pada ESP32 tersebut adalah Mbed TLS (https://tls.mbed.org/) . Library Mbed TLS tersedia dalam bentuk source code, jadi dapat juga dicompile sendiri untuk platform lain. Untuk Windows, sudah ada library yang sudah dicompile, jadi tinggal diinstall saja. Versi yang tersedia untuk compiler GNU based (Cygwin, MinGW) dan Visual Studio.

Pada contoh berikut ini akan dipakai IDE Netbeans 8.2 dengan compiler Cygwin. Netbeans terbaru adalah versi 11, namun Netbeans yang sudah support C/C++ baru sampai versi 8.2, jadi versi 11 belum mendukung bahasa C / C++.

Library perlu diinstall dari program Setup dari Cygwin. Jalankan program instalasi Cygwin (setup-x86_64.exe), kemudian masuk ke menu pemilihan packages. Pilih View “Full”, dan Search di “mbedtls”. Pilih untuk install library mbedtls dan mbedtls-devel.

Cygwin Mbed TLS library
Cygwin Mbed TLS library

Nama library untuk Mbed TLS adalah libmbedcrypto. Selanjutnya tambahkan library tersebut di setting project dari Netbeans

Berikut ini tampilan library di Netbeans. Lokasi library tersebut adalah di C:/cygwin64/lib/libmbedcrypto.dll.a

Library Mbed TLS di Netbeans 8.2
Library Mbed TLS di Netbeans 8.2

Setelah itu melakukan porting dari program AES-128 di ESP32 ke Netbeans. Hasilnya dapat dilihat di tautan berikut:  https://github.com/waskita/embedded/blob/master/win-crypto/main.c

Berikut ini source code program hasil porting:


/*
* enkripsi data dengan AES-CBC
* modifikasi dari https://everythingesp.com/esp32-arduino-tutorial-encryption-aes128-in-ecb-mode/
* menggunakan library mbedtls dari cygwin
*/
#include "mbedtls/aes.h"
#include "string.h"
#include "stdio.h"

void encrypt(char * plainText, char * key, unsigned char * outputBuffer) {

mbedtls_aes_context aes;

mbedtls_aes_init(&aes);
mbedtls_aes_setkey_enc(&aes, (const unsigned char*) key, strlen(key) * 8);
mbedtls_aes_crypt_ecb(&aes, MBEDTLS_AES_ENCRYPT, (const unsigned char*) plainText, outputBuffer);
mbedtls_aes_free(&aes);
}

void decrypt(unsigned char * chipherText, char * key, unsigned char * outputBuffer) {

mbedtls_aes_context aes;

mbedtls_aes_init(&aes);
mbedtls_aes_setkey_dec(&aes, (const unsigned char*) key, strlen(key) * 8);
mbedtls_aes_crypt_ecb(&aes, MBEDTLS_AES_DECRYPT, (const unsigned char*) chipherText, outputBuffer);
mbedtls_aes_free(&aes);
}

int main(void) {
char * key = "abcdefghijklmnop";

char *plainText = "Tech tutorials x";
unsigned char cipherTextOutput[16];
unsigned char decipheredTextOutput[16];

encrypt(plainText, key, cipherTextOutput);
decrypt(cipherTextOutput, key, decipheredTextOutput);

printf("Original plain text: %s\n", plainText);

printf("Ciphered text:\n");
for (int i = 0; i < 16; i++) {

char str[3];

sprintf(str, "%02x", (int) cipherTextOutput[i]);
printf("%s", str);
}

printf("\n\nDeciphered text:\n");
for (int i = 0; i < 16; i++) {
printf("%c", (char) decipheredTextOutput[i]);
//printf("%c", (char) decipheredTextOutput[i]);
}
return 0;
}

Perubahan yang dilakukan:

  • memindahkan isi setup() di Arduino ke main() di Netbeans
  • menambahkan header file stdio.h dan string.h
  • mengganti Serial.print() dengan printf()
Output di ESP32 ArduinoOutput Windows 32
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:928
ho 0 tail 12 room 4
load:0x40078000,len:8740
load:0x40080400,len:5788
entry 0x4008069c
Original plain text:
Tech tutorials x
Ciphered text:
567a3b23b683d8488d5d40d2a56e31d2
Deciphered text:
Tech tutorials x
Original plain text: Tech tutorials x
Ciphered text:
567a3b23b683d8488d5d40d2a56e31d2
Deciphered text:
Tech tutorials x
RUN SUCCESSFUL (total time: 70ms)

Dari hasil di atas, nampak bahwa ciphered text adalah identik, dan keduanya dapat melakukan proses dekripsi. Jadi dapat disimpulkan kedua program tersebut mempunyai fungsi yang sama, jadi data yang dienkripsi di ESP32 dapat dibaca di Windows dan sebaliknya.

Tahap selanjutnya adalah menambahkan proses komunikasi data dengan menggunakan UDP/TCP di ESP32 dan Windows, namun hal itu akan menjadi tulisan lain lagi.

Referensi

Debugging ESP32 Dengan FT2232HL

ESP32 dan CJMCU-2232HL

Mikrokontroler/mikroprosesor berbasis ESP32 mempunyai fitur on-chip-debugging dengan protokol JTAG. Supaya ESP32 ini dapat didebug, maka perlu ada komponen JTAG Adapter. Petunjuk pemilihan JTAG adapter terdapat di artikel “Selecting JTAG Adapter“. Cara termudah adalah menggunakan board ESP32-WROVER-KIT yang sudah mempunyai JTAG adapter di dalamnya. Cara lain adalah menambahkan JTAG adapter pada board ESP32 yang belum dilengkapi dengan JTAG Adapter. Daftar JTAG Adapter yang dapat dipakai dapat dilihat antara lain di artikel “Debug Adapter Hardware“.

Pada tulisan ini diuraikan cara menyambungkan ESP32 ke JTAG Adapter berbasis FT2232HL.

Cara termudah melakukan debugging pada ESP32 adalah menggunakan board ESP32-WROVER-KIT yang sudah ada JTAG Adapter built-in di dalamnya. Sayangnya harga board ini agak mahal (sekitar USD 50). Jika Espressif sendiri menggunakan FT2232 untuk JTAG Adapter, nampaknya kemampuan FT2232 cukup bagus sebagai debugger.

Harga board ESP32 yang murah sekitar USD 7, sedangkan breakout board untuk FT2232 harganya sekitar USD 7, jadi dengan USD 14 sudah memperoleh ESP32 lengkap dengan JTAG debugger. Hanya saja perlu merangkai sendiri ESP32 dengan FT2232.

Hardware

Berikut ini teknik penyambungan ESP32 ke FT2232 menurut beberapa sumber.

#1 Analisis Skematik ESP32 WROVER KIT

Contoh cara menyambungkan antara ESP32 dengan FT2232 dapat dilihat dari skematik ESP32 WROVER KIT di situs Espressif. Berikut ini adalah pin JTAG pada ESP32, yaitu:

  • MTCK
  • MTDI
  • MTDO
  • MTMS
  • EN
Pin JTAG pada ESP32

Berikut ini adalah bagian dari skematik ESP32 WROVER KIT, khususnya yang tersambung ke JTAG. Pin yang dipakai adalah ADBUS0, ADBUS1, ADBUS2, ADBUS3, ACBUS1, yang tersambung ke sinyal TCK, TDI, TDO, TMS dan R_RST

Pin JTAG pada FT2232HL

Tabel berikut berisi hasil analisis daftar pin dan sinyal JTAG pada skematik ESP32 WROVER KIT tersebut:

Pin FT2232HLSinyalSinyalPin ESP32
ADBUS0TCKMTCKR_IO13
ADBUS1TDIMTDIR_IO12
ADBUS2TDOMTDOR_IO15
ADBUS3TMSMTMSR_IO14
ACBUS2RSTENR_nTRST

#2 Situs PlatformIO

Penyambungan JTAG juga dijelaskan di situs PlatformIO sebagai berikut:

FT2232H Mini-Module PinBoard JTAG PinDescription
GND [CN2-2]GNDDigital ground
AD0 [CN2-7]TCKJTAG Return Test Clock
AD1 [CN2-10]TDITest Data In
AD2 [CN2-9]TDOTest Data Out
AD3 [CN2-12]TMSTest Mode State
AC2 [CN2-20]RESETConnect this pin to the (active low) reset input of the target CPU (EN for ESP32)

Sumber: http://docs.platformio.org/en/latest/plus/debug-tools/minimodule.html

Modul FT2232 yang dipakai pada artikel tersebut adalah “FT2232H Mini Module” yang diproduksi oleh FTDI.

FT2232H Mini Modul

Produk breakout board serupa juga dibuat oleh CJMCU seperti pada foto berikut:

CJMCU-2232HL

#3 Forum Platformio

Sebagai perbandingan, berikut ini daftar koneksi JTAG ke ESP32 menurut artikel forum PlatformIO (Debugging ESP32 – How), modul FT2232 yang digunakan adalah “FTDI2232 minimodule”:

To debug ESP32 using FTDI2232 minimodule, here is the required connection:
FTDI AD0 -> ESP32 GPIO13 (TCK)
FTDI AD1 -> ESP32 GPIO12 (TDI)
FTDI AD2 -> ESP32 GPIO15 (TDO)
FTDI AD3 -> ESP32 GPIO14 (TMS)
FTDI AC2 -> ESP32 EN (RST)
FTDI GND -> ESP32 GND

Sumber: https://community.platformio.org/t/debugging-esp32-how/4499

#4 Datasheet FT2232H

Penggunaan FT2232H sebagai JTAG juga dijelaskan secara ringkas di datasheet FT2232H sebagai berikut:

Konfigurasi pin FT2232H

Software

Setelah mendapatkan kepastian cara menyambungkan hardware JTAG debugger, selanjutnya adalah setting software untuk melakukan debugging.

Status saat ini baru melakukan studi software apa saja yang perlu disiapkan. Beriktu ini penjelasan software untuk debugging ESP32:

  • Penggunaan software debugger Eclipse/Command Line: https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/jtag-debugging/using-debugger.html https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/jtag-debugging/configure-other-jtag.html
  • Penggunaan Debugger dengan PlatformIO: http://docs.platformio.org/en/latest/plus/debug-tools/minimodule.html
  • Debugging ESP32 secara umum: https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/jtag-debugging/

Hasil debugging menyusul.

Kesimpulan

Kesimpulan sementara ini:

  • Menurut studi literatur, ESP32 dapat didebug dengan hardware FT2232HL, dengan biaya total USD 14, lebih murah daripada harus memakai ESP WROVER KIT seharga USD 50.
  • Penyambungan antara ESP32 dan FT2232 dijelaskan di beberapa situs, dengan isi konsisten.
  • Proses debugging belum dilakukan, namun dari pengalaman selama ini, isi artikel di situs Espressif cukup lengkap dan mudah diikuti. Nampak bahwa Espressif cukup serius mengusahakan agar produk ESP32nya mudah dipakai oleh ‘orang biasa’.

Referensi

Percobaan Pemrograman Periferal Input/Output ESP32

Berikut ini beberapa percobaan pemrograman untuk mengakses input/output periferal pada mikroprosesor ESP32. Percobaan dilakukan pada board Lolin32 Lite, namun dapat dilakukan juga pada board ESP32 tipe lain.

Jenis percobaan yang umum pada mikroprosesor di antaranya sebagai berikut:

  • Input digital
  • Output digital
  • Input analog (dengan Analog to Digital Converter / ADC)
  • Output analog (dengan Digital to Analog converter / DAC)
  • Port serial (input output)
  • Interupsi timer
  • Interupsi eksternal / pin

Percobaan Port Digital

under construction

Percobaan Port Serial

Pada ESP32 terdapat 3 buah port serial: UART0, UART1 dan UART2. UART0 sudah tersambung melalui chip USB Serial CH340 pada board Lolin32 Lite, sehingga jika ingin menggunakan UART0 cukup dengan menyambungkan kabel USB dari PC ke konektor mikro USB pada ESP32. Port UART0 ini dipakai untuk melakukan upload program dan juga sebagai input/output default dari ESP32. Output ke port UART0 dari program di ESP32 dapat dilakukan dengan fungsi input/output standar seperti printf().

Pin-pin untuk UART0 pada ESP32 adalah U0TXD sebagai TX dan U0RXD sebagai RX. Level tegangan TX dan RX di sini adalah 3.3 volt.

Pin TX dan RX UART0 terhubung ke ESP32

Pin TX dan RX ini terhubung ke IC CH340C yang kemudian terhubung ke port USB (pin D+ dan D-)

Konverter TX/RX (TTL 3.3 volt) ke USB
Skema port USB pada Lolin32 Lite

Port UART2 dan UART3 dapat diaktifkan jika perlu. Pin yang dipakai dapat dipilih dan diatur menggunakan software. Jika UART2 dan UART3 tidak digunakan, pin-pin nya dapat dipakai sebagai fungsi lain, misalkan sebagai GPIO input/output digital.

Pin UART2 dan UART3 menggunakan level TTL, sehingga jika ingin dihubungkan ke PC dapat menggunakan konverter USB ke Serial. Perlu dipilih komponen USB to Serial yang dapat menggunakan level tegangan 3.3 volt. Skema pemasangan konverter adalah sebagai berikut:

interkoneksi port serial UART2 dan UART3

Pin TX dihubungkan dengan RX , pin RX dihubungkan dengan TX, kedua pin GND dihubungkan. Pin 5 volt / 3,3 volt jangan dihubungkan , kecuali memang ESP32 mau diberi daya dari modul USB-Serial.

Perhatikan bahwa mesti menggunakan modul USB-Serial dengan tegangan kerja 3m3 volt. Ada modul USB-Serial yang dapat bekerja pada tegangan 5 volt maupun 3,3 volt, dan dapat diatur menggunakan jumper.

Chip USB to Serial yang umum di pasaran antara lain:

  • FTDI based, misal FT232. Biasanya paling mahal, namun enaknya adalah drivernya sudah built in di Windows maupun Mac OSX
  • CH340 based, ini biasanya lebih murah dibandingkan FTDI
  • Prolific based

Berikut ini modul USB to Serial berbasis CH340. Modul ini tidak ada setting tegangan.

Konverter USB to Serial berbasis CH340

Berikut ini modul USB to Serial berbasis FTDI (FT232RL). Modul ini ada setting tegangan kerja antara 3,3 volt dan 5 volt.

Konverter USB to Serial berbasis FTDI FT232RL

Pin pada modul USB-Serial cukup banyak, namun yang umum dihubungkan cukup GND, TX dan RX.

ESP32 Lolin32 Lite

ESP32 Lolin32 Lite buatan WEMOS

Fitur utama dari Lolin32 Lite adalah sebagai berikut

  • WiFi
  • bluetooth
  • 4MB Flash
  • Lithium battery interface, 500mA Max charging current
Lolin32 Lite
Penampilan fisik Lolin32 Lite
Lolin32 Lite
Pin-pin pada Lolin32 Lite
Array of Lolin32 Lite

Komponen utama pada Lolin32 Lite adalah sebagai berikut:

  • ESP32-D0WDQ6  (prosesor Espressif ESP32)(https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf)
    “ESP32-D0WDQ6, Dual core, No embedded flash, Wi-Fi b/g/n + BT/BLE Dual Mode, QFN 6*6”
  • W25Q32FVSS (3V 32M-bit Serial Flash Memory With Dual/Quad SPI & QPI) https://www.winbond.com/resource-files/w25q32fv%20revi%2010202015.pdf
  • UMH3N (General purpose dual digital transistor) http://rohmfs.rohm.com/en/products/databook/datasheet/discrete/transistor/digital/emh3t2r-e.pdf
    https://www.mouser.com/ds/2/348/umh3ntn-e-1018108.pdf
  • CH340C (USB to serial chip) https://www.mpja.com/download/35227cpdata.pdf
  • ME6211 (High speed LDO regulators) https://datasheet.lcsc.com/szlcsc/Nanjing-Micro-One-Elec-ME6211C33M5G-N_C82942.pdf
  • TP4054 (TP4054 Standalone Linear Li-lon Battery Charger with Thermal Regulation in SOT)
    https://www.piekarz.pl/pl/pdf.php?id=30089 (English)
    https://datasheet.lcsc.com/szlcsc/Nanjing-Extension-Microelectronics-TP4054_C32574.pdf (Chinese)
  • LED onboard di pin 22 (GPIO22), active low, melalui resistor 2k

Untuk menjalankan FreeRTOS pada ESP32, ada 2 alternatif:

Resource

FreeRTOS Untuk Arduino AVR, ESP32 dan STM32F103 Blue Pill

Sistem operasi FreeRTOS dapat diaplikasikan pada berbagai mikrokontroler. Pada tulisan ini diulas SDK (IDE + compiler) yang dapat dipakai untuk menjalankan FreeRTOS pada Arduino (UNO+Nano), ESP32 dan STM32F103 (Blue Pill)

Arduino

Arduino Nano
Arduino Nano

Espressif ESP32

ESP32 Lolin Wemos
ESP32 Lolin Wemos

STM32F103C8T6 (Blue Pill)

STM32F103C8T Blue Pill
STM32F103C8T Blue Pill

Mikroprosesor untuk FreeRTOS

FreeRTOS adalah suatu sistem operasi untuk membuat sistem real time berbasis mikroprosesor. Sistem operasi ini cocok untuk sistem-sistem yang kecil dan sederhana. Untuk sistem yang lebih kompleks, diperlukan sistem operasi real-time yang lebih besar seperti eCOS, embedded Linux (or Real Time Linux) ataupun uCLinux.

Berikut ini beberapa mikroprosesor yang cocok untuk menjalankan sistem operasi FreeRTOS.

Prosesor di gambar di atas adalah sebagai berikut:

  • NXP LPCXpresso LPC1769
  • Espressif ESP8266
  • Esperssif ESP32
  • Arduino Nano (clone)
  • ST Micro STM32F103C8T dan programmernya ST-LINK-V2

Barang-barang yang ditampilkan di sini adalah prosesor yang ada di laboratorium dan sempat dicoba. Masih banyak lagi prosesor yang dapat menjalankan FreeRTOS yang belum dicoba.

Arduino Nano dapat menjalankan FreeRTOS mengingat porting FreeRTOS untuk Atmel AVR tersedia di situs FreeRTOS. Namun kemampuannya terbatas, mengingat memori di ATMega328 sangat terbatas.

Arduino Nano
Arduino Nano

Selanjutnya adalah board LPCXPresso dengan prosesor NXP LPC1769. Kemampuan prosesor ini cukup tinggi.

LPCXpresso dengan prosesor NXP LPC1769

STM32F103 kemampuannya menengah saja, tidak terlalu tinggi, namun kelebihan utama dari prosesor ini adalah tersedia dengan harga murah dari berbagai vendor. Artikel tentang modul ini banyak di Internet sehingga lumayan memudahkan bagi pemula.

Modul STM32F103C8T “Blue Pill”

STM32F103 dapat diisi proram dengan berbagai cara, namun yang paling mudah adalah menggunakan modul ST-LINK-V2 berikut ini.

ST-LINK-V2 untuk upload program ke STM32

Daya tarik utama dari ST-LINK-V2 adalah harganya yang murah, karena banyak versi clone / KW-nya.

Berikutnya adalah prosesor ESP8266 dan ESP32 dari Espressif. Porting FreeRTOS untuk prosesor ini banyak tersedia.

ESP8266
ESP8266
Modul ESP32 LOLIN32

Berikut ini tabel perbandingan kekuatan dari prosesor yang dipakai, dilihat dari clock, flash memory dan static RAM.

ModelClockFlash MemoryStatic RAM
ATMega32816 MHz32 kB2 kB
STM32F103C8T72 MHz64 kB20 kB
LPC1769100 MHz512 kB64 kB
ESP32240 MHzexternal (typical 4 MB)520 kB
ESP8266160 MHzexternal80 kB

Perbandingan clock kurang lebih mewakili kecepatan, walaupun sebenarnya perbandingan kecepatan tidak dapat hanya dibandingkan dari clock saja, namun juga mesti melihat arsitektur masing-masing mikroprosesor.

Referensi ports dan demo untuk FreeRTOS adalah sebagai berikut: