<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Vadim Apenko</title><subtitle>Python backend developer</subtitle><author><name>Vadim Apenko</name></author><id>https://teletype.in/atom/k4m454k</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/k4m454k?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@k4m454k?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=k4m454k"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/k4m454k?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-22T13:41:05.070Z</updated><entry><id>k4m454k:ansible_one</id><link rel="alternate" type="text/html" href="https://teletype.in/@k4m454k/ansible_one?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=k4m454k"></link><title>Нахуя ansible</title><published>2021-05-21T14:59:59.555Z</published><updated>2021-05-21T21:45:42.348Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/34/ae/34ae01de-e398-4c50-a28f-72f80d75952a.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://teletype.in/files/97/30/9730bed3-0036-42fd-bd7b-b915384f1a2e.png&quot;&gt;Давайте сразу определимся, я буду рассказывать про Ансибл в рамках Пайтон разработчика. Может немного бОльше, но всё же буду рассматривать то, как он нам поможет в разворачивании наших поделок на сервера. 
В этой статье будет вводная информация про Ансибл. Не ждите реальный проект, тема слишком обширна и конкретная статья призвана только заинтересовать.</summary><content type="html">
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/97/30/9730bed3-0036-42fd-bd7b-b915384f1a2e.png&quot; width=&quot;940&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Давайте сразу определимся, я буду рассказывать про Ансибл в рамках Пайтон разработчика. Может немного бОльше, но всё же буду рассматривать то, как он нам поможет в разворачивании наших поделок на сервера. &lt;br /&gt;В этой статье будет вводная информация про Ансибл. Не ждите реальный проект, тема слишком обширна и конкретная статья призвана только заинтересовать.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;До того как мы начнём, поставь ансибл, братиш! &lt;/strong&gt;&lt;br /&gt;&lt;code&gt;pip install --user ansible&lt;/code&gt;&lt;/p&gt;
  &lt;h2&gt;Для чего?&lt;/h2&gt;
  &lt;p&gt;Очень часто мы руками раскатываем наши сервисы на сервера. Как это обычно происходит?&lt;br /&gt;&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Влезть за сервер по ssh&lt;/li&gt;
    &lt;li&gt;Скопировать туда код&lt;/li&gt;
    &lt;li&gt;Запустить какие-то действия &lt;/li&gt;
    &lt;ul&gt;
      &lt;li&gt;миграция&lt;/li&gt;
      &lt;li&gt;сборка контейнера Докер&lt;/li&gt;
      &lt;li&gt;обновление конфигов&lt;/li&gt;
      &lt;li&gt;поставить новые пакеты\софт&lt;/li&gt;
      &lt;li&gt;etc&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li&gt;Остановить старую версию сервиса&lt;/li&gt;
    &lt;li&gt;Запустить новую&lt;/li&gt;
    &lt;li&gt;Убедиться что все конфиги поднялись.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;Где тут проблема?&lt;br /&gt;Проблема в куче ручных шагов, на которых можно ошибиться, тупануть, вставить не то, обрушить всё к хуям собачьим. Да и не удобно это всё. Точнее оно может и удобно до какой-то стадии повышения сложности, но потом точно не удобно. &lt;br /&gt;&lt;br /&gt;Именно для этого и нужен Ансибл. Он позволяет всё это автоматизировать. Надёжно и просто(если понимаешь что делаешь).&lt;/p&gt;
  &lt;h2&gt;Как это работает?&lt;/h2&gt;
  &lt;p&gt;У ансибл есть два режима работы:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Работа с модулями Ансибл напрямую&lt;/li&gt;
    &lt;li&gt;Работа в режиме плейбуки&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3&gt;Работа напрямую&lt;/h3&gt;
  &lt;p&gt;Это как разовый вызов модуля в пайтоне, а ля python -m pip install aiohttp.&lt;br /&gt;Лично я это использую для разовой операции на куче серверов (да хоть на одном), чтоб что-то мелкое выполнить. &lt;br /&gt;Например узнать uptime всех серверов:&lt;br /&gt;&lt;code&gt;ansible all -i inventory.yaml -m shell -a &amp;quot;uptime&amp;quot;&lt;/code&gt;&lt;/p&gt;
  &lt;h3&gt;Работа в режиме плейбуки&lt;/h3&gt;
  &lt;p&gt;Это более серьёзный режим. Playbook - это список правил, действий, по которым ваш сервер приводится к нужному состоянию. &lt;br /&gt;&lt;br /&gt;Стоит упомянуть, что Ansible именно &lt;strong&gt;приводит к нужному состоянию&lt;/strong&gt;. &lt;br /&gt;&lt;br /&gt;Например у вас в плейбуке написано, чтоб ансибл установил nginx. &lt;br /&gt;1. Ансибл лезет на первый сервер, собирает кучу инфы о сервере и пакетах, установленных там. Устанавливает nginx.&lt;br /&gt;2. Ансибл лезет на второй сервер, собирает кучу инфы... смотрит, nginx уже стоит и ничего не делает вообще. &lt;br /&gt;&lt;br /&gt;На выходе серверов может быть 10000 и на всех по итогу будет установлен nginx. Можно поставить тригер, чтоб nginx был установлен именно последней доступной в репозитории версии или определённой версии, тогда ансибл везде сделает nginx именно нужной версии. &lt;br /&gt;&lt;br /&gt;Круто? Круто!&lt;/p&gt;
  &lt;h2&gt;Немножко практики и ещё чуть теории&lt;/h2&gt;
  &lt;p&gt;На данный момент нам важно узнать про две вещи. &lt;/p&gt;
  &lt;h3&gt;inventory&lt;/h3&gt;
  &lt;p&gt;&lt;strong&gt;inventory&lt;/strong&gt; - это список серверов\машин\компьютеров с которым ansible работает. &lt;br /&gt;inventory может быть в формате ini, в формате yaml (мой любимчик) и динамический.&lt;br /&gt;Формат ini я не буду рассматривать, если интересно, найдёте в документации. А вот yaml я покажу. &lt;br /&gt;Динамический inventory нигде не хранится кроме оперативной памяти. Чаще всего используется, когда вы автоматически листите какие-то ваши сервера в датацентре и\или создаёте сервер с нуля тем же ansible. Тобишь послали запрос на создание сервера, дождались статуса создания, записали в inventory его параметры. &lt;br /&gt;&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Давайте напишем свой inventory.&lt;/strong&gt;&lt;br /&gt;Например у меня есть 2 машины, я назвал их &lt;code&gt;raspi_four&lt;/code&gt; и &lt;code&gt;raspi_zero&lt;/code&gt;.&lt;br /&gt;Для интереса, я настрою всё так, чтоб ssh вход на &lt;code&gt;raspi_four&lt;/code&gt; был по ssh ключу,  а на &lt;code&gt;raspi_zero&lt;/code&gt; по паролю.&lt;br /&gt;Доступ по ключу на &lt;code&gt;raspi_four&lt;/code&gt; настраиваем заранее. (прописываем ваш публичный ключ в &lt;code&gt;authorized_keys&lt;/code&gt; на &lt;code&gt;raspi_four&lt;/code&gt;, в интернете куча инструкций).&lt;br /&gt;&lt;br /&gt;Дальше пишем в файле &lt;code&gt;inventory.yaml&lt;/code&gt;&lt;/p&gt;
  &lt;pre&gt;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&lt;/pre&gt;
  &lt;p&gt;Вместо имён, например &lt;code&gt;raspi_four&lt;/code&gt;, можно написать доменное имя и не указывать ip. Ансибл сам разберётся.&lt;br /&gt;&lt;br /&gt;Теперь команда &lt;code&gt;ansible all -i inventory.yaml -m shell -a &amp;quot;uptime&amp;quot;&lt;/code&gt; будет работать.&lt;/p&gt;
  &lt;h3&gt;Плейбука!&lt;/h3&gt;
  &lt;p&gt;Давайте напишем простую плейбуку. &lt;br /&gt;Рассмотрим два простых действия:&lt;br /&gt;1. Установить какой-нибудь софт на сервер.&lt;br /&gt;2. Скопировать файл с хоста (на котором запущена плейбука) на сервер. &lt;br /&gt;3. Выполнить это на всех машинах в inventory&lt;br /&gt;&lt;br /&gt;Приступим. Создаём файл &lt;code&gt;test_playbook.yaml&lt;/code&gt; и пишем там это&lt;/p&gt;
  &lt;pre&gt;- name: my tasks
  hosts: all
  tasks:
    - name: install nmap
      apt:
        name: [&amp;quot;nmap&amp;quot;]
      become: True

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

</content></entry><entry><id>k4m454k:MicroPython_FirstCode</id><link rel="alternate" type="text/html" href="https://teletype.in/@k4m454k/MicroPython_FirstCode?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=k4m454k"></link><title>[MicroPython] Как начать писать?</title><published>2020-09-29T00:12:48.264Z</published><updated>2020-09-29T07:00:13.752Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/27/c4/27c4a1ba-8454-492f-b556-8621e7c13ec0.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://teletype.in/files/ff/89/ff899288-2136-44a1-a5f8-f2457a1376dc.png&quot;&gt;В прошлой статье мы обсудили выбор микроконтроллера, кто не читал - настоятельно рекомендую.</summary><content type="html">
  &lt;p&gt;В &lt;a href=&quot;https://teletype.in/@k4m454k/MicroPython_FirstSteps&quot; target=&quot;_blank&quot;&gt;прошлой &lt;/a&gt;статье мы обсудили выбор микроконтроллера, кто не читал - настоятельно рекомендую.&lt;/p&gt;
  &lt;p&gt;В этой статье попробуем что-нибудь написать. Для примера и общей популярности будем рассматривать кодинг под Windows. У меня Windows 10 Pro.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Что нам понадобится&lt;/strong&gt;:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Интерпретатор Python любой из последних версий. (качаем, ставим)&lt;/li&gt;
    &lt;li&gt;Прошивка под ваш микроконтроллер (ниже чуть подробнее)&lt;/li&gt;
    &lt;li&gt;Пара нужных утилит (о них ниже)&lt;/li&gt;
    &lt;li&gt;Среда разработки (очень громкое название для этого) Thonny&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2&gt;Железо&lt;/h2&gt;
  &lt;p&gt;Я буду использовать TTGO T-Display v1.4, потому что она первая попалась мне под руку. Вы же можете использовать любую железку на основе ESP32.&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/ff/89/ff899288-2136-44a1-a5f8-f2457a1376dc.png&quot; width=&quot;449&quot; /&gt;
    &lt;figcaption&gt;TTGO T-Display v1.4&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h2&gt;Ставим всё нужное&lt;/h2&gt;
  &lt;p&gt;Качаем с сайта &lt;a href=&quot;https://www.python.org/&quot; target=&quot;_blank&quot;&gt;Python.org&lt;/a&gt; последнюю стабильную версию пайтон.&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/27/c4/27c4a1ba-8454-492f-b556-8621e7c13ec0.png&quot; width=&quot;951&quot; /&gt;
    &lt;figcaption&gt;На момент выхода статьи стабильная версия 3.8.5&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Устанавливаем. Не забываем добавить в PATH. (галочка на одном из шагов)&lt;/p&gt;
  &lt;p&gt;Открываем терминал Windows (&lt;code&gt;cmd&lt;/code&gt;) и пишем &lt;code&gt;pip install esptool&lt;/code&gt;. Эта команда установит в систему esptool для прошивки esp32. &lt;/p&gt;
  &lt;p&gt;Обязательно устанавливаем драйвер для usb-ttl конвертера вашего микроконтроллера, обычно это легко гуглится. Например в моей железке это CP2105, в вашей может быть CH340 или что-то ещё. Вообще чип ttl конвертера указан на странице продавца, или просто потыкайте глазами через лупу в черные микрухи около USB порта вашей железки, там точно написано.&lt;/p&gt;
  &lt;p&gt;Если драйвер вы поставили верно, то при подключении у вас будет определён какой-либо COM порт. У меня это COM9.&lt;/p&gt;
  &lt;p&gt;Лезем на сайт &lt;a href=&quot;https://micropython.org/download/esp32/&quot; target=&quot;_blank&quot;&gt;Micropython &lt;/a&gt;и качаем оттуда последнюю стабильную версию микропитона под ваше железо. Например в моей железке нет SPIRAM, но я скачал с его поддержкой, и в будущем буду видеть сообщение &lt;code&gt;E (10) spiram: SPI RAM not initialized&lt;/code&gt; при загрузке. Это не страшно.&lt;/p&gt;
  &lt;h2&gt;Прошивка&lt;/h2&gt;
  &lt;p&gt;Первым шагом надо очистить память микроконтроллера. Делать это надо &lt;strong&gt;ВСЕГДА &lt;/strong&gt;перед прошивкой. Даже если прошиваете той же самой прошивкой.&lt;/p&gt;
  &lt;pre&gt;&amp;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...&lt;/pre&gt;
  &lt;p&gt;Прошиваем!&lt;br /&gt;Инструкция как прошивать есть там же, где качали прошивку. Я делаю чуть не по канону, но работает хорошо. Можете делать как я.&lt;/p&gt;
  &lt;pre&gt;&amp;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...&lt;/pre&gt;
  &lt;p&gt;Всё, прошивка завершена.&lt;/p&gt;
  &lt;h2&gt;Кодим!&lt;/h2&gt;
  &lt;p&gt;Для начала открываем Thonny&lt;/p&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/79/8e/798e9eac-f03a-42b1-a5ed-205d9f64453c.png&quot; width=&quot;585&quot; /&gt;
    &lt;figcaption&gt;Окно настроек Thonny&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;В настройках интерпретатора надо выбрать MicroPython (Общий) и порт, на котором определилась ваша железка.&lt;/p&gt;
  &lt;p&gt;Собственно всё, можно кодить. &lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/62/e9/62e99c26-c877-43c1-a01c-825bf0c41e4d.png&quot; width=&quot;1920&quot; /&gt;
    &lt;figcaption&gt;Окно Thonny&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Внизу мы видим консоль из интерпретатора Python вашего Esp32. (работает TAB для автодополнения)&lt;br /&gt;Слева сверху файлы внутри ESP32. &lt;br /&gt;Снизу слева файлы на локальном ПК в выбранной папке. &lt;br /&gt;&lt;br /&gt;Файлы можно перекидывать туда и обратно. (ПКМ по файлу) Можно открывать файлы на редактирования прямо с микроконтроллера, так в общем окне они будут в квадратных скобках.&lt;/p&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/9b/61/9b615cfa-501c-40a9-a651-a17edd4dc919.png&quot; width=&quot;683&quot; /&gt;
    &lt;figcaption&gt;Сразу ясно какой файл откуда открыт.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Давайте подключимся к Wi-Fi. Для начала открываем документацию и смотрим &lt;a href=&quot;http://docs.micropython.org/en/latest/esp32/quickref.html#networking&quot; target=&quot;_blank&quot;&gt;как&lt;/a&gt;. Кстати MicroPython позволяет испытать всё в консоли снизу.&lt;/p&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/59/b7/59b79e3e-452a-43a5-bcab-4ab791a3a008.png&quot; width=&quot;707&quot; /&gt;
    &lt;figcaption&gt;Теперь вам известен мой пароль от вайфай)&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Теперь когда мы точно знаем что всё работает, логично прописать это в файл &lt;code&gt;boot.py.&lt;/code&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/6d/39/6d396c58-03cb-4c14-98ef-7bc12c5e58ad.png&quot; width=&quot;562&quot; /&gt;
    &lt;figcaption&gt;Мой файл после правок выглядит так.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Жмём на иконку сохранить и можем смело перезагружать железку. После загрузки исполнится &lt;code&gt;boot.py&lt;/code&gt; и мы подключимся к вайфай. (всё будет видно в консоли внизу). Можно ещё принтов натыкать.  &lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;WARNING&lt;/strong&gt;: Показанный способ подключения к вайфай ужасен, так как не гарантирует подключение. Нет ожидания подключения перед исполнением любого другого кода. Способ показанный в примере в документации лучше, но тоже не идеален. &lt;/p&gt;
  &lt;h2&gt;Немного о файлах и этапе загрузки&lt;/h2&gt;
  &lt;p&gt;После загрузки микроконтроллера запускается интерпретатор Python и в него передаётся сначала файл &lt;code&gt;boot.py&lt;/code&gt;, а затем &lt;code&gt;main.py&lt;/code&gt;. Если какого-то из файлов нет, то шаг пропускается. Так как интерпретатор у нас один, то всё что мы определим внутри &lt;code&gt;boot.py&lt;/code&gt; будет доступно и внутри &lt;code&gt;main.py&lt;/code&gt;. То есть заново импортировать совсем не обязательно. &lt;/p&gt;
  &lt;h2&gt;Установка пакетов из сети&lt;/h2&gt;
  &lt;p&gt;Конечно вы можете просто скопировать нужные вам пакеты прям в корень и спокойно импортировать их из любых файлов вашего проекта, но есть возможность воспользоваться &lt;code&gt;pip&lt;/code&gt;, точнее его местной интерпретацией &lt;code&gt;upip&lt;/code&gt;. Вообще привыкайте, что многие пакеты тут начинаются с &amp;quot;&lt;code&gt;u&lt;/code&gt;&amp;quot;, чтоб показать свою обрезанную натуру и адаптацию под микропайтон.&lt;/p&gt;
  &lt;p&gt;Для установки пакетов есть модуль &lt;code&gt;upip&lt;/code&gt;. Например сейчас поставим местный аналог &lt;code&gt;requests &lt;/code&gt;- модуль &lt;code&gt;urequests&lt;/code&gt;. Он поможет нам работать с сетью и обращаться к разным API через http(s).&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/d4/11/d41150b0-8f69-4362-8ac2-8f79f0a5f047.png&quot; width=&quot;847&quot; /&gt;
    &lt;figcaption&gt;Устанавливаем urequests&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Как видите, процесс реально очень прост. После этого файлы &lt;code&gt;urequests &lt;/code&gt;сохранились в &lt;code&gt;/lib/&lt;/code&gt; (её не видно из браузера файлов, но всё же через модуль &lt;code&gt;os&lt;/code&gt; можно туда заглянуть). Файлы останутся там даже после перезагрузки. &lt;/p&gt;
  &lt;p&gt;Кстати кучку библиотек доступных для установки (но не все) можно посмотреть в &lt;a href=&quot;https://github.com/micropython/micropython-lib&quot; target=&quot;_blank&quot;&gt;официальном Github&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;WARNING&lt;/strong&gt;: Код установки библиотек не стоит вставлять внутрь файлов проекта, лучше сделать это один раз из консоли и забыть. &lt;/p&gt;
  &lt;p&gt;Ну и давайте попробуем воспользоваться любым API сервисом. Например получим номер дня в году с помощью &lt;code&gt;worldtimeapi.org&lt;/code&gt;.&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/94/46/9446d5ba-fe1e-4b26-af7a-9ea16985bb4c.png&quot; width=&quot;950&quot; /&gt;
    &lt;figcaption&gt;GET запрос в api сервис.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Всё получилось, внутрь urequests засунули даже парсер json для нашего удобства.&lt;/p&gt;
  &lt;p&gt;На этом я заканчиваю статью: мы с вами научились прошивать железку, научились пользоваться Thonny, подключаться к Wi-Fi, устанавливать пакеты, работать с API. Ждите следующих статей, где мы, возможно, сделаем что-то полезное =)&lt;/p&gt;
  &lt;p&gt;Не забывайте про нашу телеграм группу &lt;a href=&quot;https://t.me/micropython_faq_ru&quot; target=&quot;_blank&quot;&gt;https://t.me/micropython_faq_ru&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;Спасибо за внимание. &lt;br /&gt;Ваш Вадик.&lt;/p&gt;

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

ap = network.WLAN(network.APIF) # create access-point interface
ap.config(essid=&amp;#x27;ESP-AP&amp;#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&lt;/pre&gt;
  &lt;p&gt;Как видите, всё максимально просто. &lt;/p&gt;
  &lt;p&gt;Теперь покупайте нужные вам девайсы и давайте экспериментировать вместе на нашем &lt;a href=&quot;https://t.me/micropython_faq_ru&quot; target=&quot;_blank&quot;&gt;канале по MicroPython&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;Ваш Вадик.&lt;/p&gt;

</content></entry></feed>