<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Vadim Apenko</title><generator>teletype.in</generator><description><![CDATA[Python backend developer]]></description><image><url>https://teletype.in/files/e9/cb/e9cbd37a-fb8f-4208-af86-73dc492556e4.png</url><title>Vadim Apenko</title><link>https://teletype.in/@k4m454k</link></image><link>https://teletype.in/@k4m454k?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=k4m454k</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/k4m454k?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/k4m454k?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Wed, 22 Apr 2026 13:42:41 GMT</pubDate><lastBuildDate>Wed, 22 Apr 2026 13:42:41 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@k4m454k/ansible_one</guid><link>https://teletype.in/@k4m454k/ansible_one?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=k4m454k</link><comments>https://teletype.in/@k4m454k/ansible_one?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=k4m454k#comments</comments><dc:creator>k4m454k</dc:creator><title>Нахуя ansible</title><pubDate>Fri, 21 May 2021 14:59:59 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/34/ae/34ae01de-e398-4c50-a28f-72f80d75952a.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/97/30/9730bed3-0036-42fd-bd7b-b915384f1a2e.png"></img>Давайте сразу определимся, я буду рассказывать про Ансибл в рамках Пайтон разработчика. Может немного бОльше, но всё же буду рассматривать то, как он нам поможет в разворачивании наших поделок на сервера. 
В этой статье будет вводная информация про Ансибл. Не ждите реальный проект, тема слишком обширна и конкретная статья призвана только заинтересовать.]]></description><content:encoded><![CDATA[
  <figure class="m_column">
    <img src="https://teletype.in/files/97/30/9730bed3-0036-42fd-bd7b-b915384f1a2e.png" width="940" />
  </figure>
  <p>Давайте сразу определимся, я буду рассказывать про Ансибл в рамках Пайтон разработчика. Может немного бОльше, но всё же буду рассматривать то, как он нам поможет в разворачивании наших поделок на сервера. <br />В этой статье будет вводная информация про Ансибл. Не ждите реальный проект, тема слишком обширна и конкретная статья призвана только заинтересовать.</p>
  <p><strong>До того как мы начнём, поставь ансибл, братиш! </strong><br /><code>pip install --user ansible</code></p>
  <h2>Для чего?</h2>
  <p>Очень часто мы руками раскатываем наши сервисы на сервера. Как это обычно происходит?<br /></p>
  <ul>
    <li>Влезть за сервер по ssh</li>
    <li>Скопировать туда код</li>
    <li>Запустить какие-то действия </li>
    <ul>
      <li>миграция</li>
      <li>сборка контейнера Докер</li>
      <li>обновление конфигов</li>
      <li>поставить новые пакеты\софт</li>
      <li>etc</li>
    </ul>
    <li>Остановить старую версию сервиса</li>
    <li>Запустить новую</li>
    <li>Убедиться что все конфиги поднялись.</li>
  </ul>
  <p>Где тут проблема?<br />Проблема в куче ручных шагов, на которых можно ошибиться, тупануть, вставить не то, обрушить всё к хуям собачьим. Да и не удобно это всё. Точнее оно может и удобно до какой-то стадии повышения сложности, но потом точно не удобно. <br /><br />Именно для этого и нужен Ансибл. Он позволяет всё это автоматизировать. Надёжно и просто(если понимаешь что делаешь).</p>
  <h2>Как это работает?</h2>
  <p>У ансибл есть два режима работы:</p>
  <ul>
    <li>Работа с модулями Ансибл напрямую</li>
    <li>Работа в режиме плейбуки</li>
  </ul>
  <h3>Работа напрямую</h3>
  <p>Это как разовый вызов модуля в пайтоне, а ля python -m pip install aiohttp.<br />Лично я это использую для разовой операции на куче серверов (да хоть на одном), чтоб что-то мелкое выполнить. <br />Например узнать uptime всех серверов:<br /><code>ansible all -i inventory.yaml -m shell -a &quot;uptime&quot;</code></p>
  <h3>Работа в режиме плейбуки</h3>
  <p>Это более серьёзный режим. Playbook - это список правил, действий, по которым ваш сервер приводится к нужному состоянию. <br /><br />Стоит упомянуть, что Ansible именно <strong>приводит к нужному состоянию</strong>. <br /><br />Например у вас в плейбуке написано, чтоб ансибл установил nginx. <br />1. Ансибл лезет на первый сервер, собирает кучу инфы о сервере и пакетах, установленных там. Устанавливает nginx.<br />2. Ансибл лезет на второй сервер, собирает кучу инфы... смотрит, nginx уже стоит и ничего не делает вообще. <br /><br />На выходе серверов может быть 10000 и на всех по итогу будет установлен nginx. Можно поставить тригер, чтоб nginx был установлен именно последней доступной в репозитории версии или определённой версии, тогда ансибл везде сделает nginx именно нужной версии. <br /><br />Круто? Круто!</p>
  <h2>Немножко практики и ещё чуть теории</h2>
  <p>На данный момент нам важно узнать про две вещи. </p>
  <h3>inventory</h3>
  <p><strong>inventory</strong> - это список серверов\машин\компьютеров с которым ansible работает. <br />inventory может быть в формате ini, в формате yaml (мой любимчик) и динамический.<br />Формат ini я не буду рассматривать, если интересно, найдёте в документации. А вот yaml я покажу. <br />Динамический inventory нигде не хранится кроме оперативной памяти. Чаще всего используется, когда вы автоматически листите какие-то ваши сервера в датацентре и\или создаёте сервер с нуля тем же ansible. Тобишь послали запрос на создание сервера, дождались статуса создания, записали в inventory его параметры. <br /></p>
  <p><strong>Давайте напишем свой inventory.</strong><br />Например у меня есть 2 машины, я назвал их <code>raspi_four</code> и <code>raspi_zero</code>.<br />Для интереса, я настрою всё так, чтоб ssh вход на <code>raspi_four</code> был по ssh ключу,  а на <code>raspi_zero</code> по паролю.<br />Доступ по ключу на <code>raspi_four</code> настраиваем заранее. (прописываем ваш публичный ключ в <code>authorized_keys</code> на <code>raspi_four</code>, в интернете куча инструкций).<br /><br />Дальше пишем в файле <code>inventory.yaml</code></p>
  <pre>all:
  hosts:
    raspi_four:
      ansible_ssh_host: 192.168.0.119
      ansible_user: pi
    
    raspi_lite:
      ansible_connection: ssh
      ansible_ssh_host: 192.168.0.115
      ansible_user: pi
      ansible_ssh_pass: raspberry</pre>
  <p>Вместо имён, например <code>raspi_four</code>, можно написать доменное имя и не указывать ip. Ансибл сам разберётся.<br /><br />Теперь команда <code>ansible all -i inventory.yaml -m shell -a &quot;uptime&quot;</code> будет работать.</p>
  <h3>Плейбука!</h3>
  <p>Давайте напишем простую плейбуку. <br />Рассмотрим два простых действия:<br />1. Установить какой-нибудь софт на сервер.<br />2. Скопировать файл с хоста (на котором запущена плейбука) на сервер. <br />3. Выполнить это на всех машинах в inventory<br /><br />Приступим. Создаём файл <code>test_playbook.yaml</code> и пишем там это</p>
  <pre>- name: my tasks
  hosts: all
  tasks:
    - name: install nmap
      apt:
        name: [&quot;nmap&quot;]
      become: True

    - name: copy file
      copy:
        src: &quot;{{ playbook_dir }}/some_file.txt&quot;
        dest: /tmp/tempConfig.txt
</pre>
  <p>Давайте разберёмся что тут происходит. <br /><br />Если вы знакомы со структурой yaml, вы сразу видите список, а именно список из одного элемента, в котором лежит всё написанное. Этих элементов может быть несколько и все будут выполняться последовательно. Конкретно этот элемент отвечает за исполнение наших, так называемых <code>tasks</code> и называется my tasks. Это будет фигурировать в логах исполнения и весьма полезно давать осмысленные названия. <br /><br />Далее мы указываем <code>hosts: all</code>. Помните инвентори, там в основе всего была группа <code>all</code> (да, там разделение по группам, но о них подробнее я расскажу в следующий раз, может быть). Вот со всеми входящими в группу хостами мы и производим действия. <br />Кстати вместо <code>all</code> можно указать <code>local</code>, и тогда все действия будут происходить на машине, на которой запустилась плейбука. Это удобно для разделения задач, например на локальной машине можно собрать артефакт или сбилдить образ, залив его на докер-хаб, а на хосте уже спуллить образ и запустить. <br /><br />Далее мы видим список <code>tasks</code>. У каждой таски есть одинаковые параметры, это имя <code>name</code>, где любой текст, и имя модуля. <br />К слову о модулях, из коробки в ансибл есть ооооооочень дохуя модулей на все случаи жизни, да и сторонние можно ставить, их ещё больше. Описывать весь список я не смогу, но подробности есть в <a href="https://docs.ansible.com/ansible/latest/collections/ansible/builtin/index.html#plugins-in-ansible-builtin" target="_blank">документации</a>. Сейчас рассмотрим два модуля, это <code>apt</code> и <code>copy</code>.<br /><br /><code>apt</code> имеет дополнительный параметр name:, который принимает строку или список строк с названиями того, что надо установить из apt. И ниже мы видим странное <code>become: True</code>, которое направлено на всю задачу. Как мы помним из inventory, мы заходим под пользователем <code>pi</code>, а он не имеет прав на установку пакетов. Чтоб он это умел, надо повысить права дописав перед командой sudo. (само собой юзер <code>pi</code> должен быть включён в <code>sudoers</code>). Именно для задач, где надо повысить права, прописывается <code>become: True</code> (можно так же <code>become: yes</code>)<br /><br />copy, как можно понять из названия, копирует файл (или директорию) с хоста на целевую машину. Из параметров src: путь до файла на хосте и dest: куда положить на целевой машине. В src мы использовали переменную ансибла, где лежит путь до директории, где лежит текущая плейбука. Этих переменных у ансибла куча и о них поговорим потом. И да, знающие уже увидели тут Jinja2. Чтож - это он и есть) Всё (почти) что можете писать в jinja2, можете и тут.<br /><br />Я рассмотрел только малую часть возможностей модулей <a href="https://docs.ansible.com/ansible/latest/collections/ansible/builtin/apt_module.html" target="_blank">apt</a> и <a href="https://docs.ansible.com/ansible/latest/collections/ansible/builtin/copy_module.html" target="_blank">copy</a>, там куча параметров и куча возможностей. </p>
  <h3>Запускаем</h3>
  <pre>ansible-playbook test_playbook.yaml -i inventory.yaml</pre>
  <p>и наблюдаем за исполнением. Если запустить ещё раз, то ансибл просто пройдётся по задачам, убедится что всё уже сделано ранее и ничего менять не надо, поставить везде ok вместо changed и не будет нихрена делать =)</p>
  <p>Если интересно посмотреть что он делает подробнее, можно к команде запуска дописать <code>-vvv</code></p>
  <p>На этом наша вводная лекция закончена. <br />Специально для <a href="https://t.me/python_scripts" target="_blank">python_sripts</a>, Вадик.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@k4m454k/MicroPython_FirstCode</guid><link>https://teletype.in/@k4m454k/MicroPython_FirstCode?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=k4m454k</link><comments>https://teletype.in/@k4m454k/MicroPython_FirstCode?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=k4m454k#comments</comments><dc:creator>k4m454k</dc:creator><title>[MicroPython] Как начать писать?</title><pubDate>Tue, 29 Sep 2020 00:12:48 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/27/c4/27c4a1ba-8454-492f-b556-8621e7c13ec0.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/ff/89/ff899288-2136-44a1-a5f8-f2457a1376dc.png"></img>В прошлой статье мы обсудили выбор микроконтроллера, кто не читал - настоятельно рекомендую.]]></description><content:encoded><![CDATA[
  <p>В <a href="https://teletype.in/@k4m454k/MicroPython_FirstSteps" target="_blank">прошлой </a>статье мы обсудили выбор микроконтроллера, кто не читал - настоятельно рекомендую.</p>
  <p>В этой статье попробуем что-нибудь написать. Для примера и общей популярности будем рассматривать кодинг под Windows. У меня Windows 10 Pro.</p>
  <p><strong>Что нам понадобится</strong>:</p>
  <ul>
    <li>Интерпретатор Python любой из последних версий. (качаем, ставим)</li>
    <li>Прошивка под ваш микроконтроллер (ниже чуть подробнее)</li>
    <li>Пара нужных утилит (о них ниже)</li>
    <li>Среда разработки (очень громкое название для этого) Thonny</li>
  </ul>
  <h2>Железо</h2>
  <p>Я буду использовать TTGO T-Display v1.4, потому что она первая попалась мне под руку. Вы же можете использовать любую железку на основе ESP32.</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/ff/89/ff899288-2136-44a1-a5f8-f2457a1376dc.png" width="449" />
    <figcaption>TTGO T-Display v1.4</figcaption>
  </figure>
  <h2>Ставим всё нужное</h2>
  <p>Качаем с сайта <a href="https://www.python.org/" target="_blank">Python.org</a> последнюю стабильную версию пайтон.</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/27/c4/27c4a1ba-8454-492f-b556-8621e7c13ec0.png" width="951" />
    <figcaption>На момент выхода статьи стабильная версия 3.8.5</figcaption>
  </figure>
  <p>Устанавливаем. Не забываем добавить в PATH. (галочка на одном из шагов)</p>
  <p>Открываем терминал Windows (<code>cmd</code>) и пишем <code>pip install esptool</code>. Эта команда установит в систему esptool для прошивки esp32. </p>
  <p>Обязательно устанавливаем драйвер для usb-ttl конвертера вашего микроконтроллера, обычно это легко гуглится. Например в моей железке это CP2105, в вашей может быть CH340 или что-то ещё. Вообще чип ttl конвертера указан на странице продавца, или просто потыкайте глазами через лупу в черные микрухи около USB порта вашей железки, там точно написано.</p>
  <p>Если драйвер вы поставили верно, то при подключении у вас будет определён какой-либо COM порт. У меня это COM9.</p>
  <p>Лезем на сайт <a href="https://micropython.org/download/esp32/" target="_blank">Micropython </a>и качаем оттуда последнюю стабильную версию микропитона под ваше железо. Например в моей железке нет SPIRAM, но я скачал с его поддержкой, и в будущем буду видеть сообщение <code>E (10) spiram: SPI RAM not initialized</code> при загрузке. Это не страшно.</p>
  <h2>Прошивка</h2>
  <p>Первым шагом надо очистить память микроконтроллера. Делать это надо <strong>ВСЕГДА </strong>перед прошивкой. Даже если прошиваете той же самой прошивкой.</p>
  <pre>&gt;esptool.py --port COM9 erase_flash
esptool.py v2.8
Serial port COM9
Connecting.....
Detecting chip type... ESP32
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 24:6f:28:25:4c:44
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 8.0s
Hard resetting via RTS pin...</pre>
  <p>Прошиваем!<br />Инструкция как прошивать есть там же, где качали прошивку. Я делаю чуть не по канону, но работает хорошо. Можете делать как я.</p>
  <pre>&gt;esptool.py --port COM9 write_flash 0x1000 esp32spiram-idf3-20200902-v1.13.bin
esptool.py v2.8
Serial port COM9
Connecting....
Detecting chip type... ESP32
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 24:6f:28:25:4c:44
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 1534288 bytes to 955298...
Wrote 1534288 bytes (955298 compressed) at 0x00001000 in 85.1 seconds (effective 144.2 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...</pre>
  <p>Всё, прошивка завершена.</p>
  <h2>Кодим!</h2>
  <p>Для начала открываем Thonny</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/79/8e/798e9eac-f03a-42b1-a5ed-205d9f64453c.png" width="585" />
    <figcaption>Окно настроек Thonny</figcaption>
  </figure>
  <p>В настройках интерпретатора надо выбрать MicroPython (Общий) и порт, на котором определилась ваша железка.</p>
  <p>Собственно всё, можно кодить. </p>
  <figure class="m_column">
    <img src="https://teletype.in/files/62/e9/62e99c26-c877-43c1-a01c-825bf0c41e4d.png" width="1920" />
    <figcaption>Окно Thonny</figcaption>
  </figure>
  <p>Внизу мы видим консоль из интерпретатора Python вашего Esp32. (работает TAB для автодополнения)<br />Слева сверху файлы внутри ESP32. <br />Снизу слева файлы на локальном ПК в выбранной папке. <br /><br />Файлы можно перекидывать туда и обратно. (ПКМ по файлу) Можно открывать файлы на редактирования прямо с микроконтроллера, так в общем окне они будут в квадратных скобках.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/9b/61/9b615cfa-501c-40a9-a651-a17edd4dc919.png" width="683" />
    <figcaption>Сразу ясно какой файл откуда открыт.</figcaption>
  </figure>
  <p>Давайте подключимся к Wi-Fi. Для начала открываем документацию и смотрим <a href="http://docs.micropython.org/en/latest/esp32/quickref.html#networking" target="_blank">как</a>. Кстати MicroPython позволяет испытать всё в консоли снизу.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/59/b7/59b79e3e-452a-43a5-bcab-4ab791a3a008.png" width="707" />
    <figcaption>Теперь вам известен мой пароль от вайфай)</figcaption>
  </figure>
  <p>Теперь когда мы точно знаем что всё работает, логично прописать это в файл <code>boot.py.</code></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/6d/39/6d396c58-03cb-4c14-98ef-7bc12c5e58ad.png" width="562" />
    <figcaption>Мой файл после правок выглядит так.</figcaption>
  </figure>
  <p>Жмём на иконку сохранить и можем смело перезагружать железку. После загрузки исполнится <code>boot.py</code> и мы подключимся к вайфай. (всё будет видно в консоли внизу). Можно ещё принтов натыкать.  </p>
  <p><strong>WARNING</strong>: Показанный способ подключения к вайфай ужасен, так как не гарантирует подключение. Нет ожидания подключения перед исполнением любого другого кода. Способ показанный в примере в документации лучше, но тоже не идеален. </p>
  <h2>Немного о файлах и этапе загрузки</h2>
  <p>После загрузки микроконтроллера запускается интерпретатор Python и в него передаётся сначала файл <code>boot.py</code>, а затем <code>main.py</code>. Если какого-то из файлов нет, то шаг пропускается. Так как интерпретатор у нас один, то всё что мы определим внутри <code>boot.py</code> будет доступно и внутри <code>main.py</code>. То есть заново импортировать совсем не обязательно. </p>
  <h2>Установка пакетов из сети</h2>
  <p>Конечно вы можете просто скопировать нужные вам пакеты прям в корень и спокойно импортировать их из любых файлов вашего проекта, но есть возможность воспользоваться <code>pip</code>, точнее его местной интерпретацией <code>upip</code>. Вообще привыкайте, что многие пакеты тут начинаются с &quot;<code>u</code>&quot;, чтоб показать свою обрезанную натуру и адаптацию под микропайтон.</p>
  <p>Для установки пакетов есть модуль <code>upip</code>. Например сейчас поставим местный аналог <code>requests </code>- модуль <code>urequests</code>. Он поможет нам работать с сетью и обращаться к разным API через http(s).</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/d4/11/d41150b0-8f69-4362-8ac2-8f79f0a5f047.png" width="847" />
    <figcaption>Устанавливаем urequests</figcaption>
  </figure>
  <p>Как видите, процесс реально очень прост. После этого файлы <code>urequests </code>сохранились в <code>/lib/</code> (её не видно из браузера файлов, но всё же через модуль <code>os</code> можно туда заглянуть). Файлы останутся там даже после перезагрузки. </p>
  <p>Кстати кучку библиотек доступных для установки (но не все) можно посмотреть в <a href="https://github.com/micropython/micropython-lib" target="_blank">официальном Github</a></p>
  <p><strong>WARNING</strong>: Код установки библиотек не стоит вставлять внутрь файлов проекта, лучше сделать это один раз из консоли и забыть. </p>
  <p>Ну и давайте попробуем воспользоваться любым API сервисом. Например получим номер дня в году с помощью <code>worldtimeapi.org</code>.</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/94/46/9446d5ba-fe1e-4b26-af7a-9ea16985bb4c.png" width="950" />
    <figcaption>GET запрос в api сервис.</figcaption>
  </figure>
  <p>Всё получилось, внутрь urequests засунули даже парсер json для нашего удобства.</p>
  <p>На этом я заканчиваю статью: мы с вами научились прошивать железку, научились пользоваться Thonny, подключаться к Wi-Fi, устанавливать пакеты, работать с API. Ждите следующих статей, где мы, возможно, сделаем что-то полезное =)</p>
  <p>Не забывайте про нашу телеграм группу <a href="https://t.me/micropython_faq_ru" target="_blank">https://t.me/micropython_faq_ru</a></p>
  <p>Спасибо за внимание. <br />Ваш Вадик.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@k4m454k/MicroPython_FirstSteps</guid><link>https://teletype.in/@k4m454k/MicroPython_FirstSteps?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=k4m454k</link><comments>https://teletype.in/@k4m454k/MicroPython_FirstSteps?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=k4m454k#comments</comments><dc:creator>k4m454k</dc:creator><title>[MicroPython] С чего начать?</title><pubDate>Tue, 07 Jul 2020 17:54:05 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/6d/51/6d518041-488a-4d11-82c9-a1a52f7ec9b8.png"></media:content><tt:hashtag>micropython</tt:hashtag><description><![CDATA[<img src="https://teletype.in/files/f8/16/f816129c-6f64-4330-8138-4fc8d3a158f4.png"></img>Суть MicroPython в том, чтоб быстро разрабатывать устройства обладая знаниями Python. Отсюда вывод, знать Python на базовом уровне нужно, без этого никак. Советую курсы или группу по Python  ]]></description><content:encoded><![CDATA[
  <h2>Если вы не знаете Python</h2>
  <p>Суть MicroPython в том, чтоб быстро разрабатывать устройства обладая знаниями Python. Отсюда вывод, знать Python на базовом уровне нужно, без этого никак. Советую <a href="https://t.me/py_courses_ru" target="_blank">курсы </a>или <a href="https://t.me/python_scripts" target="_blank">группу </a>по Python  </p>
  <h2>Если Python вы знаете</h2>
  <p>Для начала надо найти устройство, железку под которую вы будете писать. Ведь вся суть наших плясок - получить работающий девайс с вашим кодом в физическом исполнении.</p>
  <p><br /><strong>Дальше я соберу несколько вариантов с ссылками на Али.</strong><br />Во всех девайсах есть Wifi, так что на этот счёт можно не беспокоиться.</p>
  <p>После списка девайсов будет краткая информация по самому MicroPython.</p>
  <hr />
  <h3>Девайсы M5Stack</h3>
  <p><a href="https://m5stack.aliexpress.ru/store/3226069" target="_blank">Официальный магазин</a></p>
  <p><a href="https://m5stack.com" target="_blank">Официальный сайт</a></p>
  <p>M5Stack девайсы можно назвать словосочетанием &quot;Дорого и круто&quot;. Стоят они и правда не мало, но обычно хорошо продуманы, имеют внутри себя много аппаратных устройств типа экранов, индикаторов, кнопок и тд. Обычно к каждому девайсу есть целая россыпь модулей расширений, от плат под пайку до GPS молулей и клавиатур.</p>
  <hr />
  <p><strong>M5Stack Fire</strong></p>
  <p>Девайс имеет на борту: </p>
  <ul>
    <li>Контроллер ESP32 с PSRAM 4 мегабайт, Wi-Fi, dual mode Bluetooth</li>
    <li>Слот для MicroSD до 16 гигабайт</li>
    <li>LCD экран 320х240, яркий и цветной</li>
    <li>3 кнопки</li>
    <li>Спикер динамик</li>
    <li>Акселерометр + гироскоп</li>
    <li>10 программируемых RGB светодиодов по контуру (5 слева + 5 справа), очень яркие.</li>
    <li>Li-Pol аккумулятор с контроллером заряда (доступен программно по i2c)</li>
    <li>Порты расширений для модулей, которые можно заказать у m5Stack или спаять самому.</li>
    <li>Магнитная площадка сзади, позволяющая легко перемещать девайс и ставить его на зарядку. (док в комплекте уже есть)</li>
  </ul>
  <figure class="m_column">
    <img src="https://teletype.in/files/f8/16/f816129c-6f64-4330-8138-4fc8d3a158f4.png" width="800" />
  </figure>
  <p>На мой скромный взгляд, это лучший девайс. Законченный вид, куча памяти, аккумулятор.</p>
  <p>Купить можно за <a href="https://aliexpress.ru/item/32847906756.html" target="_blank">3700</a> рублей + доставка</p>
  <hr />
  <p><strong>M5Stack Gray</strong></p>
  <p>Почти как Fire, но меньше памяти, без светодиодов, и без магнитной док станции.</p>
  <p>Девайс имеет на борту:</p>
  <ul>
    <li>Контроллер ESP32, Wi-Fi, dual mode Bluetooth</li>
    <li>Слот для MicroSD до 16 гигабайт</li>
    <li>LCD экран 320х240, яркий и цветной</li>
    <li>3 кнопки</li>
    <li>Спикер динамик</li>
    <li>Акселерометр + гироскоп</li>
    <li>Li-Pol аккумулятор с контроллером заряда (доступен программно по i2c)</li>
    <li>Порты расширений для модулей, которые можно заказать у m5Stack или спаять самому.</li>
  </ul>
  <figure class="m_column">
    <img src="https://teletype.in/files/ac/de/acde16e1-ff40-4286-a5e1-eb9534a27a6e.png" width="800" />
  </figure>
  <p>Купить можно за <a href="https://aliexpress.ru/item/32836393710.html" target="_blank">2500 </a>рублей + доставка</p>
  <hr />
  <p><strong>M5StickC</strong></p>
  <p>Совсем малыш размером с палец, но с экраном и богатым внутренним миром.</p>
  <p>Имеет множество модулей расширения, смотрите в официальном магазине (сверху ссылка)</p>
  <p>Девайс имеет на борту:</p>
  <ul>
    <li>Контроллер ESP32-Pico, Wi-Fi, dual mode Bluetooth</li>
    <li>LCD экран 80х160, яркий и цветной</li>
    <li>2 кнопки</li>
    <li>IR передатчик</li>
    <li>Микрофон</li>
    <li>Акселерометр + гироскоп</li>
    <li>Li-Pol аккумулятор с контроллером заряда (доступен программно по i2c)</li>
    <li>Порты расширений для модулей, которые можно заказать у m5Stack или спаять самому.</li>
  </ul>
  <figure class="m_column">
    <img src="https://teletype.in/files/9c/a5/9ca555fe-b157-45c5-8f1c-cbf8dee113f7.png" width="640" />
  </figure>
  <p>Купить можно за <a href="https://aliexpress.ru/item/32985247364.html" target="_blank">900 </a>рублей + доставка.</p>
  <hr />
  <p><strong>M5Stack Atom</strong><br />Самый маленький из м5. Без батареи. </p>
  <p>Девайс имеет на борту:</p>
  <ul>
    <li>Контроллер ESP32-Pico, Wi-Fi, dual mode Bluetooth</li>
    <li>Диодный экран 5х5, яркий и цветной</li>
    <li>1 кнопка под светодиодами</li>
    <li>IR передатчик</li>
    <li>Акселерометр + гироскоп</li>
    <li>Порты расширений для модулей, которые можно заказать у m5Stack или спаять самому.</li>
  </ul>
  <figure class="m_column">
    <img src="https://teletype.in/files/12/97/1297a651-ea0d-4df3-80bf-184b83664830.png" width="800" />
  </figure>
  <figure class="m_custom">
    <img src="https://teletype.in/files/9a/a7/9aa79d4d-5268-4688-855a-6d27c51bfc34.png" width="246" />
  </figure>
  <p>Купить можно за <a href="https://aliexpress.ru/item/4000576830752.html" target="_blank">660 </a>рублей + доставка</p>
  <p></p>
  <p></p>
  <p></p>
  <h2>TTGO</h2>
  <p><a href="https://aliexpress.ru/store/2090076" target="_blank">Официальный магазин</a></p>
  <p>Девайсы TTGO это по китайски, много, и дешево. При этом они не плохо продуманы и вполне подойдут для начального уровня. Забудьте про красивые корпуса, их тут делать придётся самому. А так же забудьте про модули расширения. Всё своими руками. </p>
  <p>Я покажу только малую часть их девайсов, открывайте магазин и смотрите сами всё что интересно.</p>
  <hr />
  <p><strong>TTGO T4 1.3</strong></p>
  <p>Плата с довольно большим экраном. Можно сделать автономной в виду входа под аккумулятор и встроенной разводки для его заряда. Корпуса нет, но я находил под 3д печать и печатал сам.</p>
  <p>Дешево и сердито.</p>
  <p>Девайс имеет на борту:</p>
  <ul>
    <li>Контроллер ESP32, Wi-Fi, dual mode Bluetooth + SPRAM 8M</li>
    <li>Слот для MicroSD до 16 гигабайт</li>
    <li>LCD экран 240x320, яркий и цветной</li>
    <li>3 кнопки</li>
    <li>Контроллер заряда LiPo аккумулятора (доступен программно по i2c)</li>
    <li>Порты расширений для модулей, которые можно спаять самому.</li>
  </ul>
  <p></p>
  <p></p>
  <p></p>
  <figure class="m_column">
    <img src="https://teletype.in/files/20/07/2007f61e-5b31-4b38-b6d1-9dfd213a3d7a.png" width="1000" />
  </figure>
  <p>Купить можно за <a href="https://aliexpress.ru/item/32854502767.html" target="_blank">1200 </a>рублей + доставка</p>
  <hr />
  <p><strong>TTGO T-Watch 2020</strong></p>
  <p>Для тех, кто хочет замутить свои часы, с блекджеком и ... <br />Сразу предупреждаю, девайс продуман не плохо, но над энергосбережением надо подумать серьёзно, так как постоянно горящий экран и запущенный WIFI будет кушать батарею. </p>
  <p>Девайс имеет на борту:</p>
  <ul>
    <li>Контроллер ESP32, Wi-Fi, dual mode Bluetooth + PSRAM 8M</li>
    <li>LCD экран, яркий и цветной</li>
    <li>Сенсор над экраном (да, ещё и сенсорные)</li>
    <li>1 кнопка</li>
    <li>IR трансмиттер</li>
    <li>Аккумулятор + Контроллер заряда LiPo аккумулятора (доступен программно по i2c)</li>
    <li>Акселерометр</li>
    <li>Вибромотор</li>
    <li>Звуковой процессор + Динамик</li>
    <li>Встроенный модуль Часов реального времени (RTC)</li>
  </ul>
  <figure class="m_column">
    <img src="https://teletype.in/files/35/68/3568d495-0081-43a8-96ba-85e7e7901d9f.png" width="1000" />
  </figure>
  <figure class="m_column">
    <img src="https://teletype.in/files/67/56/67563a1d-039d-47a1-975c-51e76ceddf76.png" width="790" />
  </figure>
  <p>Очень вкусную девайсину можно купить за <a href="https://aliexpress.ru/item/4000971508364.html" target="_blank">1900 </a>рублей + доставка</p>
  <hr />
  <p><strong>TTGO T1</strong></p>
  <p>Для тех, кому не нужны экраны и навороты, кто хочет прикручивать нужное ему оборудование сам.</p>
  <p>Девайс имеет на борту:</p>
  <ul>
    <li>Контроллер ESP32, Wi-Fi, dual mode Bluetooth + PSRAM 8M</li>
    <li>Слот под MicroSD до 16 Гигабайт</li>
    <li>Контроллер заряда LiPo аккумулятора (доступен программно по i2c)</li>
  </ul>
  <figure class="m_column">
    <img src="https://teletype.in/files/f4/d7/f4d7e3d3-fb20-4ca6-9073-596631c980b2.png" width="1000" />
  </figure>
  <p>Можно купить за <a href="https://aliexpress.ru/item/32846099054.html" target="_blank">370 </a>рублей + доставка</p>
  <hr />
  <h2>MicroPython</h2>
  <tt-tags>
    <tt-tag name="micropython">#micropython</tt-tag>
  </tt-tags>
  <p>Все железки выше можно кодить на С++ и на MicroPython. Некоторые, типа M5Stack можно даже в графической среде UI Flow.<br />Но мы тут собрались ради Микропитона, так что речь пойдёт о нём.</p>
  <p>Микропитонов основных два (на самом деле больше). <strong>Ванильный </strong>и от <strong>Лобо</strong>.<br /></p>
  <p><strong>Ванильный </strong>- это тот, который качается с официального <a href="https://micropython.org/" target="_blank">https://micropython.org/</a> (кстати на нём не самая плохая документация и довольно активный форум на английском языке)</p>
  <p><strong>От Лобо</strong>, это тот, который с <a href="https://github.com/loboris/MicroPython_ESP32_psRAM_LoBo" target="_blank">Гитахаба пользователя loboris</a>. <strong>Микропитон на стероидах</strong>. Этот Лоборис обладает регулярными поставками разных дымных смесей и накрутил в свой микропитон столько всего, что разбегаются глаза. Именно этот микропитон я и советую использовать для всех девайсов с LCD экранами. Но учтите, перед прошивкой, скорее всего, придётся собрать свою версию, включив в неё то, что нужно именно вам для девайса.</p>
  <h3>Кратко о работе и устройстве прошивки MicroPython</h3>
  <p>MicroPython представляет из себя прошивку, написанную на C++. Внутри имеется интерпретатор Python версии 3.5 с обрезанным функционалом. (Подробнее о вырезанном в доке официального сайта) А так же специальные драйвера для работы устройств и файловой системы.</p>
  <p>Микропайтон создаёт под себя файловую систему, в которую вы можете закидывать ваши <code>.py</code> и иные файлы (через USB, FTP или через WEBREPL). Обычно места под это дело 4 мегабайта - место под прошивку. Но некоторые производители расширяют место до 8 или 16 мегабайт. Как правило, это достаточно. Но всё расширяется картами памяти.</p>
  <p>После запуска и загрузки ядра Микропайтона, он ищет в памяти файл <code>boot.py</code> и исполняет его. Этот же файл исполняется после пробуждения контроллера из сна.</p>
  <p>После успешного исполнения запускается файл <code>main.py</code></p>
  <p>Внутри этих файлов, как можно предположить, уже ваша логика написанная на пайтоне.</p>
  <p>Можно подключить девайс по USB порту, подключится на найденный COM порт и мы попадём в интерактивный интерпретатор, в котором можно поиграться с пайтоном на железке.</p>
  <p>Пример из <a href="http://docs.micropython.org/en/latest/esp32/quickref.html#general-board-control" target="_blank">офф. документации</a>:</p>
  <pre>import network
wlan = network.WLAN(network.STAIF) # create station interface
wlan.active(True)       # activate the interface
wlan.scan()             # scan for access points
wlan.isconnected()      # check if the station is connected to an AP
wlan.connect(&#x27;essid&#x27;, &#x27;password&#x27;) # connect to an AP
wlan.config(&#x27;mac&#x27;)      # get the interface&#x27;s MAC address
wlan.ifconfig()         # get the interface&#x27;s IP/netmask/gw/DNS addresses

ap = network.WLAN(network.APIF) # create access-point interface
ap.config(essid=&#x27;ESP-AP&#x27;) # set the ESSID of the access point
ap.config(max_clients=10) # set how many clients can connect to the network
ap.active(True)         # activate the interface</pre>
  <p>Как видите, всё максимально просто. </p>
  <p>Теперь покупайте нужные вам девайсы и давайте экспериментировать вместе на нашем <a href="https://t.me/micropython_faq_ru" target="_blank">канале по MicroPython</a></p>
  <p>Ваш Вадик.</p>

]]></content:encoded></item></channel></rss>