Raspberry Pi Pico и MicroPython под Windows

Raspberry Pi Pico и MicroPython под Windows Титульное изображение

Эта статья отвечает на вопрос: Как использовать Raspberry Pi Pico с MicroPython в Windows? Мы также покажем, как установить правильный драйвер для "Board CDC" (под которым будет отображаться Pico после установки MicroPython) в Windows 8.1. (Мы также обсудим различия между MicroPython и CircuitPython, где это применимо - где плата будет называться "CircuitPython CDC Control").

Наконец, мы покажем, как подключиться к Pico с помощью PuTTY, а также более удобный вариант с помощью Thonny (это Python IDE, интегрированная с Pico!).

Введение: Что такое Pico и что такое MicroPython?

Сайт Raspberry Pi Pico это новая микроконтроллерная плата от Raspberry Pi, оснащенная микроконтроллерным чипом RP2040 собственной разработки.

Raspberry Pi предусмотрели в RP2040 множество классных функций (моя любимая - PIO - программируемый ввод-вывод, с помощью которого можно эмулировать множество аппаратных интерфейсов, требующих точной синхронизации и т.д.). - Я расскажу об этом в другой статье в будущем), а Pico - это действительно хорошая эталонная платформа, на которой реализован RP2040.

Чем Raspberry Pi Pico отличается от Raspberry Pi Zero W?

Разница между микроконтроллерами (такими как Pico) и одноплатный компьютер (скажем, Pi Zero W) заключается примерно в следующем: вы программируете Pico напрямую (например, на языке C), без операционной системы, в то время как Pi Zero W обычно работает под управлением Linux.

Это имеет свои преимущества, например, реальное время, но и недостатки - вам нужно больше знать об используемом оборудовании, а также реализовать множество функций, которые в современной операционной системе считаются само собой разумеющимися (например, доступ к файлам).

У Pico меньше ресурсов по сравнению с Pi Zero W (например, значительно меньше оперативной памяти, нет графического процессора VideoCore и т.д.) - но он потребляет меньше энергии и имеет дополнительные функции, такие как вышеупомянутый PIO и аналоговые входы (АЦП).

Pico - хороший выбор для проектов, которые не обязательно требуют подключения к сети, выхода HDMI, входа камеры и обработки данных. Другими словами, если вы хотите взаимодействовать с аппаратным обеспечением, иметь длительное время автономной работы и т.д. - тогда Pico для вас.

Какое программное обеспечение уже существует для Pico?

Pico можно прошить с помощью различного программного обеспечения, которое поставляется в комплекте Файлы UF2 (см. руководство по началу работы с Pico). Raspberry Pi предоставляет несколько файлов UF2 для начала работы:

Есть много других примеры можно найти здесь (код C).

Примечание: Я даю ссылку на самые новые файлы UF2 по состоянию на 30.01.2021 - в частности, MicroPython может быть обновлен, поэтому обязательно проверьте Страница начала работы с Raspberry Pi Pico.

MicroPython

Если перспектива полностью погрузиться в программирование на C кажется вам немного пугающей, вы можете начать с MicroPython. В этом случае на Raspberry Pi Pico предустанавливается некоторое программное обеспечение (файл MicroPython UF2), которое запускает небольшой интерпретатор Python.

Он называется MicroPython, потому что не поддерживает всю стандартную библиотеку Python 3. MicroPython предназначен для ограниченных сред, таких как Pico. В Pico всего 2 МБ оперативной памяти - это не позволит вместить все, что несет с собой Python 3. Проверьте Эта страница Github посвящена различиям между CPython и MicroPython. А вот и официальный Домашняя страница MicroPython, и официальная документация по MicroPython.

CircuitPython

Примечание: большинство инструкций также применимы к платам на базе CircuitPython RP2040 под Windows, например, Adafruit Feather RP2040, но вам нужно будет выполнить немного другие шаги - я укажу на различия в этой статье.

CircuitPython - это, по сути, вариант MicroPython, который разрабатывается компанией Adafruit.

Сама плата после прошивки будет называться по-другому в вашем диспетчере устройств (CircuitPython CDC Control) - и вам, конечно, понадобится другое программное обеспечение. Вот что вам понадобится для начала:

В этой статье мы также покажем вам, как установить библиотеки CircuitPython на устройства на базе RP2040 под Windows, а также как запускать и останавливать программы с помощью Thonny.

Что вы получите с MicroPython UF2?

После установки MicroPython на Pico вы сможете подключиться к нему с помощью последовательной консоли (мы покажем в этой статье) и начать писать Python-код на Pico.

Установка MicroPython на Pico

  • Отключите питание от Pico
  • Нажмите кнопку BOOTSEL и удерживайте ее нажатой.
  • Подключите Pico к компьютеру с помощью кабеля microUSB - USB.
  • теперь вы можете отпустить кнопку BOOTSEL
Нажмите кнопку BOOTSEL и удерживайте ее нажатой до подключения кабеля microUSB.

Теперь Pico должен быть виден в вашей файловой системе как RPI-RP2:

Pico отображается как RPI-RP2

(Примечание: интересно, что такое RPI-RP1?)

Pico эмулирует флэш-накопитель FAT32, на котором хранятся два файла: INDEX.HTM и INFO_UF2.TXT.

Диспетчер дисков Windows

В диспетчере дисков Windows Pico отображается как флэш-накопитель FAT емкостью 128 МБ.

Не совершайте ошибку, пытаясь сохранить какие-либо файлы на Pico. таким образом: они будут беззвучно удалены. Даже если кажется, что они записаны, это просто Windows кэширует операции - ваши файлы исчезнут! Я уже упоминал, что на самом деле у Pico всего 2 МБ Flash? Здесь бессовестно врут про 128 МБ (RP2040, кстати, должен поддерживать до 16 МБ флэш-памяти, AFAIK).

Это немного напоминает мне мою поездку в Индию, где я купил флешки емкостью 128 ГБ - они могли записать ваши данные в Нирвану. Когда я попытался вернуть флешку и получить свои деньги обратно, продавец уже исчез... вот такие приключения 🙂 .

Однако если вы скопируете на этот диск файл нужного типа - файл UF2, он будет распознан и записан.

Копирование файла Micropython UF2 в Pico

Вы можете перетащить его из браузера после загрузки или скопировать и вставить. После завершения копирования Pico автоматически перезагрузится, и вы больше не увидите флэш-накопитель.

Примечание: Если вы хотите использовать CircuitPython, то, конечно же, используйте UF2-файл CircuitPython на этом шаге.

После перезагрузки Pico исчез из диспетчера дисков Windows.

Теперь на Pico (после перезагрузки) работает MicroPython, который обеспечивает последовательный порт (COM-порт) через USB. (С технической точки зрения, это USB-устройство класса 02 = Коммуникации и контроль CDC и USB-устройства подкласса 02).

Подключение к Pico, Windows 10

Windows 10 упрощает подключение к Pico, поскольку необходимый драйвер COM-порта (usbser.inf) будет автоматически установлен и активирован.

Чтобы проверить, через какой COM-порт он подключен, откройте диспетчер устройств:

Чтобы открыть диспетчер устройств, введите устройство в поиск Windows и нажмите на Диспетчер устройств.

Здесь вы сможете увидеть новое последовательное устройство USB с номером COM-порта (который вам понадобится через секунду для подключения) в разделе Порты (COM & LPT).

Появилось новое последовательное устройство, которое позволяет подключаться к Pico

Чтобы еще раз убедиться, что это действительно Pico, на котором запущен MicroPython, можно сделать следующее:

Нажмите на View (Просмотр) и выберите Devices by Container (Устройства по контейнерам):

Диспетчер устройств позволяет отображать устройства в различных видах

Здесь вы увидите запись "Плата в режиме FS" с двумя узлами "Композитное устройство USB" и "Последовательное устройство USB (COM3)". COM3 очень важен, его нужно будет использовать для PuTTY (см. ниже).

Мы можем исследовать устройства дальше, щелкнув на них правой кнопкой мыши и выбрав соответствующий пункт свойств из контекстного меню. Свойства платы в режиме FS пусты:

Составное устройство USB показывает "Плата в режиме FS" в качестве описания устройства в сообщении шины:

Примечание: это Pico под управлением MicroPython. Когда вы перепрошьете его с другим программным обеспечением, здесь будут показаны другие результаты!

Само последовательное устройство USB покажет несколько интересных свойств:

Описание устройства, о котором сообщается в шине, - "Board CDC".

Примечание: описание устройства платы будет "CircuitPython CDC Control" вместо "Board CDC", если вы используете CircuitPython.

По умолчанию порт настроен на 9600 бит в секунду, 8 бит данных, без четности, 1 стоп-бит, без управления потоком - и они работают (см. ниже).
Класс USB равен 02, а подкласс USB равен 02.

Если вы знаете, что ищете, вам пригодятся идентификаторы оборудования (VID = идентификатор производителя и PID = идентификатор продукта):

VID_2E8A -> идентификатор поставщика 2E8A (в шестнадцатеричном формате) или 11914 (в десятичном исчислении), что составляет Raspberry Pi

PID_0005 -> идентификатор продукта 5который плата покажет при запуске MicroPython (по умолчанию используется идентификатор продукта 3)

Примечание: журнал отладки браузера Chrome

Эту информацию также можно получить с помощью браузера Chrome.

chrome://device-log

позволит вам увидеть подключенные в данный момент Устройства

На скриншоте выше вы видите вывод журнала устройств Chrome: Pico отображается как "Raspberry Pi", "RP2 Boot" до прошивки MicroPython и как "MicroPython", "Board in FS mode". Обратите внимание на разные идентификаторы продуктов!

Вернемся к Windows 10:

Как видно на скриншоте выше, Windows 10 автоматически установила драйвер usbser (USB Serial Driver), так что вы можете сразу же приступить к работе с Pico.

PuTTY

PuTTY - это клиент telnet / SSH. Вы будете использовать его для подключения к Pico и общения с REPL MicroPython. Загрузите PuTTY здесь. (Для большинства установок Windows 10 можно использовать 64-разрядный установщик MSI Windows).

Откройте PuTTY. Введите нужные настройки:

  • Тип соединения должен быть установлен на Серийный
  • Для параметра Serial Line (Последовательная линия) нужно установить значение, которое вы получили в результате проведенного выше исследования. В моем случае это COM3. В вашем случае это, скорее всего, будет что-то другое!
  • Скорость пока можно оставить на 9600

Нажмите на кнопку Открыть, и откроется Терминал:

Чтобы получить начальную подсказку, нажмите Enter один раз.

Затем вы можете начать писать Python-код после подсказки, который будет немедленно интерпретирован. Попробуйте ввести классическое "Hello world":

print("Hello world!")

MicroPython ответит следующим образом

Привет, мир!

как и ожидалось 🙂

Теперь, когда первый контакт установлен, я желаю вам счастливого кодирования!

Thonny: Python IDE, работает с Pico!

Использование PuTTY не очень удобно для длительных сессий или когда вы хотите загрузить много кода в Pico. К счастью, приложение с открытым исходным кодом Thonny (которое по умолчанию установлено на Raspberry Pi OS) также доступно для Windows и включает в себя поддержку Pico (MicroPython и CircuitPython)

Шаг первый

Скачать Thonny можно здесь, и установите его

Шаг второй

Подключите Pico, как описано выше - теперь у него должен быть COM-номер - если хотите, можете проверить с помощью описанного выше метода PuTTY, можете ли вы связаться с Pico.

Шаг третий

Запустите Thonny и нажмите на кнопку Инструменты выберите Опции

Тонный стартовый экран по умолчанию в Windows, меню Инструменты, выберите пункт Параметры.

Шаг четвертый: установить Pico в качестве интерпретатора

Перейдите на вкладку Переводчик. По умолчанию вы увидите этот экран:

Тот же интерпретатор, который запускает Thonny (по умолчанию), является интерпретатором по умолчанию Interpeter

Нажмите и выберите MicroPython (Raspberry Pi Pico).

Поддержка MicroPython (Raspberry Pi Pico) встроена в Thonny

Примечание: если вы используете CircuitPythonВместо этого вам нужно выбрать "CircuitPython (общий)" из этого выпадающего меню.

Вы можете оставить значение порта "пытаться определить порт автоматически" или задать конкретный порт (выше мы рассмотрели, как можно определить правильный номер порта).

Попробуйте определить порт автоматически

Примечание: порт все еще должен отображаться в выпадающем списке, поэтому нелишним будет перепроверить, есть ли он там:

на моем компьютере плата CDC (Pico с MicroPython) находится на порту COM5

Я оставляю значение "пытаться определить порт автоматически". Нажмите OK, чтобы сохранить настройку.

Теперь ваш экран должен измениться на следующий:

Обратите внимание на приглашение MicroPython, Raspberry Pi Pico с RP2040

Шаг пятый: тестирование

Теперь вы можете проверить связь с Pico.

Тип

print("Hello world")

введите в приглашение MicroPython и нажмите Enter

Здравствуй, мир, путь picockpit.com 🙂

Вы увидите, что Pico отвечает вам.

Поздравляем, вы успешно подключили Thonny к Pico под Windows!

Более сложные скрипты: Мигание светодиода с помощью Thonny

REPL (read evaluate print loop), который вы только что видели, хорош, но для более сложных проектов мы хотели бы сначала войти в исходный текст или загрузить его из файла.

Именно для этого можно использовать верхнюю часть окна Thonny.

Введите свой код. В моем примере мы будем мигать встроенным светодиодом (который является аппаратным эквивалентом hello world!) и зацикливаться до бесконечности.

import time
from machine import Pin
print("Welcome to Pico example 2, blinking an LED")
led = Pin(25, Pin.OUT)
# For demo purposes, we have an infinite loop here
while True:
    led.high()
    time.sleep(0.5)
    led.low()
    time.sleep(0.5)

Обратите внимание на правильные отступы в Python (пробельные символы в Python используются для управления!).

Код для мигания встроенного светодиода

Теперь нажмите на кнопку "Выполнить".

Thonny спросит вас, куда сохранить

Сохранить на этом компьютере или Raspberry Pi Pico?

Выберите Raspberry Pi Pico:

Я выбрал имя файла hello.py - Нажмите OK, чтобы сохранить его

После нажатия кнопки OK ваш код начнет выполняться. Встроенный светодиод Pico должен начать мигать, и вы увидите вывод в Shell:

%Run -c $EDITOR_CONTENT

Примечание: мне не пришлось вводить команду %Run -c $EDITOR_CONTENT, Thonny сделал это сам. Ниже приведен вывод из нашего кода.

CircuitPython на Thonny под Windows

Выполните те же шаги, но в качестве интерпретатора выберите CircuitPython (generic).

Раковина Thonny покажет вам другое подтверждение:

Он гласит: Adafruit CircuitPython 7.0.0 on 2021-09-20; Adafruit Feather RP2040 with rp2040
Adafruit CircuitPython 7.0.0 на 2021-09-20; Adafruit Feather RP2040 с rp2040

Windows 8.1

Raspberry Pi Pico находится в состоянии "Board CDC" и отображается в состоянии ошибки

Windows 8.1 НЕ будет автоматически загружать драйвер последовательного интерфейса и покажет устройство в состоянии ошибки.

Примечание: при использовании CircuitPython имя устройства будет "CircuitPython CDC control". Процедура та же.

Управление CircuitPython CDC в Windows 8.1

Вот как выглядят свойства платы CDC (Pico, на которой работает MicroPython):

В нем говорится, что драйверы для этого устройства не установлены (код 28).

Решением этой проблемы является Инструмент Zadigкоторую вы можете скачать бесплатно:

Внимание: Ряд вирусных сканеров сходятся во мнении, что в файле installer_x64.exe, содержащемся в Zadig 2.7, присутствует "Trojan.Tedy". Возможно, это ложная тревога, однако: я рекомендую использовать Zadig-2.5.exe вместо этого, который не выдал мне этих предупреждений (только что проверено во второй раз). Лучше перестраховаться, чем потом жалеть!

Задиг поможет вам установить общие драйверы USB для доступа к USB-устройствам.

В нашем случае нам нужен драйвер USB Serial (CDC).

Выберите Board CDC (Interface 0) в выпадающем меню, USB Serial (CDC) в другом поле. Нажмите на кнопку Установить драйвер.

После установки вы увидите, что драйвер теперь установлен на usbser (v1.0.0.0):

И вы сможете подключиться, как я уже описывал в Windows 10, используя правильный номер COM-порта:

Диспетчер устройств показывает, что плата CDC теперь с драйвером
Hello world для MicroPython на Pico с помощью Windows 8.1

примечание:

Вот диалог, в котором в качестве производителя драйвера указан libwdi

Пико/последовательный порт в Windows 7

По словам одного из покупателей, Задиг Помогла установка драйвера последовательного порта и в Windows 7, после чего Pico можно было использовать! Обязательно используйте Задиг 2.5Так как более новый Zadig 2.7 был отмечен моим вирусным сканером во время установки драйвера. (Не знаю почему, но лучше перестраховаться - старый работает).

Если вам нужно пошаговое руководство, посмотрите руководство для Windows 8.1 выше - на машине с Windows 8.1 все должно быть примерно так же.

Установка библиотек и программирование платы CircuitPython RP2040 в Windows

Если вы используете, например, Adafruit Feather RP2040, вы можете захотеть использовать CircuitPython на нем. У Adafruit есть NeoPixel RGB на него, для чего необходимо установить библиотеки в lib папку на устройстве.

(прим: скачать библиотеки здесь - щелкните на ссылке "Download Project Bundle").

Когда вы извлечете папку с пакетом проектов, вы увидите две разные подпапки с CircuitPython 6.x и CircuitPython 7.x

Здесь я использую версию CircuitPython 7.x, так как я прошил 7.0.0 Версия CircuitPython.

В проводнике вы заметите диск под названием "CIRCUITPY":

Диск CIRCUITPY и его начальное содержимое (lib, boot_out.txt, code.py)

Сайт lib папка пуста при свежей установке CircuitPython. Используя проводник Windows, мы можем просто скопировать и вставить сюда файлы.

Скопируйте необходимые библиотеки из загруженной папки lib в папку lib CIRCUITPY:

копирование необходимых библиотек в папку lib

Теперь мы также можем переписать файл code.py:

замените code.py

С помощью Thonny мы можем отредактировать и запустить файл code.py. Нажмите на иконку открытия в Thonny и выберите "Устройство CircuitPython" в диалоге "Откуда открыть":

Выберите устройство CircuitPython здесь

Здесь вы можете открыть файл code.py:

Щелкните на code.py и нажмите OK

Теперь ваше окно Thonny должно выглядеть примерно так:

code.py показан вверху, оболочка - внизу

Нажмите F5 на клавиатуре или щелкните значок "Выполнить".

значок выполнения

Если всё прошло успешно, то светодиод NeoPixel RGB на вашем Adafruit Feather RP2040 теперь должен начать мигать разными цветами. Поздравляем 🙂 .

Теперь вы можете поиграть со скриптом - возможно, вы сможете изменить цвета или время между изменениями цвета? Или добавить другие функции.

Чтобы запустить измененный скрипт, нажмите Ctrl + C в оболочке (или выберите Run > Interrupt Execution в меню Thonny). Теперь вы можете снова загрузить свой скрипт.

Для отладки очень удобно то, что в Thonny вы получаете консольный вывод, так что вы можете использовать операторы print для вывода информации:

Тонни выводит сообщения о печати из Adafruit Feather RP2040

Adafruit CircuitPython Bundle

Adafruit предлагает удобную загрузку нескольких библиотек в ZIP-архиве. Загрузите соответствующий adafruit-circuitpython-bundle-7.x.-mpy или -6.x. mpy здесь. Вы можете установить несколько или все библиотеки, как обсуждалось выше, просто используя проводник Windows. Полная загрузка всех библиотек будет иметь размер около 1,2 МБ, в Adafruit Feather RP2040 достаточно места для этого. Копирование может занять пару минут.

Разные заметки

Могу ли я использовать процедуры, описанные в этом руководстве, для CircuitPython?

Безусловно, да. Например, вы можете использовать Zadig на Windows 8.1 (см. описание выше для подробностей. Используйте версию 2.5.730 Zadig!). Вы будете искать устройство "CircuitPython CDC control" вместо устройства "Board CDC".

Zadig для устройства управления CircuitPython CDC

Не удается установить драйвер с помощью Zadig?

Это может быть связано с антивирусным программным обеспечением. Возможно, это ложная тревога, но я не могу быть в этом уверен. Мой вирусный сканер (Bitdefender) говорит мне следующее:

"Die Datei C:\Users\Max\usb_driver\installer_x64.exe ist mit Gen:Variant.Tedy.11444 infiziert und wurde in die Quarantäne verschoben. Wir empfehlen die Durchführung eines System-Scans, um weitere Infektionen auszuschließen."

Ряд вирусных сканеров сходятся во мнении, что в файле installer_x64.exe (часть USB-драйвера) присутствует "Trojan.Tedy". Рекомендую попробовать использовать вместо него Zadig-2.5.exe. Которые вы можете скачать здесь. Я использовал Zadig-2.5 для установки последовательного USB-драйвера CircuitPython на мою установку Windows 8.1 (это моя основная машина).

Как остановить выполнение кода на Pico в Thonny?

Перейдите в оболочку и нажмите Ctrl+C. Это должно остановить выполнение текущего кода:

Прерывание клавиатуры остановило выполнение кода

Повторяя предыдущие заявления в Тонни

Удобно выполнять одну и ту же команду повторно - нажмите клавишу вверх на клавиатуре в приглашении оболочки, чтобы вызвать историю предыдущих команд.

Как узнать, что Pi Pico отключен от Thonny?

При попытке запустить код вы получите сообщение об ошибке, примерно такое:

Ошибка запроса глобальных переменных, serial.serialutil.SerialTimeoutException: Таймаут записи

Это означает, что Thonny не может писать в последовательный порт, к которому должен подключаться Pico.

Ошибка автоматического поиска устройства в Thonny

Если вы получите следующую ошибку:

Не удалось найти устройство в автоматическом режиме.
Проверьте соединение (убедившись, что устройство не находится в режиме загрузчика) или выберите
"Настроить интерпретатор" в меню интерпретатора (правый нижний угол окна)
чтобы выбрать конкретный порт или другой интерпретатор.

Убедитесь, что вы выбрали правильный интерпретатор. Если на вашем устройстве используется CircuitPython, а не MicroPython, вам нужно выбрать CircuitPython (общий) в качестве переводчика в Thonny. Инструкции см. в соответствующей информации в этой статье.

Ваши советы по работе с Pico/MicroPython под Windows?

Сообщите нам в комментариях, если у вас есть другие советы по началу работы с Pico и MicroPython под Windows, мы обновим статью 🙂 .

Наслаждайтесь своим Pico и получайте удовольствие от удивительных проектов, которые вы можете сделать с его помощью!

Другие записи в блоге Pico на PiCockpit

Если вам понравилась эта статья, то, возможно, вам также будет интересно прочитать следующие:

10 комментариев

  1. Gokhan Cinoglu Март 24, 2021 в 10:01 дп

    У меня Win 8.1, и это единственный сайт, на котором есть решение проблемы COM. Большое спасибо.

  2. Shubham Chauhan Июнь 7, 2021 в 6:25 пп

    Не могли бы вы поделиться ссылкой на статью, в которой есть решение для Board CDC в windows 8.1

    • raspi berry Ноябрь 21, 2021 в 9:16 пп

      Эта статья, которую вы читаете, описывает, как использовать Board CDC на Windows 8.1 - использовать инструмент Zadig в версии 2.5.

  3. Pablo Cervantes Июль 12, 2021 в 7:01 пп

    Спасибо, Windows 7 64 бит работает без проблем.

  4. Franckeno Декабрь 19, 2021 в 10:15 дп

    Большое спасибо за этот учебник!

  5. Jajcio Май 5, 2022 в 4:32 пп

    Очень хороший учебник Вы ставите кофе на стол, как мы говорим в Польше, что означает без битья о кусты. Отлично!

  6. Jerry Bee Июль 28, 2022 в 2:42 дп

    Мне нужна помощь. Мои окна 11 просто показывают pico как "портативное устройство". Putty не может найти его из-за этого, поэтому я получаю ошибку, что он не может определить путь.

    Не знаю, как справиться с этим.

    Спасибо!

  7. Jerry Май 18, 2023 в 11:42 дп

    Это было отличное введение для меня! Спасибо!

  8. silvio Июль 31, 2023 в 7:53 пп

    Hola muy bueno, consulto x la inquietud que se me ha presentado
    si despues de subir mi codigo a mi pi pico, y la coloco en una placa para que ejecute una tarea x,
    если вы не являетесь пользователем, отсоедините pi pico от планшета и подключите к ПК или ноутбуку,
    можно ли узнать код, который находится в пиктограмме, на примере Thonny, нажав на иконку abrir carpeta и выбрав abrir lo que esta in la pi pico?
    Есть ли какой-нибудь способ сделать так, чтобы не читать лекций?
    спасибо

  9. Dahray Июль 12, 2024 в 9:48 пп

    Шпатлевка и zadig оба сработали для меня. Отличный учебник.

Комментировать