CircuitPython

Для работы с дисплеем используем интерпретатор CircuitPython, который позволяет писать программы на упрощённом python. CircuitPython поддерживается большинством плат Графит, включая модели: Графит-S2, Графит-S3, Графит-RP2040 и Графит-RP2354, а также прочими платами на основе ESP32-S2/S3.

Несмотря на то, что фактически в данном дисплее установлен контроллер SSD1315, для работы с ним мы будем использовать библиотеку для SSD1306 — adafruit_ssd1306 от Adafruit. Дело в том, что набор низкоуровневых команд у этих контроллеров совпадает.

Также понадобится дополнительная библиотека adafruit_framebuf — она нужна для работы с матричными дисплеями.

Всё, что нам нужно сделать для их установки — это скопировать соответствующие файлы .mpy папку lib на накопителе CIRCUITPY.

Программа

Для составления программы используем среду разработки RV Circuit Studio.

Пусть, самая первая наша программа выведет на дисплей текст ROC. Начнём с подключения всех необходимых библиотек. Напомню, в python это делается с помощью команды import.

Кроме adafruit_ssd1306 нам будут нужны еще две:

  • board — хранит названия всех контактов платы контроллера и их синонимы;
  • busio — предоставляет интерфейс для работы с шиной I2C.
import busio
import board
import adafruit_ssd1306

Затем инициализируем интерфейс I2C, указывая контакты SCL и SDA. То же самое проделываем с дисплеем, указывая в качестве параметров: разрешение 72 x 40 и готовый интерфейс i2c.

i2c = busio.I2C(board.SCL, board.SDA) # инициализация шины I2C
oled = adafruit_ssd1306.SSD1306_I2C(72, 40, i2c) # инициализация дисплея

Теперь у нас есть программный объект с именем oled, и мы можем воспользоваться некоторыми его методами для отображения на дисплее точек, линий и текста.

Для вывода текста нам понадобятся три метода: fill, text и show.

Для заполнения экрана черным фоном используем функцию fill, в качестве единственного аргумента которой служит цвет заполнения: 0 — чёрный, 1 — белый.

Функция text выводит на дисплей строку. Второй и третий аргументы этой функции отвечают за координаты верхнего левого угла строки на дисплее. Четвертый аргумент — цвет букв. Наконец, последний аргумент — это размер шрифта.

Мы можем нарисовать всё что угодно, но чтобы рисунок отобразился на дисплее необходимо закончить наше рисование вызовом функции show.

Полный текст нашей программы будет иметь вид:

import busio
import adafruit_ssd1306
import board

i2c = busio.I2C(board.SCL, board.SDA)
oled = adafruit_ssd1306.SSD1306_I2C(72, 40, i2c)

oled.fill(0)
oled.text('ROC', 3, 10, 1, size=2)
oled.show()

Сохраняем программу на Графит и смотрим результат.

Теперь усложним программу. Пусть после слова ROC отображается самый простой индикатор загрузки, представляющий собой последовательную смену символов: — \ | /.

import time
import busio
import adafruit_ssd1306
import board

i2c = busio.I2C(board.SCL, board.SDA)
oled = adafruit_ssd1306.SSD1306_I2C(72, 40, i2c)

oled.fill(0)
oled.text('ROC', 3, 10, 1, size=2)
oled.show()

wait_symb = ['-','\\','|','/']

i = 0
while True:
    oled.fill(0)
    oled.text('ROC '+wait_symb[i], 3, 10, 1, size=2)
    oled.show()

    i+=1
    if i == 4:
        i = 0
    time.sleep(0.5)

Обратите внимание на то, что метод show вызывается каждый раз когда нужно обновить изображение на дисплее.


Изменено: