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

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

CircuitPython OLED SSD1306

Вывод текста

Следующая программа будет выводить на дисплей текст «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()

Сохраняем программу и смотрим на дисплей.

CircuitPython OLED SSD1306 Текст

Изменено: