Андрей Смирнов
Время чтения: ~16 мин.
Просмотров: 2

ESP8266 – микроконтроллер с Wi-Fi: технические сведения

Китайская компания Espressif разработала микроконтроллер ESP8266 с поддержкой Wi-fi. Приобрел гаджет большую популярность после 2014 года, так как в этом году представлены первые разработки с данным микроконтроллером.

esp2866-620x465.jpg

В зависимости от конкретной модели платы, имеется полноценных 15 выводов, которые могут работать как в режимах входа, так и выхода. Производитель скрывает многие моменты технических характеристик платы, однако, исследователи, проанализировав официальные библиотеки для esp8266, выяснили, что на устройстве расположено около 80 кб ОЗУ и порядка 35 кб IRAM. Чип работает на частоте 80 МГц, с негарантированной возможностью разгона до 160 МГц.

Плата питается напряжением 3.3 В, это стоит принять во внимание, потому что напряжение логических уровней большинства популярных плат Arduino равняется величине 5 В!

Больше технических аспектов вы можете узнать из ESP8266 datasheet, который удастся посмотреть ниже или скачать по ссылке: http://espressif.com/sites/default/files/documentation/0a-esp8266ex_datasheet_en.pdf.

Скачать ESP8266 datasheet

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

  • UART-WiFi мост;
  • SPI;
  • I2C.

В интернет сообществе есть много информации по совмещению плат ESP8266 и Arduino. С другой стороны, трудно найти документацию на русском языке, а esp8266 datasheet на русском языке заменяет интернет портал, полностью посвященный ей – esp8266.ru.

ESP8266 — китайский микроконтроллер (далее МК) от производителя Espressif с поддержкой WiFi-интерфейса. Часто этот МК позиционируют только как WiFi-модуль, который работает в связке с другими МК. Однако встроенных возможностей МК серии ESP достаточно для реализации большого количества проектов.

В большинстве случаев этот МК применяют в системах автоматизации быта и IoT (Internet of Things — Интернете вещей). Управлять всем этим можно не только с браузера, но и из приложений на Android/iOS/Desktop, хотя первый вариант имеет больше «кроссплатформенности», т. к. сейчас браузер есть почти на всём — от часов до телевизоров. Если МК будет применяться там, куда не достаёт WiFi-сеть, либо её там попросту и не должно быть (дачи, теплицы), то ESP8266 может работать в режиме точки доступа. У этого МК уже существует более мощный и продвинутый брат — ESP32.

Примечание В этой статье не будут рассмотрены практические примеры применения ESP8266. Речь пойдёт об основных преимуществах и возможностях этого МК.

У этого МК нет встроенной flash-памяти, поэтому он работает с внешней flash-памятью по интерфейсу SPI. В большинстве популярных версий МК её объём варьируется от 512 Кбайт до 4 Мбайт. При желании и умении микросхему памяти можно будет перепаять на версию до 32 Мбайт.

Разновидности МК серии ESP и их плат

Существует около полутора десятка версий МК серии ESP и огромное количество плат с ними. Рассмотрим самые популярные из них.

Микроконтроллеры

ESP-01

Микроконтроллер ESP-01. Источник

Считается самым популярным из серии. Имеет 8 разведённых контактов (VCC, GND, UTXD, URXD, CH_PD, GPIO0, GPIO2, GPIO6) и PCB-антенну (печатный проводник на самой плате). Из разведённых выводов тут присутствуют только 3 GPIO, но не стоит видеть в этом одни минусы. Если нужно будет управлять одним реле или получать данные с датчика температуры, вам не понадобятся все выводы МК, достаточно будет лишь пары. К тому же, существуют платы и шилды с возможностью простой коммутации именно к этой версии МК. Например такая:

Плата WiFi-реле. Источник

ESP-03

Плата ESP-03. Источник

Здесь появляется керамическая антенна. Она считается немного эффективней своего печатного собрата. Также на плате разведены все доступные выводы GPIO. В этой статье описана разница между типами антенн.

ESP-07

Плата ESP-07. Источник

В этой версии в глаза сразу бросается металлический экран (который перед этим появляется на ESP-06). На борту керамическая антенна и разъём для внешней антенны.

ESP-12

Разные варианты микроконтроллера ESP-12. Источник

В свою очередь, существует несколько вариантов этой версии: ESP-12S, ESP-12F, ESP-12E. Вторая и третья версии имеют на торце дополнительно 6 разведённых контактов.

Платы

WeMos D1 mini

Плата WeMos D1 mini. Источник

Имеет распайку девяти GPIO-контактов. На плате имеется небезызвестный мост CH34x (такие часто ставят на клоны Arduino). Установлен МК с 4 Мбайт flash-памяти. Недостаток для некоторых — придётся самому паять контакты на плату (идут в комплекте). Конструкционно совместима с различными выпускаемыми шилдами реле/датчиками.

NodeMCU v0.9/v1

Плата NodeMCU v0.9. Источник

Первое поколение плат серии NodeMCU. На ней распаяны все 11 GPIO-портов. Некоторые из них обладают дополнительными функциями (UART, I2C, SPI, PWM, ADC). Хотя на плате впаяны контакты, она занимает всю ширину беспаечной макетной платы, что затрудняет работу на ней. МК имеет 4 Мбайт flash-памяти. Также имеется мост CH340.

NodeMCU v3

Плата NodeMCU v3. Источник

Финальная версия платы этой серии. Существует и v2 «Amica», которая меньше по габаритам. v3 носит название «LoLin» и отличается от предыдущей версии только размерами и незначительными деталями (например дополнительной распайкой шины питания). Кроме традиционного моста CH340/CH341 на платы ставят чип CP2102, так что внимательней с выбором драйвера на них.

Характеристики

Все эти (и не только эти) микроконтроллеры выполнены на чипсете ESP8266EX, а следовательно, характеристики у них одинаковые:

  • Протоколы: 802.11 b/g/n/e/i.
  • Диапазон частот: 2.4 ГГц – 2.5 ГГц.
  • Процессорное ядро: Tensilica L106 32 разряда.
  • Диапазон напряжений питания: 2.5 В – 3.6 В.
  • Среднее потребление тока: 80 мA.
  • Режимы WiFi: Station/SoftAP/SoftAP+Station.
  • Безопасность: WPA/WPA2.
  • Шифрование: WEP/TKIP/AES.
  • Обновление прошивки: через UART, по радиоканалу (OTA — Other The Air).
  • Сетевые протоколы: IPv4, TCP/UDP/HTTP/FTP.
  • Поддержка WiFi Direct (P2P), P2P Discovery, P2P GO (Group Owner) mode, GC (Group Client) mode, P2P Power Management.
  • Встроенные аппаратные ускорители: CCMP (CBC-MAC, режим счётчика), TKIP (MIC, RC4), WAPI (SMS4), WEP (RC4), CRC.
  • Поддержка LUA-скриптов.

Как работать с ESP8266?

Есть два способа работы с ним: управление через AT-команды и автономная работа со своей прошивкой. В первом случае ESP8266 работает только в паре с другими МК, во втором — может работать независимо (хотя никто не запрещает присоединить её к другому МК).

Конференция C++ Russia 2020 Moscow

27–28 апреля, Москва и онлайн, 10 750–138 000 ₽

tproger.ruСобытия и курсы на tproger.ru

«Из коробки» МК поставляется с прошивкой для работы через AT-команды. Для этого ESP8266 подключается к любому другому МК по UART-интерфейсу. Для демонстрации работы AT-команд ESP8266 можно подключить к компьютеру через USB-UART переходник и запустить монитор последовательного порта (например из Arduino IDE). Про то, как работать с этими командами, можно прочитать в этой статье.

Прошивка

В большинстве случаев намного удобней прошивать МК и работать с ним со своей прошивкой. Однако тут тоже есть свои нюансы. Вот 3 варианта событий:

  • У вас «голый» ESP8266, например ESP-01. Вам потребуется USB-UART переходник, который нужно подключить к МК. Этот переходник обязательно должен быть на 3-вольтовой логике, т. к. иначе можно легко отправить ваш МК в кибер-Вальхаллу. Про процесс подключения можно прочитать здесь.
  • Второй случай идентичен первому, кроме того, что вместо переходника можно использовать любую плату Arduino. Достаточно специальным образом подключить ESP8266 к UART-контактам Arduino, а её саму «отключить», замкнув контакт аппаратного сброса (RESET) на землю. Естественно, питать ESP8266 нужно будет от шины питания 3.3 В. В этом случае в качестве переходника USB-UART будет выступать мост (чаще всего CH340) на самой плате Arduino. Этот процесс также описан в статье выше.
  • Лучший вариант — это плата с USB-UART мостом на борту (как NodeMCU, WeMos и прочие). В этом случае ничего дополнительного делать не нужно — просто подключайте плату через USB.

В чём прошивается?

Существует несколько софтов для прошивки МК. Например NodeMCU Flasher (которая подходит не только для плат NodeMCU) или ESPTool (необходим Python).

Однако в этой статье работа с МК и процесс прошивки будут рассмотрены в Arduino IDE.

Изначально среда Arduino IDE не предназначена для работы с МК серии ESP. Чтобы это исправить, идём в Файл → Настройки и в поле Дополнительные ссылки для Менеджера плат вставляем эту ссылку:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Потом открываем Инструменты → Плата → Менеджерплат и в открывшемся списке в самом низу находим плату «esp8266 by ESP8266 Community» (если с этим возникли трудности — используем поиск вверху окна). Устанавливаем последнюю версию платы (около 150 Мбайт).

После установки в списке плат появится немалое количество плат. Если не нашли свою плату или не знаете её названия — выбирайте Generic ESP8266 Module. Теперь можно выбрать свой МК в списке COM-портов.

Теперь что касается скорости передачи. У ESP8266 две скорости передачи: основная — её вы указываете при инициализации последовательного порта, и скорость, на которой передаётся отладочная информация. Она передаётся сразу после подачи питания на МК. Обычно это скорости 115200 бод и 74800 бод 0 соответственно.

Основы

Если вы не владеете базовыми знаниями работы с платформой Arduino, наверстать упущенное можно здесь:

Arduino: выбор платы, подключение и первая программаtproger.ru

После скачивания платы ESP8266 с помощью менеджера, в примерах появится большое количество скетчей. Рассмотрим один из них (Файл → Примеры → ESP8266WebServer → HelloServer):

#include <esp8n>   #include <wificlient> <esp8266webserver>      "........"; // Указываем имя существующей точки доступа  const char* password = "........"; // Указываем пароль существующей точки доступа    ESP8266WebServer server(80);    void handleRoot() { // Обработчик запроса клиента по корневому адресу    // Отправляем клиенту    server.send(200, "text/plain", "Привет от ESP8266!");  }    void handleNotFound() { // Обрабатываем небезызвестную ошибку 404    String message = "File Not Foundnn";    message += "URI: ";    message += server.uri();    message += "nMethod: ";    message += (server.method() == HTTP_GET) ? "GET" : "POST";    message += "nArguments: ";    message += server.args();    message += "n";    for (uint8_t i = 0; i < server.args(); i++) {      message += " " + server.argName(i) + ": " + server.arg(i) + "n";    }    server.send(404, "text/plain", message);  }    void setup(void) {    Serial.begin(115200);      WiFi.mode(WIFI_STA); // Устанавливаем Wi-Fi модуль в режим клиента (STA)    WiFi.begin(ssid, password); // Устанавливаем ssid и пароль от сети, подключаемся        while (WiFi.status() != WL_CONNECTED) { // Ожидаем подключения к Wi-Fi      delay(500);      Serial.print(".");    }        // Выводим информацию о подключении    Serial.println("");    Serial.print("Подключено к ");    Serial.println(ssid);    Serial.print("IP адрес: ");    Serial.println(WiFi.localIP());      // Устанавливаем обработчики. Можно сделать двумя способами:    server.on("/", handleRoot);      server.on("/inline", []() {      server.send(200, "text/plain", "Отличная работа!");    });      server.onNotFound(handleNotFound); // Вызывается, когда обработчик не назначен      // Запускаем сервер    server.begin();    Serial.println("HTTP-сервер запущен");  }    void loop(void) {    server.handleClient();  }  </esp8n>

Что делает этот скетч? МК подключается к вашей WiFi-сети и запускает сервер. В монитор последовательного порта выведется локальный IP-адрес (к примеру, 192.168.0.105). Вбиваем этот IP в адресную строку браузера, после чего в нём должна отобразиться строка «Привет от ESP8266!». Таким же образом можно проверить адрес /inline.

Ознакомиться с API МК можно в их официальном репозитории.

Распределение памяти

Как уже говорилось — встроенной памяти чипсет не имеет, а поэтому используется внешняя — от 512 Кбайт до 4 Мбайт. Эта память распределена на следующие разделы:

  • скетчи (память для прошивки);
  • файловая система SPIFFS;
  • OTA-Update (прошивка, переданная «по воздуху»);
  • EEPROM (да-да, её у МК тоже нет, поэтому она имитируется на flash-памяти);
  • конфигурация WiFi.

Файловая система SPIFFS

Во внешней flash-памяти явно есть свои «плюшки». Одна из них — файловая система. Как это ни странно, в неё можно с лёгкостью записать файлы (как на какой-нибудь накопитель). На аппаратном уровне это можно было бы реализовать подключив к МК модуль SD-карт. Однако это решение требует свободных портов (которых иногда может не быть). Поэтому SPIFFS является очень полезным в данном плане.

Для чего? На МК часто заливаются веб-странички, медиа-файлы и прочее. Если HTML-страницу в 20 строк ещё приемлемо хранить в коде, то что делать с большими сайтами? При каждом изменении менять в коде? А с изображениями как? Сериализовать (бывает и такое) и тоже вставлять в код? Вот в таких случаях и спасает файловая система.

Размер файловой системы (от 32 Кбайт до 15 Мбайт) зависит от самого объема flash-памяти и от конфигурации, выставленной в Инстурменты → Flash size. Например, конфигурация 4M (2M SPIFFS) предназначена для МК с общим объёмом flash-памяти 4 Мбайт, 2 Мбайт из которых будут выделены под файловую систему.

SPIFFS не работает с папками — она содержит только список файлов. Соответственно, если загрузить в неё папку style, в которой будет файл header.css, то в файловую систему систему запишется файл с именем /style/header.css. Об этом стоит помнить, потому что длина файлового имени не должна превышать 31 символ (читается 32, но символ с кодом 0 отведён под завершение строки). В этот 31 символ, естественно, входят все слэши, точки перед расширением и само расширение. Поэтому придётся воздержаться от многоуровневых структур и длинных имён файлов/папок.

Для загрузки файлов в файловую систему МК потребуется инструмент ESP8266FS, который интегрируется в Arduino IDE. Инструкция по установке:

  1. Качаем инструмент по ссылке выше.
  2. В папке Arduino IDE создайте папку tools (если её там ещё нет).
  3. В папку tools распакуйте скачанный архив. Должно быть так:…/Arduino/tools/ESP8266FS/tool/esp8266fs.jar.
  4. После запуска среды в папке скетча (Скетч → Показать папку скетча) нужно создать папку data. Её содержимое будет непосредственно загружаться в файловую систему.
  5. После кликаем в Инструменты → ESP8266 Sketch Data Upload, чтобы загрузить данные в файловую систему. После успешной загрузки в панели статуса высветится «SPIFFS Image Uploaded». Перед процессом загрузки в файловую систему обратите внимание: если открыт монитор последовательного порта — закрываем его.

Как работать с SPIFFS и файлами в ней, можно узнать в этой статье.

Энергонезависимая память EEPROM

Уже упоминалось, что сам чипсет не имеет энергонезависимой памяти, поэтому она имитируется через внешнюю flash-память. Из-за этого работа с ней немного отличается от стандартной. Перед считыванием или записью данных нужно инициализировать EEPROM, указав при этом выделяемую под неё память (от 4 до 4096 байт) функцией EEPROM.begin(size). Привычная функция EEPROM.write(addr, value) записывает данные не на саму энергонезависимую память, а в оперативную. Чтобы внесённые данные записались в память, нужна функция EEPROM.commit() (или же EEPROM.end(), чтобы заодно очистить данные из оперативной памяти). Метод EEPROM.read(addr) возвращает байт из памяти по адресу.

Прошивка «по воздуху» OTA-Update

ESP8266 имеет возможность обновления прошивки по сети WiFi. Это удобно, если МК находится в труднодоступном месте. Кроме того, прошивки «по воздуху» чаще всего быстрее, чем по проводу.

Вам потребуется установленный Python.

Потом в скетч нужно добавить файл: #include <arduinoota>. Инициализинастраиваем OTA следующими строками:

ArduinoOTA.setHostname("Host-ESP");// Имя хоста  ArduinoOTA.setPassword((const char *)"password");// Пароль для подключения к хосту. Если не нужен — комментируем эту строку  ArduinoOTA.begin();// Инициализация

После этого достаточно в метод loop() добавить строку: ArduinoOTA.handle().

Прошиваем МК по проводу. В случае успешной загрузки в списке портов появится новый хост с именем «esp8266-xxxxxx», где esp8266 — указанное выше имя хоста, а xxxxxx — локальный IP-адрес МК. Выбираем его. Теперь МК можно прошивать «по воздуху».

Купить на AliExpress Купить на eBay Купить на GearBest.com Купить на DX.com

WiFi модуль ESP-12E разработан компанией Ai-thinker и построен на базе процессора с ядром ESP8266, отличительной особенностью которого является наличие радиоинтерфейса WiFi. Ядро ESP8266 интегрировано в Tensilica L106 – 32-битный микроконтроллер с ультранизким энергопотреблением. Поддержка тактовых частот 80 и 160 МГц, поддержка RTOS, встроенные Wi-Fi MAC/BB/RF/PA/LNA, микрополосковая антенна на плате модуля.

Модуль поддерживает стандарт IEEE802.11 b/g/n, полный стек TCP/IP протоколов. Пользователи могут использовать модули либо в качестве дополнения для подключения какого-либо устройства к сети, либо в качестве отдельного сетевого контроллера.

Характеристики (кратко):

  • 802.11 b/g/n;
  • встроенный 32-битный MCU с низким энергопотреблением;
  • встроенный 10-битный АЦП;
  • встроенный стек протоколов TCP/IP;
  • встроенный РЧ коммутатор, РЧ трансформатор сопротивлений, LNA, усилитель мощности;
  • встроенные блоки ФАПЧ и управления мощностью;
  • Wi-Fi 2,4 ГГц, поддержка WPA/WPA2;
  • SDIO 2.0, (H) SPI, UART, I2C, I2S, IRDA, PWM, GPIO;
  • STBC, 1×1 MIMO, 2×1 MIMO;
  • потребление в режиме глубокого сна < 10 мкА, ток утечки в выключенном режиме < 5 мкА;
  • просыпание и передача пакетов через < 2 мс;
  • выходная мощность +20 дБм в режиме 802.11b;
  • диапазон рабочик температур: -40 – 125 ºC.
b69c19695c1c43f9c4c3c65cb4bcd4f67fffa549.jpeg
ESP-12E WiFi модуль (ESP8266)

Технические характеристики

Категории Параметры Значения
WiFi параметры WiFi протоколы 802.11 b/g/n
Частотный диапазон 2,4ГГц–2,5ГГц (2400М–2483,5М)
Характеристики аппаратной части Периферийные шины UART/HSPI/I2C/I2S/инфракрасный интерфейс удаленного управления
Рабочее напряжение 3,0 – 3,6 В
Рабочий ток около 80 мА
Диапазон рабочих температур -40 – 125 ºC
Размеры 16мм x 24мм x 3мм
Характеристики программного обеспечения WiFi режим станция, программная точка доступа, программная точка доступа + станция
Безопасность WPA/WPA2
Шифрование WEP/TKIP/AES
Обновление прошивки загрузка через UART / OTA (через сеть) / загрузка и запись прошивки через хост
Разработка ПО поддержка Cloud Server Development / SDK для разработки пользовательских прошивок
Сетевые протоколы IPv4, TCP/UDP/HTTP/FTP
Пользовательская настройка Набор AT команд, Cloud Server, приложение Android/iOS

Техническое описание

Назначение выводов

1d9858c1ddc6feff821de5fc9ab3ecbdc15a3e85.png
Плата ESP-12E (на базе ESP8266). Расположение выводов
Назначение выводов платы ESP-12E на базе микроконтроллера ESP8266
Номер вывода Название вывода Назначение
1 RST Сброс модуля
2 ADC Вход аналого-цифрового преобразователя. Входное напряжение в диапазоне 0–1 вольт; результат 0–1024.
3 EN Вывод включения чипа. Активный уровень – высокий.
4 IO16 GPIO16; может использоваться для пробудить чипсет из режима глубокого сна.
5 IO14 GPIO14; HSPI_CLK
6 IO12 GPIO12; HSPI_MISO
7 IO13 GPIO13; HSPI_MOSI; UART0_CTS
8 VCC Вход питания 3,3В.
9 CS0 Выбор чипа
10 MISO Вход ведущего, выход ведомого.
11 IO9 GPIO9
12 IO10 GPIO10
13 MOSI Выход ведущего, вход ведомого.
14 SCLK Последовательный тактовый сигнал.
15 GND Корпус.
16 IO15 GPIO15; MTDO; HSPICS; UART0_RTS
17 IO2 GPIO2; UART1_TXD
18 IO0 GPIO0
19 IO4 GPIO4
20 IO5 GPIO5
21 RXD UART0_RXD; GPIO3
22 TXD UART0_TXD; GPIO1

Корпуса и размеры

Внешние размеры модуля составляют 16мм*24мм*3мм. Флеш-память, интегрированная в модуль, – это SPI флеш-память, емкость которой составляет 4 Мбайта, в корпусе SOP-210mil. Антенна, применяемая в модуле, – микрополосковая антенна на плате с коэффициентом усиления 3 дБи.

f253df0e32f8933810b4c1f16c3935c736f9777d.jpeg
ESP-12E (на базе ESP8266). Размеры платы

Описание функционала

MCU

ESP8266EX встроен в 32-битный микроконтроллер (MCU) Tensilica L106, который отличается ультранизким энергопотреблением 16-битной RISC архитектурой. Тактовая частота CPU составляет 80 МГц. Также она может достичь максимального значения 160 МГц.

ESP8266EX часто интегрируется с внешними датчиками и другими специальными устройствами через его выводы GPIO; код для подобных приложений поставляется в примерах в SDK.

Организация памяти

Внутренние SRAM и ROM.

Однокристальная WiFi система ESP8266EX встраивается вместе с контроллером памяти; включая SRAM и ROM. MCU может обращаться к памяти через интерфейсы iBus, dBus и AHB.

Согласно текущей версии SDK, пользователю доступно следующее пространство памяти:

  • размер RAM < 36 Кбайт, то есть, когда ESP8266EX работает в режиме клиентской станции и подключен к роутеру, программируемое пространство, доступное пользователю в куче и секции data, составляет около 36 Кбайт;
  • в однокристальной системе нет программируемой памяти ROM; пользовательская программа должна храниться во внешней SPI флеш-памяти.
Внешняя SPI флеш-память

В модуль для хранения пользовательских программ установлена внешняя SPI флеш-память размером 4 Мбайта. Если необходимо больший объем, то необходимо установить флеш-память большего размера. Теоретически, поддерживается емкость до 16 Мбайт.

Предполагаемая емкость SPI флеш-памяти:

  • OTA выключено: минимальный размер флеш-памяти, который будет поддерживаться, составляет 512 Кбайт;
  • OTA включено: минимальный размер флеш-памяти, который будет поддерживаться, составляет 1 Мбайт;

Поддерживается несколько SPI режимов, в том числе, Standard SPI, Dual SPI и Quad SPI.

Перед загрузкой во флеш-память выбирайте правильный SPI режим, иначе прошивки/программы, которые вы загрузили, могут работать неправильно.

Загрузки

Техническое описание WiFi модуля ESP-12E на базе микроконтроллера ESP8266.

Магазины и цены

Цены на ESP-12E WiFi модуль (ESP8266)
Товар в магазине Количество штук в комплекте Стоимость Расчетная стоимость за 1 шт.
ESP-12E WiFi модуль (ESP8266) на AliExpress 1 114.34 руб. / 1.76 USD
ESP-12E WiFi модуль (ESP8266) на eBay 1 137.79 руб. / 2.19 USD
ESP-12E WiFi модуль (ESP8266) на GearBest.com 1 194.88 руб. / 3.09 USD
ESP-12E WiFi модуль (ESP8266) на DX.com 1 287.31 руб. / 4.55 USD

Купить на AliExpress Купить на eBay Купить на GearBest.com Купить на DX.com Используемые источники:

  • https://arduinoplus.ru/esp8266-datasheet/
  • https://tproger.ru/articles/about-esp8266/
  • https://radioprog.ru/shop/merch/33

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации