Kami berencana untuk menghubungkan SSD1306 OLED ke Raspberry Pi. Kami akan menggunakan koneksi SPI antara OLED dan PI untuk mengirim data. Juga, semua kode dan perpustakaan yang digunakan disertakan dan langkah-langkah untuk mendapatkannya diberikan. Jadi, tanpa membuang waktu, mari kita mulai pelatihan kita.
SSD1306 OLED
SSD1306 Oled adalah layar monokrom yang menggunakan chip SSD1306 untuk mengontrolnya. Tersedia dalam dua ukuran 128 × 32 dan 128 × 64. Hari ini saya menggunakan 128×64 yang memiliki 7 pin. Ada dua jenis, satu dengan koneksi I2C dan lainnya dengan koneksi SPI. Perbedaan antara keduanya dapat dengan mudah dipahami.
Komunikasi I2C menggunakan dua pin, SCL dan SDA, yang diberi pin clock dan serial. Ini mengirimkan sinyal clock ke pin scl dari sensor lainnya. Data tersebut kemudian ditransmisikan sesuai dengan sinyal. Tentu saja, ada beberapa aturan yang menentukan pengiriman dan penerimaan data.
Sambungan SPI menggunakan 4 atau 3 kabel, tergantung sensornya. SCK (jam serial), MISO (Master In Slave Out), MOSI (Master Out Slave In), dan CS (Chip Select). Ini adalah empat pin yang umumnya digunakan. Pin Cs bersifat opsional, digunakan saat menghubungkan beberapa perangkat ke pin SCK, MISO, dan MOSI yang sama. Jadi kami menggunakan pin CS untuk memilih dari atau ke sensor mana kami harus menerima atau mengirim data.
Jika Anda seorang pemula, lihat dulu tutorial Arduino SSD1306
Bahan yang dibutuhkan:
- Raspberry PI dengan layar, keyboard, dan mouse
- SSD1306 Oled (versi 7-pin, koneksi SPI)
- Kabel jumper
- Papan roti
Orbit:
PI raspberry | Sensor DHT11 |
GPIO 23 pin | Pin sinyal S |
+5 volt | +5 V |
GND | GND |
PI raspberry | Layar 7-pin lama |
+5 volt | VCC |
GND | GND |
GPIO 11 pin | SCK |
GPIO 9 pin | SDA |
GPIO 4 pin | RES |
GPIO 6 pin | DC |
GPIO 5 pin | CS |
Pemrograman:
Kami menggunakan perpustakaan Adafruit SSD1306 untuk pemrograman. Namun sebelumnya kita harus memasang beberapa tangki.
Buka terminal dan ketik perintah berikut satu per satu:
pip3 install adafruit-circuitpython-ssd1306
Kemudian
sudo apt-get install python3-pil
Anda sekarang diaktifkan menggunakan antarmuka SPI dan I2C Pi
sudo raspi-config
Aktifkan kedua opsi Antarmuka di bawah ini
Setelah itu, edit file konfigurasi Anda untuk mengatur baudrate untuk I2C Communication.
(Untuk I2C dan SPI MOSI, SCKnya sama, hanya penamaannya yang berubah, jadi kita harus mengatur baudrate untuk I2C saja)
sudo nano /boot/config.txt
Temukan garis dtparam = i2c_arm = on. Tambahkan baris ini di bawah juga
dtparam=i2c_baudrate=1000000
Kemudian tekan Ctrl + X, Y dan Enter. Untuk melihat perubahannya, mulai ulang Pi Anda sekarang (Sudo reboot sekarang; di terminal).
Setelah ini Anda baik untuk pergi.
Kode:
Sekarang buka Thonny IDE di Pi Anda dan ketik beberapa kode.
Pertama kita mengimpor Image, ImageDraw, ImageFont dari modul PIL. Halo, kami mengimpor modul lain yang diperlukan untuk mengeksekusi kode.
from PIL import Image, ImageDraw, ImageFont
import adafruit_ssd1306
import board
import digitalio
from time import sleep
Kemudian kita membuat sebuah objek bernama ‘oled’ untuk menampilkan oled. Sintaks garis dijelaskan di bawah garis itu untuk mengidentifikasi pin.
oled=adafruit_ssd1306.SSD1306_SPI(128,64,board.SPI(),digitalio.DigitalInOut(board.D6),digitalio.DigitalInOut(board.D4),digitalio.DigitalInOut(board.D5))
#oled=adafruit_ssd1306.SSD1306_SPI(width,height,spi_interface,dc,rst,cs)
Setelah ini, kami memasukkan font tempat teks ditampilkan. Kemudian kita mendefinisikan beberapa kode untuk menggambar kode. Menggunakan oled.fill (0) kita melihat semua piksel oled dalam warna hitam dan melalui oled.show () kita melakukan ekspresi sebelumnya.
oled.fill(0)
oled.show()
font=ImageFont.load_default()
image=Image.new('1',(128,64))
draw=ImageDraw.Draw(image)
Kemudian pada loop while, dengan menggunakan fungsi range, kita membuat teks pindaian “HELLO WORLD”. Menggunakan fungsi draw.text, kami menggambar teks pada halaman yang bergulir di halaman
kode:
Berikut kode lengkapnya:
from PIL import Image, ImageDraw, ImageFont
import adafruit_ssd1306
import board
import digitalio
from time import sleep
oled=adafruit_ssd1306.SSD1306_SPI(128,64,board.SPI(),digitalio.DigitalInOut(board.D6),digitalio.DigitalInOut(board.D4),digitalio.DigitalInOut(board.D5))
#oled=adafruit_ssd1306.SSD1306_SPI(width,height,spi_interface,dc,rst,cs)
oled.fill(0)
oled.show()
font=ImageFont.load_default()
image=Image.new('1',(128,64))
draw=ImageDraw.Draw(image)
for i in range(40):
for j in range(56):
draw.text((i,j),"HELLO WORLD",font=font,fill=255)
oled.image(image)
oled.show()
sleep(0.01)
draw.text((i,j),"HELLO WORLD",font=font,fill=0)
oled.image(image)
oled.show()