Библиотеки для CircuitPython

Программная библиотека — это сборник процедур, функций или объектов, которые могут быть использованы при создании новой программы. Использование библиотек — необязательно, но позволяет сильно упростить и ускорить разработку программ.

Приведем пример. Пусть, перед нами стоит задача вывести данные с датчика влажности на OLED дисплей, подключенный по шине I2C. В мире без библиотек, нам бы пришлось разбирать спецификацию на каждое из этих устройств и изучать команды, необходимые для работы с ними. Это кропотливый рутинный труд, который, к тому же, может потребовать глубоких познаний в принципах работы микроэлектроники.

Однако, если один инженер уже разобрался как связать контроллер с каким-то устройством и оформил всю рутину в виде библиотеки, мы сможем использовать её для своих целей, не углубляясь в тонкости работы. Благо, таких инженеров много и они готовы делиться результатами свои трудов в формате OpenSource.

CircuitPython

CircuitPython — это язык программирования для микроконтроллеров, который был разработан компанией Adafruit на основе MicroPython. По сути, CircuitPython — это урезанный вариант популярного языка Python, поэтому программировать на нём будет также удобно и просто.

Помимо самого языка, инженеры Adafruit разработали массу библиотек для датчиков, дисплеев, драйверов и других полезных устройств. Все эти библиотеки находятся в свободном доступе и могут быть загружены из репозитория github:

https://github.com/adafruit/Adafruit_CircuitPython_Bundle/releases

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

В репозитории имеется несколько архивов, из которых самыми важными для нас будут:

  • библиотеки для конкретной версии CircuitPython, например: adafruit-circuitpython-bundle-8.x-mpy-20221117.zip
  • исходные коды библиотек: adafruit-circuitpython-bundle-py-20221117.zip

Если мы планируем просто использовать готовую библиотеку — загружаем архив с нужной нам версией. Архив с исходными кодами может потребоваться в случае, когда необходимо изучить код библиотеки или внести в него изменения.

Таким образом, загружаем первый файл и распаковываем его. Внутри архива нам будут интересны две папки: lib и examples. В папке lib находятся сами библиотеки, причём они могут быть составными (так называемые пакеты) — в виде папки, или в виде одного файла. Расширение у файлов библиотеки — mpy (об этом в конце урока).

Вторая папка examples — содержит примеры для работы с библиотеками. Крайне полезно туда заглядывать при написании своей программы.

Наконец, копируем нужную библиотеку в папку lib на нашем устройстве. С этого момента программа на микроконтроллере сможет «увидеть» библиотеку и использовать её компоненты.

Использование библиотеки в программе

Чтобы использовать компоненты библиотеки в своей программе, мы должны её подключить. В языке Python для этого примеряется директива include. Например, в программе для мигания светодиодом организация паузы осуществляется с помощью функции sleep. Эта функция описана в библиотеке time, так что для работы с ней в самом начале программы следует написать:

import time

Теперь, когда нам нужно будет создать паузу где-то в тексте программы, мы сможем вызвать функцию sleep:

time.sleep(0.1)

Таким образом, мы подключили всю библиотеку time целиком и теперь можем вызвать любую её функцию. Но директива include позволяет также подключить только нужную нам функцию, или сразу несколько таковых:

from time import sleep, sleep_ms

sleep(0.1)
sleep_ms(100)

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

Для работы с составными библиотеками (с пакетами) применяется такая запись:

import adafruit_bme280.advanced

sens = adafruit_bme280.advanced.Adafruit_BME280_I2C(i2c)

В каждой папке составной библиотеки могут быть отдельные файла, и подпапки. Может так получиться, что при вызове функций придётся писать достаточно длинные выражения, обращаясь к нужному файлу. Чтобы упростить это безобразие, директива import имеет механизм синонимов:

import adafruit_bme280.advanced as bme280

sens = bme280.Adafruit_BME280_I2C(i2c)

Стало немного компактнее. Язык Python славится компактностью!

Файлы MPY

Файлы с программами на языке Python имеют расширение .py. Однако, для экономии места на микроконтроллере применяется предварительно скомпилированный в байт-код файл .mpy. Такой файл занимает гораздо меньше места, но посмотреть код программы в нём уже не получится.

Именно по этой причине, когда мы говорили о репозитории библиотек CircuitPython, упомянули файл с исходными кодами. В этом архиве файлы библиотек имеют привычное расширение .py и их можно изучать.

Также, можно создавать и свои библиотеки в формате .mpy. Подробнее об этом можно почитать тут:

https://learn.adafruit.com/creating-and-sharing-a-circuitpython-library?view=all


Изменено:

Добавить комментарий

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.