CircuitPython
CircuitPython — это модификация языка MicroPython, распространяемая компанией Adafruit. Это версия языка-интерпретатора python, которая может работать на микроконтроллерах.
Для выполнения экспериментов с дисплеем Фотон в среде CircuitPython, кроме самого модуля дисплея, потребуется контроллер с установленным интерпретатором CircuitPython (или MicroPython). Это может быть плата на основе ESP8266/ESP32, например, что-то из линейки графитов от RobotClass: Графит-IOT, Графит-32S, Графит-S2, Графит-S3. Другие платы, например: Raspberry-Pico или Графит-RP2040.
Подключение по I2C
Для данного примера используем готовый проект интерфейса с двумя текстовыми элементами, из главы «Первый эксперимент» или создадим новый. В настройках проекта отключим оба UART и включим вместо них I2C интерфейс.
На обратной стороне дисплея Фотон имеется разъём 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)