Сегодня мы рассмотрим, как соединить OLED-дисплей SSD1306 с Raspberry Pi и запрограммировать его работу. Мы собираемся использовать SPI-связь между OLED и PI для отправки данных.
SSD1306 OLED – это монохромный дисплей, для управления которым используется чип ssd1306. Он поставляется в двух размерах: 128×32 и 128×64. Сегодня мы используем 128×64 с 7 контактами. Существует два варианта: один со связью I2C, а другой со связью SPI. Для связи I2C используются два контакта SCL и SDA, которые являются контактами тактовой частоты и последовательных данных. Они отправляют последовательные синхросигналы и последовательные данные всем подключенным к ним датчикам, но в соответствии с работой связи I2C на эти данные отвечает только указанный датчик.
Для связи SPI используются 4 или 3 провода, в зависимости от датчика. SCK (последовательный тактовый сигнал), MISO (главный вход, ведомый выход), MOSI (главный выход, ведомый вход) и CS (выбор чипа). Это четыре контакта, которые используются обычно. Вывод CS не является обязательным, он используется в основном при подключении нескольких устройств к одному и тому же выводу SCK, MISO и MOSI. Поэтому, чтобы выбрать, от какого датчика мы должны получать или отправлять данные, мы используем контакт CS.
Схему подключения можно увидеть далее. Здесь мы подключаем дисплей и датчик температуры и влажности DHT11, данные которого будем выводить на дисплей.
Для программирования мы используем библиотеку Adafruit для SSD1306. Откройте терминал и введите следующую строку:
pip3 install adafruit-circuitpython-ssd1306
Затем введите:
sudo apt-get install python3-pil
Теперь вам нужно включить интерфейс SPI и I2C в Pi:
sudo raspi-config
В этом разделе «Interface options» включите оба варианта. После этого отредактируйте файл конфигурации, чтобы установить скорость передачи данных для связи I2C. Как для I2C, так и для SPI MOSI, SCK одинаковы, меняется только имя, поэтому нам нужно установить скорость передачи данных только для I2C. Для этого откройте окно терминала и введите следующую строку, чтобы открыть файл config.txt:
sudo nano /boot/config.txt
Найдите строку dtparam=i2c_arm=on. Под этим добавьте также эту строку:
dtparam=i2c_baudrate=1000000
Нажмите Ctrl+X, Y и Enter, чтобы сохранить изменения, теперь перезагрузите Pi. После этого откройте Thonny IDE и введите следующий код:
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()
После этого все будет работать как нужно.
© digitrode.ru