Komunikasi UART Raspberry Pi Pico dan ESP32: Mengirim Data Serial

Raspberry Pi Pico dan ESP32 merupakan dua mikrokontroler yang banyak digunakan dalam proyek Internet of Things (IoT), robotika, otomasi, dan sistem embedded. Keduanya dapat digunakan secara bersamaan ketika sebuah proyek membutuhkan kemampuan atau fitur yang berbeda dari masing-masing mikrokontroler. Salah satu cara untuk menghubungkan Raspberry Pi Pico dengan ESP32 adalah menggunakan komunikasi UART. Dengan UART, kedua mikrokontroler dapat saling bertukar data melalui komunikasi serial menggunakan pin TX (Transmit) dan RX (Receive). Pada tutorial ini, kita akan mencoba membuat komunikasi UART Raspberry Pi Pico dan ESP32. Raspberry Pi Pico akan mengirimkan data serial berupa teks kepada ESP32, kemudian ESP32 akan menerima dan menampilkan data tersebut melalui Serial Monitor.

Apa Itu UART?

UART (Universal Asynchronous Receiver/Transmitter) adalah protokol komunikasi serial yang digunakan untuk mengirim dan menerima data antarperangkat secara asynchronous atau tanpa clock bersama. Komunikasi UART umumnya menggunakan dua jalur utama:

- TX (Transmit) untuk mengirim data.

- RX (Receive) untuk menerima data. 

Selain TX dan RX, kedua perangkat juga harus memiliki GND yang terhubung bersama agar memiliki referensi tegangan yang sama. Secara sederhana, alur komunikasi UART dapat digambarkan seperti berikut: 

- Raspberry Pi Pico TX → ESP32 RX

- Raspberry Pi Pico RX ← ESP32 TX

- Raspberry Pi Pico GND ↔ ESP32 GND

Perlu diperhatikan bahwa pin TX dari perangkat pertama harus dihubungkan ke pin RX perangkat kedua. Begitu juga sebaliknya.

Mengapa Menggunakan UART untuk Raspberry Pi Pico dan ESP32?

Komunikasi UART memiliki beberapa kelebihan untuk proyek mikrokontroler, antara lain:

1. Rangkaian sederhana, karena hanya membutuhkan TX, RX, dan GND.

2. Mudah diprogram menggunakan MicroPython maupun Arduino IDE.

3. Cocok untuk mengirim data sensor, status perangkat, perintah, dan informasi lainnya.

4. Tidak membutuhkan koneksi Wi-Fi jika komunikasi hanya dilakukan secara langsung.  

5. Dapat digunakan untuk menghubungkan mikrokontroler yang berbeda. 

Contohnya, Raspberry Pi Pico dapat digunakan untuk membaca sensor, sedangkan ESP32 digunakan untuk mengirimkan data tersebut melalui Wi-Fi. Kedua perangkat kemudian berkomunikasi menggunakan UART.

 

Baca juga: Raspberry Pi Pico dan Relay 1 Channel: Membuat Saklar Elektronik dengan Push Button 

Komponen yang Dibutuhkan

Untuk membuat proyek komunikasi UART Raspberry Pi Pico dan ESP32, siapkan beberapa komponen berikut:

- 1 × Raspberry Pi Pico

- 1 × ESP32

- Kabel jumper female-to-female

- Breadboard jika diperlukan

- 2 × kabel USB

- Komputer/laptop

Pada tutorial ini, Raspberry Pi Pico akan diprogram menggunakan MicroPython melalui Thonny IDE, sedangkan ESP32 akan diprogram menggunakan Arduino IDE.

Catatan: Contoh ini menggunakan ESP32 dengan GPIO17 sebagai TX dan GPIO16 sebagai RX. Pada ESP32, UART dapat dipetakan ke GPIO tertentu sehingga pin yang digunakan bisa berbeda tergantung board dan konfigurasi program.

Wiring Raspberry Pi Pico dan ESP32

Kita akan menggunakan UART0 pada Raspberry Pi Pico. Pada Pico, UART0 dapat menggunakan:

- GP0 sebagai TX

- GP1 sebagai RX

Sedangkan pada ESP32 kita akan menggunakan UART2 dengan:

- GPIO17 sebagai TX

- GPIO16 sebagai RX 

Tabel Koneksi


Raspberry Pi Pico

ESP32

Fungsi

GP0 (TX)

GPIO16 (RX)

Data dari Pico ke ESP32

GP1 (RX)

GPIO17 (TX)

Data dari ESP32 ke Pico

GND

GND

Ground bersama


 


Perhatikan bahwa TX dan RX harus disilang. Jadi, jangan menghubungkan TX ke TX atau RX ke RX. Karena Raspberry Pi Pico dan ESP32 sama-sama menggunakan logika 3,3 V, komunikasi UART langsung pada level logika ini dapat digunakan. Jangan lupa menghubungkan GND kedua board. Tanpa ground bersama, komunikasi serial dapat gagal atau menghasilkan data yang tidak sesuai.

Mengatur Baud Rate UART

Sebelum kedua mikrokontroler berkomunikasi, parameter UART harus disesuaikan. Salah satu parameter yang paling penting adalah baud rate. Baud rate menentukan kecepatan komunikasi serial. Contohnya:

- 9600 baud

- 19200 baud

- 38400 baud

- 57600 baud

- 115200 baud

Pada tutorial ini kita menggunakan 115200 baud. Artinya, Raspberry Pi Pico dan ESP32 harus menggunakan baud rate yang sama.

- Raspberry Pi Pico    → 115200

- ESP32                      → 115200

Jika Raspberry Pi Pico menggunakan 115200 tetapi ESP32 menggunakan 9600, data yang diterima biasanya akan terlihat sebagai karakter yang tidak beraturan.

Program Raspberry Pi Pico sebagai Pengirim Data

Pada bagian ini, Raspberry Pi Pico akan bertindak sebagai UART transmitter atau perangkat yang mengirimkan data. Program menggunakan MicroPython.

Kode Program Raspberry Pi Pico

from machine import UART, Pin

import time


# Menggunakan UART0

uart = UART(0, baudrate=115200, tx=Pin(0), rx=Pin(1))


while True:

    pesan = "Halo dari Raspberry Pi Pico!"

    

    uart.write(pesan + "\n")

    

    print("Mengirim:", pesan)

    

    time.sleep(2)


Program tersebut melakukan beberapa hal sederhana.

1. Mengimpor modul

 

from machine import UART, Pin

import time


Modul UART digunakan untuk mengaktifkan komunikasi serial, sedangkan Pin digunakan untuk menentukan pin TX dan RX.

2. Membuat koneksi UART

 

uart = UART(0, baudrate=115200, tx=Pin(0), rx=Pin(1))


Baris tersebut mengatur:

- UART yang digunakan: UART0

- Baud rate: 115200

- TX: GP0

RX: GP1

3. Mengirim data

 

uart.write(pesan + "\n")


Perintah uart.write() digunakan untuk mengirimkan data melalui pin TX. Setiap dua detik, Pico akan mengirim:

 

Halo dari Raspberry Pi Pico!

 

Program ESP32 sebagai Penerima Data

Selanjutnya, ESP32 akan digunakan sebagai UART receiver atau penerima data. Program ESP32 dibuat menggunakan Arduino IDE.

Kode Program ESP32

#define RXD2 16

#define TXD2 17


void setup() {

  Serial.begin(115200);


  // UART2 ESP32

  Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2);


  Serial.println("ESP32 siap menerima data dari Raspberry Pi Pico");

}


void loop() {


  if (Serial2.available()) {

    String data = Serial2.readStringUntil('\n');


    Serial.print("Data dari Pico: ");

    Serial.println(data);

  }

}


Pada program tersebut, ESP32 menggunakan UART2 melalui objek Serial2. Pin yang digunakan adalah:

 

#define RXD2 16

#define TXD2 17


Kemudian UART diaktifkan menggunakan:

 

Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2);


Parameter tersebut menentukan:

- Baud rate = 115200

- Format data = 8N1

- RX = GPIO16

TX = GPIO17

Menguji Komunikasi UART

Setelah wiring selesai dan kedua program sudah di-upload, lakukan langkah berikut:

Langkah 1 — Upload Program ke Raspberry Pi Pico

- Hubungkan Raspberry Pi Pico ke komputer menggunakan USB.

- Buka Thonny IDE, kemudian upload program MicroPython ke Pico.

- Setelah program berjalan, Pico akan mulai mengirim data melalui UART.

Raspberry Pi Pico mengirim data ke ESP32 

 


Langkah 2 — Upload Program ke ESP32

- Hubungkan ESP32 ke komputer menggunakan USB.

- Upload program ESP32 menggunakan Arduino IDE.

- Setelah proses upload selesai, buka Serial Monitor.

- Atur baud rate Serial Monitor menjadi 115200.

- Jika wiring dan program benar, Serial Monitor ESP32 akan menampilkan:

ESP32 menerima data dari Raspberry Pi Pico 

 


Data tersebut akan muncul setiap dua detik karena program Raspberry Pi Pico mengirimkan pesan setiap dua detik.

Bagaimana Cara Kerja Komunikasi UART Ini?

Proses komunikasi pada proyek ini cukup sederhana.

Pertama, Raspberry Pi Pico menjalankan program dan membuat UART0 dengan baud rate 115200.

Kemudian Pico mengirimkan string:

 

Halo dari Raspberry Pi Pico!


Data tersebut keluar melalui pin GP0 / TX. Karena GP0 merupakan TX Pico, pin tersebut harus terhubung ke GPIO16 / RX ESP32. ESP32 kemudian menerima data melalui GPIO16. Program ESP32 memeriksa apakah terdapat data menggunakan:

 

if (Serial2.available())


Jika data tersedia, ESP32 membaca data menggunakan:

 

String data = Serial2.readStringUntil('\n');


Setelah itu data ditampilkan melalui USB Serial Monitor menggunakan:

 

Serial.println(data);

 

Dengan demikian, proses komunikasi antara Raspberry Pi Pico dan ESP32 berlangsung dari Raspberry Pi Pico melalui pin GP0 (TX). Data dikirim menggunakan fungsi uart.write(), kemudian diterima oleh GPIO16 (RX) pada ESP32. Selanjutnya, ESP32 membaca data tersebut menggunakan Serial2.readStringUntil() dan menampilkannya pada Serial Monitor.

Mengapa TX Harus Terhubung ke RX?

Ini merupakan bagian yang sering membingungkan ketika pertama kali mempelajari komunikasi UART. TX berarti Transmit, yaitu jalur untuk mengirim data. Sedangkan RX berarti Receive, yaitu jalur untuk menerima data. Oleh karena itu, perangkat pengirim harus mengirimkan data ke jalur penerima perangkat lainnya. Contohnya:

Pico TX    -------> ESP32 RX

Sebaliknya, jika ESP32 ingin mengirim data ke Pico:

ESP32 TX ------> Pico RX

Jadi, koneksi UART antarperangkat memang dibuat menyilang.

Fungsi GND dalam Komunikasi UART

Selain menghubungkan pin TX dan RX, Raspberry Pi Pico dan ESP32 juga perlu memiliki ground yang sama. Caranya adalah dengan menghubungkan pin GND Raspberry Pi Pico ke GND ESP32. GND berfungsi sebagai referensi tegangan bersama bagi kedua board. Dengan adanya ground yang sama, sinyal yang dikirim melalui jalur TX dapat dibaca dengan benar oleh pin RX pada perangkat penerima. Jadi, meskipun pin TX dan RX sudah terhubung, komunikasi UART tetap dapat mengalami masalah jika kedua board tidak memiliki ground yang sama. Untuk komunikasi UART antara Raspberry Pi Pico dan ESP32, terdapat tiga koneksi utama yang perlu diperhatikan, yaitu TX, RX, dan GND.

Apakah Kedua Board Harus Dihubungkan USB?

Tidak untuk komunikasi UART-nya. USB digunakan untuk memberi daya, melakukan upload program, dan pada ESP32 menampilkan hasil ke Serial Monitor. Sedangkan komunikasi antara Pico dan ESP32 berlangsung melalui:

TX ↔ RX

GND ↔ GND

Jadi, saat melakukan pengujian menggunakan dua board, kedua board dapat tetap terhubung ke komputer melalui USB untuk mendapatkan daya dan melakukan pemrograman. Namun, data UART antarboard tidak dikirim melalui kabel USB tersebut. Data dikirim melalui pin TX dan RX.

Contoh Pengembangan Proyek UART Pico dan ESP32

Setelah komunikasi UART antara Raspberry Pi Pico dan ESP32 berhasil dilakukan, sistem tersebut masih dapat dikembangkan menjadi berbagai proyek yang lebih kompleks. UART tidak hanya dapat digunakan untuk mengirim teks sederhana, tetapi juga dapat menjadi jalur pertukaran data sensor, perintah kontrol, maupun informasi status antara kedua board.

1. Mengirim Data Sensor dari Pico ke ESP32

Salah satu pengembangan yang paling sederhana adalah menggunakan Raspberry Pi Pico untuk membaca data dari sensor, kemudian mengirimkan hasil pembacaan tersebut ke ESP32 melalui UART. Sebagai contoh, Pico dapat membaca sensor suhu dan menghasilkan data seperti 28.5 °C. Data tersebut kemudian dikirim melalui UART dan diterima oleh ESP32. Setelah menerima data, ESP32 dapat mengolah atau meneruskannya ke jaringan Wi-Fi, misalnya untuk ditampilkan pada web server. Alur kerjanya dapat dibayangkan sebagai berikut: sensor membaca kondisi lingkungan, Raspberry Pi Pico mengolah hasil pembacaan, data dikirim melalui UART ke ESP32, kemudian ESP32 meneruskannya melalui Wi-Fi atau menampilkannya pada web server. Dengan konsep ini, Raspberry Pi Pico dapat difokuskan untuk menangani pembacaan sensor, sedangkan ESP32 menangani konektivitas jaringan.

2. Mengirim Perintah dari ESP32 ke Pico

Komunikasi UART juga dapat digunakan untuk mengirim perintah dari ESP32 ke Raspberry Pi Pico. Jadi, tidak hanya Pico yang mengirim data ke ESP32, tetapi ESP32 juga dapat memberikan instruksi kepada Pico. Misalnya, ESP32 mengirimkan perintah LED_ON melalui UART. Setelah menerima dan mengenali perintah tersebut, Raspberry Pi Pico dapat menjalankan aksi tertentu, seperti menyalakan LED. Alurnya menjadi ESP32 mengirim perintah melalui TX, Pico menerima perintah melalui RX, kemudian Pico memproses perintah tersebut dan menjalankan aksi yang sesuai. Konsep ini dapat dikembangkan lebih jauh untuk mengendalikan berbagai komponen yang terhubung ke Pico, seperti LED, buzzer, relay, motor, atau aktuator lainnya.

3. Membuat Komunikasi Dua Arah

Jika kebutuhan proyek semakin kompleks, UART dapat digunakan sebagai komunikasi dua arah atau bidirectional. Dalam konfigurasi ini, Raspberry Pi Pico dan ESP32 dapat saling mengirim serta menerima data.

Koneksi yang digunakan adalah TX Pico ke RX ESP32, TX ESP32 ke RX Pico, serta GND Pico ke GND ESP32. Dengan susunan tersebut, Pico dapat mengirim data sensor atau status perangkat ke ESP32, sedangkan ESP32 dapat mengirim perintah kembali ke Pico. Sebagai contoh, Pico dapat mengirimkan informasi bahwa suhu yang terbaca adalah 28.5 °C, kemudian ESP32 mengirimkan perintah untuk menyalakan atau mematikan perangkat tertentu. Dengan demikian, UART dapat menjadi penghubung komunikasi antara dua mikrokontroler yang memiliki tugas berbeda dalam satu sistem.

Hal yang Perlu Diperhatikan Saat Menggunakan UART

Agar komunikasi UART antara Raspberry Pi Pico dan ESP32 dapat berjalan dengan baik, ada beberapa hal yang perlu diperhatikan saat melakukan wiring maupun saat membuat program. Kesalahan kecil pada koneksi atau konfigurasi UART dapat menyebabkan data tidak diterima dengan benar atau bahkan tidak muncul sama sekali pada Serial Monitor.

1. Perhatikan Koneksi TX dan RX

Hal pertama yang perlu diperiksa adalah koneksi antara pin TX dan RX. Kedua pin tersebut harus dihubungkan secara silang. Artinya, TX pada Raspberry Pi Pico dihubungkan ke RX pada ESP32, sedangkan TX pada ESP32 dihubungkan ke RX pada Pico jika komunikasi dilakukan secara dua arah. Jangan menghubungkan TX ke TX atau RX ke RX karena kedua perangkat tidak akan dapat bertukar data dengan benar melalui jalur tersebut.

2. Gunakan Baud Rate yang Sama

Selain wiring, pengaturan baud rate pada kedua perangkat juga harus sama. Baud rate menentukan kecepatan pengiriman data melalui komunikasi serial. Pada contoh proyek ini digunakan baud rate 115200. Oleh karena itu, Raspberry Pi Pico dan ESP32 harus dikonfigurasi menggunakan nilai tersebut. Jika baud rate berbeda, data yang diterima dapat menjadi tidak terbaca atau menghasilkan karakter yang tidak sesuai.

3. Pastikan GND Terhubung

Raspberry Pi Pico dan ESP32 juga perlu memiliki referensi ground yang sama. Oleh karena itu, pin GND pada kedua board harus dihubungkan. Koneksi GND membantu memastikan sinyal tegangan yang dikirim melalui TX dapat dikenali dengan benar oleh RX pada perangkat penerima.

4. Perhatikan Level Tegangan

Level tegangan juga perlu diperhatikan ketika menghubungkan dua perangkat melalui UART. Raspberry Pi Pico dan ESP32 sama-sama menggunakan level logika 3,3 V, sehingga komunikasi UART antara keduanya dapat dilakukan secara langsung pada level logika tersebut. Meskipun demikian, tetap hindari memberikan tegangan 5 V langsung ke pin GPIO karena pin GPIO kedua board tidak dirancang untuk menerima level logika 5 V.

5. Sesuaikan UART dan Pin yang Digunakan

Terakhir, pastikan UART dan pin yang digunakan sesuai dengan program. Raspberry Pi Pico memiliki beberapa pilihan UART dan pin yang dapat digunakan, sementara ESP32 juga memiliki peripheral UART yang dapat dikonfigurasi pada pin tertentu. Sebagai contoh, jika program ESP32 menggunakan GPIO16 sebagai RX, maka kabel dari TX Raspberry Pi Pico harus terhubung ke GPIO16 tersebut. Konfigurasi pada program dan wiring harus selalu dibuat sesuai agar data dapat diterima dengan benar. Dengan memperhatikan koneksi TX, RX, dan GND, menggunakan baud rate yang sama, serta memastikan level tegangan dan konfigurasi pin sudah sesuai, komunikasi UART antara Raspberry Pi Pico dan ESP32 akan lebih mudah untuk diuji dan dikembangkan.

Troubleshooting Komunikasi UART

Jika ESP32 tidak menerima data dari Raspberry Pi Pico, periksa beberapa bagian berikut.

1. ESP32 Tidak Menampilkan Data

Periksa:

- Apakah Pico GP0/TX terhubung ke ESP32 GPIO16/RX?

- Apakah GND Pico dan ESP32 sudah terhubung?

- Apakah baud rate kedua perangkat sama?

- Apakah program Pico sedang berjalan?

- Apakah Serial Monitor ESP32 menggunakan 115200 baud?

Apakah nomor UART yang digunakan sudah benar?

2. Data yang Muncul Berupa Karakter Aneh

Kemungkinan besar baud rate tidak sama. Pastikan:

Pico        = 115200

ESP32    = 115200

Selain itu, pastikan format UART juga sesuai. Pada contoh ini digunakan 8 data bit, no parity, dan 1 stop bit atau biasa disebut 8N1.

3. Data Tidak Stabil

Periksa kualitas kabel jumper dan pastikan koneksi pada breadboard tidak longgar. Pastikan juga kedua board memiliki GND bersama.

 

Baca juga: Mengubah Nilai Sensor Menjadi Data Digital dengan ADC Raspberry Pi Pico

 

 

 

Dalam praktik, hasil dan kendala yang ditemui bisa berbeda tergantung perangkat, konfigurasi, versi library, dan sistem yang digunakan.

Posting Komentar

0 Komentar