- Ikhtisar I2C STM32F103C8
- Pin I2C di STM32F103C8
- Pin I2C di Arduino
- Komponen Diperlukan
- Diagram Sirkuit dan Koneksi
- Pemrograman I2C di STM32
- Penjelasan Pemrograman Master STM32
- Penjelasan Pemrograman Arduino Slave
Dalam tutorial kami sebelumnya, kami telah belajar tentang komunikasi SPI dan I2C antara dua papan Arduino. Dalam tutorial ini kita akan mengganti satu papan Arduino dengan papan Pill Biru yaitu STM32F103C8 dan akan berkomunikasi dengan papan Arduino menggunakan bus I2C.
STM32 memiliki lebih banyak fitur daripada papan Arduino. Jadi alangkah baiknya belajar tentang komunikasi antara STM32 dan Arduino dengan menggunakan bus SPI & I2C. Dalam tutorial ini, kita akan menggunakan bus I2C untuk komunikasi antara Arduino dan STM32F103C8, dan akan belajar tentang bus SPI di tutorial selanjutnya. Untuk mengetahui lebih lanjut tentang papan STM32, periksa proyek STM32 lainnya.
Ikhtisar I2C STM32F103C8
Bandingkan I2C (Inter Integrated Circuits) pada papan Pill Biru STM32F103C8 dengan Arduino Uno, maka kita akan melihat bahwa Arduino memiliki mikrokontroler ATMEGA328 di dalamnya, dan STM32F103C8 memiliki ARM Cortex-M3 di dalamnya. STM32 memiliki Dua bus I2C sedangkan Arduino Uno hanya memiliki satu bus I2C dan STM32 lebih cepat dari Arduino.
Untuk mempelajari lebih lanjut tentang komunikasi I2C, lihat artikel kami sebelumnya
- Cara menggunakan I2C di Arduino: Komunikasi antara dua Papan Arduino
- Komunikasi I2C dengan Mikrokontroler PIC PIC16F877
- Interfacing LCD 16X2 dengan ESP32 menggunakan I2C
- Komunikasi I2C dengan MSP430 Launchpad
- Interfacing LCD dengan NodeMCU tanpa menggunakan I2C
- Bagaimana menangani multi komunikasi (I2C SPI UART) dalam satu program Arduino
Pin I2C di STM32F103C8
SDA: PB7 atau PB9, PB11.
SCL: PB6 atau PB8, PB10.
Pin I2C di Arduino
SDA: pin A4
SCL: pin A5
Komponen Diperlukan
- STM32F103C8
- Arduino Uno
- LED (2-Tidak)
- Tombol Tekan (2-Tidak)
- Resistor (4-Nos)
- Papan tempat memotong roti
- Menghubungkan Kabel
Diagram Sirkuit dan Koneksi
Tabel berikut menunjukkan hubungan antara STM32 Blue Pill dan Arduino Uno untuk menggunakan bus I2C. Ini hanya membutuhkan dua kabel.
STM32F103C8 |
Arduino |
Deskripsi Pin |
B7 |
A4 |
SDA |
B6 |
A5 |
SCL |
GND |
GND |
Tanah |
Penting
- Jangan lupa untuk menghubungkan Arduino GND dan STM32F103C8 GND secara bersamaan.
- Kemudian sambungkan resistor Tarik ke bawah 10k ke pin tombol tekan dari kedua papan secara terpisah.
Dalam tutorial STM32 I2C ini kita akan mengkonfigurasi STM32F103C8 sebagai Master dan Arduino sebagai Slave. Kedua papan dipasang dengan LED & tombol tekan secara terpisah.
Untuk mendemonstrasikan komunikasi I2C pada STM32, kita mengontrol LED master STM32 dengan menggunakan nilai push button Arduino slave dan mengontrol LED Slave Arduino dengan menggunakan nilai push button STM32F103C8 master. Nilai-nilai ini dikirim melalui bus komunikasi I2C.
Pemrograman I2C di STM32
Pemrogramannya mirip dengan kode Arduino. Sama
Tutorial ini memiliki dua program satu untuk master STM32 dan lainnya untuk slave Arduino. Program lengkap untuk kedua sisi diberikan di akhir proyek ini dengan Video demonstrasi.
Penjelasan Pemrograman Master STM32
Di Master STM32, mari kita lihat apa yang terjadi:
1. Pertama-tama kita perlu menyertakan pustaka Wire dan pustaka softwire untuk menggunakan fungsi komunikasi I2C di STM32F103C8.
#include
2. Dalam penyiapan batal ()
- Kami Memulai Komunikasi Serial dengan Baud Rate 9600.
Serial.begin (9600);
- Selanjutnya kita mulai komunikasi I2C di pin (B6, B7)
Wire.begin ();
3. Dalam loop Void ()
- Pertama kami mendapatkan data dari Slave Arduino jadi kami menggunakan requestFrom () dengan alamat slave 8 dan kami meminta satu byte.
Wire.requestFrom (8,1);
Nilai yang diterima dibaca menggunakan Wire.read ()
byte a = Wire.read ();
- Bergantung pada nilai yang diterima dari slave, LED Master dinyalakan atau dimatikan dengan menggunakan digitalwrite pada pin PA1 dan juga cetakan serial digunakan untuk mencetak nilai pada monitor serial
if (a == 1) { digitalWrite (LED, HIGH); Serial.println ("Master LED ON"); } lain { digitalWrite (LED, LOW); Serial.println ("Master LED OFF"); }
- Selanjutnya kita perlu membaca status pin PA0 yang merupakan tombol tekan master STM32.
int pinvalue = digitalRead (buttonpin);
- Selanjutnya kirim nilai pin sesuai logikanya, jadi kita gunakan kondisi if dan kemudian mulai transmisi dengan slave arduino dengan 8 sebagai alamat dan kemudian tulis nilai sesuai dengan nilai input tombol tekan.
jika (nilai pin == TINGGI) { x = 1; } lain { x = 0; } Wire.beginTransmission (8); Wire.write (x); Wire.endTransmission ();
Penjelasan Pemrograman Arduino Slave
1. Pertama-tama kita perlu menyertakan pustaka Wire untuk menggunakan fungsi komunikasi I2C.
#include
2. Dalam penyiapan batal ()
- Kami Memulai Komunikasi Serial dengan Baud Rate 9600.
Serial.begin (9600);
- Selanjutnya mulai komunikasi I2C pada pin (A4, A5) dengan alamat slave 8. Di sini penting untuk menentukan alamat slave.
Wire.begin (8);
Selanjutnya kita perlu memanggil fungsi Wire.onReceive ketika Slave menerima nilai dari master dan panggilan fungsi Wire.onRequest ketika Master meminta nilai dari Slave.
Wire.onReceive (acceptEvent); Wire.onRequest (requestEvent);
3. Selanjutnya kita memiliki dua fungsi, satu untuk acara permintaan dan satu lagi untuk acara terima
Untuk acara permintaan
Ketika Master STM32 meminta nilai dari slave, fungsi ini akan dijalankan. Fungsi ini mengambil nilai input dari push button Slave Arduino dan mengirimkan byte (1 atau 0) ke Master STM32 sesuai dengan nilai push button dengan menggunakan Wire.write ().
void requestEvent () { int value = digitalRead (pin tombol); jika (nilai == TINGGI) { x = 1; } lain { x = 0; } Wire.write (x); }
Untuk Menerima Acara
Ketika Master mengirimkan data ke slave dengan alamat slave (8), fungsi ini akan dijalankan. Fungsi ini membaca nilai yang diterima dari master dan menyimpan dalam variabel tipe byte dan kemudian menggunakan logika if untuk menyalakan atau mematikan LED slave tergantung pada nilai yang diterima. Jika nilai yang diterima adalah 1 maka LED menyala dan untuk 0 LED mati.
void acceptEvent (int howMany) { byte a = Wire.read (); if (a == 1) { digitalWrite (LED, HIGH); Serial.println ("LED Slave ON"); } lain { digitalWrite (LED, LOW); Serial.println ("LED Slave MATI"); } penundaan (500); }
Keluaran
1. Saat kami menekan tombol push di Master STM32, LED yang terhubung ke Slave Ardiono menyala (Putih).
2. Sekarang ketika kita menekan tombol tekan di sisi Slave, LED yang terhubung ke Master menyala (Merah) dan ketika tombol dilepaskan LED mati.
3. Saat kedua tombol ditekan secara bersamaan, kedua LED menyala bersamaan, dan tetap ON hingga tombol ditekan
Jadi, inilah cara komunikasi I2C terjadi di STM32. Sekarang Anda dapat menghubungkan sensor I2C dengan papan STM32.
Pengkodean lengkap untuk Master STM32 dan Slave Arduino diberikan di bawah ini dengan video demonstrasi