В следующем списке содержатся стандартные библиотеки Python, специальные библиотеки MicroPython, и специальные модули для Pycom, которые доступны на устройствах Pycom.
Стандартные библиотеки Python были адаптированы, чтобы соответствовать философии MicroPython. Они обеспечивают основные функциональные возможности этого модуля и предназначены для замены стандартной библиотеки Python.
Некоторые модули доступны по u-name, а также по их non-u-name. Non-u-name может быть переопределено файлом с таким же именем. Например, импорт json сначала будет искать файл json.py или каталог json и загружать этот пакет, если он найден. Если ничего не найдено, то это приведет к загрузке встроенного модуля ujson.
См. статью Массив Python для получения дополнительной информации.
Поддерживаемые коды формата: b, B, h, H, i, I, l, L, q, Q, f, d (последние 2 зависят от поддержки формата с плавающей запятой).
class array.array(typecode[, iterable])
Создаёт массив с элементами данного типа. Начальное содержимое массива задается итерацией. Если она не указана, создается пустой массив.
Методы
array.append(val)
Добавляет новый элемент в конец массива, увеличив его.
array.extend(iterable)
Добавляет новые элементы, содержащиеся в итерируемом конце массива, увеличивая его.
Модуль cmath предоставляет некоторые основные математические функции для работы с комплексными числами. Для этого модуля требуется поддержка формата с плавающей точкой.
cmath.cos(z)
Возвращает косинус z.
cmath.exp(z)
Возвращает экспоненту z.
cmath.log(z)
Возвращает натуральный логарифм z. Срез ветки проходит вдоль отрицательной действительной оси.
cmath.log10(z)
Возвращает логарифм z с основанием 10. Срез ветки проходит вдоль отрицательной действительной оси.
cmath.phase(z)
Возвращает фазу числа z в диапазоне (-pi, + pi).
cmath.polar(z)
Возвращает полярную форму z в виде кортежа.
cmath.rect(r, phi)
Возвращает комплексное число с модулем r и фазой phi.
cmath.sin(z)
Возвращает синус z.
cmath.sqrt(z)
Возвращает квадратный корень из z.
gc.enable()
Включает автоматическую сборку мусора.
gc.disable ()
Отключает автоматическую сборку мусора. Память все еще может быть выделена, сборка мусора все еще может быть инициирована вручную с помощью gc.collect().
gc.collect()
Запускает сборку мусора.
gc.mem_alloc()
Возвращает количество выделенных байтов памяти.
gc.mem_free()
Возвращает количество байтов доступной оперативной памяти.
Модуль Math предоставляет некоторые основные математические функции для работы с числами с плавающей запятой. Для этого модуля требуется поддержка данного формата.
math.acos(х)
Возвращает обратный косинус х.
math.acosh(х)
Возвращает обратный гиперболический косинус x.
Math.asin(х)
Возвращает обратный синус х.
math.asinh (х)
Возвращает обратный гиперболический синус x.
math.atan(х)
Возвращает обратный тангенс х.
math.atan2(у, х)
Возвращает значение обратного тангенса y / x.
math.atanh(х)
Возвращает обратный гиперболический тангенс x.
Math.ceil(х)
Возвращает целое число, округленное по x к положительной бесконечности.
math.copysign (x, y)
Возвращает x со знаком y.
Math.cos(х)
Возвращает косинус х.
math.cosh(х)
Возвращает гиперболический косинус x.
math.degrees(х)
Возвращает радианы x в градусах.
math.erf(х)
Возвращает функцию ошибки x.
math.erfc(х)
Возвращает дополнительную функцию ошибки x.
Math.exp(х)
Возвращает экспоненту x.
math.expm1(х)
Возвращает exp(x) - 1
math.fabs(х)
Возвращает абсолютное значение х.
Math.floor(х)
Возвращает целое число, округленное по x к отрицательной бесконечности.
math.fmod(x, y)
Возвращает остаток х / у.
math.frexp(х)
Разлагает число с плавающей запятой в его мантиссу и показатель степени. Возвращаемым значением является кортеж (m, e), такой, что x == m * 2**e . Если x == 0, то функция возвращает (0.0, 0), в противном случае выполняется соотношение 0.5 <= abs (m) <1.
math.gamma(х)
Возвращает гамма-функцию x.
math.isfinite (х)
Возвращает True, если x конечно.
math.isinf (х)
Возвращает True, если x бесконечно.
math.isnan(х)
Возвращает True, если x не является числом
math.ldexp(x, exp)
Возвращает x * (2**exp).
math.lgamma(х)
Возвращает натуральный логарифм гамма-функции x.
Math.log(х)
Возвращает натуральный логарифм х.
math.log10(x)
Возвращает десятичный логарифм х.
math.log2(х)
Возвращает двоичный логарифм х.
math.modf(х)
Возвращает кортеж из двух чисел, являющихся дробной и неотъемлемой частями x. Оба возвращаемых значения имеют тот же знак, что и x.
math.pow(x, y)
Возвращает х в степени у.
math.radians(х)
Возвращает градусы х в радианах.
Math.sin(х)
Возвращает синус х.
math.sinh(х)
Возвращает гиперболический синус x.
Math.sqrt(х)
Возвращает квадратный корень из х.
Math.tan(х)
Возвращает тангенс х.
math.tanh(х)
Возвращает гиперболический тангенс x.
math.trunc(х)
Возвращает целое число, округленное по x к 0.
micropython.alloc_emergency_exception_buf(size)
Выделяет оперативную память для буфера аварийного исключения (хороший размер составляет около 100 байтов). Буфер используется для создания исключений в тех случаях, когда нормальное распределение ОЗУ не будет выполнено (например, в обработчике прерываний), и, следовательно, дает полезную информацию трассировки в этих ситуациях.
Хороший способ использовать эту функцию - поместить ее в начало основного скрипта (например, boot.py или main.py), и тогда буфер чрезвычайных исключений будет активен для всего кода, следующего за ним.
micropython.const(expr)
Используется для объявления, что выражение является константой, чтобы компиляция могла оптимизировать его. Использование этой функции должно быть следующим:
from micropython import const
CONST_X = const(123)
CONST_Y = const(2 * CONST_X + 1)
Константы, объявленные таким образом, по-прежнему доступны как глобальные переменные вне модуля, в котором они объявлены. С другой стороны, если константа начинается с подчеркивания, то она скрыта: недоступна как глобальная переменная и не занимает память во время исполнения.
Эта const-функция распознается синтаксическим анализатором MicroPython непосредственно и предоставляется как часть модуля micropython, главным образом для написания сценариев, которые выполняются как в CPython, так и в MicroPython, согласно приведенному выше шаблону.
micropython.opt_level([level])
Если указан level, то эта функция устанавливает уровень оптимизации для последующей компиляции скриптов и возвращает None. В противном случае возвращает текущий уровень оптимизации.
micropython.mem_info([verbose])
Печатает информацию об используемой в данный момент памяти. Если дан подробный аргумент, то выводится дополнительная информация.
Информация, которая выводится на печать, зависит от реализации, но в настоящее время включает объем используемого стека и кучи. В подробном режиме он распечатывает всю кучу, указывая, какие блоки используются, а какие свободны.
micropython.qstr_info([verbose])
Печатает информацию о строках, использующихся в настоящее время. Если дан подробный аргумент, то выводится дополнительная информация.
Информация, которая выводится на печать, зависит от реализации, но в настоящее время включает количество интернированных строк и объем используемой ими оперативной памяти. В подробном режиме он печатает имена всех строк, содержащихся в оперативной памяти.
micropython.stack_use()
Возвращает целое число, представляющее текущий объем стека, который используется. Абсолютное значение этого не особенно полезно, скорее его следует использовать для вычисления различий в использовании стека в разных точках.
micropython.heap_lock()
micropython.heap_unlock()
Блокировка или разблокировка кучи. Когда заблокирована, выделение памяти не может произойти, и при попытке выделения будет вызван MemoryError.
Эти функции могут быть вложенными, то есть heap_lock() может вызываться несколько раз подряд, и глубина блокировки будет увеличиваться, а затем heap_unlock() должен вызваться столько же раз, чтобы снова сделать кучу доступной.
micropython.kbd_intr(chr)
Устанавливает символ, который вызовет исключение KeyboardInterrupt. По умолчанию это значение равно 3 во время выполнения скрипта, что соответствует Ctrl-C. Передача -1 этой функции отключит захват Ctrl-C, а передача 3 восстановит его.
Эта функция может использоваться для предотвращения захвата Ctrl-C во входящем потоке символов, который обычно используется для REPL, в случае, если этот поток используется для других целей.
Этот модуль предоставляет функции для ожидания событий в потоках (выберите потоки, которые готовы к работе).
Polling - это эффективный способ ожидания чтения/записи на нескольких объектах. Текущие объекты, поддерживающие опрос: pyb.UART, pyb.USB_VCP.
select.poll()
Создаёт экземпляр класса Poll.
select.select(rlist, wlist, xlist[, timeout])
Ждёт активности на множестве объектов.
Эта функция предназначена для совместимости и неэффективна. Вместо этого рекомендуется использовать Poll.
poll.register(obj[, eventmask])
Регистрирует объект для опроса. Eventmask является логическим ИЛИ:
poll.unregister(obj)
Отменяет регистрацию obj от опроса.
poll.modify(obj, eventmask)
Изменяет eventmask для obj.
poll.poll([timeout])
Ждёт, пока хотя бы один из зарегистрированных объектов станет готов. Возвращает список кортежей (obj, event,…), элемент события указывает, какие события произошли с потоком, и представляет собой комбинацию констант select.POLL *, описанных выше. В кортеже могут быть другие элементы, в зависимости от платформы и версии, поэтому не думайте, что его размер равен 2. В случае тайм-аута возвращается пустой список.
Тайм-аут в миллисекундах.
sys.exit(retval=0)
Завершает текущую программу с заданным кодом выхода. В основном, эту функцию вызывают как исключение SystemExit. Если указан аргумент, его значение передается в качестве аргумента SystemExit.
sys.print_exception(exc, file=sys.stdout)
Печатает исключение с обратной трассировкой в файлоподобный объектный файл (или sys.stdout по умолчанию).
Отличия от CPython
Это упрощенная версия функции, которая появляется в модуле трассировки в CPython. В отличие от traceback.print_exception(), эта функция принимает только значение исключения вместо типа исключения, значения исключения и объекта трассировки; аргумент файла должен быть позиционным; другие аргументы не поддерживаются. CPython-совместимый модуль трассировки можно найти в micropython-lib.
Этот объект является рекомендуемым способом отличить MicroPython от других реализаций Python (обратите внимание, что он все еще может не существовать в самых минимальных портах).
Отличия от CPython
CPython требует больше атрибутов для этого объекта, но фактический полезный минимум реализован в MicroPython.
sys.maxsize: максимальное значение, которое может содержать собственный целочисленный тип на текущей платформе, или максимальное значение, представляемое целочисленным типом MicroPython, если оно меньше максимального значения платформы (имеет место для портов MicroPython без поддержки длинных int).
Этот атрибут полезен для определения «битности» платформы (32-битная или 64-битная и т.д.). Рекомендуется не сравнивать этот атрибут с каким-либо значением напрямую, а считать количество бит в нем:
bits = 0
v = sys.maxsize
while v:
bits += 1
v >>= 1
if bits > 32:
# 64-битная (или более) платформа
else:
# 32-битная (или менее) платформа
# Обратите внимание, что на 32-битной платформе значение битов может быть меньше 32
# (например, 31) из-за особенностей, описанных выше, поэтому используйте «> 16»,
# "> 32", "> 64" стиль сравнений.
Этот модуль реализует преобразования между двоичными данными и различными их кодировками в форме ASCII (в обоих направлениях).
ubinascii.hexlify(data[, sep])
Преобразует двоичные данные в шестнадцатеричное представление. Возвращает строку байтов.
Отличия от CPython
Если указан дополнительный аргумент sep, он используется в качестве разделителя между шестнадцатеричными значениями.
ubinascii.unhexlify(data)
Преобразует шестнадцатеричные данные в двоичное представление. Возвращает байтовую строку. (т. е. обратное для hexlify)
ubinascii.a2b_base64(data)
Преобразует данные в кодировке Base64 в двоичное представление. Возвращает байтовую строку.
ubinascii.b2a_base64(data)
Кодирует двоичные данные в формат Base64. Возвращает строку.
Этот модуль обеспечивает встроенную поддержку криптографических алгоритмов, что свободно основано на PyCrypto.
class AES - улучшенный стандарт шифрования
crypto.getrandbits(bits)
Возвращает объект байтов, заполненный случайными битами, полученными от аппаратного генератора случайных чисел.
Согласно Техническому справочному руководству ESP32, такие биты «… могут использоваться в качестве основы для криптографических операций». «Эти истинные случайные числа генерируются на основе шума в радиочастотной системе Wi-Fi / BT. Когда Wi-Fi и BT отключены, генератор случайных чисел выдаст псевдослучайные числа ».
Биты параметра округляются в большую сторону до ближайшего кратного 32 битам.
Криптография - это не тривиально. Неправильное решение может привести к снижению или отсутствию безопасности. Пожалуйста, будьте внимательны, если используете шифрование для защиты важной информации.
crypto.generate_rsa_signature(message, private_key, *, pers=“esp32-tls”)
Генерирует подпись для message на основе private_key с использованием алгоритма RS256. Сообщение ожидается в виде строки. Private_key - это содержимое закрытого ключа, а не путь. Закрытый ключ должен быть в формате PKCS8! pers - строка персонализации, используемая для генерации случайных чисел. Возвращается с объектом Bytes, содержащим сгенерированную подпись.
import crypto
# Пример заголовка JWT + payload
header_payload = "eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ"
# Закрытый ключ ДОЛЖЕН БЫТЬ в формате PKCS8 !!!
f = open("cert/private_key_pkcs8.pem")
pk = f.read()
# Создать подпись
signature = crypto.generate_rsa_signature(header_payload, pk, pers="my_pers_string")
crypto.rsa_encrypt(message, public_key)
Зашифровывает message с помощью public_key получателя, поэтому оно будет расшифровано только реальным адресатом.
message является байтовым объектом.
Public_key - это RSA 2048bits, содержимое файла ключа (не путь к нему), и он должен быть в формате PKCS8. Ниже приведен пример того, как был сгенерирован этот ключ.
Возвращает объект Bytes, содержащий зашифрованное сообщение.
Пример использования находится в методе crypto.rsa_decrypt().
crypto.rsa_decrypt(message, private_key)
Расшифровывает сообщение с помощью private_key.
Сообщение является байтовым объектом.
Private_key - это RSA 2048bits, содержимое файла ключа (не путь к нему), и он должен быть в формате PKCS8. Ниже приведен пример того, как был сгенерирован этот ключ.
Возвращает объект Bytes, содержащий дешифрованное сообщение.
# создание пары открытых и закрытых ключей в одном файле PEM
$ openssl genrsa -des3 -out private.pem 2048
# экспортировать открытый ключ RSA в файл
$ openssl rsa -in private.pem -outform PEM -pubout -out public.pem
# экспортировать закрытый ключ RSA в файл
$ openssl rsa -in private.pem -out private_unencrypted.pem -outform PEM
# Пример сообщения
message = "this is a secret message, it needs to be encrypted"
# прочитать ключ из файла
f = open("cert/public.pem")
pk = f.read()
f.close()
# Зашифровать сообщение
message_encrypted = crypto.rsa_encrypt(payload, pk)
# рекомендуется добавлять контрольную сумму SHA (`uhashlib.sha ()`),
# поэтому, когда сообщение расшифровано, можно проверить согласованность
# ... далее отправить сообщение в сеть (LoRa, Wifi, BLE, сотовая связь)
# попробуйте расшифровать на ресивере
# прочитать ключ из файла
f = open("cert/private_unencrypted.pem")
pub = f.read()
f.close()
message_decrypted = crypto.rsa_decrypt(message_encrypted, pub)
# Кроме того, следует проверить согласованность (использование `uhashlib.sha ()` `)
# так как сообщение могло быть изменено (злоумышленник, проблемы с сетью)
Этот модуль реализует «интерфейс внешних данных» для MicroPython. Идея, лежащая в основе, похожа на модули CPython ctypes, но API отличается оптимизацией под небольшой размер. Основная идея модуля состоит в том, чтобы определить структуру данных и получить к ней доступ, используя точечный синтаксис для ссылки на подполя.
Модуль использует стандартный способ Python для доступа к структурам двоичных данных (плохо масштабируется для больших и сложных структур).
Структура определяется «дескриптором» - словарем Python, который кодирует имена полей в виде ключей, а также и другие свойства, необходимые для доступа к ним в качестве связанных значений. В настоящее время для uctypes требуется явное описание смещений для каждого поля. Смещение дается в байтах от начала структуры.
Ниже приведены примеры кодирования для различных типов полей:
"field_name": uctypes.UINT32 | 0
Другими словами, значение - это идентификатор скалярного типа OR-ed со смещением поля (в байтах) от начала структуры.
"sub": (2, {
"b0": uctypes.UINT8 | 0,
"b1": uctypes.UINT8 | 1,
})
Значение - это двойной кортеж, первый элемент которого - смещение, а второй - словарь дескрипторов структуры (примечание: смещения в рекурсивном дескрипторе относятся к структуре, которую они определяют).
"arr": (uctypes.ARRAY | 0, uctypes.UINT8 | 2),
Значение представляет собой двойной кортеж, первый элемент которого является флагом ARRAY или смещением, а второй - скалярным типом элемента или числом элементов в массиве.
"arr2": (uctypes.ARRAY | 0, 2, {"b": uctypes.UINT8 | 0}),
Значение является тройным кортежем, первый элемент которого является флагом ARRAY или смещением, второй - количество элементов в массиве, а третий - дескриптор типа элемента.
"ptr": (uctypes.PTR | 0, uctypes.UINT8),
Значение представляет собой двойной кортеж, первым элементом которого является флаг PTR или смещение, а вторым - тип скалярного элемента.
"ptr2": (uctypes.PTR | 0, {"b": uctypes.UINT8 | 0}),
Значение является двойным кортежем, первый элемент которого - флаг PTR OR-ed со смещением, второй - дескриптор указанного типа.
"bitf0": uctypes.BFUINT16 | 0 | 0 << uctypes.BF_POS | 8 << uctypes.BF_LEN,
value - тип скалярного значения, содержащего данное битовое поле (typenames аналогичны скалярным типам, но с префиксами «BF»), OR-ed со смещением для скалярного значения, содержащего битовое поле, и далее OR-ed со значениями для битового смещения и битовой длины поля в пределах скалярного значения, смещенного на позиции BF_POS и BF_LEN соответственно. Положение битового поля отсчитывается от младшего значащего бита и представляет собой номер самого правого бита поля (другими словами, это количество бит, на которое скаляр должен быть сдвинут вправо для увеличения битового поля).
В приведенном выше примере первое значение UINT16 будет извлечено со смещением 0 (это может иметь значение при доступе к аппаратным регистрам, где требуется конкретный размер доступа и выравнивание). Затем битовое поле, крайний правый бит которого является наименее значимым битом UINT16. Длина - 8 бит: фактически, появится доступ к младшему байту UINT16.
Обратите внимание, что операции битового поля не зависят от порядка байтов: в частности, в приведенном выше примере доступ к младшему байту UINT16 будет получен в любом случае. Но есть зависимость от нумерации младшего значащего бита 0. В некоторых случаях может использоваться различная нумерация в ABI, но uctypes всегда использует нормализованную нумерацию, описанную выше.
class uctypes.struct(addr, descriptor, layout_type=NATIVE)
Создание объекта «чужой структуры данных» на основе адреса структуры в памяти, дескриптора (закодированного в виде словаря) и типа макета (см.ниже).
uctypes.LITTLE_ENDIAN
Тип для структуры с прямым порядком байтов little-endian. Это означает, что каждое поле занимает ровно столько байтов, сколько определено в дескрипторе: то есть выравнивание равно 1.
uctypes.BIG_ENDIAN
Тип для структуры с прямым порядком байтов big-endian.
uctypes.NATIVE
Тип для собственной структуры - с порядком байтов данных и выравниванием в соответствии с ABI системы, в которой работает MicroPython.
uctypes.sizeof(struct)
Возвращает размер структуры данных в байтах. Аргумент может быть либо структурным классом, либо конкретным структурным объектом (или его совокупным полем).
uctypes.addressof(obj)
Возвращает обратный адрес объекта. Аргумент должен быть байтовым массивом, байтовым или другим объектом, поддерживающим буферный протокол (возвращается как раз адрес этого буфера).
uctypes.bytes_at(addr, size)
Захват памяти по заданному адресу и размеру в виде байтового объекта. Поскольку объект байтов является неизменным, память фактически дублируется и копируется в объект байтов, поэтому, если позднее изменяется содержимое памяти, созданный объект сохраняет исходное значение.
uctypes.bytearray_at(addr, size)
Захват памяти по заданному адресу и размеру в виде объекта bytearray. В отличие от функции bytes_at(), описанной выше, вы получите доступ к текущему значению по заданному адресу памяти.
Имея словарь дескриптора структуры и его тип, вы можете создать экземпляр конкретной структуры по заданному адресу памяти, используя конструктор uctypes.struct(). Адрес памяти обычно поступает из следующих источников:
Объекты структуры позволяют получить доступ к отдельным полям с использованием стандартной точечной нотации: my_struct.substruct1.field1. Если поле имеет скалярный тип, его получение приведет к примитивному значению (целочисленное значение Python или число с плавающей запятой), соответствующему значению, содержащемуся в поле. Скалярное поле также может быть назначено.
Если поле является массивом, к его отдельным элементам можно получить доступ с помощью стандартного оператора индекса [] - как для чтения, так и для назначения.
Если поле является указателем, оно может быть разыменовано с использованием синтаксиса [0] (соответствует оператору C *, хотя [0] также работает в C). Индексация указателя поддерживается другими целочисленными значениями, кроме 0: с той же семантикой, что и в C.
Подвелём итог: доступ к полям структуры обычно использует синтаксис C, за исключением разыменования указателя, когда вам нужно использовать оператор [0] вместо *.
Доступ к нескалярным полям приводит к выделению промежуточных объектов для их представления. Это означает, что особое внимание следует уделить компоновке структуры, с которой придётся работать, когда выделение памяти отключено (например, от прерывания). Рекомендации:
Обратите внимание, что эти рекомендации приведут к снижению читабельности и краткости макетов, поэтому их следует использовать только в том случае, если ожидается необходимость доступа к полям структуры без выделения памяти (возможно даже определить 2 параллельных макета: один для обычного использования и один для использования, когда выделение памяти запрещено).
Этот модуль реализует алгоритмы хеширования двоичных данных (MD5 и SHA поддерживаются). Из-за ограничений аппаратного обеспечения поддерживается только одна активная операция хеширования.
class uhashlib.md5([data])
Создает объект хеширования MD5 и при необходимости добавляет в него данные.
class uhashlib.sha1([data])
Создает хеш-объект SHA-1 и при необходимости добавляет в него данные.
class uhashlib.sha224([data])
Создает хеш-объект SHA-224 и при необходимости добавляет в него данные.
class uhashlib.sha256([data])
Создает хеш-объект SHA-256 и при необходимости добавляет в него данные.
class uhashlib.sha384([data])
Создает хеш-объект SHA-384 и при необходимости добавляет в него данные.
class uhashlib.sha512([data])
Создает хеш-объект SHA-512 и при необходимости добавляет в него данные.
hash.update(data)
Добавляет больше двоичных данных в хеш.
hash.digest()
Возвращает хеш для всех данных, переданных через хеш, как объект байтов. После вызова этого метода данные больше не могут быть переданы в хэш.
hash.hexdigest()
Этот метод НЕ реализован. Используйте ubinascii.hexlify (hash.digest ()) для достижения аналогичного эффекта.
Этот модуль позволяет конвертировать между объектами Python и форматом данных JSON.
ujson.dumps(obj)
Возвращает obj, представленный как строка JSON.
ujson.loads(str)
Разбирает JSON str и возвращает объект. Вызывает ValueError, если строка сформирована неправильно.
ujson.load(fp)
Разбирает содержимое fp (.read () - поддерживает файловый объект, содержащий документ JSON). Вызывает ValueError, если содержимое сформировано неправильно.
Модуль uos содержит функции для доступа к файловой системе и функцию urandom.
Файловая система имеет / в качестве корневого каталога, доступные в настоящее время физические диски следующие:
uos.uname()
Возвращает информацию о системе, версии прошивки и версии интерпретатора MicroPython.
uos.chdir(path)
Меняет текущий каталог.
uos.getcwd()
Считывает текущий каталог.
uos.listdir([dir])
Без аргументов перечисляет текущий каталог. В противном случае перечисляет заданный каталог.
uos.mkdir(path)
Создаёт новый каталог.
uos.remove(path)
Удаляет файл.
uos.rmdir(path)
Удаляет каталог.
uos.rename(old_path, new_path)
Переименовывает файл.
uos.stat(path)
Получает статус файла или каталога.
Возвращаемое значение представляет собой кортеж со следующими 10 значениями по порядку:
uos.getfree(path)
Возвращает свободное место на диске, заданном path.
uos.sync()
Синхронизирует все файловые системы.
uos.urandom(n)
Возвращает объект байтов с n случайными байтами.
uos.unlink(path)
Псевдоним для метода remove ().
uos.mount (block_device, mount_point, *, readonly = False)
Монтирует блочное устройство (например, объект SD) в указанной точке монтирования. Пример:
os.mount(sd, ‘/sd‘)
uos.unmount(path)
Размонтирует ранее смонтированное блочное устройство по указанному пути.
uos.mkfs(block_device or path)
Форматирует указанный путь: должен быть либо /flash, либо /sd. Блочное устройство также может быть передано как объект SD перед монтированием.
uos.dupterm(stream_object)
Дублирует терминал (REPL) на переданный stream-like объект. Данный объект должен по крайней мере реализовать методы read() и write().
uos.sep: Символ разделения, используемый в path
Этот модуль реализует операции с регулярными выражениями. Поддерживаемый синтаксис регулярных выражений является подмножеством re-модуля CPython (и фактически является подмножеством расширенных регулярных выражений POSIX).
Поддерживаемые операторы:
^
$
?
*
+
??
*?
+?
Подсчет повторений ({m, n}), более сложные утверждения, группы и т.д. не поддерживаются.
ure.compile(regex)
Компилирует регулярное выражение, возвращает регулярное выражение.
ure.match(regex, string)
Сопоставляет регулярное выражение со строкой. Совпадение всегда происходит из начальной позиции в строке.
ure.search(regex, string)
Поиск регулярных выражений в строке. В отличие от соответствия, будет искать строку для первой позиции, которая соответствует регулярному выражению (которое все еще может быть 0, если привязано).
ure.DEBUG
Значение флага, отображение отладочной информации о скомпилированном выражении.
Скомпилированное регулярное выражение. Экземпляры этого класса создаются с помощью ure.compile().
regex.match(string)
regex.search(string)
regex.split(string, max_split=-1)
Сопоставление объектов, возвращаемые методами match() и search().
match.group([index])
Поддерживает только числовые группы.
Этот модуль обеспечивает доступ к интерфейсу BSD-сокета. См. соответствующий модуль CPython для сравнения.
Функции ниже принимают сетевой адрес в формате (ipv4_address, port), где ipv4_address - это строка с числовым IPv4-адресом с точечной нотацией, например, 8.8.8.8, а порт - это целочисленный номер порта в диапазоне 1-65535. Обратите внимание, что доменные имена не принимаются как ipv4_address, они должны быть сначала обработаны с помощью socket.getaddrinfo ().
socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)
Создаёт новый сокет, используя заданное семейство адресов, тип сокета и номер протокола.
socket.getaddrinfo(host, port)
Переводит аргумент host/port в последовательность из кортежей, которые содержит все необходимые аргументы для создания сокета, подключенного к этой службе. Список из кортежей имеет следующую структуру:(family, type, proto, canonname, sockaddr). В следующем примере показано, как подключиться к данному URL:
s = socket.socket()
s.connect(socket.getaddrinfo(‘www.micropython.org‘, 80)[0][-1])
socket.error, socket.timeout
socket.close()
Отмечает сокет закрытым. Как только это происходит, все будущие операции с объектом сокета завершаются неудачно. Закрытый конец больше не будет получать данные.
Сокеты автоматически закрываются при наполнении, но рекомендуется закрывать их явно или использовать оператор with.
socket.bind(address)
Привязывает сокет к адресу. Сокет не должен быть связан с другим адресом. Параметр address должен быть кортежем, содержащим IP-адрес и порт.
В случае сокетов LoRa параметр address - это просто целое число с номером порта, например: s.bind(1)
socket.listen([backlog])
Разрешает серверу принимать соединения. Если задано отставание, то оно должно быть не менее 0 (иначе будет равно 0). Отставание задаёт количество соединений, которые система примет до отказа последующим. Если отставание не задано, то выбирается значение по умолчанию.
socket.accept()
Принимает соединение. Сокет должен быть привязан к адресу и соединению. Возвращаемое значение - это пара (conn, address), где conn - это новый объект сокета, используемый для отправки и получения данных о соединении, а address - это адрес, связанный с сокетом на другом конце соединения.
socket.connect(address)
Подключение к удаленному разъему по адресу.
socket.send(bytes)
Отправляет данные в сокет. Сокет должен быть подключен к удаленному разъему.
socket.send(bytes)
Иначе: socket.send(bytes)
socket.recv(bufsize)
Получает данные из сокета. Возвращаемое значение является байтовым объектом, представляющим полученные данные. Максимальный объем данных, получаемых за один раз, определяется параметром bufsize.
socket.sendto(bytes, address)
Отправляет данные в сокет. Сокет не должен быть подключен к удаленному сокету, так как идёт указание адреса.
socket.recvfrom(bufsize)
Получает данные из сокета. Возвращаемое значение - пара (bytes, address), где bytes - это байтовый объект, представляющий полученные данные, а address - это адрес сокета, отправляющего данные.
socket.setsockopt(level, optname, value)
Устанавливает значение параметров сокета. Необходимые символические константы определены в модуле сокета (SO_* и т.д.). Значение может быть целочисленным или байтовым объектом, представляющим буфер.
socket.settimeout(value)
Устанавливает тайм-аут на блокировку операций сокета. Аргументом value может быть неотрицательное число с плавающей запятой, выражающее секунды, или None. Если задано ненулевое значение, последующие операции сокета вызовут timeout exception, если если период истек до завершения операции. Если задан ноль, сокет переводится в неблокирующий режим. Если значение не указано, сокет переводится в режим блокировки.
socket.setblocking(flag)
Установка режима блокировки или неблокирования сокета: если флаг равен false, сокет устанавливается в неблокирующий, иначе в режим блокировки.
Этот метод является сокращением для определенных вызовов settimeout():
sock.setblocking(True) is equivalent to sock.settimeout(None)
sock.setblocking(False) is equivalent to sock.settimeout(0.0)
socket.makefile(mode=‘rb’)
Возвращает объект файла, связанный с сокетом. Точный возвращаемый тип зависит от аргументов, переданных в makefile(). Формат ограничен только двоичными режимами (rb и wb). Аргументы CPython: encoding, errors и newline не поддерживаются.
Сокет должен быть в режиме блокировки: внутренний буфер объекта может оказаться в несовместимом состоянии в момент тайм-аута.
Отличия от CPython. Закрытие файлового объекта, возвращаемого makefile(), также закроет исходный сокет.
socket.read(size)
Чтение до размера байтов из сокета. Возвращает объект байтов. Если размер не указан, то действует аналогично socket.readall(), (см. ниже).
socket.readall()
Читает все данные, доступные из сокета, до EOF. Функция не вернется, пока сокет не будет закрыт.
socket.readinto(buf[, nbytes])
Читает байты в буфер. Если указано nbytes, то следует прочитать не более этого количества байтов. В противном случае читает не более len(buf) байтов.
Возвращаемое значение: количество байтов, прочитанных и сохраненных в буфере.
socket.readline()
Читает строку, заканчивающуюся символом новой строки.
Возвращаемое значение: прочитанная строка.
socket.write(buf)
Записывает буфер байтов в сокет.
Возвращаемое значение: количество записанных байтов.
socket.do_handshake()
Выполняет рукопожатие SSL на ранее используемом в ssl.wrap_socket(). Может использоваться, когда сокет не является блокирующим, а рукопожатие SSL не выполняется во время выполнения connect().
Пример:
from network import WLAN
import time
import socket
import ssl
import uselect as select
wlan = WLAN(mode=WLAN.STA)
wlan.connect(ssid=‘‘, auth=(WLAN.WPA2, ‘‘))
while not wlan.isconnected():
time.sleep(1)
print("Wifi .. Connecting")
print ("Wifi Connected")
a = socket.getaddrinfo(‘www.postman-echo.com‘, 443)[0][-1]
s= socket.socket()
s.setblocking(False)
s = ssl.wrap_socket(s)
try:
s.connect(a)
except OSError as e:
if str(e) == ‘119‘: # For non-Blocking sockets 119 is EINPROGRESS
print("In Progress")
else:
raise e
poller = select.poll()
poller.register(s, select.POLLOUT | select.POLLIN)
while True:
res = poller.poll(1000)
if res:
if res[0][1] & select.POLLOUT:
print("Doing Handshake")
s.do_handshake()
print("Handshake Done")
s.send(b"GET / HTTP/1.0 ")
poller.modify(s,select.POLLIN)
continue
if res[0][1] & select.POLLIN:
print(s.recv(4092))
break
break
socket.dnsserver(*, dnsIndex, ip_addr)
Если аргументы не переданы, эта функция возвращает настроенные DNS-серверы Primary (Index = 0) и резервную копию (Index = 1).
Пример:
>>> socket.dnsserver()
(‘10.0.0.1‘, ‘8.8.8.8‘)
Настройка DNS-серверов:
>>> socket.dnsserver(1, ‘0.0.0.0‘)
>>> socket.dnsserver()
(‘10.0.0.1‘, ‘0.0.0.0‘)
Этот модуль обеспечивает доступ к средствам шифрования и проверки подлинности Transport Layer Security (часто называемом «Secure Sockets Layer») для сетевых сокетов, как на стороне клиента, так и на стороне сервера.
ssl.wrap_socket(sock, keyfile=None, certfile=None, server_side=False, cert_reqs=CERT_NONE, ca_certs=None, timeout=10sec)
Принимает экземпляр sock для socket.socket и возвращает экземпляр ssl.SSLSocket подтипа socket.socket, который обращает базовый сокет в контекст SSL. Пример:
import socket
import ssl
s = socket.socket()
ss = ssl.wrap_socket(s)
ss.connect(socket.getaddrinfo(‘www.google.com‘, 443)[0][-1])
Сертификаты должны использоваться для проверки другой стороны соединения, а также для аутентификации себя на другом конце. Такие сертификаты должны храниться в виде файлов с использованием FTP-сервера и должны быть размещены по определенным путям с конкретными именами.
Например, чтобы подключиться к серверам blynk с помощью сертификатов, поместите файл ca.pem, расположенный в папке примеров blynk, в /flash/cert/. Затем запустите:
import socket
import ssl
s = socket.socket()
ss = ssl.wrap_socket(s, cert_reqs=ssl.CERT_REQUIRED, ca_certs=‘/flash/cert/ca.pem‘)
ss.connect(socket.getaddrinfo(‘cloud.blynk.cc‘, 8441)[0][-1])
Сокеты SSL наследуют все методы стандартных сокетов, см. модуль usocket.
timeout: укажите время ожидания в секундах для операции SSL-рукопожатия между клиентом и сервером (по умолчанию 10 секунд)
ssl.SSLError
ssl.CERT_NONE, ssl.CERT_OPTIONAL, ssl.CERT_REQUIRED: Поддерживаемые значения в cert_reqs
Поддерживаемые префиксы size/byte: @, <,>,!.
Поддерживаемые коды форматов: b, B, h, H, i, I, l, L, q, Q, s, P, f, d (последние два в зависимости от поддержки формата с плавающей запятой).
ustruct.calcsize(fmt)
Возвращает количество байтов, необходимое для хранения заданного fmt.
ustruct.pack(fmt, v1, v2, …)
Распределяет значения v1, v2, ... в соответствии со строкой формата fmt. Возвращаемое значение является байтовым объектом, кодирующим значения.
ustruct.pack_into(fmt, buffer, offset, v1, v2, …)
Распределяет значения v1, v2, ... в соответствии со строкой формата fmt в буфер, начиная с offset. offset может быть отрицательным для отсчета от конца буфера.
ustruct.unpack(fmt, data)
Распаковывает data в соответствии со строкой формата fmt. Возвращаемое значение является кортежем распакованных значений.
ustruct.unpack_from(fmt, data, offset=0)
Распаковывает data, начиная с offset в соответствии со строкой формата fmt. offset может быть отрицательным для отсчета от конца буфера. Возвращаемое значение является кортежем распакованных значений.
Модуль utime предоставляет функции для получения текущего времени и даты, измерения временных интервалов и задержек.
Time Epoch: порт Pycom ESP32 использует стандарт для систем POSIX: 1970-01-01 00:00:00 UTC.
Для этого требуются часы реального времени (RTC). В системах с базовой ОС (включая некоторые RTOS) RTC может быть неявным. Установка и поддержание фактического календарного времени является обязанностью ОС/RTOS и выполняется вне MicroPython: последний просто использует OS API для запроса даты/времени. Однако на baremetal портах системное время зависит от объекта machine.RTC(). Текущее календарное время может быть установлено с помощью функции machine.RTC().datetime(tuple) и поддерживаться следующими способами:
Если фактическое календарное время не поддерживается с помощью системного/MicroPython RTC, то функции, приведенные ниже и требующие ссылки на текущее абсолютное время, могут работать не так, как ожидалось.
utime.gmtime([secs])
Преобразовывает время, выраженное в секундах с начала эпохи (см. выше), в кортеж, который содержит: (year, month, mday, hour, minute, second, weekday, yearday). Если секунды не указаны или отсутствуют, то используется текущее время из RTC.
utime.localtime([secs])
Подобно gmtime(), но конвертируется в местное время. Если значение secs не указано или отсутствует, используется текущее время с RTC.
utime.mktime()
Это обратная функция местного времени. Этот аргумент представляет собой полный кортеж, который выражает местное время. Возвращает целое число, которое является количеством секунд с 1 января 2000 года.
utime.sleep(seconds)
Сон на указанное количество секунд. seconds может быть числом с плавающей точкой (если сон идёт в течение доли секунды). Обратите внимание, что другие порты MicroPython могут не принимать аргумент с плавающей точкой, для совместимости с ними используйте функции sleep_ms() и sleep_us().
utime.sleep_ms(ms)
Задержка на указанное количество миллисекунд, должна быть положительной или равной 0.
utime.sleep_us(us)
Задержка для данного числа микросекунд, должна быть положительной или 0
utime.ticks_ms()
Возвращает время безотказной работы в миллисекундах.
utime.ticks_us()
Так же, как ticks_ms выше, но в микросекундах.
utime.ticks_cpu()
То же, что ticks_us, но быстрее.
utime.ticks_diff(old, new)
Измеряет время между последовательными вызовами ticks_ms(), ticks_us() или ticks_cpu(). Значение, возвращаемое этими функциями, может быть изменено в любое время, поэтому непосредственное их вычитание не поддерживается. Вместо этого следует использовать ticks_diff(). «Старое» значение должно фактически предшествовать «новому» значению во времени, иначе результат не определен. Эту функцию не следует использовать для измерения сколь угодно длинных периодов времени (поскольку функции ticks_*() обычно имеют короткий период). Ожидаемый шаблон использования реализует опрос событий с тайм-аутом:
# Дождаться подтверждения вывода GPIO, но не более 500 мкс
start = time.ticks_us()
while pin.value() == 0:
if time.ticks_diff(start, time.ticks_us()) > 500:
raise TimeoutError
utime.time()
Возвращает количество секунд как целое число начиная с эпохи, предполагая, что установлен базовый RTC. Если RTC не установлен, то функция возвращает количество секунд с момента включения или сброса). Если вы хотите разработать переносимое приложение MicroPython, вам не следует полагаться на эту функцию, чтобы обеспечить точность выше двойной. Если вам нужна более высокая точность, используйте функции ticks_ms() и ticks_us(), если вам нужно календарное время, то лучше использовать localtime() без аргумента.
utime.timezone([secs])
Устанавливает или получает смещение часового пояса в секундах. Если значение secs не указано, возвращается текущее значение.
В MicroPython time.timezone работает противоположно Python. В Python для получения местного времени вы пишете local_time = utc - timezone, в то время как в MicroPython это local_time = utc + timezone.
Этот модуль предоставляет низкоуровневые примитивы для работы с несколькими потоками (иными словами - light-weight процессы и задачи). Несколько потоков управления совместно используют свое глобальное пространство данных. Для синхронизации предусмотрены простые блокировки (также называемые мьютексами или двоичными семафорами).
Когда возникает ошибка потока, появляется исключение RuntimeError.
Пример использования
import _thread
import time
def th_func(delay, id):
while True:
time.sleep(delay)
print(‘Running thread %d‘ % id)
for i in range(2):
_thread.start_new_thread(th_func, (i + 1, i))
_thread.start_new_thread(function, args[, kwargs])
Запускает новый поток и возвращает его идентификатор. Поток выполняет функцию с аргументами из списка (кортеж). Необязательный аргумент kwargs указывает словарь аргументов с ключевыми словами. Когда функция возвращается, поток завершается. Когда функция завершается с необработанным исключением, выводится трассировка стека, затем поток завершается (но другие потоки продолжают работать).
_thread.exit()
Запускает исключение SystemExit. В отсутствие исключений приводит к бесшумному завершению потока.
_thread.allocate_lock()
Возвращает новый объект блокировки. Методы блокировки описаны ниже. Изначально блокировка отсутствует.
_thread.get_ident()
Возвращает идентификатор текущего потока: это ненулевое целое число. Его значение не имеет прямого значения (предназначено для использования, к примеру, для индексации словаря данных, специфичных для потока). Идентификаторы потока могут быть переработаны при выходе и создании другого потока.
_thread.stack_size([size])
Возвращает размер стека потока (в байтах), использованный при создании новых потоков. Необязательный аргумент size указывает размер стека, который будет использоваться для впоследствии созданных потоков, и должен быть равен нулю или положительному целому значению не менее 4096 (4KiB). 4KiB в настоящее время является минимальным поддерживаемым значением размера стека, когда можно гарантировать достаточное пространство для самого интерпретатора.
_thread.LockType
Тип объектов блокировки.
Используется для синхронизации между потоками
Блокировка объектов имеет следующие методы:
lock.acquire(waitflag=1, timeout=-1)
Без какого-либо необязательного аргумента этот метод обеспечивает блокировку безоговорочно: при необходимости ожидая, пока она не будет освобождена другим потоком (только один поток за один раз может получить блокировку).
Если присутствует целочисленный аргумент waitflag, то действие зависит от его значения: если оно равно нулю, блокировка осуществляется только в том случае, если она может быть получена немедленно, без ожидания. А если оно не равна нулю, то блокировка осуществляется безоговорочно.
Если аргумент тайм-аута с плавающей точкой присутствует и является положительным, то он указывает максимальное время ожидания в секундах перед возвратом. Отрицательный аргумент тайм-аута указывает на неограниченное ожидание. Невозможно указать время ожидания, если waitflag равен нулю.
Возвращаемое значение - True, если блокировка получена успешно, и False, если нет.
lock.release()
Снимает блокировку. Блокировка должна быть осуществлена ранее, не обязательно тем же потоком.
lock.locked()
Возвращает статус блокировки: True, если она была получена каким-либо потоком, и False, если нет.
В дополнение к этим методам можно также использовать объекты блокировки с помощью оператора with, например:
import _thread
a_lock = _thread.allocate_lock()
with a_lock:
print("a_lock is locked while this executes")
г. Москва, Пятницкое ш. д. 18, пав. 566
zakaz@compacttool.ru
8-495-752-55-22
Информация представленная на данном информационном ресурсе преследует исключительно рекламные цели и не является договором-офертой !
© Все права защищены 2015 - 2024г https://compacttool.ru