LA M3 COMMUNICATION
LAPORAN AKHIR M3 PERCOBAAN 7
Percobaan 7
Persiapan Alat dan Bahan:
Pastikan Anda memiliki semua komponen berikut:
-
Raspberry Pi Pico
-
Microcontroller STM32F103C8 (Blue Pill)
-
OLED Display 0.96 inch (I2C)
-
3 Push Button
-
Resistor 10 kΩ (untuk pull-down atau pull-up tombol)
-
Breadboard
-
Kabel jumper
Koneksi Rangkaian:
Raspberry Pi Pico:
-
Sambungkan pin 3V3 ke jalur power + pada breadboard.
-
Sambungkan pin GND ke jalur ground pada breadboard.
-
Sambungkan pin GPIO sesuai ke STM32F103C8 dan OLED sesuai gambar.
-
Sambungkan jalur data I2C OLED ke Raspberry Pi Pico: SDA dan SCL (biasanya GPIO 4 dan 5, sesuaikan dengan gambar).
STM32F103C8:
-
Sambungkan pin power dan ground sesuai breadboard.
-
Hubungkan pin PB12, PB13, PB14 ke masing-masing push button melalui resistor pull-down.
-
Hubungkan pin I2C OLED ke Raspberry Pi Pico (jika menggunakan STM32 juga berperan sebagai pengontrol OLED).
-
Sambungkan kabel komunikasi antara Raspberry Pi Pico dan STM32F103C8 (ground saling terhubung).
Push Button:
-
Sambungkan satu sisi push button ke pin input STM32F103C8 (PB12, PB13, PB14).
-
Sambungkan sisi lain ke ground melalui resistor 10 kΩ.
-
Pastikan konfigurasi pull-up atau pull-down sesuai pengaturan hardware dan software.
OLED Display:
-
Sambungkan pin VCC OLED ke 3.3V power.
-
Sambungkan pin GND OLED ke ground.
-
Sambungkan pin SDA dan SCL OLED ke pin I2C pada Raspberry Pi Pico (dan/atau STM32F103C8 sesuai rancangan).
Penyesuaian Variabel:
-
Jika diperlukan, sesuaikan nilai resistor pull-up/pull-down agar pembacaan tombol stabil.
-
Tentukan alamat I2C OLED sesuai dengan modul yang digunakan (biasanya 0x3C).
Pengaturan Sumber Daya:
-
Pastikan catu daya 3.3V stabil terhubung ke semua komponen yang membutuhkan.
-
Pastikan ground bersama untuk semua modul.
Pemrograman Microcontroller:
-
Program Raspberry Pi Pico untuk berkomunikasi dengan STM32F103C8 dan OLED melalui I2C atau UART.
-
Program STM32F103C8 untuk membaca status ketiga push button (PB0, PB1, PB2).
-
Ketika tombol ditekan, kirimkan perintah ke Raspberry Pi Pico untuk mengubah tampilan OLED (misal menampilkan teks atau ikon berbeda).
-
Buat logika untuk menampilkan informasi yang sesuai pada OLED berdasarkan input tombol.
Uji Coba:
-
Hidupkan rangkaian dan pastikan semua terhubung dengan baik.
-
Tekan masing-masing push button secara bergantian.
-
Amati perubahan tampilan pada OLED. Pastikan OLED menampilkan respon sesuai tombol yang ditekan.
-
Jika ada komunikasi antara STM32 dan Raspberry Pi Pico, pastikan data diterima dan diproses dengan benar.
- STM32
- Raspberry Pi Pico
- Breadboard
- Jumper male to male
- Push Button
- Resistor
- Rangkaian Simulasi
- Prinsip Kerja
Rangkaian ini bekerja berdasarkan komunikasi serial UART antara microcontroller STM32F103C8 sebagai pengirim data dan Raspberry Pi Pico sebagai penerima data. Data yang dikirim berupa sinyal status tombol yang ditekan dalam bentuk string, kemudian ditampilkan pada LCD oleh Raspberry Pi Pico. Berikut prinsip kerja secara rinci:
-
Pembacaan Status Tombol pada STM32F103C8:
STM32F103C8 memantau tiga tombol yang terhubung ke pin GPIO PB12, PB13, dan PB14.
Setiap tombol memiliki konfigurasi input dengan pull-up internal, sehingga saat tombol ditekan, pin akan membaca sinyal logika rendah (reset).
STM32 akan membaca secara terus-menerus status ketiga tombol tersebut. -
Pengiriman Data melalui UART oleh STM32F103C8:
Ketika sebuah tombol terdeteksi ditekan, STM32F103C8 akan mengirimkan string teks yang sesuai dengan tombol tersebut, yaitu "MERAH", "HIJAU", atau "BIRU" menggunakan protokol UART.
FungsiHAL_UART_Transmit
digunakan untuk mengirimkan data string secara serial dengan baud rate 9600 bps, 8 bit data, 1 stop bit, dan tanpa parity.
Data dikirim sebagai urutan karakter ASCII dengan tambahan karakter carriage return dan newline (\r\n
) sebagai penanda akhir pesan. -
Penerimaan dan Pemrosesan Data UART oleh Raspberry Pi Pico:
Raspberry Pi Pico menginisialisasi UART dengan konfigurasi baud rate yang sama (9600 bps) untuk menerima data serial dari STM32.
Data yang masuk dibaca secara berkala dengan metode polling, yaitu memeriksa buffer UART apakah terdapat data yang tersedia.
Setiap data yang diterima berupa baris string dibaca dan didekodekan dari format byte ke string UTF-8.
Berdasarkan isi string, Raspberry Pi Pico memproses informasi dan mengupdate tampilan pada LCD I2C. -
Tampilan Informasi pada LCD oleh Raspberry Pi Pico:
Jika data yang diterima adalah "MERAH", LCD menampilkan teks "Warna: Merah".
Jika data "HIJAU", LCD menampilkan "Warna: Hijau".
Jika data "BIRU", LCD menampilkan "Warna: Biru".
Jika data lain diterima, LCD menampilkan data tersebut secara default.
LCD memberikan umpan balik visual yang merepresentasikan status tombol yang ditekan pada STM32. -
Sinkronisasi dan Kehandalan Komunikasi:
Kedua perangkat disinkronkan dalam hal konfigurasi UART agar data dapat dikirim dan diterima dengan benar tanpa kesalahan.
Pengiriman data menggunakan metode blocking pada STM32 sehingga memastikan data terkirim sempurna sebelum membaca tombol berikutnya.
Raspberry Pi Pico menggunakan metode polling dengan jeda singkat agar tidak mengganggu proses utama dan memproses data secara real-time.
- Listing Program pada STM32
##include "main.h" #include <string.h> UART_HandleTypeDef huart1; // Fungsi prototipe void SystemClock_Config(void); void MX_GPIO_Init(void); void MX_USART1_UART_Init(void); // Fungsi kirim UART void send_uart(char *text) { HAL_UART_Transmit(&huart1, (uint8_t *)text, strlen(text), HAL_MAX_DELAY); } int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART1_UART_Init(); while (1) { if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_12) == GPIO_PIN_RESET) { send_uart("MERAH\r\n"); HAL_Delay(300); while (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_12) == GPIO_PIN_RESET); } else if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_13) == GPIO_PIN_RESET) { send_uart("HIJAU\r\n"); HAL_Delay(300); while (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_13) == GPIO_PIN_RESET); } else if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_14) == GPIO_PIN_RESET) { send_uart("BIRU\r\n"); HAL_Delay(300); while (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_14) == GPIO_PIN_RESET); } } } // Konfigurasi clock standar STM32F1 void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; __HAL_RCC_AFIO_CLK_ENABLE(); __HAL_RCC_PWR_CLK_ENABLE(); __HAL_AFIO_REMAP_SWJ_NOJTAG(); // Bebaskan PB3-PB4 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; HAL_RCC_OscConfig(&RCC_OscInitStruct); RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2); } // Inisialisasi UART1 (TX: PA9, RX: PA10) void MX_USART1_UART_Init(void) { huart1.Instance = USART1; huart1.Init.BaudRate = 9600; huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart1.Init.OverSampling = UART_OVERSAMPLING_16; HAL_UART_Init(&huart1); } // Inisialisasi GPIO PB12, PB13, PB14 sebagai input pull-up void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); // Konfigurasi input tombol dengan Pull-Up GPIO_InitStruct.Pin = GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); }
- Raspberry Pi Pico
- Program LCD to I2C
- Library LCD
- Flowchart
- STM32F103C8 menggunakan tiga tombol yang terhubung ke pin GPIO PB12, PB13, dan PB14 dengan konfigurasi input pull-up.
- UART1 STM32 dikonfigurasikan pada pin TX (PA9) dan RX (PA10) dengan baud rate 9600, 8 bit data, 1 stop bit, tanpa parity.
- Raspberry Pi Pico menggunakan UART0 pada pin GPIO0 (TX) dan GPIO1 (RX) juga dengan baud rate 9600 untuk komunikasi serial.
- OLED LCD I2C terhubung ke Raspberry Pi Pico melalui pin SDA dan SCL (GPIO4 dan GPIO5) dengan alamat I2C 0x27.
- STM32 memonitor status tombol secara terus menerus. Saat tombol ditekan, STM32 mengirimkan string teks warna ("MERAH", "HIJAU", "BIRU") melalui UART.
- Raspberry Pi Pico membaca data UART secara polling, mengubah data byte menjadi string, lalu menampilkan hasilnya pada LCD I2C sesuai isi pesan.
- Program STM32 menggunakan HAL library dengan fungsi HAL_UART_Transmit untuk pengiriman data.
- Program Raspberry Pi Pico menggunakan modul UART bawaan MicroPython dan library LCD I2C untuk menampilkan karakter.
- STM32 membaca status tombol dan saat tombol ditekan mengirimkan string warna melalui UART.
- Data string dikirim byte per byte melalui pin TX STM32, melalui kabel ke pin RX Raspberry Pi Pico.
- Raspberry Pi Pico melakukan pembacaan data byte secara serial di buffer UART.
- Setelah satu baris data lengkap diterima (berdasarkan karakter newline), data didekode dari byte menjadi string UTF-8.
- String hasil decode ini diproses dalam program Python pada Raspberry Pi Pico untuk menentukan teks yang akan ditampilkan.
- Library I2C LCD dipanggil untuk membersihkan layar dan menampilkan teks baru yang sesuai (misal "Warna: Merah").
- Dengan demikian, status tombol pada STM32 dapat terlihat secara visual di LCD Raspberry Pi Pico.
- Ketidaksesuaian nilai baudrate antara STM32F103C8 dengan Raspberry Pi Pico, dimana nilai baudrate raspberry pi pico bernilai 9600 sedangkan STM32 bernilai 115200. Nilai baudrate antara kedua mikrokontroler harus disesuaikan agar data dapat diterima dengan benar. Oleh karena itu, nilai baudrate kedua mikrokontroler dijadikan 9600.
- Kesalahan pada program main raspberry pi pico, dimana transmitt (Tx) diberikan pin 0 dan receiver (Rx) pin 1. Sehingga, nilai pin harus disesuaikan yaitu Tx = pin(1) dan Rx = pin (0)
- HTML klik disini
- Download Video Demo klik disini
- DataSheet STM32 Klik Disini
- Datasheet raspberry Pi Pico klik disini
- DataSheet Resistor Klik disini
- Datasheet push button klik disini
Komentar
Posting Komentar