Rangkaian SSD1306 Oled Raspberry Pi | SPI

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:

SSD1306 Oled Raspberry pi

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()