CircuitPython
Для работы с датчиком используем интерпретатор CircuitPython, который позволяет писать программы на упрощённом python. CircuitPython поддерживается большинством плат Графит, включая модели: Графит-S2, Графит-S3, Графит-RP2040 и Графит-RP2354, а также прочими платами на основе ESP32-S2/S3.
Основной библиотекой для модуля OLED SSD1306 будет служить adafruit_ssd1306 от Adafruit. Также понадобится дополнительная библиотека adafruit_framebuf — она нужна для работы с матричными дисплеями.
Всё, что нам нужно сделать для их установки — это скопировать соответствующие файлы .mpy папку lib на накопителе CIRCUITPY.
Программа
Для составления программы используем среду разработки RV Circuit Studio.
Пусть, самая первая наша программа заполнит дисплей одним цветом. Начнём с подключения всех необходимых библиотек. Напомню, в python это делается с помощью команды import.
Кроме adafruit_ssd1306 нам будут нужны еще две:
- board — хранит названия всех контактов платы контроллера и их синонимы;
- busio — предоставляет интерфейс для работы с шиной I2C;
import busio
import board
import adafruit_ssd1306
Затем инициализируем шину I2C, указывая контакты SCL и SDA. То же самое проделываем с дисплеем, указывая в качестве параметров: разрешение 128 x 32 точки, и готовый интерфейс i2c.
i2c = busio.I2C(board.SCL, board.SDA) # инициализация шины I2C
oled = adafruit_ssd1306.SSD1306_I2C(128, 32, i2c, addr=0x3c) # инициализация дисплея
Теперь у нас есть объект oled, и мы можем воспользоваться некоторыми его методами для отображения на дисплее точек, линий и текста. Ссылка на полный список допустимых методов есть в конце урока.
Для заполнения экрана используем функцию fill, в качестве единственного аргумента которой служит цвет заполнения: 0 — чёрный, 1 — белый. Мы можем нарисовать всё что угодно, но чтобы рисунок отобразился на дисплее необходимо закончить наше рисование вызовом функции show.
Полный текст нашей программы будет иметь вид:
import busio
import board
import adafruit_ssd1306
i2c = busio.I2C(board.SCL, board.SDA) # инициализация шины I2C
oled = adafruit_ssd1306.SSD1306_I2C(128, 32, i2c, addr=0x3c) # инициализация дисплея
oled.fill(1)
oled.show()
Сохраняем программу и дисплей мгновенно заполняется белым цветом (или голубым, смотря какой дисплей).
Кстати, функция fill с аргументом 0 часто используется для очистки экрана от предыдущего изображения. Поэтому в следующей программе она тоже нам понадобится.
Рисуем точки, отрезки и прямоугольники
Для вывода точки используем метод pixel:
pixel(x, y, color) # x и у - координаты точки, color - цвет
Отрезок рисуем с помощью line:
line(x1, y1, x2, y2, color) # x1 и y1 - начальная точка отрезка, x2 и y2 - конечная, color - цвет
Прямоугольник выводится методом rect:
rect(x, y, w, h, color) # x и y - верхний левый угол прямоугольника, w и h - его ширина и высота, color - цвет
Для окружности используем circle:
circle(x, y, radius, color) # x и y - координаты центра, radius - радиус окружности, color - цвет
import busio
import board
import adafruit_ssd1306
i2c = busio.I2C(board.SCL, board.SDA)
oled = adafruit_ssd1306.SSD1306_I2C(128, 32, i2c, addr=0x3c)
oled.fill(0)
oled.pixel(10,10,1)
oled.line(0,31,127,0,1)
oled.rect(5,5,117,21,1)
circle(64,16,15,1)
oled.show()
Сохраняем программу и смотрим результат.

Вывод текста
Следующая программа будет выводить на дисплей текст «RobotClass». Шрифты в CircuitPython хранятся в отдельных файлах. Самый простой стандартный шрифт хранится в файле font5x8.bin, который можно найти в папке с примерами (examples) для библиотеки adafruit_frambuf (ссылка в конце урока). Файл со шрифтом необходимо сохранить в корень накопителя CIRCUITPY.
Для вывода текста используем метод text:
text(string, x, y, color, *, font_name='font5x8.bin', size=1)
- string — это строка текста, который мы собираемся вывести;
- x и y — координаты верхнего левого угла рамки текста;
- color — цвет;
- font_name — имя файла со шрифтом, по умолчанию это как раз font5x8.bin;
- size — масштаб.
import busio
import board
import adafruit_ssd1306
i2c = busio.I2C(board.SCL, board.SDA)
oled = adafruit_ssd1306.SSD1306_I2C(128, 32, i2c, addr=0x3c)
oled.fill(0)
oled.text('RobotClass', 5, 10, 1, size=2)
oled.show()
Сохраняем программу и смотрим на дисплей.

