CircuitPython

CircuitPython — это модификация языка MicroPython, распространяемая компанией Adafruit. Это версия языка-интерпретатора python, которая может работать на микроконтроллерах.

Для выполнения экспериментов с дисплеем Фотон в среде CircuitPython, кроме самого модуля дисплея, потребуется контроллер с установленным интерпретатором CircuitPython (или MicroPython). Это может быть плата на основе ESP8266/ESP32, например, что-то из линейки графитов от RobotClass: Графит-IOT, Графит-32S, Графит-S2, Графит-S3. Другие платы, например: Raspberry-Pico или Графит-RP2040.

Подключение по I2C

Для данного примера используем готовый проект интерфейса с двумя текстовыми элементами, из главы «Первый эксперимент» или создадим новый. В настройках проекта отключим оба UART и включим вместо них I2C интерфейс.

Управление через I2C QIIC. Дисплей Фотон от RobotClass

На обратной стороне дисплея Фотон имеется разъём SH1.0 с меткой QIIC, который служит для подключения к шине I2C (подробнее о QIIC). При подключении через разъём QIIC понадобится специальный кабель QIIC. Если у контроллера нет разъёма QIIC, то можно использовать соответствующий переходник.

Адрес I2C

Каждое устройство, подключенное к шине I2C, имеет свой уникальный адрес. По умолчанию дисплей Фотон имеет адрес 0x25. Именно этот адрес мы будем использовать для управления дисплеем с помощью контроллера.

Сменить адрес можно в настройках проекта.

Подтяжка I2C

Для правильной работы шины I2C необходимо, чтобы линии SDA и SCL были подтянуты к питанию с помощью резистора соответствующего номинала. Эту подтяжку нужно сделать только в одной точке на всей линии I2C.

Рядом с разъёмом QIIC имеется тройная перемычка I2C-PU. Чтобы организовать подтяжку именно на стороне дисплея, следует замкнуть все три контакта этой перемычки.

Установка библиотек

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

Более подробно о работе с библиотеками CircuitPython мы писали в одном из ранних наших уроков: Библиотеки для CircuitPython

Установка зависимостей

Чтобы библиотека adafruit_photon заработала, необходимо будет добавить еще две «зависимости»:

  • adafruit_bus_device
  • adafruit_register

Все эти библиотеки есть в сборнике от Adafruit. Точно также, копируем их на накопите

Программа

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

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

Кроме robotclass_photon нам будут нужны еще три:

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

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

i2c = busio.I2C(board.SCL, board.SDA) # инициализация шины I2C
ph = robotclass_photon.RobotClass_Photon(i2c) # инициализация дисплея Фотон

Теперь у нас есть объект с именем ph, и с помощью него мы сможем воспользоваться некоторыми функциями для отображения нужных данных на дисплее.

import time
import board
import busio
import robotclass_photon

i2c = busio.I2C(board.SCL, board.SDA)
ph = robotclass_photon.RobotClass_Photon(i2c)

counter = 0

while True:
    ph.setValue(0, counter)
    counter += 1
    if counter > 255:
        counter = 0
    time.sleep(1)

Сохраняем программу и наблюдаем как в текстовом поле растёт значение счетчика.

Функция setValue может принимать данные разных типов:

  • setValue(123) — целые числа для вывода в текстовое поле и управления состоянием элементов типа Шкала, Радиус, Изображение;
  • setValue(«текст») — текст;
  • setValue(1.45, 4, 2) — вещественные числа; с помощью дополнительных параметров можно задать формат числа — общее количество цифр, и количество знаком после запятой.

Пример программы, которая выведет в поле типа Текст последовательно: целое число, вещественное число и строку «Привет!».

import time
import board
import busio
import robotclass_photon

i2c = busio.I2C(board.SCL, board.SDA)
ph = robotclass_photon.RobotClass_Photon(i2c)

ph.setInt(0, 33)
time.sleep(3)
ph.setFloat(0, 44.33)
time.sleep(3)
ph.setText(0, "Привет!")
time.sleep(3)

Изменено: